From d2fbbad84be9546ef6619b131225daa3c34758c8 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Wed, 21 Jun 2023 13:09:04 +0200 Subject: [PATCH] Modify caching of ApcNiveaux --- app/models/but_refcomp.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/models/but_refcomp.py b/app/models/but_refcomp.py index e9d046e2..824e7e3b 100644 --- a/app/models/but_refcomp.py +++ b/app/models/but_refcomp.py @@ -9,6 +9,7 @@ from datetime import datetime import functools from operator import attrgetter +from flask import g from flask_sqlalchemy.query import Query from sqlalchemy.orm import class_mapper import sqlalchemy @@ -399,12 +400,6 @@ class ApcNiveau(db.Model, XMLModel): """Vrai si ce niveau fait partie du Tronc Commun""" 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 def niveaux_annee_de_parcours( cls, @@ -424,9 +419,14 @@ class ApcNiveau(db.Model, XMLModel): referentiel_competence.id if referentiel_competence else None, competence.id if competence else None, ) - result = cls._niveaux_annee_de_parcours_cache.get(key) - if result: - return result + _cache = getattr(g, "_niveaux_annee_de_parcours_cache", None) + if _cache: + 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}: raise ValueError("annee invalide pour un parcours BUT") referentiel_competence = ( @@ -444,12 +444,12 @@ class ApcNiveau(db.Model, XMLModel): if competence is not None: query = query.filter(ApcCompetence.id == competence.id) result = query.all() - cls._niveaux_annee_de_parcours_cache[key] = result + _cache[key] = result return result annee_parcour: ApcAnneeParcours = parcour.annees.filter_by(ordre=annee).first() if not annee_parcour: - cls._niveaux_annee_de_parcours_cache[key] = [] + _cache[key] = [] return [] if competence is None: @@ -464,7 +464,7 @@ class ApcNiveau(db.Model, XMLModel): niveaux: list[ApcNiveau] = competence.niveaux.filter_by( annee=f"BUT{int(annee)}" ).all() - cls._niveaux_annee_de_parcours_cache[key] = niveaux + _cache[key] = niveaux return niveaux