forked from ScoDoc/ScoDoc
Optimisation: ajout cache par requete a FormSemestre.get_ues()
This commit is contained in:
parent
b04812f812
commit
c3cc316777
@ -282,6 +282,8 @@ def validation_rcue_record(etudid: int):
|
||||
)
|
||||
operation = "record"
|
||||
db.session.add(validation)
|
||||
# invalider bulletins (les autres résultats ne dépendent pas des RCUEs):
|
||||
sco_cache.invalidate_formsemestre_etud(etud)
|
||||
db.session.commit()
|
||||
Scolog.logdb(
|
||||
method="validation_rcue_record",
|
||||
|
@ -305,6 +305,17 @@ class FormSemestre(db.Model):
|
||||
- et sont associées à l'un des parcours de ce formsemestre
|
||||
(ou à aucun, donc tronc commun).
|
||||
"""
|
||||
# per-request caching
|
||||
key = (self.id, with_sport)
|
||||
_cache = getattr(g, "_formsemestre_get_ues_cache", None)
|
||||
if _cache:
|
||||
result = _cache.get(key, False)
|
||||
if result is not False:
|
||||
return result
|
||||
else:
|
||||
g._formsemestre_get_ues_cache = {}
|
||||
_cache = g._formsemestre_get_ues_cache
|
||||
|
||||
formation: Formation = self.formation
|
||||
if formation.is_apc():
|
||||
# UEs de tronc commun (sans parcours indiqué)
|
||||
@ -324,8 +335,7 @@ class FormSemestre(db.Model):
|
||||
).filter(UniteEns.semestre_idx == self.semestre_id)
|
||||
}
|
||||
)
|
||||
ues = sem_ues.values()
|
||||
return sorted(ues, key=attrgetter("numero", "acronyme"))
|
||||
ues = sorted(sem_ues.values(), key=attrgetter("numero", "acronyme"))
|
||||
else:
|
||||
sem_ues = db.session.query(UniteEns).filter(
|
||||
ModuleImpl.formsemestre_id == self.id,
|
||||
@ -334,7 +344,9 @@ class FormSemestre(db.Model):
|
||||
)
|
||||
if not with_sport:
|
||||
sem_ues = sem_ues.filter(UniteEns.type != codes_cursus.UE_SPORT)
|
||||
return sem_ues.order_by(UniteEns.numero).all()
|
||||
ues = sem_ues.order_by(UniteEns.numero).all()
|
||||
_cache[key] = ues
|
||||
return ues
|
||||
|
||||
@cached_property
|
||||
def modimpls_sorted(self) -> list[ModuleImpl]:
|
||||
|
@ -63,24 +63,31 @@ def dict_pvjury(
|
||||
Si with_parcours_decisions: ajoute infos sur code decision jury de tous les semestre du parcours
|
||||
Résultat:
|
||||
{
|
||||
'date' : date de la decision la plus recente,
|
||||
'formsemestre' : sem,
|
||||
'date' : str = date de la decision la plus recente, format dd/mm/yyyy,
|
||||
'formsemestre' : dict = formsemestre,
|
||||
'is_apc' : bool,
|
||||
'formation' : { 'acronyme' :, 'titre': ... }
|
||||
'decisions' : { [ { 'identite' : {'nom' :, 'prenom':, ...,},
|
||||
'decisions' : [
|
||||
{
|
||||
'identite' : {'nom' :, 'prenom':, ...,},
|
||||
'etat' : I ou D ou DEF
|
||||
'decision_sem' : {'code':, 'code_prev': },
|
||||
'decisions_ue' : { ue_id : { 'code' : ADM|CMP|AJ, 'event_date' :,
|
||||
'acronyme', 'numero': } },
|
||||
'decisions_ue' : {
|
||||
ue_id : {
|
||||
'code' : ADM|CMP|AJ,
|
||||
'ects' : float,
|
||||
'event_date' :str = "dd/mm/yyyy",
|
||||
},
|
||||
},
|
||||
'autorisations' : [ { 'semestre_id' : { ... } } ],
|
||||
'validation_parcours' : True si parcours validé (diplome obtenu)
|
||||
'prev_code' : code (calculé slt si with_prev),
|
||||
'mention' : mention (en fct moy gen),
|
||||
'sum_ects' : total ECTS acquis dans ce semestre (incluant les UE capitalisées)
|
||||
'sum_ects_capitalises' : somme des ECTS des UE capitalisees
|
||||
}
|
||||
]
|
||||
},
|
||||
...
|
||||
],
|
||||
'decisions_dict' : { etudid : decision (comme ci-dessus) },
|
||||
}
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user