Add delete cache to testcases

This commit is contained in:
cuom1999 2021-06-01 15:34:42 -05:00
parent 4bce15b536
commit 8ac611f9f4
5 changed files with 76 additions and 66 deletions

View file

@ -1,11 +1,13 @@
import errno
import os
from zipfile import BadZipFile, ZipFile
from django.core.validators import FileExtensionValidator
from django.core.cache import cache
from django.db import models
from django.utils.translation import gettext_lazy as _
from judge.utils.problem_data import ProblemDataStorage
from judge.utils.problem_data import ProblemDataStorage, get_file_cachekey
__all__ = ['problem_data_storage', 'problem_directory_file', 'ProblemData', 'ProblemTestCase', 'CHECKERS']
@ -66,7 +68,16 @@ class ProblemData(models.Model):
self.__original_zipfile = self.zipfile
def save(self, *args, **kwargs):
if self.zipfile != self.__original_zipfile:
if self.zipfile != self.__original_zipfile and self.__original_zipfile:
# Delete caches
try:
files = ZipFile(self.__original_zipfile.path).namelist()
for file in files:
cache_key = 'problem_archive:%s:%s' % (self.problem.code, get_file_cachekey(file))
cache.delete(cache_key)
except BadZipFile:
pass
self.__original_zipfile.delete(save=False)
return super(ProblemData, self).save(*args, **kwargs)