filestorage
This commit is contained in:
@@ -45,11 +45,9 @@ class TaskSettingsView(BaseView):
|
||||
filename=filename,
|
||||
is_test=is_test
|
||||
)
|
||||
with open(ef.path, 'wb') as fs:
|
||||
for chunk in self.request.FILES['file'].chunks():
|
||||
fs.write(chunk)
|
||||
ef.write(self.request.FILES['file'].read())
|
||||
try:
|
||||
open(ef.path, 'r').read()
|
||||
var = ef.text
|
||||
ef.readable = True
|
||||
except UnicodeDecodeError:
|
||||
ef.readable = False
|
||||
@@ -73,8 +71,7 @@ class TaskSettingsView(BaseView):
|
||||
ef, created = ExtraFile.objects.get_or_create(filename=name, task=self.entities.task)
|
||||
if not created:
|
||||
return f'/admin/task?task_id={self.entities.task.id}&error_message=Файл с таким именем уже существует'
|
||||
with open(ef.path, 'w') as fs:
|
||||
fs.write('')
|
||||
ef.write(b"")
|
||||
ef.is_test = is_test
|
||||
ef.readable = True
|
||||
ef.save()
|
||||
@@ -88,8 +85,8 @@ class TaskSettingsView(BaseView):
|
||||
|
||||
def post_save_test(self):
|
||||
ef = ExtraFile.objects.get(id=self.request.POST['test_id'])
|
||||
with open(ef.path, 'w') as fs:
|
||||
fs.write(self.request.POST['text'])
|
||||
ef.remove_from_fs()
|
||||
ef.write(self.request.POST['text'].encode('utf-8'))
|
||||
ef.is_sample = 'is_sample' in self.request.POST.keys()
|
||||
ef.save()
|
||||
return f'/admin/task?task_id={self.entities.task.id}'
|
||||
|
@@ -1,11 +1,11 @@
|
||||
import io
|
||||
from zipfile import ZipFile
|
||||
from os.path import join
|
||||
|
||||
from Main.models import Solution, Progress
|
||||
from Main.models import Solution, Progress, SolutionFile
|
||||
from SprintLib.BaseView import BaseView
|
||||
from SprintLib.language import languages
|
||||
from SprintLib.queue import send_testing
|
||||
from SprintLib.testers import *
|
||||
from SprintLib.utils import write_bytes
|
||||
|
||||
|
||||
class TaskView(BaseView):
|
||||
@@ -13,40 +13,54 @@ class TaskView(BaseView):
|
||||
view_file = "task.html"
|
||||
|
||||
def get(self):
|
||||
self.context['languages'] = sorted(languages, key=lambda x: x.name)
|
||||
progress, _ = Progress.objects.get_or_create(user=self.request.user, task=self.entities.task)
|
||||
self.context['progress'] = progress
|
||||
self.context["languages"] = sorted(languages, key=lambda x: x.name)
|
||||
progress, _ = Progress.objects.get_or_create(
|
||||
user=self.request.user, task=self.entities.task
|
||||
)
|
||||
self.context["progress"] = progress
|
||||
|
||||
def pre_handle(self):
|
||||
if self.request.method == 'GET':
|
||||
if self.request.method == "GET":
|
||||
return
|
||||
self.solution = Solution.objects.create(
|
||||
task=self.entities.task,
|
||||
user=self.request.user,
|
||||
language_id=int(self.request.POST["language"])
|
||||
language_id=int(self.request.POST["language"]),
|
||||
)
|
||||
self.solution.create_dirs()
|
||||
|
||||
def post_0(self):
|
||||
# отправка решения через текст
|
||||
filename = 'solution.' + self.solution.language.file_type
|
||||
file_path = join(self.solution.directory, filename)
|
||||
with open(file_path, 'w') as fs:
|
||||
fs.write(self.request.POST['code'])
|
||||
fs_id = write_bytes(self.request.POST["code"].encode("utf-8"))
|
||||
SolutionFile.objects.create(
|
||||
path="solution." + self.solution.language.file_type,
|
||||
solution=self.solution,
|
||||
fs_id=fs_id,
|
||||
)
|
||||
send_testing(self.solution.id)
|
||||
return "task?task_id=" + str(self.entities.task.id)
|
||||
|
||||
def post_1(self):
|
||||
# отправка решения через файл
|
||||
if 'file' not in self.request.FILES:
|
||||
if "file" not in self.request.FILES:
|
||||
return "task?task_id=" + str(self.entities.task.id)
|
||||
filename = self.request.FILES['file'].name
|
||||
file_path = join(self.solution.directory, filename)
|
||||
with open(file_path, 'wb') as fs:
|
||||
for chunk in self.request.FILES['file'].chunks():
|
||||
fs.write(chunk)
|
||||
if filename.endswith('.zip'):
|
||||
with ZipFile(file_path) as obj:
|
||||
obj.extractall(self.solution.directory)
|
||||
filename = self.request.FILES["file"].name
|
||||
if filename.endswith(".zip"):
|
||||
archive = ZipFile(io.BytesIO(self.request.FILES['file'].read()))
|
||||
for file in archive.infolist():
|
||||
if file.is_dir():
|
||||
continue
|
||||
fs_id = write_bytes(archive.read(file.filename))
|
||||
SolutionFile.objects.create(
|
||||
path=file.filename,
|
||||
solution=self.solution,
|
||||
fs_id=fs_id,
|
||||
)
|
||||
else:
|
||||
fs_id = write_bytes(self.request.FILES['file'].read())
|
||||
SolutionFile.objects.create(
|
||||
path=filename,
|
||||
solution=self.solution,
|
||||
fs_id=fs_id,
|
||||
)
|
||||
send_testing(self.solution.id)
|
||||
return "task?task_id=" + str(self.entities.task.id)
|
||||
|
Reference in New Issue
Block a user