Fix problem code change bug

This commit is contained in:
cuom1999 2023-10-27 18:02:02 -05:00
parent b053c43b19
commit 7a05ad1c3b
6 changed files with 23 additions and 8 deletions

7
judge/logging.py Normal file
View file

@ -0,0 +1,7 @@
import logging
error_log = logging.getLogger("judge.errors")
def log_exception(msg):
error_log.exception(msg)

View file

@ -556,7 +556,7 @@ class Problem(models.Model, PageVotable, Bookmarkable):
def save(self, *args, **kwargs):
super(Problem, self).save(*args, **kwargs)
if self.code != self.__original_code:
if self.__original_code and self.code != self.__original_code:
if hasattr(self, "data_files") or self.pdf_description:
try:
problem_data_storage.rename(self.__original_code, self.code)

View file

@ -162,10 +162,10 @@ class ProblemData(models.Model):
get_file_cachekey(file),
)
cache.delete(cache_key)
except BadZipFile:
except (BadZipFile, FileNotFoundError):
pass
if self.zipfile != self.__original_zipfile and self.__original_zipfile:
self.__original_zipfile.delete(save=False)
if self.zipfile != self.__original_zipfile:
self.__original_zipfile.delete(save=False)
return super(ProblemData, self).save(*args, **kwargs)
def has_yml(self):

View file

@ -12,6 +12,8 @@ from django.urls import reverse
from django.utils.translation import gettext as _
from django.core.cache import cache
from judge.logging import log_exception
if os.altsep:
def split_path_first(
@ -323,11 +325,13 @@ def get_problem_case(problem, files):
settings.DMOJ_PROBLEM_DATA_ROOT, str(problem.data_files.zipfile)
)
if not os.path.exists(archive_path):
raise Exception('archive file "%s" does not exist' % archive_path)
log_exception('archive file "%s" does not exist' % archive_path)
return {}
try:
archive = zipfile.ZipFile(archive_path, "r")
except zipfile.BadZipfile:
raise Exception('bad archive: "%s"' % archive_path)
log_exception('bad archive: "%s"' % archive_path)
return {}
for file in uncached_files:
cache_key = "problem_archive:%s:%s" % (problem.code, get_file_cachekey(file))

View file

@ -56,6 +56,7 @@ from judge.utils.fine_uploader import (
FineUploadForm,
)
from judge.views.problem import ProblemMixin
from judge.logging import log_exception
mimetypes.init()
mimetypes.add_type("application/x-yaml", ".yml")
@ -249,6 +250,9 @@ class ProblemDataView(TitleMixin, ProblemManagerMixin):
return ZipFile(data.zipfile.path).namelist()
except BadZipfile:
return []
except FileNotFoundError as e:
log_exception(e)
return []
return []
def get_context_data(self, **kwargs):

View file

@ -195,8 +195,8 @@ def get_cases_data(submission):
continue
count += 1
problem_data[count] = {
"input": case_data[case.input_file] if case.input_file else "",
"answer": case_data[case.output_file] if case.output_file else "",
"input": case_data.get(case.input_file, "") if case.input_file else "",
"answer": case_data.get(case.output_file, "") if case.output_file else "",
}
return problem_data