forked from ScoDoc/ScoDoc
Modify caching of ApcNiveaux
This commit is contained in:
parent
7c9f07c36e
commit
d2fbbad84b
@ -9,6 +9,7 @@ from datetime import datetime
|
|||||||
import functools
|
import functools
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
|
|
||||||
|
from flask import g
|
||||||
from flask_sqlalchemy.query import Query
|
from flask_sqlalchemy.query import Query
|
||||||
from sqlalchemy.orm import class_mapper
|
from sqlalchemy.orm import class_mapper
|
||||||
import sqlalchemy
|
import sqlalchemy
|
||||||
@ -399,12 +400,6 @@ class ApcNiveau(db.Model, XMLModel):
|
|||||||
"""Vrai si ce niveau fait partie du Tronc Commun"""
|
"""Vrai si ce niveau fait partie du Tronc Commun"""
|
||||||
return len(self.parcours) == self.competence.referentiel.parcours.count()
|
return len(self.parcours) == self.competence.referentiel.parcours.count()
|
||||||
|
|
||||||
# Le ref. comp. ne change jamais (pas d'édition dans ScoDoc)
|
|
||||||
# on cache les résultats:
|
|
||||||
_niveaux_annee_de_parcours_cache: dict[
|
|
||||||
tuple[int, int, int, int], list["ApcNiveau"]
|
|
||||||
] = {}
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def niveaux_annee_de_parcours(
|
def niveaux_annee_de_parcours(
|
||||||
cls,
|
cls,
|
||||||
@ -424,9 +419,14 @@ class ApcNiveau(db.Model, XMLModel):
|
|||||||
referentiel_competence.id if referentiel_competence else None,
|
referentiel_competence.id if referentiel_competence else None,
|
||||||
competence.id if competence else None,
|
competence.id if competence else None,
|
||||||
)
|
)
|
||||||
result = cls._niveaux_annee_de_parcours_cache.get(key)
|
_cache = getattr(g, "_niveaux_annee_de_parcours_cache", None)
|
||||||
if result:
|
if _cache:
|
||||||
return result
|
result = g._niveaux_annee_de_parcours_cache.get(key, False)
|
||||||
|
if result is not False:
|
||||||
|
return result
|
||||||
|
else:
|
||||||
|
g._niveaux_annee_de_parcours_cache = {}
|
||||||
|
_cache = g._niveaux_annee_de_parcours_cache
|
||||||
if annee not in {1, 2, 3}:
|
if annee not in {1, 2, 3}:
|
||||||
raise ValueError("annee invalide pour un parcours BUT")
|
raise ValueError("annee invalide pour un parcours BUT")
|
||||||
referentiel_competence = (
|
referentiel_competence = (
|
||||||
@ -444,12 +444,12 @@ class ApcNiveau(db.Model, XMLModel):
|
|||||||
if competence is not None:
|
if competence is not None:
|
||||||
query = query.filter(ApcCompetence.id == competence.id)
|
query = query.filter(ApcCompetence.id == competence.id)
|
||||||
result = query.all()
|
result = query.all()
|
||||||
cls._niveaux_annee_de_parcours_cache[key] = result
|
_cache[key] = result
|
||||||
return result
|
return result
|
||||||
|
|
||||||
annee_parcour: ApcAnneeParcours = parcour.annees.filter_by(ordre=annee).first()
|
annee_parcour: ApcAnneeParcours = parcour.annees.filter_by(ordre=annee).first()
|
||||||
if not annee_parcour:
|
if not annee_parcour:
|
||||||
cls._niveaux_annee_de_parcours_cache[key] = []
|
_cache[key] = []
|
||||||
return []
|
return []
|
||||||
|
|
||||||
if competence is None:
|
if competence is None:
|
||||||
@ -464,7 +464,7 @@ class ApcNiveau(db.Model, XMLModel):
|
|||||||
niveaux: list[ApcNiveau] = competence.niveaux.filter_by(
|
niveaux: list[ApcNiveau] = competence.niveaux.filter_by(
|
||||||
annee=f"BUT{int(annee)}"
|
annee=f"BUT{int(annee)}"
|
||||||
).all()
|
).all()
|
||||||
cls._niveaux_annee_de_parcours_cache[key] = niveaux
|
_cache[key] = niveaux
|
||||||
return niveaux
|
return niveaux
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user