from django.db.models.signals import post_save, post_delete, m2m_changed from django.dispatch import receiver from django.core.cache import cache from GestionInscriptions.models import FicheInscription, Eleve, Responsable from GestionLogin.models import Profil from N3wtSchool import settings from N3wtSchool.redis_client import redis_client import logging logger = logging.getLogger(__name__) def clear_cache(): # Préfixes des clés à supprimer prefixes = ['N3WT_'] for prefix in prefixes: # Utiliser le motif pour obtenir les clés correspondant au préfixe pattern = f'*{prefix}*' logger.debug(f'pattern : {pattern}') for key in redis_client.scan_iter(pattern): redis_client.delete(key) logger.debug(f'deleting : {key}') @receiver(post_save, sender=FicheInscription) @receiver(post_delete, sender=FicheInscription) def clear_cache_after_change(sender, instance, **kwargs): clear_cache() @receiver(m2m_changed, sender=Eleve.responsables.through) def check_orphan_reponsables(sender, **kwargs): action = kwargs.pop('action', None) instance = kwargs.pop('instance', None) # pre_clear : lors de la suppression d'une FI (on fait un "clear" sur chaque relation) if action in ('post_remove', 'post_clear'): if instance.responsables.all(): Responsable.objects.filter(eleve=None).delete() @receiver(m2m_changed, sender=Eleve.profils.through) def check_orphan_profils(sender, **kwargs): action = kwargs.pop('action', None) instance = kwargs.pop('instance', None) # pre_clear : lors de la suppression d'une FI (on fait un "clear" sur chaque relation) if action in ('post_remove', 'post_clear'): if instance.profils.all(): Profil.objects.filter(eleve=None).delete()