diff --git a/app/api/absences.py b/app/api/absences.py
index b2d33267..acd690ff 100644
--- a/app/api/absences.py
+++ b/app/api/absences.py
@@ -8,6 +8,7 @@
from flask_json import as_json
+from app import db
from app.api import api_bp as bp, API_CLIENT_ERROR
from app.scodoc.sco_utils import json_error
from app.decorators import scodoc, permission_required
@@ -51,7 +52,7 @@ def absences(etudid: int = None):
}
]
"""
- etud = Identite.query.get(etudid)
+ etud = db.session.get(Identite, etudid)
if etud is None:
return json_error(404, message="etudiant inexistant")
# Absences de l'étudiant
@@ -96,7 +97,7 @@ def absences_just(etudid: int = None):
}
]
"""
- etud = Identite.query.get(etudid)
+ etud = db.session.get(Identite, etudid)
if etud is None:
return json_error(404, message="etudiant inexistant")
diff --git a/app/api/jury.py b/app/api/jury.py
index 6f071077..2a86766c 100644
--- a/app/api/jury.py
+++ b/app/api/jury.py
@@ -41,7 +41,7 @@ from app.scodoc.sco_utils import json_error
def decisions_jury(formsemestre_id: int):
"""Décisions du jury des étudiants du formsemestre."""
# APC, pair:
- formsemestre: FormSemestre = FormSemestre.query.get(formsemestre_id)
+ formsemestre: FormSemestre = db.session.get(FormSemestre, formsemestre_id)
if formsemestre.formation.is_apc():
app.set_sco_dept(formsemestre.departement.acronym)
rows = jury_but_results.get_jury_but_results(formsemestre)
diff --git a/app/api/users.py b/app/api/users.py
index 5cb3af44..32abccf2 100644
--- a/app/api/users.py
+++ b/app/api/users.py
@@ -35,7 +35,7 @@ def user_info(uid: int):
"""
Info sur un compte utilisateur scodoc
"""
- user: User = User.query.get(uid)
+ user: User = db.session.get(User, uid)
if user is None:
return json_error(404, "user not found")
if g.scodoc_dept:
diff --git a/app/auth/logic.py b/app/auth/logic.py
index fc4ee02b..496aea1d 100644
--- a/app/auth/logic.py
+++ b/app/auth/logic.py
@@ -9,7 +9,7 @@ from flask import current_app, g, redirect, request, url_for
from flask_httpauth import HTTPBasicAuth, HTTPTokenAuth
import flask_login
-from app import login
+from app import db, login
from app.auth.models import User
from app.models.config import ScoDocSiteConfig
from app.scodoc.sco_utils import json_error
@@ -39,7 +39,7 @@ def basic_auth_error(status):
@login.user_loader
def load_user(uid: str) -> User:
"flask-login: accès à un utilisateur"
- return User.query.get(int(uid))
+ return db.session.get(User, int(uid))
@token_auth.verify_token
diff --git a/app/auth/models.py b/app/auth/models.py
index 37bbf986..a293685e 100644
--- a/app/auth/models.py
+++ b/app/auth/models.py
@@ -225,7 +225,7 @@ class User(UserMixin, db.Model):
return None
except (TypeError, KeyError):
return None
- return User.query.get(user_id)
+ return db.session.get(User, user_id)
def to_dict(self, include_email=True):
"""l'utilisateur comme un dict, avec des champs supplémentaires"""
@@ -376,7 +376,9 @@ class User(UserMixin, db.Model):
"""
if not isinstance(role, Role):
raise ScoValueError("add_role: rôle invalide")
- self.user_roles.append(UserRole(user=self, role=role, dept=dept))
+ user_role = UserRole(user=self, role=role, dept=dept)
+ db.session.add(user_role)
+ self.user_roles.append(user_role)
def add_roles(self, roles: "list[Role]", dept: str):
"""Add roles to this user.
diff --git a/app/but/bulletin_but.py b/app/but/bulletin_but.py
index fc680dbc..9bac0703 100644
--- a/app/but/bulletin_but.py
+++ b/app/but/bulletin_but.py
@@ -12,6 +12,7 @@ import datetime
import numpy as np
from flask import g, has_request_context, url_for
+from app import db
from app.comp.res_but import ResultatsSemestreBUT
from app.models import Evaluation, FormSemestre, Identite
from app.models.groups import GroupDescr
@@ -158,7 +159,7 @@ class BulletinBUT:
[etud.id]
].iterrows():
if codes_cursus.code_ue_validant(ue_capitalisee.code):
- ue = UniteEns.query.get(ue_capitalisee.ue_id) # XXX cacher ?
+ ue = db.session.get(UniteEns, ue_capitalisee.ue_id) # XXX cacher ?
# déjà capitalisé ? montre la meilleure
if ue.acronyme in d:
moy_cap = d[ue.acronyme]["moyenne_num"] or 0.0
diff --git a/app/but/cursus_but.py b/app/but/cursus_but.py
index 97a555ca..748908be 100644
--- a/app/but/cursus_but.py
+++ b/app/but/cursus_but.py
@@ -15,12 +15,10 @@ Classe raccordant avec ScoDoc 7:
"""
import collections
from operator import attrgetter
-from typing import Union
from flask import g, url_for
from app import db
-from app import log
from app.comp.res_but import ResultatsSemestreBUT
from app.comp.res_compat import NotesTableCompat
@@ -252,7 +250,9 @@ class FormSemestreCursusBUT:
parcour = None
else:
if parcour_id not in self.parcours_by_id:
- self.parcours_by_id[parcour_id] = ApcParcours.query.get(parcour_id)
+ self.parcours_by_id[parcour_id] = db.session.get(
+ ApcParcours, parcour_id
+ )
parcour = self.parcours_by_id[parcour_id]
return self.get_niveaux_parcours_by_annee(parcour)
diff --git a/app/comp/moy_mod.py b/app/comp/moy_mod.py
index f69999a7..11dd05f6 100644
--- a/app/comp/moy_mod.py
+++ b/app/comp/moy_mod.py
@@ -134,7 +134,7 @@ class ModuleImplResults:
manque des notes) ssi il y a des étudiants inscrits au semestre et au module
qui ont des notes ATT.
"""
- moduleimpl = ModuleImpl.query.get(self.moduleimpl_id)
+ moduleimpl = db.session.get(ModuleImpl, self.moduleimpl_id)
self.etudids = self._etudids()
# --- Calcul nombre d'inscrits pour déterminer les évaluations "completes":
@@ -225,8 +225,8 @@ class ModuleImplResults:
"""
return [
inscr.etudid
- for inscr in ModuleImpl.query.get(
- self.moduleimpl_id
+ for inscr in db.session.get(
+ ModuleImpl, self.moduleimpl_id
).formsemestre.inscriptions
]
@@ -319,7 +319,7 @@ class ModuleImplResultsAPC(ModuleImplResults):
ou NaN si les évaluations (dans lesquelles l'étudiant a des notes)
ne donnent pas de coef vers cette UE.
"""
- modimpl = ModuleImpl.query.get(self.moduleimpl_id)
+ modimpl = db.session.get(ModuleImpl, self.moduleimpl_id)
nb_etuds, nb_evals = self.evals_notes.shape
nb_ues = evals_poids_df.shape[1]
if evals_poids_df.shape[0] != nb_evals:
@@ -419,7 +419,7 @@ def load_evaluations_poids(moduleimpl_id: int) -> tuple[pd.DataFrame, list]:
Résultat: (evals_poids, liste de UEs du semestre sauf le sport)
"""
- modimpl: ModuleImpl = ModuleImpl.query.get(moduleimpl_id)
+ modimpl: ModuleImpl = db.session.get(ModuleImpl, moduleimpl_id)
evaluations = Evaluation.query.filter_by(moduleimpl_id=moduleimpl_id).all()
ues = modimpl.formsemestre.get_ues(with_sport=False)
ue_ids = [ue.id for ue in ues]
@@ -498,7 +498,7 @@ class ModuleImplResultsClassic(ModuleImplResults):
ou NaN si les évaluations (dans lesquelles l'étudiant a des notes)
ne donnent pas de coef.
"""
- modimpl = ModuleImpl.query.get(self.moduleimpl_id)
+ modimpl = db.session.get(ModuleImpl, self.moduleimpl_id)
nb_etuds, nb_evals = self.evals_notes.shape
if nb_etuds == 0:
return pd.Series()
diff --git a/app/comp/moy_sem.py b/app/comp/moy_sem.py
index 089cc68a..a1fe0104 100644
--- a/app/comp/moy_sem.py
+++ b/app/comp/moy_sem.py
@@ -30,7 +30,10 @@
import numpy as np
import pandas as pd
-from flask import flash, g, Markup, url_for
+from flask import flash, g, url_for
+from markupsafe import Markup
+
+from app import db
from app.models.formations import Formation
@@ -78,7 +81,7 @@ def compute_sem_moys_apc_using_ects(
moy_gen = (etud_moy_ue_df * ects).sum(axis=1) / ects.sum(axis=1)
except TypeError:
if None in ects:
- formation = Formation.query.get(formation_id)
+ formation = db.session.get(Formation, formation_id)
flash(
Markup(
f"""Calcul moyenne générale impossible: ECTS des UE manquants !
@@ -92,7 +95,7 @@ def compute_sem_moys_apc_using_ects(
return moy_gen
-def comp_ranks_series(notes: pd.Series) -> (pd.Series, pd.Series):
+def comp_ranks_series(notes: pd.Series) -> tuple[pd.Series, pd.Series]:
"""Calcul rangs à partir d'une séries ("vecteur") de notes (index etudid, valeur
numérique) en tenant compte des ex-aequos.
diff --git a/app/comp/res_but.py b/app/comp/res_but.py
index b2ba3eb5..f7934172 100644
--- a/app/comp/res_but.py
+++ b/app/comp/res_but.py
@@ -14,7 +14,7 @@ from app import db, log
from app.comp import moy_ue, moy_sem, inscr_mod
from app.comp.res_compat import NotesTableCompat
from app.comp.bonus_spo import BonusSport
-from app.models import Formation, FormSemestreInscription, ScoDocSiteConfig
+from app.models import FormSemestreInscription, ScoDocSiteConfig
from app.models.moduleimpls import ModuleImpl
from app.models.but_refcomp import ApcParcours, ApcNiveau
from app.models.ues import DispenseUE, UniteEns
@@ -291,7 +291,7 @@ class ResultatsSemestreBUT(NotesTableCompat):
if parcour_id is None:
ues_ids = {ue.id for ue in self.ues if ue.type != UE_SPORT}
else:
- parcour: ApcParcours = ApcParcours.query.get(parcour_id)
+ parcour: ApcParcours = db.session.get(ApcParcours, parcour_id)
annee = (self.formsemestre.semestre_id + 1) // 2
niveaux = ApcNiveau.niveaux_annee_de_parcours(parcour, annee, ref_comp)
# Les UEs du formsemestre associées à ces niveaux:
diff --git a/app/comp/res_common.py b/app/comp/res_common.py
index 54fd0de0..03b91e0c 100644
--- a/app/comp/res_common.py
+++ b/app/comp/res_common.py
@@ -17,6 +17,7 @@ import pandas as pd
from flask import g, url_for
+from app import db
from app.comp import res_sem
from app.comp.res_cache import ResultatsCache
from app.comp.jury import ValidationsSemestre
@@ -31,6 +32,7 @@ from app.scodoc.codes_cursus import UE_SPORT
from app.scodoc.sco_exceptions import ScoValueError
from app.scodoc import sco_utils as scu
+
# Il faut bien distinguer
# - ce qui est caché de façon persistente (via redis):
# ce sont les attributs listés dans `_cached_attrs`
@@ -137,7 +139,7 @@ class ResultatsSemestre(ResultatsCache):
def etud_ues(self, etudid: int) -> Generator[UniteEns]:
"""Liste des UE auxquelles l'étudiant est inscrit
(sans bonus, en BUT prend en compte le parcours de l'étudiant)."""
- return (UniteEns.query.get(ue_id) for ue_id in self.etud_ues_ids(etudid))
+ return (db.session.get(UniteEns, ue_id) for ue_id in self.etud_ues_ids(etudid))
def etud_ects_tot_sem(self, etudid: int) -> float:
"""Le total des ECTS associées à ce semestre (que l'étudiant peut ou non valider)"""
@@ -351,7 +353,7 @@ class ResultatsSemestre(ResultatsCache):
"""L'état de l'UE pour cet étudiant.
Result: dict, ou None si l'UE n'est pas dans ce semestre.
"""
- ue: UniteEns = UniteEns.query.get(ue_id)
+ ue: UniteEns = db.session.get(UniteEns, ue_id)
ue_dict = ue.to_dict()
if ue.type == UE_SPORT:
@@ -401,7 +403,7 @@ class ResultatsSemestre(ResultatsCache):
if (not coef_ue) and is_capitalized: # étudiant non inscrit dans l'UE courante
if self.is_apc:
# Coefs de l'UE capitalisée en formation APC: donné par ses ECTS
- ue_capitalized = UniteEns.query.get(ue_cap["ue_id"])
+ ue_capitalized = db.session.get(UniteEns, ue_cap["ue_id"])
coef_ue = ue_capitalized.ects
if coef_ue is None:
orig_sem = FormSemestre.get_formsemestre(ue_cap["formsemestre_id"])
diff --git a/app/comp/res_compat.py b/app/comp/res_compat.py
index d5e85d99..88fcd095 100644
--- a/app/comp/res_compat.py
+++ b/app/comp/res_compat.py
@@ -9,9 +9,10 @@
from functools import cached_property
import pandas as pd
-from flask import flash, g, Markup, url_for
+from flask import flash, g, url_for
+from markupsafe import Markup
-from app import log
+from app import db, log
from app.comp import moy_sem
from app.comp.aux_stats import StatsMoyenne
from app.comp.res_common import ResultatsSemestre
@@ -393,7 +394,7 @@ class NotesTableCompat(ResultatsSemestre):
de ce module.
Évaluation "complete" ssi toutes notes saisies ou en attente.
"""
- modimpl = ModuleImpl.query.get(moduleimpl_id)
+ modimpl = db.session.get(ModuleImpl, moduleimpl_id)
modimpl_results = self.modimpls_results.get(moduleimpl_id)
if not modimpl_results:
return [] # safeguard
diff --git a/app/entreprises/forms.py b/app/entreprises/forms.py
index 5bf3e03b..c39ac750 100644
--- a/app/entreprises/forms.py
+++ b/app/entreprises/forms.py
@@ -36,7 +36,6 @@ from sqlalchemy import text
from wtforms import (
BooleanField,
DateField,
- DecimalField,
FieldList,
FormField,
HiddenField,
@@ -56,6 +55,9 @@ from wtforms.validators import (
)
from wtforms.widgets import ListWidget, CheckboxInput
+from app import db
+from app.auth.models import User
+from app.entreprises import SIRET_PROVISOIRE_START
from app.entreprises.models import (
Entreprise,
EntrepriseCorrespondant,
@@ -63,9 +65,6 @@ from app.entreprises.models import (
EntrepriseSite,
EntrepriseTaxeApprentissage,
)
-from app import db
-from app.auth.models import User
-from app.entreprises import SIRET_PROVISOIRE_START
from app.models import Identite, Departement
from app.scodoc import sco_utils as scu
@@ -651,7 +650,7 @@ class StageApprentissageCreationForm(FlaskForm):
def validate_etudid(self, field):
"L'etudid doit avoit été placé par le JS"
etudid = int(field.data) if field.data else None
- etudiant = Identite.query.get(etudid) if etudid is not None else None
+ etudiant = db.session.get(Identite, etudid) if etudid is not None else None
if etudiant is None:
raise ValidationError("Étudiant introuvable (sélectionnez dans la liste)")
diff --git a/app/models/evaluations.py b/app/models/evaluations.py
index fd777b1c..987b5170 100644
--- a/app/models/evaluations.py
+++ b/app/models/evaluations.py
@@ -190,8 +190,10 @@ class Evaluation(db.Model):
"""
L = []
for ue_id, poids in ue_poids_dict.items():
- ue = UniteEns.query.get(ue_id)
- L.append(EvaluationUEPoids(evaluation=self, ue=ue, poids=poids))
+ ue = db.session.get(UniteEns, ue_id)
+ ue_poids = EvaluationUEPoids(evaluation=self, ue=ue, poids=poids)
+ L.append(ue_poids)
+ db.session.add(ue_poids)
self.ue_poids = L # backref # pylint:disable=attribute-defined-outside-init
self.moduleimpl.invalidate_evaluations_poids() # inval cache
@@ -338,7 +340,7 @@ def check_evaluation_args(args):
jour = args.get("jour", None)
args["jour"] = jour
if jour:
- modimpl = ModuleImpl.query.get(moduleimpl_id)
+ modimpl = db.session.get(ModuleImpl, moduleimpl_id)
formsemestre = modimpl.formsemestre
y, m, d = [int(x) for x in ndb.DateDMYtoISO(jour).split("-")]
jour = datetime.date(y, m, d)
diff --git a/app/models/events.py b/app/models/events.py
index de93a24c..74583b8a 100644
--- a/app/models/events.py
+++ b/app/models/events.py
@@ -187,14 +187,14 @@ class ScolarNews(db.Model):
elif self.type == self.NEWS_NOTE:
moduleimpl_id = self.object
if moduleimpl_id:
- modimpl = ModuleImpl.query.get(moduleimpl_id)
+ modimpl = db.session.get(ModuleImpl, moduleimpl_id)
if modimpl is None:
return None # module does not exists anymore
formsemestre_id = modimpl.formsemestre_id
if not formsemestre_id:
return None
- formsemestre = FormSemestre.query.get(formsemestre_id)
+ formsemestre = db.session.get(FormSemestre, formsemestre_id)
return formsemestre
def notify_by_mail(self):
diff --git a/app/models/formsemestre.py b/app/models/formsemestre.py
index 8ab323ce..bac99fdf 100644
--- a/app/models/formsemestre.py
+++ b/app/models/formsemestre.py
@@ -382,7 +382,7 @@ class FormSemestre(db.Model):
),
{"formsemestre_id": self.id, "parcours_id": parcours.id},
)
- return [ModuleImpl.query.get(modimpl_id) for modimpl_id in cursor]
+ return [db.session.get(ModuleImpl, modimpl_id) for modimpl_id in cursor]
def can_be_edited_by(self, user):
"""Vrai si user peut modifier ce semestre (est chef ou l'un des responsables)"""
diff --git a/app/models/groups.py b/app/models/groups.py
index 8e9d5b62..f2982cf4 100644
--- a/app/models/groups.py
+++ b/app/models/groups.py
@@ -149,7 +149,7 @@ class Partition(db.Model):
if group.id == existing_group_id:
return False
# Fait le changement avec l'ORM sinon risque élevé de blocage
- existing_group = GroupDescr.query.get(existing_group_id)
+ existing_group = db.session.get(GroupDescr, existing_group_id)
db.session.commit()
group.etuds.append(etud)
existing_group.etuds.remove(etud)
diff --git a/app/models/modules.py b/app/models/modules.py
index 8295eeda..6aaaef19 100644
--- a/app/models/modules.py
+++ b/app/models/modules.py
@@ -198,7 +198,7 @@ class Module(db.Model):
else:
# crée nouveau coef:
if coef != 0.0:
- ue = UniteEns.query.get(ue_id)
+ ue = db.session.get(UniteEns, ue_id)
ue_coef = ModuleUECoef(module=self, ue=ue, coef=coef)
db.session.add(ue_coef)
self.ue_coefs.append(ue_coef)
@@ -232,7 +232,7 @@ class Module(db.Model):
"delete_ue_coef: locked formation, ignoring request"
)
raise ScoValueError("Formation verrouillée")
- ue_coef = ModuleUECoef.query.get((self.id, ue.id))
+ ue_coef = db.session.get(ModuleUECoef, (self.id, ue.id))
if ue_coef:
db.session.delete(ue_coef)
self.formation.invalidate_module_coefs()
diff --git a/app/models/notes.py b/app/models/notes.py
index 04ceb1c0..2024a436 100644
--- a/app/models/notes.py
+++ b/app/models/notes.py
@@ -57,7 +57,7 @@ class NotesNotes(db.Model):
from app.models.evaluations import Evaluation
return f"""<{self.__class__.__name__} {self.id} etudid={self.etudid} v={self.value} {self.date.isoformat()
- } {Evaluation.query.get(self.evaluation_id) if self.evaluation_id else "X" }>"""
+ } {db.session.get(Evaluation, self.evaluation_id) if self.evaluation_id else "X" }>"""
class NotesNotesLog(db.Model):
diff --git a/app/pe/pe_semestretag.py b/app/pe/pe_semestretag.py
index ee953593..9e2d9b45 100644
--- a/app/pe/pe_semestretag.py
+++ b/app/pe/pe_semestretag.py
@@ -36,7 +36,7 @@ Created on Fri Sep 9 09:15:05 2016
@author: barasc
"""
-from app import log
+from app import db, log
from app.comp import res_sem
from app.comp.res_compat import NotesTableCompat
from app.models import FormSemestre
@@ -487,7 +487,7 @@ def comp_coeff_pond(coeffs, ponderations):
# -----------------------------------------------------------------------------
def get_moduleimpl(modimpl_id) -> dict:
"""Renvoie l'objet modimpl dont l'id est modimpl_id"""
- modimpl = ModuleImpl.query.get(modimpl_id)
+ modimpl = db.session.get(ModuleImpl, modimpl_id)
if modimpl:
return modimpl
if SemestreTag.DEBUG:
diff --git a/app/scodoc/sco_bulletins.py b/app/scodoc/sco_bulletins.py
index ca6b6fb8..8a4d465c 100644
--- a/app/scodoc/sco_bulletins.py
+++ b/app/scodoc/sco_bulletins.py
@@ -38,7 +38,7 @@ from flask import flash, render_template, url_for
from flask_json import json_response
from flask_login import current_user
-from app import email
+from app import db, email
from app import log
from app.scodoc.sco_utils import json_error
from app.but import bulletin_but
@@ -354,7 +354,7 @@ def formsemestre_bulletinetud_dict(formsemestre_id, etudid, version="long"):
"modules_capitalized"
] = [] # modules de l'UE capitalisée (liste vide si pas capitalisée)
if ue_status["is_capitalized"] and ue_status["formsemestre_id"] is not None:
- sem_origin = FormSemestre.query.get(ue_status["formsemestre_id"])
+ sem_origin = db.session.get(FormSemestre, ue_status["formsemestre_id"])
u[
"ue_descr_txt"
] = f'capitalisée le {ndb.DateISOtoDMY(ue_status["event_date"])}'
@@ -369,7 +369,9 @@ def formsemestre_bulletinetud_dict(formsemestre_id, etudid, version="long"):
)
if ue_status["moy"] != "NA":
# détail des modules de l'UE capitalisée
- formsemestre_cap = FormSemestre.query.get(ue_status["formsemestre_id"])
+ formsemestre_cap = db.session.get(
+ FormSemestre, ue_status["formsemestre_id"]
+ )
nt_cap: NotesTableCompat = res_sem.load_formsemestre_results(
formsemestre_cap
)
@@ -749,7 +751,7 @@ def etud_descr_situation_semestre(
res: ResultatsSemestreBUT = res_sem.load_formsemestre_results(formsemestre)
parcour_id = res.etuds_parcour_id[etudid]
parcour: ApcParcours = (
- ApcParcours.query.get(parcour_id) if parcour_id is not None else None
+ db.session.get(ApcParcours, parcour_id) if parcour_id is not None else None
)
if parcour:
infos["parcours_titre"] = parcour.libelle or ""
@@ -928,7 +930,7 @@ def formsemestre_bulletinetud(
"""
format = format or "html"
- formsemestre: FormSemestre = FormSemestre.query.get(formsemestre_id)
+ formsemestre: FormSemestre = db.session.get(FormSemestre, formsemestre_id)
if not formsemestre:
raise ScoValueError(f"semestre {formsemestre_id} inconnu !")
diff --git a/app/scodoc/sco_bulletins_json.py b/app/scodoc/sco_bulletins_json.py
index a93f4392..85d4f60b 100644
--- a/app/scodoc/sco_bulletins_json.py
+++ b/app/scodoc/sco_bulletins_json.py
@@ -33,7 +33,7 @@ import json
from flask import abort
-from app import ScoDocJSONEncoder
+from app import db, ScoDocJSONEncoder
from app.comp import res_sem
from app.comp.res_compat import NotesTableCompat
from app.models import but_validations
@@ -245,7 +245,7 @@ def formsemestre_bulletinetud_published_dict(
u["module"] = []
# Structure UE/Matière/Module
# Recodé en 2022
- ue = UniteEns.query.get(ue_id)
+ ue = db.session.get(UniteEns, ue_id)
u["matiere"] = [
{
"matiere_id": mat.id,
diff --git a/app/scodoc/sco_cache.py b/app/scodoc/sco_cache.py
index 36b8db30..31af42eb 100644
--- a/app/scodoc/sco_cache.py
+++ b/app/scodoc/sco_cache.py
@@ -54,7 +54,7 @@ import traceback
from flask import g
import app
-from app import log
+from app import db, log
from app.scodoc import notesdb as ndb
from app.scodoc import sco_utils as scu
from app.scodoc.sco_exceptions import ScoException
@@ -266,7 +266,7 @@ def invalidate_formsemestre( # was inval_cache(formsemestre_id=None, pdfonly=Fa
# appel via API ou tests sans dept:
formsemestre = None
if formsemestre_id:
- formsemestre = FormSemestre.query.get(formsemestre_id)
+ formsemestre = db.session.get(FormSemestre, formsemestre_id)
if formsemestre is None:
raise ScoException("invalidate_formsemestre: departement must be set")
app.set_sco_dept(formsemestre.departement.acronym, open_cnx=False)
diff --git a/app/scodoc/sco_edit_formation.py b/app/scodoc/sco_edit_formation.py
index a3ce002a..2327071b 100644
--- a/app/scodoc/sco_edit_formation.py
+++ b/app/scodoc/sco_edit_formation.py
@@ -103,7 +103,7 @@ def do_formation_delete(formation_id):
"""delete a formation (and all its UE, matieres, modules)
Warning: delete all ues, will ask if there are validations !
"""
- formation: Formation = Formation.query.get(formation_id)
+ formation: Formation = db.session.get(Formation, formation_id)
if formation is None:
return
acronyme = formation.acronyme
diff --git a/app/scodoc/sco_edit_matiere.py b/app/scodoc/sco_edit_matiere.py
index 360e02fc..614113fd 100644
--- a/app/scodoc/sco_edit_matiere.py
+++ b/app/scodoc/sco_edit_matiere.py
@@ -30,14 +30,13 @@
"""
import flask
from flask import g, url_for, request
-from app.models.events import ScolarNews
-from app.models.formations import Matiere
-from app.models.ues import UniteEns
+
+from app import db, log
+from app.models import Formation, Matiere, UniteEns, ScolarNews
import app.scodoc.notesdb as ndb
import app.scodoc.sco_utils as scu
-from app import log
-from app.models import Formation
+
from app.scodoc.TrivialFormulator import TrivialFormulator, tf_error_message
from app.scodoc.sco_exceptions import (
ScoValueError,
@@ -74,7 +73,7 @@ def do_matiere_edit(*args, **kw):
# edit
_matiereEditor.edit(cnx, *args, **kw)
formation_id = sco_edit_ue.ue_list({"ue_id": mat["ue_id"]})[0]["formation_id"]
- Formation.query.get(formation_id).invalidate_cached_sems()
+ db.session.get(Formation, formation_id).invalidate_cached_sems()
def do_matiere_create(args):
@@ -89,7 +88,7 @@ def do_matiere_create(args):
r = _matiereEditor.create(cnx, args)
# news
- formation = Formation.query.get(ue["formation_id"])
+ formation = db.session.get(Formation, ue["formation_id"])
ScolarNews.add(
typ=ScolarNews.NEWS_FORM,
obj=ue["formation_id"],
@@ -201,7 +200,7 @@ def do_matiere_delete(oid):
_matiereEditor.delete(cnx, oid)
# news
- formation = Formation.query.get(ue["formation_id"])
+ formation = db.session.get(Formation, ue["formation_id"])
ScolarNews.add(
typ=ScolarNews.NEWS_FORM,
obj=ue["formation_id"],
diff --git a/app/scodoc/sco_edit_module.py b/app/scodoc/sco_edit_module.py
index 83476eb1..31148e0a 100644
--- a/app/scodoc/sco_edit_module.py
+++ b/app/scodoc/sco_edit_module.py
@@ -98,10 +98,10 @@ def module_list(*args, **kw):
def do_module_create(args) -> int:
"Create a module. Returns id of new object."
- formation = Formation.query.get(args["formation_id"])
+ formation = db.session.get(Formation, args["formation_id"])
# refuse de créer un module APC avec semestres incohérents:
if formation.is_apc():
- ue = UniteEns.query.get(args["ue_id"])
+ ue = db.session.get(UniteEns, args["ue_id"])
if int(args.get("semestre_id", 0)) != ue.semestre_idx:
raise ScoValueError("Formation incompatible: contacter le support ScoDoc")
# create
@@ -248,7 +248,7 @@ def do_module_edit(vals: dict) -> None:
# edit
cnx = ndb.GetDBConnexion()
_moduleEditor.edit(cnx, vals)
- Formation.query.get(mod["formation_id"]).invalidate_cached_sems()
+ db.session.get(Formation, mod["formation_id"]).invalidate_cached_sems()
def check_module_code_unicity(code, field, formation_id, module_id=None):
@@ -805,7 +805,7 @@ def module_edit(
if create:
if not matiere_id:
# formulaire avec choix UE de rattachement
- ue = UniteEns.query.get(tf[2]["ue_id"])
+ ue = db.session.get(UniteEns, tf[2]["ue_id"])
if ue is None:
raise ValueError("UE invalide")
matiere = ue.matieres.first()
@@ -819,7 +819,7 @@ def module_edit(
tf[2]["semestre_id"] = ue.semestre_idx
module_id = do_module_create(tf[2])
- module = Module.query.get(module_id)
+ module = db.session.get(Module, module_id)
else: # EDITION MODULE
# l'UE de rattachement peut changer
tf[2]["ue_id"], tf[2]["matiere_id"] = tf[2]["ue_matiere_id"].split("!")
@@ -837,7 +837,7 @@ def module_edit(
)
# En APC, force le semestre égal à celui de l'UE
if is_apc:
- selected_ue = UniteEns.query.get(tf[2]["ue_id"])
+ selected_ue = db.session.get(UniteEns, tf[2]["ue_id"])
if selected_ue is None:
raise ValueError("UE invalide")
tf[2]["semestre_id"] = selected_ue.semestre_idx
@@ -853,13 +853,13 @@ def module_edit(
module.parcours = formation.referentiel_competence.parcours.all()
else:
module.parcours = [
- ApcParcours.query.get(int(parcour_id_str))
+ db.session.get(ApcParcours, int(parcour_id_str))
for parcour_id_str in tf[2]["parcours"]
]
# Modifie les AC
if "app_critiques" in tf[2]:
module.app_critiques = [
- ApcAppCritique.query.get(int(ac_id_str))
+ db.session.get(ApcAppCritique, int(ac_id_str))
for ac_id_str in tf[2]["app_critiques"]
]
db.session.add(module)
diff --git a/app/scodoc/sco_edit_ue.py b/app/scodoc/sco_edit_ue.py
index 4d7aa131..73bcd100 100644
--- a/app/scodoc/sco_edit_ue.py
+++ b/app/scodoc/sco_edit_ue.py
@@ -36,8 +36,7 @@ from flask import flash, render_template, url_for
from flask import g, request
from flask_login import current_user
-from app import db
-from app import log
+from app import db, log
from app.but import apc_edit_ue
from app.models import APO_CODE_STR_LEN, SHORT_STR_LEN
from app.models import (
@@ -137,10 +136,10 @@ def do_ue_create(args):
ue_id = _ueEditor.create(cnx, args)
log(f"do_ue_create: created {ue_id} with {args}")
- formation: Formation = Formation.query.get(args["formation_id"])
+ formation: Formation = db.session.get(Formation, args["formation_id"])
formation.invalidate_module_coefs()
# news
- formation = Formation.query.get(args["formation_id"])
+ formation = db.session.get(Formation, args["formation_id"])
ScolarNews.add(
typ=ScolarNews.NEWS_FORM,
obj=args["formation_id"],
@@ -284,7 +283,7 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No
}
submitlabel = "Créer cette UE"
can_change_semestre_id = True
- formation = Formation.query.get(formation_id)
+ formation = db.session.get(Formation, formation_id)
if not formation:
raise ScoValueError(f"Formation inexistante ! (id={formation_id})")
cursus = formation.get_cursus()
@@ -543,7 +542,7 @@ def ue_edit(ue_id=None, create=False, formation_id=None, default_semestre_idx=No
"semestre_id": tf[2]["semestre_idx"],
},
)
- ue = UniteEns.query.get(ue_id)
+ ue = db.session.get(UniteEns, ue_id)
flash(f"UE créée (code {ue.ue_code})")
else:
if not tf[2]["numero"]:
@@ -597,7 +596,7 @@ def next_ue_numero(formation_id, semestre_id=None):
"""Numero d'une nouvelle UE dans cette formation.
Si le semestre est specifie, cherche les UE ayant des modules de ce semestre
"""
- formation = Formation.query.get(formation_id)
+ formation = db.session.get(Formation, formation_id)
ues = ue_list(args={"formation_id": formation_id})
if not ues:
return 0
@@ -661,7 +660,7 @@ def ue_table(formation_id=None, semestre_idx=1, msg=""): # was ue_list
"""
from app.scodoc import sco_formsemestre_validation
- formation: Formation = Formation.query.get(formation_id)
+ formation: Formation = db.session.get(Formation, formation_id)
if not formation:
raise ScoValueError("invalid formation_id")
parcours = formation.get_cursus()
@@ -1462,7 +1461,7 @@ def do_ue_edit(args, bypass_lock=False, dont_invalidate_cache=False):
cnx = ndb.GetDBConnexion()
_ueEditor.edit(cnx, args)
- formation = Formation.query.get(ue["formation_id"])
+ formation = db.session.get(Formation, ue["formation_id"])
if not dont_invalidate_cache:
# Invalide les semestres utilisant cette formation
# ainsi que les poids et coefs
diff --git a/app/scodoc/sco_etud.py b/app/scodoc/sco_etud.py
index 827363c8..2fb1f52d 100644
--- a/app/scodoc/sco_etud.py
+++ b/app/scodoc/sco_etud.py
@@ -262,7 +262,7 @@ def identite_list(cnx, *a, **kw):
def identite_edit_nocheck(cnx, args):
"""Modifie les champs mentionnes dans args, sans verification ni notification."""
- etud = Identite.query.get(args["etudid"])
+ etud = db.session.get(Identite, args["etudid"])
etud.from_dict(args)
db.session.commit()
diff --git a/app/scodoc/sco_evaluation_db.py b/app/scodoc/sco_evaluation_db.py
index 7cbc3233..260481b9 100644
--- a/app/scodoc/sco_evaluation_db.py
+++ b/app/scodoc/sco_evaluation_db.py
@@ -129,7 +129,7 @@ def do_evaluation_create(
)
args = locals()
log("do_evaluation_create: args=" + str(args))
- modimpl: ModuleImpl = ModuleImpl.query.get(moduleimpl_id)
+ modimpl: ModuleImpl = db.session.get(ModuleImpl, moduleimpl_id)
if modimpl is None:
raise ValueError("module not found")
check_evaluation_args(args)
diff --git a/app/scodoc/sco_evaluation_edit.py b/app/scodoc/sco_evaluation_edit.py
index a4b4414c..ac9f6e2f 100644
--- a/app/scodoc/sco_evaluation_edit.py
+++ b/app/scodoc/sco_evaluation_edit.py
@@ -37,11 +37,8 @@ from flask_login import current_user
from flask import request
from app import db
-from app import log
-from app import models
-from app.models.evaluations import Evaluation
-from app.models.formsemestre import FormSemestre
-from app.models.moduleimpls import ModuleImpl
+from app.models import Evaluation, FormSemestre, ModuleImpl
+
import app.scodoc.sco_utils as scu
from app.scodoc.sco_utils import ModuleType
from app.scodoc.sco_exceptions import ScoValueError
@@ -62,7 +59,7 @@ def evaluation_create_form(
):
"Formulaire création/édition d'une évaluation (pas de ses notes)"
if evaluation_id is not None:
- evaluation: Evaluation = models.Evaluation.query.get(evaluation_id)
+ evaluation: Evaluation = db.session.get(Evaluation, evaluation_id)
if evaluation is None:
raise ScoValueError("Cette évaluation n'existe pas ou plus !")
moduleimpl_id = evaluation.moduleimpl_id
@@ -363,7 +360,7 @@ def evaluation_create_form(
evaluation_id = sco_evaluation_db.do_evaluation_create(**tf[2])
if is_apc:
# Set poids
- evaluation = models.Evaluation.query.get(evaluation_id)
+ evaluation = db.session.get(Evaluation, evaluation_id)
for ue in sem_ues:
evaluation.set_ue_poids(ue, tf[2][f"poids_{ue.id}"])
db.session.add(evaluation)
diff --git a/app/scodoc/sco_evaluation_recap.py b/app/scodoc/sco_evaluation_recap.py
index 635d6e8d..c55843ca 100644
--- a/app/scodoc/sco_evaluation_recap.py
+++ b/app/scodoc/sco_evaluation_recap.py
@@ -12,6 +12,7 @@ Sur une idée de Pascal Bouron, de Lyon.
import time
from flask import g, url_for
+from app import db
from app.models import Evaluation, FormSemestre
from app.comp import res_sem
from app.comp.res_compat import NotesTableCompat
@@ -113,7 +114,7 @@ def evaluations_recap_table(formsemestre: FormSemestre) -> list[dict]:
rows.append(row)
line_idx += 1
for evaluation_id in modimpl_results.evals_notes:
- e = Evaluation.query.get(evaluation_id)
+ e = db.session.get(Evaluation, evaluation_id)
eval_etat = modimpl_results.evaluations_etat[evaluation_id]
row = {
"type": "",
diff --git a/app/scodoc/sco_formation_recap.py b/app/scodoc/sco_formation_recap.py
index e9ae85a3..c940b76e 100644
--- a/app/scodoc/sco_formation_recap.py
+++ b/app/scodoc/sco_formation_recap.py
@@ -35,8 +35,7 @@ from flask import send_file, url_for
from flask import g, request
from flask_login import current_user
-from app.models import Formation, FormSemestre, UniteEns, Module
-from app.models.formations import Matiere
+from app.models import Formation, FormSemestre, Matiere, Module, UniteEns
from app.scodoc.gen_tables import GenTable
from app.scodoc.sco_permissions import Permission
@@ -178,7 +177,7 @@ def export_recap_formations_annee_scolaire(annee_scolaire):
)
formation_ids = {formsemestre.formation.id for formsemestre in formsemestres}
for formation_id in formation_ids:
- formation = Formation.query.get(formation_id)
+ formation = db.session.get(Formation, formation_id)
xls = formation_table_recap(formation_id, format="xlsx").data
filename = (
scu.sanitize_filename(formation.get_titre_version()) + scu.XLSX_SUFFIX
diff --git a/app/scodoc/sco_formation_versions.py b/app/scodoc/sco_formation_versions.py
index 50d7c849..9cce0c3a 100644
--- a/app/scodoc/sco_formation_versions.py
+++ b/app/scodoc/sco_formation_versions.py
@@ -206,14 +206,14 @@ def do_formsemestres_associate_new_version(
) = sco_formations.formation_create_new_version(formation_id, redirect=False)
# Log new ues:
for ue_id in ues_old2new:
- ue = UniteEns.query.get(ue_id)
- new_ue = UniteEns.query.get(ues_old2new[ue_id])
+ ue = db.session.get(UniteEns, ue_id)
+ new_ue = db.session.get(UniteEns, ues_old2new[ue_id])
assert ue.semestre_idx == new_ue.semestre_idx
log(f"{ue} -> {new_ue}")
# Log new modules
for module_id in modules_old2new:
- mod = Module.query.get(module_id)
- new_mod = Module.query.get(modules_old2new[module_id])
+ mod = db.session.get(Module, module_id)
+ new_mod = db.session.get(Module, modules_old2new[module_id])
assert mod.semestre_id == new_mod.semestre_id
log(f"{mod} -> {new_mod}")
# re-associate
diff --git a/app/scodoc/sco_formations.py b/app/scodoc/sco_formations.py
index 398ed7d4..d0c8b688 100644
--- a/app/scodoc/sco_formations.py
+++ b/app/scodoc/sco_formations.py
@@ -163,7 +163,7 @@ def formation_export_dict(
if tags:
mod["tags"] = [{"name": x} for x in tags]
#
- module: Module = Module.query.get(module_id)
+ module: Module = db.session.get(Module, module_id)
if module.is_apc():
# Exporte les coefficients
if ue_reference_style == "id":
@@ -359,7 +359,7 @@ def formation_import_xml(doc: str, import_tags=True, use_local_refcomp=False):
referentiel_competence_id, ue_info[1]
)
ue_id = sco_edit_ue.do_ue_create(ue_info[1])
- ue: UniteEns = UniteEns.query.get(ue_id)
+ ue: UniteEns = db.session.get(UniteEns, ue_id)
assert ue
if xml_ue_id:
ues_old2new[xml_ue_id] = ue_id
@@ -424,7 +424,7 @@ def formation_import_xml(doc: str, import_tags=True, use_local_refcomp=False):
if xml_module_id:
modules_old2new[int(xml_module_id)] = mod_id
if len(mod_info) > 2:
- module: Module = Module.query.get(mod_id)
+ module: Module = db.session.get(Module, mod_id)
tag_names = []
ue_coef_dict = {}
for child in mod_info[2]:
diff --git a/app/scodoc/sco_formsemestre_edit.py b/app/scodoc/sco_formsemestre_edit.py
index 9c8466ed..41347f2d 100644
--- a/app/scodoc/sco_formsemestre_edit.py
+++ b/app/scodoc/sco_formsemestre_edit.py
@@ -950,7 +950,7 @@ def do_formsemestre_createwithmodules(edit=False, formsemestre: FormSemestre = N
formsemestre = FormSemestre.get_formsemestre(formsemestre_id)
if "parcours" in tf[2]:
formsemestre.parcours = [
- ApcParcours.query.get(int(parcour_id_str))
+ db.session.get(ApcParcours, int(parcour_id_str))
for parcour_id_str in tf[2]["parcours"]
]
db.session.add(formsemestre)
@@ -1044,7 +1044,7 @@ def formsemestre_delete_moduleimpls(formsemestre_id, module_ids_to_del):
ok = True
msg = []
for module_id in module_ids_to_del:
- module = Module.query.get(module_id)
+ module = db.session.get(Module, module_id)
if module is None:
continue # ignore invalid ids
modimpls = ModuleImpl.query.filter_by(
@@ -1224,7 +1224,7 @@ def do_formsemestre_clone(
args["etat"] = 1 # non verrouillé
formsemestre_id = sco_formsemestre.do_formsemestre_create(args)
log(f"created formsemestre {formsemestre_id}")
- formsemestre: FormSemestre = FormSemestre.query.get(formsemestre_id)
+ formsemestre: FormSemestre = db.session.get(FormSemestre, formsemestre_id)
# 2- create moduleimpls
mods_orig = sco_moduleimpl.moduleimpl_list(formsemestre_id=orig_formsemestre_id)
for mod_orig in mods_orig:
diff --git a/app/scodoc/sco_formsemestre_status.py b/app/scodoc/sco_formsemestre_status.py
index 94bbd766..c1d15bfe 100644
--- a/app/scodoc/sco_formsemestre_status.py
+++ b/app/scodoc/sco_formsemestre_status.py
@@ -36,14 +36,20 @@ from flask import request
from flask import flash, redirect, render_template, url_for
from flask_login import current_user
-from app import log
+from app import db, log
from app.but.cursus_but import formsemestre_warning_apc_setup
from app.comp import res_sem
from app.comp.res_common import ResultatsSemestre
from app.comp.res_compat import NotesTableCompat
-from app.models import Evaluation, Formation, Module, ModuleImpl, NotesNotes
-from app.models.etudiants import Identite
-from app.models.formsemestre import FormSemestre
+from app.models import (
+ Evaluation,
+ Formation,
+ FormSemestre,
+ Identite,
+ Module,
+ ModuleImpl,
+ NotesNotes,
+)
import app.scodoc.sco_utils as scu
from app.scodoc.sco_utils import ModuleType
from app.scodoc.sco_permissions import Permission
@@ -753,7 +759,7 @@ def formsemestre_description_table(
e["publish_incomplete_str"] = "Non"
e["_publish_incomplete_str_td_attrs"] = 'style="color: red;"'
# Poids vers UEs (en APC)
- evaluation: Evaluation = Evaluation.query.get(e["evaluation_id"])
+ evaluation: Evaluation = db.session.get(Evaluation, e["evaluation_id"])
for ue_id, poids in evaluation.get_ue_poids_dict().items():
e[f"ue_{ue_id}"] = poids or ""
e[f"_ue_{ue_id}_class"] = "poids"
@@ -974,7 +980,7 @@ def html_expr_diagnostic(diagnostics):
def formsemestre_status_head(formsemestre_id: int = None, page_title: str = None):
"""En-tête HTML des pages "semestre" """
- sem: FormSemestre = FormSemestre.query.get(formsemestre_id)
+ sem: FormSemestre = db.session.get(FormSemestre, formsemestre_id)
if not sem:
raise ScoValueError("Semestre inexistant (il a peut être été supprimé ?)")
formation: Formation = sem.formation
@@ -1225,7 +1231,7 @@ def formsemestre_tableau_modules(
H = []
prev_ue_id = None
for modimpl in modimpls:
- mod: Module = Module.query.get(modimpl["module_id"])
+ mod: Module = db.session.get(Module, modimpl["module_id"])
moduleimpl_status_url = url_for(
"notes.moduleimpl_status",
scodoc_dept=g.scodoc_dept,
diff --git a/app/scodoc/sco_formsemestre_validation.py b/app/scodoc/sco_formsemestre_validation.py
index 6460fb4f..e7bfecdd 100644
--- a/app/scodoc/sco_formsemestre_validation.py
+++ b/app/scodoc/sco_formsemestre_validation.py
@@ -69,6 +69,7 @@ from app.scodoc import sco_preferences
from app.scodoc import sco_pv_dict
from app.scodoc.sco_permissions import Permission
+
# ------------------------------------------------------------------------------------
def formsemestre_validation_etud_form(
formsemestre_id=None, # required
@@ -575,7 +576,7 @@ def formsemestre_recap_parcours_table(
else:
ass = ""
- formsemestre = FormSemestre.query.get(sem["formsemestre_id"])
+ formsemestre = db.session.get(FormSemestre, sem["formsemestre_id"])
nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre)
if is_cur:
type_sem = "*" # now unused
diff --git a/app/scodoc/sco_groups.py b/app/scodoc/sco_groups.py
index ab3e014d..e2560145 100644
--- a/app/scodoc/sco_groups.py
+++ b/app/scodoc/sco_groups.py
@@ -450,7 +450,7 @@ def get_etud_formsemestre_groups(
),
{"etudid": etud.id, "formsemestre_id": formsemestre.id},
)
- return [GroupDescr.query.get(group_id) for group_id in cursor]
+ return [db.session.get(GroupDescr, group_id) for group_id in cursor]
# Ancienne fonction:
@@ -714,7 +714,7 @@ def setGroups(
response.headers["Content-Type"] = scu.XML_MIMETYPE
return response
- partition: Partition = Partition.query.get(partition_id)
+ partition: Partition = db.session.get(Partition, partition_id)
if not partition.groups_editable and (groupsToCreate or groupsToDelete):
msg = "setGroups: partition non editable"
log(msg)
@@ -1484,7 +1484,7 @@ def _get_prev_moy(etudid, formsemestre_id):
etud = info[0]
Se = sco_cursus.get_situation_etud_cursus(etud, formsemestre_id)
if Se.prev:
- prev_sem = FormSemestre.query.get(Se.prev["formsemestre_id"])
+ prev_sem = db.session.get(FormSemestre, Se.prev["formsemestre_id"])
nt: NotesTableCompat = res_sem.load_formsemestre_results(prev_sem)
return nt.get_etud_moy_gen(etudid)
else:
@@ -1521,7 +1521,7 @@ def create_etapes_partition(formsemestre_id, partition_name="apo_etapes"):
pid = partition_create(
formsemestre_id, partition_name=partition_name, redirect=False
)
- partition: Partition = Partition.query.get(pid)
+ partition: Partition = db.session.get(Partition, pid)
groups = partition.groups
groups_by_names = {g["group_name"]: g for g in groups}
for etape in etapes:
diff --git a/app/scodoc/sco_import_etuds.py b/app/scodoc/sco_import_etuds.py
index 3141c412..c2b3b809 100644
--- a/app/scodoc/sco_import_etuds.py
+++ b/app/scodoc/sco_import_etuds.py
@@ -36,16 +36,12 @@ import time
from flask import g, url_for
-import app.scodoc.sco_utils as scu
-import app.scodoc.notesdb as ndb
-from app import log
+from app import db, log
from app.models import ScolarNews, GroupDescr
from app.models.etudiants import input_civilite
-from app.scodoc.sco_excel import COLORS
-from app.scodoc.sco_formsemestre_inscriptions import (
- do_formsemestre_inscription_with_modules,
-)
+
from app.scodoc.gen_tables import GenTable
+from app.scodoc.sco_excel import COLORS
from app.scodoc.sco_exceptions import (
AccessDenied,
ScoFormatError,
@@ -55,7 +51,6 @@ from app.scodoc.sco_exceptions import (
ScoLockedFormError,
ScoGenError,
)
-
from app.scodoc import html_sco_header
from app.scodoc import sco_cache
from app.scodoc import sco_etud
@@ -63,6 +58,11 @@ from app.scodoc import sco_groups
from app.scodoc import sco_excel
from app.scodoc import sco_groups_view
from app.scodoc import sco_preferences
+import app.scodoc.notesdb as ndb
+from app.scodoc.sco_formsemestre_inscriptions import (
+ do_formsemestre_inscription_with_modules,
+)
+import app.scodoc.sco_utils as scu
# format description (in tools/)
FORMAT_FILE = "format_import_etudiants.txt"
@@ -719,7 +719,7 @@ def scolars_import_admission(datafile, formsemestre_id=None, type_admission=None
)
for group_id in group_ids:
- group = GroupDescr.query.get(group_id)
+ group = db.session.get(GroupDescr, group_id)
if group.partition.groups_editable:
sco_groups.change_etud_group_in_partition(
args["etudid"], group
diff --git a/app/scodoc/sco_inscr_passage.py b/app/scodoc/sco_inscr_passage.py
index 50260e27..854e8c22 100644
--- a/app/scodoc/sco_inscr_passage.py
+++ b/app/scodoc/sco_inscr_passage.py
@@ -35,7 +35,7 @@ from flask import url_for, g, request
import app.scodoc.notesdb as ndb
import app.scodoc.sco_utils as scu
-from app import log
+from app import db, log
from app.models import Formation, FormSemestre, GroupDescr
from app.scodoc.gen_tables import GenTable
from app.scodoc import html_sco_header
@@ -177,7 +177,7 @@ def do_inscrit(sem, etudids, inscrit_groupes=False):
En option: inscrit aux mêmes groupes que dans le semestre origine
"""
# TODO à ré-écrire pour utiliser le smodèle, notamment GroupDescr
- formsemestre: FormSemestre = FormSemestre.query.get(sem["formsemestre_id"])
+ formsemestre: FormSemestre = db.session.get(FormSemestre, sem["formsemestre_id"])
formsemestre.setup_parcours_groups()
log(f"do_inscrit (inscrit_groupes={inscrit_groupes}): {etudids}")
for etudid in etudids:
@@ -220,7 +220,9 @@ def do_inscrit(sem, etudids, inscrit_groupes=False):
# Inscrit aux groupes
for partition_group in partition_groups:
- group: GroupDescr = GroupDescr.query.get(partition_group["group_id"])
+ group: GroupDescr = db.session.get(
+ GroupDescr, partition_group["group_id"]
+ )
sco_groups.change_etud_group_in_partition(etudid, group)
@@ -433,7 +435,7 @@ def _build_page(
inscrit_groupes=False,
ignore_jury=False,
):
- formsemestre: FormSemestre = FormSemestre.query.get(sem["formsemestre_id"])
+ formsemestre: FormSemestre = db.session.get(FormSemestre, sem["formsemestre_id"])
inscrit_groupes = int(inscrit_groupes)
ignore_jury = int(ignore_jury)
if inscrit_groupes:
diff --git a/app/scodoc/sco_liste_notes.py b/app/scodoc/sco_liste_notes.py
index c5443680..9be70378 100644
--- a/app/scodoc/sco_liste_notes.py
+++ b/app/scodoc/sco_liste_notes.py
@@ -33,7 +33,7 @@ import numpy as np
import flask
from flask import url_for, g, request
-from app import log
+from app import db, log
from app import models
from app.comp import res_sem
from app.comp import moy_mod
@@ -79,7 +79,7 @@ def do_evaluation_listenotes(
return "
Aucune évaluation !
", "ScoDoc" E = evals[0] # il y a au moins une evaluation - modimpl = ModuleImpl.query.get(E["moduleimpl_id"]) + modimpl = db.session.get(ModuleImpl, E["moduleimpl_id"]) # description de l'evaluation if mode == "eval": H = [sco_evaluations.evaluation_describe(evaluation_id=evaluation_id)] @@ -624,7 +624,7 @@ def _make_table_notes( ] commentkeys = list(key_mgr.items()) # [ (comment, key), ... ] commentkeys.sort(key=lambda x: int(x[1])) - for (comment, key) in commentkeys: + for comment, key in commentkeys: C.append( '(%s) %sResponsable de ce semestre : %s
" % ", ".join( - [User.query.get(i).get_prenomnom() for i in sem["responsables"]] + [ + db.session.get(User, i).get_prenomnom() + for i in sem["responsables"] + ] ), footer, ] diff --git a/app/scodoc/sco_preferences.py b/app/scodoc/sco_preferences.py index 8c9bf554..fd49ff67 100644 --- a/app/scodoc/sco_preferences.py +++ b/app/scodoc/sco_preferences.py @@ -113,9 +113,9 @@ get_base_preferences(formsemestre_id) import flask from flask import current_app, flash, g, request, url_for +from app import db, log from app.models import Departement from app.scodoc import sco_cache -from app import log from app.scodoc.sco_exceptions import ScoValueError, ScoException from app.scodoc.TrivialFormulator import TrivialFormulator import app.scodoc.notesdb as ndb @@ -272,7 +272,7 @@ class BasePreferences(object): ) def __init__(self, dept_id: int): - dept = Departement.query.get(dept_id) + dept = db.session.get(Departement, dept_id) if not dept: raise ScoValueError(f"BasePreferences: Invalid departement: {dept_id}") self.dept_id = dept.id diff --git a/app/scodoc/sco_pv_dict.py b/app/scodoc/sco_pv_dict.py index c48aa5f0..f9861f54 100644 --- a/app/scodoc/sco_pv_dict.py +++ b/app/scodoc/sco_pv_dict.py @@ -30,7 +30,7 @@ """ from operator import itemgetter -from app import log +from app import db from app.comp import res_sem from app.comp.res_compat import NotesTableCompat from app.models import ( @@ -253,7 +253,7 @@ def _comp_ects_by_ue_code(nt, decisions_ue): ects_by_ue_code = {} for ue_id in decisions_ue: d = decisions_ue[ue_id] - ue = UniteEns.query.get(ue_id) + ue = db.session.get(UniteEns, ue_id) ects_by_ue_code[ue.ue_code] = d["ects"] return ects_by_ue_code diff --git a/app/scodoc/sco_pv_lettres_inviduelles.py b/app/scodoc/sco_pv_lettres_inviduelles.py index 997645ca..747a0da7 100644 --- a/app/scodoc/sco_pv_lettres_inviduelles.py +++ b/app/scodoc/sco_pv_lettres_inviduelles.py @@ -42,6 +42,7 @@ from reportlab.platypus import PageBreak, Table, Image from reportlab.platypus.doctemplate import BaseDocTemplate from reportlab.lib import styles +from app import db from app.models import FormSemestre, Identite import app.scodoc.sco_utils as scu @@ -70,7 +71,7 @@ def pdf_lettres_individuelles( if not dpv: return "" # - formsemestre: FormSemestre = FormSemestre.query.get(formsemestre_id) + formsemestre: FormSemestre = db.session.get(FormSemestre, formsemestre_id) prefs = sco_preferences.SemPreferences(formsemestre_id) params = { "date_jury": date_jury, diff --git a/app/scodoc/sco_report_but.py b/app/scodoc/sco_report_but.py index 1aad34d5..5cfaa99e 100644 --- a/app/scodoc/sco_report_but.py +++ b/app/scodoc/sco_report_but.py @@ -33,11 +33,9 @@ from collections import defaultdict from flask import request +from app import db from app.but import jury_but -from app.comp import res_sem -from app.comp.res_compat import NotesTableCompat from app.models import FormSemestre -from app.models.etudiants import Identite from app.models.formsemestre import FormSemestreInscription import app.scodoc.sco_utils as scu @@ -170,7 +168,7 @@ def but_indicateurs_by_bac(formsemestre: FormSemestre) -> dict[str:dict]: if deca and deca.formsemestre_impair } for formsemestre_id_precedent in formsemestre_id_precedents: - formsemestre_impair = FormSemestre.query.get(formsemestre_id_precedent) + formsemestre_impair = db.session.get(FormSemestre, formsemestre_id_precedent) suffix = ( f"S{formsemestre_impair.semestre_id}" if len(formsemestre_id_precedents) == 1 diff --git a/app/scodoc/sco_saisie_notes.py b/app/scodoc/sco_saisie_notes.py index 6e9084d0..4838745c 100644 --- a/app/scodoc/sco_saisie_notes.py +++ b/app/scodoc/sco_saisie_notes.py @@ -36,7 +36,7 @@ import flask from flask import g, url_for, request from flask_login import current_user -from app import log +from app import db, log from app.auth.models import User from app.comp import res_sem from app.comp.res_compat import NotesTableCompat @@ -878,7 +878,7 @@ def saisie_notes_tableur(evaluation_id, group_ids=()): def feuille_saisie_notes(evaluation_id, group_ids=[]): """Document Excel pour saisie notes dans l'évaluation et les groupes indiqués""" - evaluation: Evaluation = Evaluation.query.get(evaluation_id) + evaluation: Evaluation = db.session.get(Evaluation, evaluation_id) if not evaluation: raise ScoValueError("invalid evaluation_id") modimpl = evaluation.moduleimpl @@ -958,7 +958,7 @@ def saisie_notes(evaluation_id: int, group_ids: list = None): if not isinstance(evaluation_id, int): raise ScoInvalidParamError() group_ids = [int(group_id) for group_id in (group_ids or [])] - evaluation: Evaluation = Evaluation.query.get(evaluation_id) + evaluation: Evaluation = db.session.get(Evaluation, evaluation_id) if evaluation is None: raise ScoValueError("évaluation inexistante") modimpl = evaluation.moduleimpl diff --git a/app/scodoc/sco_semset.py b/app/scodoc/sco_semset.py index 251d0468..49ec35e0 100644 --- a/app/scodoc/sco_semset.py +++ b/app/scodoc/sco_semset.py @@ -42,7 +42,7 @@ sem_set_list() import flask from flask import g, url_for -from app import log +from app import db, log from app.comp import res_sem from app.comp.res_compat import NotesTableCompat from app.models import FormSemestre @@ -127,7 +127,7 @@ class SemSet(dict): self.sems = [] self.formsemestres = [] for formsemestre_id in self.formsemestre_ids: - formsemestre: FormSemestre = FormSemestre.query.get(formsemestre_id) + formsemestre: FormSemestre = db.session.get(FormSemestre, formsemestre_id) self.formsemestres.append(formsemestre) sem = sco_formsemestre.get_formsemestre(formsemestre_id) self.sems.append(sem) diff --git a/app/scodoc/sco_ue_external.py b/app/scodoc/sco_ue_external.py index 55d2e289..22471d3c 100644 --- a/app/scodoc/sco_ue_external.py +++ b/app/scodoc/sco_ue_external.py @@ -58,9 +58,8 @@ from flask import flash, g, request, url_for from flask_login import current_user from app.models.formsemestre import FormSemestre -import app.scodoc.notesdb as ndb -import app.scodoc.sco_utils as scu -from app import log + +from app import db, log from app.models import UniteEns from app.scodoc import html_sco_header from app.scodoc import codes_cursus @@ -74,6 +73,8 @@ from app.scodoc import sco_etud from app.scodoc.sco_exceptions import AccessDenied, ScoValueError from app.scodoc.sco_permissions import Permission from app.scodoc.TrivialFormulator import TrivialFormulator, tf_error_message +import app.scodoc.notesdb as ndb +import app.scodoc.sco_utils as scu def external_ue_create( @@ -114,7 +115,7 @@ def external_ue_create( "is_external": True, }, ) - ue = UniteEns.query.get(ue_id) + ue = db.session.get(UniteEns, ue_id) flash(f"UE créée (code {ue.ue_code})") matiere_id = sco_edit_matiere.do_matiere_create( {"ue_id": ue_id, "titre": titre or acronyme, "numero": 1} diff --git a/app/tables/recap.py b/app/tables/recap.py index 09aae918..30bc3d96 100644 --- a/app/tables/recap.py +++ b/app/tables/recap.py @@ -10,6 +10,7 @@ from flask import g, url_for import numpy as np +from app import db from app.auth.models import User from app.comp.res_common import ResultatsSemestre from app.models import Identite, FormSemestre, UniteEns @@ -802,7 +803,7 @@ class RowRecap(tb.Row): nom_resp = table.cache_nomcomplet.get(modimpl.responsable_id) if nom_resp is None: - user = User.query.get(modimpl.responsable_id) + user = db.session.get(User, modimpl.responsable_id) nom_resp = user.get_nomcomplet() if user else "" table.cache_nomcomplet[modimpl.responsable_id] = nom_resp table.foot_title_row.cells[col_id].target_attrs[ diff --git a/app/views/notes.py b/app/views/notes.py index 4ee25a90..da80388a 100644 --- a/app/views/notes.py +++ b/app/views/notes.py @@ -472,7 +472,7 @@ def ue_infos(ue_id): @scodoc7func def ue_set_internal(ue_id): """""" - ue = models.UniteEns.query.get(ue_id) + ue = db.session.get(UniteEns, ue_id) if not ue: raise ScoValueError("invalid ue_id") ue.is_external = False @@ -927,7 +927,7 @@ def edit_enseignants_form(moduleimpl_id): % uid2display.get(M["responsable_id"], M["responsable_id"]) ] for ens in M["ens"]: - u = User.query.get(ens["ens_id"]) + u = db.session.get(User, ens["ens_id"]) if u: nom = u.get_nomcomplet() else: @@ -1823,7 +1823,7 @@ def evaluation_edit(evaluation_id): @scodoc7func def evaluation_create(moduleimpl_id): "form create evaluation" - modimpl = ModuleImpl.query.get(moduleimpl_id) + modimpl = db.session.get(ModuleImpl, moduleimpl_id) if modimpl is None: raise ScoValueError("Ce module n'existe pas ou plus !") return sco_evaluation_edit.evaluation_create_form( diff --git a/app/views/pn_modules.py b/app/views/pn_modules.py index e18e707e..b3d30284 100644 --- a/app/views/pn_modules.py +++ b/app/views/pn_modules.py @@ -164,10 +164,10 @@ def set_module_ue_coef(): coef = float(request.form["coef"].replace(",", ".")) except ValueError: return scu.json_error(404, "invalid coef") - module: Module = models.Module.query.get(module_id) + module: Module = db.session.get(Module, module_id) if module is None: return scu.json_error(404, f"module not found ({module_id})") - ue = models.UniteEns.query.get(ue_id) + ue = db.session.get(models.UniteEns, ue_id) if not ue: return scu.json_error(404, f"UE not found ({ue_id})") module.set_ue_coef(ue, coef) diff --git a/app/views/refcomp.py b/app/views/refcomp.py index 83f6645f..83096888 100644 --- a/app/views/refcomp.py +++ b/app/views/refcomp.py @@ -7,17 +7,15 @@ from pathlib import Path import re from flask import flash, url_for -from flask import Markup from flask import current_app, g, request from flask.templating import render_template from flask_json import as_json from flask_login import current_user +from markupsafe import Markup from werkzeug.utils import redirect from werkzeug.utils import secure_filename -from app import db -from app import log - +from app import db, log from app.decorators import scodoc, permission_required from app.models import Formation from app.models.but_refcomp import ApcReferentielCompetences @@ -148,7 +146,8 @@ def refcomp_assoc_formation(formation_id: int): if form.validate_on_submit(): referentiel_competence_id = form.referentiel_competence.data assert ( - ApcReferentielCompetences.query.get(referentiel_competence_id) is not None + db.session.get(ApcReferentielCompetences, referentiel_competence_id) + is not None ) formation.referentiel_competence_id = referentiel_competence_id db.session.add(formation) diff --git a/app/views/scodoc.py b/app/views/scodoc.py index 02369be6..c4c12475 100644 --- a/app/views/scodoc.py +++ b/app/views/scodoc.py @@ -248,7 +248,7 @@ def get_etud_dept(): for etud in etuds: inscriptions = FormSemestreInscription.query.filter_by(etudid=etud.id).all() for ins in inscriptions: - date_fin = FormSemestre.query.get(ins.formsemestre_id).date_fin + date_fin = db.session.get(FormSemestre, ins.formsemestre_id).date_fin if (last_date is None) or date_fin > last_date: last_date = date_fin last_etud = etud diff --git a/app/views/scolar.py b/app/views/scolar.py index 19ec1c7d..b8f10323 100644 --- a/app/views/scolar.py +++ b/app/views/scolar.py @@ -1744,7 +1744,7 @@ def _etudident_create_or_edit_form(edit): etudid = etud["etudid"] else: # modif d'un etudiant - etud_o = Identite.query.get(tf[2]["etudid"]) + etud_o = db.session.get(Identite, tf[2]["etudid"]) etud_o.from_dict(tf[2]) db.session.add(etud_o) admission = etud_o.admission.first() diff --git a/scodoc.py b/scodoc.py index 2fd0f9a2..f541cce6 100755 --- a/scodoc.py +++ b/scodoc.py @@ -525,7 +525,7 @@ def photos_import_files(formsemestre_id: int, xlsfile: str, zipfile: str): from app.scodoc import sco_trombino, sco_photos from app.auth.models import get_super_admin - formsemestre = FormSemestre.query.get(formsemestre_id) + formsemestre = db.session.get(FormSemestre, formsemestre_id) if not formsemestre: sys.stderr.write("photos-import-files: formsemestre_id invalide\n") return 2 diff --git a/tests/unit/sco_fake_gen.py b/tests/unit/sco_fake_gen.py index 8ca26fe0..93508c7b 100644 --- a/tests/unit/sco_fake_gen.py +++ b/tests/unit/sco_fake_gen.py @@ -224,7 +224,7 @@ class ScoFake(object): code_apogee=None, module_type=scu.ModuleType.STANDARD, ) -> int: - matiere = Matiere.query.get(matiere_id) + matiere = db.session.get(Matiere, matiere_id) ue_id = matiere.ue.id formation_id = matiere.ue.formation.id oid = sco_edit_module.do_module_create(locals()) diff --git a/tests/unit/setup.py b/tests/unit/setup.py index dced6a71..0930a414 100644 --- a/tests/unit/setup.py +++ b/tests/unit/setup.py @@ -2,7 +2,7 @@ Quelques fonctions d'initialisation pour tests unitaires """ -from app import models +from app import db, models import app.scodoc.sco_utils as scu from app.scodoc import codes_cursus @@ -101,11 +101,11 @@ def build_modules_with_evaluations( G, formation_id, (ue1_id, ue2_id, ue3_id), module_ids = build_formation_test( nb_mods=nb_mods ) - ue1 = models.UniteEns.query.get(ue1_id) - ue2 = models.UniteEns.query.get(ue2_id) - ue3 = models.UniteEns.query.get(ue3_id) + ue1 = db.session.get(models.UniteEns, ue1_id) + ue2 = db.session.get(models.UniteEns, ue2_id) + ue3 = db.session.get(models.UniteEns, ue3_id) for module_id in module_ids: - mod = models.Module.query.get(module_id) + mod = db.session.get(models.Module, module_id) # Coef du module vers les UE c1, c2, c3 = ue_coefs coefs_mod = {ue1.id: c1, ue2.id: c2, ue3.id: c3} @@ -124,7 +124,7 @@ def build_modules_with_evaluations( module_id=module_id, formsemestre_id=formsemestre_id, ) - modimpl = models.ModuleImpl.query.get(moduleimpl_id) + modimpl = db.session.get(models.ModuleImpl, moduleimpl_id) assert modimpl.formsemestre.formation.get_cursus().APC_SAE # BUT # Check ModuleImpl ues = modimpl.formsemestre.get_ues() diff --git a/tests/unit/test_abs_demijournee.py b/tests/unit/test_abs_demijournee.py index c486a984..a4783a0f 100644 --- a/tests/unit/test_abs_demijournee.py +++ b/tests/unit/test_abs_demijournee.py @@ -9,6 +9,7 @@ Créer et justifier des absences en utilisant le parametre demijournee import json from tests.unit import sco_fake_gen +from app import db from app.models import Module from app.scodoc import sco_abs from app.scodoc import sco_abs_views @@ -258,7 +259,7 @@ def test_abs_basic(test_client): assert len(load_liste_abs) == 2 assert load_liste_abs2[0]["ampm"] == 1 assert load_liste_abs2[0]["datedmy"] == "22/01/2021" - mod = Module.query.get(module_id) + mod = db.session.get(Module, module_id) assert load_liste_abs2[0]["exams"] == mod.code # absjust_only -> seulement les abs justifiés diff --git a/tests/unit/test_but_modules.py b/tests/unit/test_but_modules.py index b09ad783..66b818fb 100644 --- a/tests/unit/test_but_modules.py +++ b/tests/unit/test_but_modules.py @@ -4,15 +4,12 @@ et calcul moyennes modules """ import numpy as np import pandas as pd -from app.models.modules import Module -from app.models.moduleimpls import ModuleImpl from tests.unit import setup from app import db -from app import models +from app.models import Evaluation, EvaluationUEPoids, Module, ModuleImpl, UniteEns from app.comp import moy_mod from app.comp import moy_ue -from app.models import Evaluation from app.scodoc import sco_saisie_notes from app.scodoc.sco_utils import ( NOTES_ATTENTE, @@ -57,18 +54,16 @@ def test_evaluation_poids(test_client): # ue1_id=1684 # formation_id=199 # - e1 = models.Evaluation.query.get(evaluation_id) - ue1 = models.UniteEns.query.get(ue1_id) + e1 = db.session.get(Evaluation, evaluation_id) + ue1 = db.session.get(UniteEns, ue1_id) assert e1.ue_poids == [] p1 = 3.14 e1.set_ue_poids(ue1, p1) db.session.commit() assert e1.get_ue_poids_dict()[ue1_id] == p1 - ues = models.UniteEns.query.filter_by( - formation_id=formation_id, semestre_idx=2 - ).all() + ues = UniteEns.query.filter_by(formation_id=formation_id, semestre_idx=2).all() poids = [1.0, 2.0, 3.0] - for (ue, p) in zip(ues, poids): + for ue, p in zip(ues, poids): e1.set_ue_poids(ue, p) assert len(e1.ue_poids) == len(ues) assert e1.get_ue_poids_dict()[ues[1].id] == poids[1] @@ -85,15 +80,15 @@ def test_evaluation_poids(test_client): # Delete eval db.session.delete(e1) db.session.commit() - assert len(models.EvaluationUEPoids.query.all()) == 0 + assert len(EvaluationUEPoids.query.all()) == 0 def test_modules_coefs(test_client): """Coefs vers les UE (BUT)""" G, formation_id, (ue1_id, ue2_id, ue3_id), module_ids = setup.build_formation_test() - ue1 = models.UniteEns.query.get(ue1_id) - ue2 = models.UniteEns.query.get(ue2_id) - mod = models.Module.query.get(module_ids[0]) + ue1 = db.session.get(UniteEns, ue1_id) + ue2 = db.session.get(UniteEns, ue2_id) + mod = db.session.get(Module, module_ids[0]) coef = 2.5 mod.set_ue_coef(ue1, coef) db.session.commit() @@ -127,7 +122,7 @@ def test_module_conformity(test_client): nb_mods = 1 # 1 seul module nb_evals = 1 # 1 seule evaluation pour l'instant p1, p2, p3 = 1.0, 2.0, 0.0 # poids de l'éval vers les UE 1, 2 et 3 - evaluation = models.Evaluation.query.get(evaluation_ids[0]) + evaluation = db.session.get(Evaluation, evaluation_ids[0]) evaluation.set_ue_poids_dict({ue1.id: p1, ue2.id: p2, ue3.id: p3}) assert evaluation.get_ue_poids_dict() == {ue1.id: p1, ue2.id: p2, ue3.id: p3} # On n'est pas conforme car p3 est nul alors que c3 est non nul @@ -219,7 +214,7 @@ def test_module_moy(test_client): etud = G.create_etud(nom="test") G.inscrit_etudiant(formsemestre_id, etud) etudid = etud["etudid"] - evaluation1 = models.Evaluation.query.get(evaluation1_ids[0]) + evaluation1 = db.session.get(Evaluation, evaluation1_ids[0]) # Crée une deuxième évaluation dans le même moduleimpl: evaluation2_id = G.create_evaluation( moduleimpl_id=evaluation1.moduleimpl_id, @@ -227,7 +222,7 @@ def test_module_moy(test_client): description="evaluation 2", coefficient=coef_e2, )["evaluation_id"] - evaluation2 = models.Evaluation.query.get(evaluation2_id) + evaluation2 = db.session.get(Evaluation, evaluation2_id) # Coefficients de l'eval 1 evaluation1.coefficient = coef_e1 # Poids des évaluations: @@ -237,10 +232,11 @@ def test_module_moy(test_client): evaluation2.set_ue_poids_dict({ue1.id: e2p1, ue2.id: e2p2, ue3.id: e2p3}) # Vérifications moduleimpl_id = evaluation1.moduleimpl_id - nb_evals = models.Evaluation.query.filter_by(moduleimpl_id=moduleimpl_id).count() + nb_evals = Evaluation.query.filter_by(moduleimpl_id=moduleimpl_id).count() assert nb_evals == 2 nb_ues = 3 - modimpl = ModuleImpl.query.get(moduleimpl_id) + modimpl = db.session.get(ModuleImpl, moduleimpl_id) + # --- Change les notes et recalcule les moyennes du module # (rappel: on a deux évaluations: evaluation1, evaluation2, et un seul étudiant) def change_notes(n1, n2): diff --git a/tests/unit/test_but_ues.py b/tests/unit/test_but_ues.py index ae850b53..ee66bcde 100644 --- a/tests/unit/test_but_ues.py +++ b/tests/unit/test_but_ues.py @@ -30,8 +30,8 @@ def test_ue_moy(test_client): ) = setup.build_modules_with_evaluations(ue_coefs=ue_coefs, nb_mods=nb_mods) assert len(evaluation_ids) == nb_mods formsemestre = FormSemestre.get_formsemestre(formsemestre_id) - evaluation1 = Evaluation.query.get(evaluation_ids[0]) - evaluation2 = Evaluation.query.get(evaluation_ids[1]) + evaluation1 = db.session.get(Evaluation, evaluation_ids[0]) + evaluation2 = db.session.get(Evaluation, evaluation_ids[1]) etud = G.create_etud(nom="test") G.inscrit_etudiant(formsemestre_id, etud) etudid = etud["etudid"] diff --git a/tests/unit/test_formations.py b/tests/unit/test_formations.py index d521a009..f4ed7536 100644 --- a/tests/unit/test_formations.py +++ b/tests/unit/test_formations.py @@ -47,6 +47,7 @@ import os import pytest +from app import db from app.models import Formation, ModuleImpl from app.scodoc import sco_edit_formation, sco_formsemestre from app.scodoc import sco_edit_matiere @@ -72,7 +73,7 @@ def test_formations(test_client): acronyme="F1", titre="Formation 1", titre_officiel="Titre officiel 1" ) # --- Objet Formation - formation = Formation.query.get(formation_id) + formation = db.session.get(Formation, formation_id) assert isinstance(formation, Formation) assert formation.acronyme == "F1" assert formation.titre == "Formation 1" @@ -128,7 +129,7 @@ def test_formations(test_client): ) formation_id2 = G.create_formation(acronyme="", titre="Formation test") - assert Formation.query.get(formation_id2) + assert db.session.get(Formation, formation_id2) ue3 = G.create_ue(formation_id=formation_id2, acronyme="TST3", titre="ue test3") matiere_id4 = G.create_matiere(ue_id=ue3, titre="matière test3") module_id3 = G.create_module( @@ -291,7 +292,7 @@ def test_formations(test_client): li_module = sco_edit_module.module_list() assert len(li_module) == 4 # Suppression impossible car utilisé dans le semestre formsemestre_idt: - module3 = ModuleImpl.query.get(mi3).module + module3 = db.session.get(ModuleImpl, mi3).module with pytest.raises(sco_exceptions.ScoNonEmptyFormationObject): sco_edit_module.module_delete(module_id=module3.id) @@ -328,7 +329,7 @@ def test_formations(test_client): # --- Suppression d'une formation sco_edit_formation.do_formation_delete(formation_id=formation_id2) - formation = Formation.query.get(formation_id2) + formation = db.session.get(Formation, formation_id2) assert formation is None diff --git a/tests/unit/test_notes_rattrapage.py b/tests/unit/test_notes_rattrapage.py index b4653009..85382492 100644 --- a/tests/unit/test_notes_rattrapage.py +++ b/tests/unit/test_notes_rattrapage.py @@ -2,7 +2,7 @@ """ import app - +from app import db from app.comp import res_sem from app.comp.res_but import ResultatsSemestreBUT from app.models import FormSemestre, ModuleImpl @@ -75,10 +75,10 @@ def test_notes_rattrapage(test_client): _, _, _ = G.create_note(evaluation_id=e_rat["id"], etudid=etud["etudid"], note=11.0) # --- Vérifications internes structures ScoDoc - formsemestre = FormSemestre.query.get(formsemestre_id) + formsemestre = db.session.get(FormSemestre, formsemestre_id) res: ResultatsSemestreBUT = res_sem.load_formsemestre_results(formsemestre) mod_res = res.modimpls_results[moduleimpl_id] - moduleimpl = ModuleImpl.query.get(moduleimpl_id) + moduleimpl = db.session.get(ModuleImpl, moduleimpl_id) # retrouve l'éval. de rattrapage: eval_rat = mod_res.get_evaluation_rattrapage(moduleimpl) assert eval_rat.id == e_rat["id"] diff --git a/tests/unit/test_refcomp.py b/tests/unit/test_refcomp.py index 72e61f2e..993cb546 100644 --- a/tests/unit/test_refcomp.py +++ b/tests/unit/test_refcomp.py @@ -42,8 +42,9 @@ def test_but_refcomp(test_client): assert ref_comp.competences.count() == 13 assert ref_comp.competences[0].situations.count() == 3 assert ref_comp.competences[0].situations[0].libelle.startswith("Conception ") + competences = ref_comp.competences.all() assert ( - ref_comp.competences[-1].situations[-1].libelle + competences[-1].situations.all()[-1].libelle == "Administration des services multimédia" ) # test cascades on delete @@ -58,13 +59,13 @@ def test_but_assoc_ue_parcours(test_client): dept_id = models.Departement.query.first().id G, formation_id, (ue1_id, ue2_id, ue3_id), module_ids = setup.build_formation_test() ref_comp: ApcReferentielCompetences = orebut_import_refcomp(REF_RT_XML, dept_id) - ue = UniteEns.query.get(ue1_id) + ue = db.session.get(UniteEns, ue1_id) assert ue.niveau_competence is None niveau = ApcNiveau.query.first() ue.niveau_competence = niveau db.session.add(ue) db.session.commit() - ue = UniteEns.query.get(ue1_id) + ue = db.session.get(UniteEns, ue1_id) assert ue.niveau_competence == niveau assert len(niveau.ues) == 1 assert niveau.ues[0] == ue @@ -74,13 +75,13 @@ def test_but_assoc_refcomp(test_client): """Association formation / référentiel de compétences""" dept_id = models.Departement.query.first().id G, formation_id, (ue1_id, ue2_id, ue3_id), module_ids = setup.build_formation_test() - formation: Formation = Formation.query.get(formation_id) + formation: Formation = db.session.get(Formation, formation_id) assert formation is not None ref_comp: ApcReferentielCompetences = orebut_import_refcomp(REF_RT_XML, dept_id) formation.referentiel_competence_id = ref_comp.id db.session.add(formation) db.session.commit() - ue = UniteEns.query.get(ue1_id) + ue = db.session.get(UniteEns, ue1_id) niveau = ( ApcNiveau.query.filter_by(annee="BUT1") .join(ApcCompetence) diff --git a/tests/unit/yaml_setup.py b/tests/unit/yaml_setup.py index 277728e4..bc51849d 100644 --- a/tests/unit/yaml_setup.py +++ b/tests/unit/yaml_setup.py @@ -87,7 +87,7 @@ def setup_formation(formation_infos: dict) -> Formation: # --- Création de la formation formation_id, _, _ = sco_formations.formation_import_xml(doc) - formation: Formation = Formation.query.get(formation_id) + formation: Formation = db.session.get(Formation, formation_id) assert formation return formation @@ -116,11 +116,11 @@ def create_formsemestre( elt_sem_apo=elt_sem_apo, elt_annee_apo=elt_annee_apo, ) + db.session.add(formsemestre) + db.session.flush() # set responsable (list) a_user = User.query.first() formsemestre.responsables = [a_user] - db.session.add(formsemestre) - db.session.flush() formsemestre.add_etape(etape_apo) # Ajoute tous les modules du semestre sans parcours OU avec l'un des parcours indiqués sem_parcours_ids = {p.id for p in parcours} diff --git a/tools/fakedatabase/create_test_api_database.py b/tools/fakedatabase/create_test_api_database.py index 401f3309..142f732f 100644 --- a/tools/fakedatabase/create_test_api_database.py +++ b/tools/fakedatabase/create_test_api_database.py @@ -66,7 +66,7 @@ def import_formation(dept_id: int) -> Formation: doc = f.read() # --- Création de la formation (import programme) f = sco_formations.formation_import_xml(doc) - formation = Formation.query.get(f[0]) + formation = db.session.get(Formation, f[0]) # --- Association ref. comp. with open(REFCOMP_FILENAME, encoding="utf-8") as f: xml_data = f.read()