forked from ScoDoc/ScoDoc
Optimisation: ajout cache par requete a FormSemestre.get_ues()
This commit is contained in:
parent
4e300c3dbb
commit
07f5f6c332
@ -282,6 +282,8 @@ def validation_rcue_record(etudid: int):
|
|||||||
)
|
)
|
||||||
operation = "record"
|
operation = "record"
|
||||||
db.session.add(validation)
|
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()
|
db.session.commit()
|
||||||
Scolog.logdb(
|
Scolog.logdb(
|
||||||
method="validation_rcue_record",
|
method="validation_rcue_record",
|
||||||
|
@ -307,6 +307,17 @@ class FormSemestre(db.Model):
|
|||||||
- et sont associées à l'un des parcours de ce formsemestre
|
- et sont associées à l'un des parcours de ce formsemestre
|
||||||
(ou à aucun, donc tronc commun).
|
(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
|
formation: Formation = self.formation
|
||||||
if formation.is_apc():
|
if formation.is_apc():
|
||||||
# UEs de tronc commun (sans parcours indiqué)
|
# UEs de tronc commun (sans parcours indiqué)
|
||||||
@ -326,8 +337,7 @@ class FormSemestre(db.Model):
|
|||||||
).filter(UniteEns.semestre_idx == self.semestre_id)
|
).filter(UniteEns.semestre_idx == self.semestre_id)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
ues = sem_ues.values()
|
ues = sorted(sem_ues.values(), key=attrgetter("numero", "acronyme"))
|
||||||
return sorted(ues, key=attrgetter("numero", "acronyme"))
|
|
||||||
else:
|
else:
|
||||||
sem_ues = db.session.query(UniteEns).filter(
|
sem_ues = db.session.query(UniteEns).filter(
|
||||||
ModuleImpl.formsemestre_id == self.id,
|
ModuleImpl.formsemestre_id == self.id,
|
||||||
@ -336,7 +346,9 @@ class FormSemestre(db.Model):
|
|||||||
)
|
)
|
||||||
if not with_sport:
|
if not with_sport:
|
||||||
sem_ues = sem_ues.filter(UniteEns.type != codes_cursus.UE_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
|
@cached_property
|
||||||
def modimpls_sorted(self) -> list[ModuleImpl]:
|
def modimpls_sorted(self) -> list[ModuleImpl]:
|
||||||
|
@ -63,25 +63,32 @@ def dict_pvjury(
|
|||||||
Si with_parcours_decisions: ajoute infos sur code decision jury de tous les semestre du parcours
|
Si with_parcours_decisions: ajoute infos sur code decision jury de tous les semestre du parcours
|
||||||
Résultat:
|
Résultat:
|
||||||
{
|
{
|
||||||
'date' : date de la decision la plus recente,
|
'date' : str = date de la decision la plus recente, format dd/mm/yyyy,
|
||||||
'formsemestre' : sem,
|
'formsemestre' : dict = formsemestre,
|
||||||
'is_apc' : bool,
|
'is_apc' : bool,
|
||||||
'formation' : { 'acronyme' :, 'titre': ... }
|
'formation' : { 'acronyme' :, 'titre': ... }
|
||||||
'decisions' : { [ { 'identite' : {'nom' :, 'prenom':, ...,},
|
'decisions' : [
|
||||||
'etat' : I ou D ou DEF
|
{
|
||||||
'decision_sem' : {'code':, 'code_prev': },
|
'identite' : {'nom' :, 'prenom':, ...,},
|
||||||
'decisions_ue' : { ue_id : { 'code' : ADM|CMP|AJ, 'event_date' :,
|
'etat' : I ou D ou DEF
|
||||||
'acronyme', 'numero': } },
|
'decision_sem' : {'code':, 'code_prev': },
|
||||||
'autorisations' : [ { 'semestre_id' : { ... } } ],
|
'decisions_ue' : {
|
||||||
'validation_parcours' : True si parcours validé (diplome obtenu)
|
ue_id : {
|
||||||
'prev_code' : code (calculé slt si with_prev),
|
'code' : ADM|CMP|AJ,
|
||||||
'mention' : mention (en fct moy gen),
|
'ects' : float,
|
||||||
'sum_ects' : total ECTS acquis dans ce semestre (incluant les UE capitalisées)
|
'event_date' :str = "dd/mm/yyyy",
|
||||||
'sum_ects_capitalises' : somme des ECTS des UE capitalisees
|
},
|
||||||
}
|
},
|
||||||
]
|
'autorisations' : [ { 'semestre_id' : { ... } } ],
|
||||||
},
|
'validation_parcours' : True si parcours validé (diplome obtenu)
|
||||||
'decisions_dict' : { etudid : decision (comme ci-dessus) },
|
'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) },
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
formsemestre: FormSemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
formsemestre: FormSemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
||||||
|
Loading…
Reference in New Issue
Block a user