From 74401da85368e0b9c3fb0b4b8996ab60e39e8acd Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Tue, 6 Aug 2024 23:18:17 +0200 Subject: [PATCH] remove all Model.query.get() [tests not OK] WIP --- app/api/justificatifs.py | 2 +- app/but/change_refcomp.py | 9 ++++++--- app/comp/moy_ue.py | 2 +- app/models/assiduites.py | 6 +++--- app/scodoc/sco_formsemestre_inscriptions.py | 2 +- app/scodoc/sco_inscr_passage.py | 2 +- app/scodoc/sco_pv_dict.py | 2 +- app/scodoc/sco_saisie_notes.py | 10 ++++++---- app/scodoc/sco_ue_external.py | 4 ++-- app/tables/liste_assiduites.py | 6 ++++-- app/views/assiduites.py | 11 +++++++---- app/views/scolar.py | 14 +++++--------- app/views/user_board.py | 5 +++-- tests/unit/test_sco_basic.py | 2 +- 14 files changed, 42 insertions(+), 35 deletions(-) diff --git a/app/api/justificatifs.py b/app/api/justificatifs.py index d9e66a527..e5bdab494 100644 --- a/app/api/justificatifs.py +++ b/app/api/justificatifs.py @@ -195,7 +195,7 @@ def justificatifs_dept(dept_id: int = None, with_query: bool = False): """ # Récupération du département et des étudiants du département - dept: Departement = Departement.query.get(dept_id) + dept: Departement = db.session.get(Departement, dept_id) if dept is None: return json_error(404, "Assiduité non existante") etuds: list[int] = [etud.id for etud in dept.etudiants] diff --git a/app/but/change_refcomp.py b/app/but/change_refcomp.py index dc91d717b..4f4a8e23f 100644 --- a/app/but/change_refcomp.py +++ b/app/but/change_refcomp.py @@ -44,7 +44,9 @@ def formation_change_referentiel( ue.niveau_competence_id = niveaux_map[ue.niveau_competence_id] db.session.add(ue) if ue.parcours: - new_list = [ApcParcours.query.get(parcours_map[p.id]) for p in ue.parcours] + new_list = [ + db.session.get(ApcParcours, parcours_map[p.id]) for p in ue.parcours + ] ue.parcours.clear() ue.parcours.extend(new_list) db.session.add(ue) @@ -52,7 +54,7 @@ def formation_change_referentiel( for module in formation.modules: if module.parcours: new_list = [ - ApcParcours.query.get(parcours_map[p.id]) for p in module.parcours + db.session.get(ApcParcours, parcours_map[p.id]) for p in module.parcours ] module.parcours.clear() module.parcours.extend(new_list) @@ -76,7 +78,8 @@ def formation_change_referentiel( # FormSemestre / parcours_formsemestre for formsemestre in formation.formsemestres: new_list = [ - ApcParcours.query.get(parcours_map[p.id]) for p in formsemestre.parcours + db.session.get(ApcParcours, parcours_map[p.id]) + for p in formsemestre.parcours ] formsemestre.parcours.clear() formsemestre.parcours.extend(new_list) diff --git a/app/comp/moy_ue.py b/app/comp/moy_ue.py index 5e88f29e3..824f01e8d 100644 --- a/app/comp/moy_ue.py +++ b/app/comp/moy_ue.py @@ -178,7 +178,7 @@ def notes_sem_assemble_cube(modimpls_notes: list[pd.DataFrame]) -> np.ndarray: except ValueError: app.critical_error( f"""notes_sem_assemble_cube: shapes { - ", ".join([x.shape for x in modimpls_notes_arr])}""" + ", ".join([str(x.shape) for x in modimpls_notes_arr])}""" ) return modimpls_notes.swapaxes(0, 1) diff --git a/app/models/assiduites.py b/app/models/assiduites.py index 679a770c3..7104c86ad 100644 --- a/app/models/assiduites.py +++ b/app/models/assiduites.py @@ -297,7 +297,7 @@ class Assiduite(ScoDocModel): moduleimpl_id = int(moduleimpl_id) except ValueError as exc: raise ScoValueError("Module non reconnu") from exc - moduleimpl: ModuleImpl = ModuleImpl.query.get(moduleimpl_id) + moduleimpl: ModuleImpl = db.session.get(ModuleImpl, moduleimpl_id) # ici moduleimpl est None si non spécifié @@ -352,8 +352,8 @@ class Assiduite(ScoDocModel): """ if self.moduleimpl_id is not None: - modimpl: ModuleImpl = ModuleImpl.query.get(self.moduleimpl_id) - mod: Module = Module.query.get(modimpl.module_id) + modimpl: ModuleImpl = db.session.get(ModuleImpl, self.moduleimpl_id) + mod: Module = db.session.get(Module, modimpl.module_id) if traduire: return f"{mod.code} {mod.titre}" return mod diff --git a/app/scodoc/sco_formsemestre_inscriptions.py b/app/scodoc/sco_formsemestre_inscriptions.py index 1cae54727..0c4330362 100644 --- a/app/scodoc/sco_formsemestre_inscriptions.py +++ b/app/scodoc/sco_formsemestre_inscriptions.py @@ -196,7 +196,7 @@ def check_if_has_decision_jury( nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre) for etudid in etudids: if nt.etud_has_decision(etudid): - etud = Identite.query.get(etudid) + etud = db.session.get(Identite, etudid) raise ScoValueError( f"""désinscription impossible: l'étudiant {etud.nomprenom} a une décision de jury (la supprimer avant si nécessaire)""" diff --git a/app/scodoc/sco_inscr_passage.py b/app/scodoc/sco_inscr_passage.py index 968c85d6c..79864a63e 100644 --- a/app/scodoc/sco_inscr_passage.py +++ b/app/scodoc/sco_inscr_passage.py @@ -377,7 +377,7 @@ def formsemestre_inscr_passage( if a_desinscrire: H.append("

