Jury BUT: invalidation cache semestre

This commit is contained in:
Emmanuel Viennet 2022-07-11 18:18:48 +02:00
parent 2bfbaa3a2a
commit a1f772b22e

View File

@ -89,6 +89,7 @@ from app.models.formations import Formation
from app.models.formsemestre import FormSemestre, FormSemestreInscription from app.models.formsemestre import FormSemestre, FormSemestreInscription
from app.models.ues import UniteEns from app.models.ues import UniteEns
from app.models.validations import ScolarFormSemestreValidation from app.models.validations import ScolarFormSemestreValidation
from app.scodoc import sco_cache
from app.scodoc import sco_codes_parcours as sco_codes from app.scodoc import sco_codes_parcours as sco_codes
from app.scodoc.sco_codes_parcours import RED, UE_STANDARD from app.scodoc.sco_codes_parcours import RED, UE_STANDARD
from app.scodoc import sco_utils as scu from app.scodoc import sco_utils as scu
@ -573,31 +574,33 @@ class DecisionsProposeesAnnee(DecisionsProposees):
Si les code_rcue et le code_annee ne sont pas fournis, Si les code_rcue et le code_annee ne sont pas fournis,
et qu'il n'y en a pas déjà, enregistre ceux par défaut. et qu'il n'y en a pas déjà, enregistre ceux par défaut.
""" """
for key in form: log("jury_but.DecisionsProposeesAnnee.record_form")
code = form[key] with sco_cache.DeferredSemCacheManager():
# Codes d'UE for key in form:
m = re.match(r"^code_ue_(\d+)$", key) code = form[key]
if m: # Codes d'UE
ue_id = int(m.group(1)) m = re.match(r"^code_ue_(\d+)$", key)
dec_ue = self.decisions_ues.get(ue_id)
if not dec_ue:
raise ScoValueError(f"UE invalide ue_id={ue_id}")
dec_ue.record(code)
else:
# Codes de RCUE
m = re.match(r"^code_rcue_(\d+)$", key)
if m: if m:
niveau_id = int(m.group(1)) ue_id = int(m.group(1))
dec_rcue = self.decisions_rcue_by_niveau.get(niveau_id) dec_ue = self.decisions_ues.get(ue_id)
if not dec_rcue: if not dec_ue:
raise ScoValueError(f"RCUE invalide niveau_id={niveau_id}") raise ScoValueError(f"UE invalide ue_id={ue_id}")
dec_rcue.record(code) dec_ue.record(code)
elif key == "code_annee": else:
# Code annuel # Codes de RCUE
self.record(code) m = re.match(r"^code_rcue_(\d+)$", key)
if m:
niveau_id = int(m.group(1))
dec_rcue = self.decisions_rcue_by_niveau.get(niveau_id)
if not dec_rcue:
raise ScoValueError(f"RCUE invalide niveau_id={niveau_id}")
dec_rcue.record(code)
elif key == "code_annee":
# Code annuel
self.record(code)
self.record_all() self.record_all()
db.session.commit() db.session.commit()
def record(self, code: str, no_overwrite=False): def record(self, code: str, no_overwrite=False):
"""Enregistre le code de l'année, et au besoin l'autorisation d'inscription. """Enregistre le code de l'année, et au besoin l'autorisation d'inscription.
@ -647,6 +650,16 @@ class DecisionsProposeesAnnee(DecisionsProposees):
) )
self.recorded = True self.recorded = True
self.invalidate_formsemestre_cache()
def invalidate_formsemestre_cache(self):
"invalide le résultats des deux formsemestres"
if self.formsemestre_impair is not None:
sco_cache.invalidate_formsemestre(
formsemestre_id=self.formsemestre_impair.id
)
if self.formsemestre_pair is not None:
sco_cache.invalidate_formsemestre(formsemestre_id=self.formsemestre_pair.id)
def record_all(self): def record_all(self):
"""Enregistre les codes qui n'ont pas été spécifiés par le formulaire, et sont donc en mode "automatique" """ """Enregistre les codes qui n'ont pas été spécifiés par le formulaire, et sont donc en mode "automatique" """
@ -687,6 +700,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
for validation in validations: for validation in validations:
db.session.delete(validation) db.session.delete(validation)
db.session.flush() db.session.flush()
self.invalidate_formsemestre_cache()
def get_autorisations_passage(self) -> list[int]: def get_autorisations_passage(self) -> list[int]:
"""Les liste des indices de semestres auxquels on est autorisé à """Les liste des indices de semestres auxquels on est autorisé à
@ -805,6 +819,14 @@ class DecisionsProposeesRCUE(DecisionsProposees):
msg=f"Validation RCUE {repr(self.rcue)}", msg=f"Validation RCUE {repr(self.rcue)}",
) )
db.session.add(self.validation) db.session.add(self.validation)
if self.rcue.formsemestre_1 is not None:
sco_cache.invalidate_formsemestre(
formsemestre_id=self.rcue.formsemestre_1.id
)
if self.rcue.formsemestre_2 is not None:
sco_cache.invalidate_formsemestre(
formsemestre_id=self.rcue.formsemestre_2.id
)
self.recorded = True self.recorded = True
def erase(self): def erase(self):
@ -948,6 +970,8 @@ class DecisionsProposeesUE(DecisionsProposees):
msg=f"Validation UE {self.ue.id}", msg=f"Validation UE {self.ue.id}",
) )
db.session.add(self.validation) db.session.add(self.validation)
sco_cache.invalidate_formsemestre(formsemestre_id=self.formsemestre.id)
self.recorded = True self.recorded = True
def erase(self): def erase(self):