Skip to content

Commit

Permalink
Clear MiscConfig cache properly when saving/deleting the object; DMOJ…
Browse files Browse the repository at this point in the history
  • Loading branch information
Ninjaclasher committed Jun 7, 2020
1 parent e6eee36 commit e5bce6f
Showing 1 changed file with 24 additions and 4 deletions.
28 changes: 24 additions & 4 deletions judge/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from django.contrib.sites.models import Site
from django.core.cache import cache
from django.core.cache.utils import make_template_fragment_key
from django.db.models.signals import post_delete, post_save
from django.db.models.signals import post_delete, post_save, pre_save
from django.dispatch import receiver

from .caching import finished_submission
Expand Down Expand Up @@ -120,13 +120,33 @@ def organization_update(sender, instance, **kwargs):
_misc_config_i18n.append('')


@receiver(post_save, sender=MiscConfig)
def misc_config_update(sender, instance, **kwargs):
cache.delete_many(['misc_config:%s:%s:%s' % (domain, lang, instance.key.split('.')[0])
def misc_config_cache_delete(key):
cache.delete_many(['misc_config:%s:%s:%s' % (domain, lang, key.split('.')[0])
for lang in _misc_config_i18n
for domain in Site.objects.values_list('domain', flat=True)])


@receiver(pre_save, sender=MiscConfig)
def misc_config_pre_save(sender, instance, **kwargs):
try:
old_key = MiscConfig.objects.filter(id=instance.id).values_list('key').get()[0]
except MiscConfig.DoesNotExist:
old_key = None
instance._old_key = old_key


@receiver(post_save, sender=MiscConfig)
def misc_config_update(sender, instance, **kwargs):
misc_config_cache_delete(instance.key)
if instance._old_key is not None and instance._old_key != instance.key:
misc_config_cache_delete(instance._old_key)


@receiver(post_delete, sender=MiscConfig)
def misc_config_delete(sender, instance, **kwargs):
misc_config_cache_delete(instance.key)


@receiver(post_save, sender=ContestSubmission)
def contest_submission_update(sender, instance, **kwargs):
Submission.objects.filter(id=instance.submission_id).update(contest_object_id=instance.participation.contest_id)

0 comments on commit e5bce6f

Please sign in to comment.