Étudiants à désinscrire

    ") a_desinscrire_ident = sorted( - (Identite.query.get(eid) for eid in a_desinscrire), + (db.session.get(Identite, eid) for eid in a_desinscrire), key=lambda x: x.sort_key, ) for etud in a_desinscrire_ident: diff --git a/app/scodoc/sco_pv_dict.py b/app/scodoc/sco_pv_dict.py index fa8429244..b62dd11a5 100644 --- a/app/scodoc/sco_pv_dict.py +++ b/app/scodoc/sco_pv_dict.py @@ -292,7 +292,7 @@ def _descr_decisions_ues(nt, etudid, decisions_ue, decision_sem) -> list[dict]: ) ) ): - ue = UniteEns.query.get(ue_id) + ue = db.session.get(UniteEns, ue_id) assert ue # note modernisation code: on utilise des dict tant que get_etud_ue_status renvoie des dicts uelist.append(ue.to_dict()) diff --git a/app/scodoc/sco_saisie_notes.py b/app/scodoc/sco_saisie_notes.py index cad79c3fc..5be683967 100644 --- a/app/scodoc/sco_saisie_notes.py +++ b/app/scodoc/sco_saisie_notes.py @@ -408,7 +408,7 @@ def _check_inscription( elif etudid not in etudids_inscrits_mod: msg_err = "non inscrit au module" if msg_err: - etud = Identite.query.get(etudid) if isinstance(etudid, int) else None + etud = db.session.get(Identite, etudid) if isinstance(etudid, int) else None msg = f"étudiant {etud.nomprenom if etud else etudid} {msg_err}" log(f"notes_add: {etudid} {msg}: aborting") raise NoteProcessError(msg) @@ -454,7 +454,7 @@ def notes_add( if (value is not None) and not isinstance(value, float): log(f"notes_add: {etudid} valeur de note invalide ({value}): aborting") - etud = Identite.query.get(etudid) if isinstance(etudid, int) else None + etud = db.session.get(Identite, etudid) if isinstance(etudid, int) else None raise NoteProcessError( f"etudiant {etud.nomprenom if etud else etudid}: valeur de note invalide ({value})" ) @@ -491,7 +491,9 @@ def notes_add( # si change sur DEM/DEF ajoute message warning aux messages if etudid not in etudids_actifs: # DEM ou DEF etud = ( - Identite.query.get(etudid) if isinstance(etudid, int) else None + db.session.get(Identite, etudid) + if isinstance(etudid, int) + else None ) messages.append( f"""étudiant {etud.nomprenom if etud else etudid @@ -802,7 +804,7 @@ def get_sorted_etuds_notes( notes_db[etudid]["value"], fixed_precision_str=False ) user = ( - User.query.get(notes_db[etudid]["uid"]) + db.session.get(User, notes_db[etudid]["uid"]) if notes_db[etudid]["uid"] else None ) diff --git a/app/scodoc/sco_ue_external.py b/app/scodoc/sco_ue_external.py index 34bcff770..2ad5b53ae 100644 --- a/app/scodoc/sco_ue_external.py +++ b/app/scodoc/sco_ue_external.py @@ -144,7 +144,7 @@ def external_ue_create( ), }, ) - modimpl = ModuleImpl.query.get(moduleimpl_id) + modimpl = db.session.get(ModuleImpl, moduleimpl_id) assert modimpl return modimpl @@ -206,7 +206,7 @@ def get_external_moduleimpl(formsemestre_id: int, ue_id: int) -> ModuleImpl: ) if r: modimpl_id = r[0]["moduleimpl_id"] - modimpl = ModuleImpl.query.get(modimpl_id) + modimpl = db.session.get(ModuleImpl, modimpl_id) assert modimpl return modimpl else: diff --git a/app/tables/liste_assiduites.py b/app/tables/liste_assiduites.py index ea808c53f..1051a0fb0 100644 --- a/app/tables/liste_assiduites.py +++ b/app/tables/liste_assiduites.py @@ -553,7 +553,7 @@ class RowAssiJusti(tb.Row): ) if self.table.options.show_module: if self.ligne["type"] == "assiduite": - assi: Assiduite = Assiduite.query.get(self.ligne["obj_id"]) + assi: Assiduite = db.session.get(Assiduite, self.ligne["obj_id"]) # Gestion des colonnes concernant le module mod: Module = assi.get_module(False) code = mod.code if isinstance(mod, Module) else "" @@ -607,7 +607,9 @@ class RowAssiJusti(tb.Row): def _utilisateur(self) -> None: utilisateur: User = ( - User.query.get(self.ligne["user_id"]) if self.ligne["user_id"] else None + db.session.get(User, self.ligne["user_id"]) + if self.ligne["user_id"] is not None + else None ) self.add_cell( diff --git a/app/views/assiduites.py b/app/views/assiduites.py index 10e092cba..058156a2b 100644 --- a/app/views/assiduites.py +++ b/app/views/assiduites.py @@ -24,6 +24,9 @@ # ############################################################################## +"""Vues assiduité +""" + import datetime import json import re @@ -508,7 +511,7 @@ def _record_assiduite_etud( case None: moduleimpl = None case _: - moduleimpl = ModuleImpl.query.get(moduleimpl_id) + moduleimpl = db.session.get(ModuleImpl, moduleimpl_id) try: assi_etat: scu.EtatAssiduite = scu.EtatAssiduite.get(form.assi_etat.data) @@ -1678,7 +1681,7 @@ def _preparer_objet( if not sans_gros_objet: justificatifs: list[int] = get_assiduites_justif(objet.assiduite_id, False) for justi_id in justificatifs: - justi: Justificatif = Justificatif.query.get(justi_id) + justi: Justificatif = db.session.get(Justificatif, justi_id) objet_prepare["justification"]["justificatifs"].append( _preparer_objet("justificatif", justi, sans_gros_objet=True) ) @@ -1717,7 +1720,7 @@ def _preparer_objet( objet_prepare["etud_nom"] = objet.etudiant.nomprenom if objet.user_id is not None: - user: User = User.query.get(objet.user_id) + user: User = db.session.get(User, objet.user_id) objet_prepare["saisie_par"] = user.get_nomprenom() else: objet_prepare["saisie_par"] = "Inconnu" @@ -2925,7 +2928,7 @@ def _module_selector_multiple( ) choices = OrderedDict() for formsemestre_id in modimpls_by_formsemestre: - formsemestre: FormSemestre = FormSemestre.query.get(formsemestre_id) + formsemestre: FormSemestre = db.session.get(FormSemestre, formsemestre_id) if only_form is not None and formsemestre != only_form: continue # indique le nom du semestre dans le menu (optgroup) diff --git a/app/views/scolar.py b/app/views/scolar.py index 27a1451cc..a681b8e1d 100644 --- a/app/views/scolar.py +++ b/app/views/scolar.py @@ -2112,7 +2112,7 @@ def check_group_apogee(group_id, etat=None, fix=False, fixmail=False): def export_etudiants_courants(): """Table export de tous les étudiants des formsemestres en cours.""" fmt = request.args.get("fmt", "html") - departement = Departement.query.get(g.scodoc_dept_id) + departement = db.session.get(Departement, g.scodoc_dept_id) if not departement: raise ScoValueError("département invalide") formsemestres = FormSemestre.get_dept_formsemestres_courants(departement).all() @@ -2462,7 +2462,7 @@ def formsemestre_import_etud_admission( Si tous_courants, le fait pour tous les formsemestres courants du département """ if tous_courants: - departement = Departement.query.get(g.scodoc_dept_id) + departement = db.session.get(Departement, g.scodoc_dept_id) formsemestres = FormSemestre.get_dept_formsemestres_courants(departement) else: formsemestres = [FormSemestre.get_formsemestre(formsemestre_id)] @@ -2557,13 +2557,9 @@ def sco_dump_and_send_db(message="", request_url="", traceback_str_base64=""): try: r_msg = r.json()["message"] except (requests.exceptions.JSONDecodeError, KeyError): - r_msg = "Erreur: code " - +status_code - +' Merci de contacter ' - +scu.SCO_DEV_MAIL - +"" + r_msg = f"""Erreur: code {status_code} + Merci de contacter {scu.SCO_DEV_MAIL} + """ H = [html_sco_header.sco_header(page_title="Assistance technique")] if status_code == requests.codes.OK: # pylint: disable=no-member diff --git a/app/views/user_board.py b/app/views/user_board.py index eee48c342..fe3489e41 100644 --- a/app/views/user_board.py +++ b/app/views/user_board.py @@ -4,10 +4,10 @@ Tableau de bord utilisateur Emmanuel Viennet, 2023 """ - from flask import flash, redirect, render_template, url_for from flask import g, request from flask_login import login_required +from app import db from app.auth.models import User from app.decorators import ( scodoc, @@ -31,7 +31,8 @@ def user_board(user_name: str): modimpls_by_formsemestre, ) = FormSemestre.get_user_formsemestres_annee_by_dept(user) depts = { - dept_id: Departement.query.get(dept_id) for dept_id in formsemestres_by_dept + dept_id: db.session.get(Departement, dept_id) + for dept_id in formsemestres_by_dept } dept_names = { dept_id: sco_preferences.get_preference("DeptName", dept_id=dept_id) diff --git a/tests/unit/test_sco_basic.py b/tests/unit/test_sco_basic.py index e159391c4..f1d933fdb 100644 --- a/tests/unit/test_sco_basic.py +++ b/tests/unit/test_sco_basic.py @@ -250,7 +250,7 @@ def run_sco_basic(verbose=False, dept=None) -> FormSemestre: def _signal_absences_justificatifs(etudid: int): - etud: Identite = Identite.query.get(etudid) + etud: Identite = db.session.get(Identite, etudid) db.session.commit() for i in range(15, 18): db.session.add(