From 3a8474f12d2ad04925b9c51b8df95a967340979c Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Fri, 20 Aug 2021 01:09:55 +0200 Subject: [PATCH] refactoring (context) --- app/scodoc/notes_table.py | 16 ++- app/scodoc/sco_abs.py | 2 +- app/scodoc/sco_abs_views.py | 6 +- app/scodoc/sco_bulletins_json.py | 2 +- app/scodoc/sco_bulletins_xml.py | 2 +- app/scodoc/sco_cache.py | 2 +- app/scodoc/sco_compute_moy.py | 16 ++- app/scodoc/sco_cost_formation.py | 2 +- app/scodoc/sco_debouche.py | 1 - app/scodoc/sco_edit_formation.py | 44 ++++---- app/scodoc/sco_edit_matiere.py | 60 +++++------ app/scodoc/sco_edit_module.py | 87 ++++++++------- app/scodoc/sco_edit_ue.py | 113 +++++++++----------- app/scodoc/sco_evaluations.py | 46 ++++---- app/scodoc/sco_export_results.py | 2 +- app/scodoc/sco_find_etud.py | 2 +- app/scodoc/sco_formations.py | 44 ++++---- app/scodoc/sco_formsemestre_edit.py | 71 +++++------- app/scodoc/sco_formsemestre_exterieurs.py | 2 +- app/scodoc/sco_formsemestre_inscriptions.py | 20 ++-- app/scodoc/sco_formsemestre_status.py | 24 ++--- app/scodoc/sco_formsemestre_validation.py | 8 +- app/scodoc/sco_groups_view.py | 4 +- app/scodoc/sco_liste_notes.py | 6 +- app/scodoc/sco_moduleimpl.py | 55 ++++------ app/scodoc/sco_moduleimpl_inscriptions.py | 20 ++-- app/scodoc/sco_moduleimpl_status.py | 22 ++-- app/scodoc/sco_news.py | 2 +- app/scodoc/sco_parcours_dut.py | 2 +- app/scodoc/sco_permissions_check.py | 4 +- app/scodoc/sco_placement.py | 10 +- app/scodoc/sco_poursuite_dut.py | 1 - app/scodoc/sco_pvjury.py | 3 +- app/scodoc/sco_report.py | 1 - app/scodoc/sco_saisie_notes.py | 48 ++++----- app/scodoc/sco_tag_module.py | 11 +- app/scodoc/sco_ue_external.py | 12 +-- app/scodoc/sco_undo_notes.py | 2 +- app/scodoc/sco_users.py | 4 +- app/views/absences.py | 4 +- app/views/notes.py | 66 +++++------- scotests/test_api7doc.py | 6 +- scotests/test_bonusmalus.py | 3 +- scotests/test_formation_export_xml.py | 4 +- scotests/test_scenario2_formation.py | 2 +- scotests/test_scenario3_formation.py | 2 +- scotests/test_scenario4_formation.py | 2 +- tests/scenarios/test_scenario1_formation.py | 4 +- tests/unit/sco_fake_gen.py | 22 ++-- tests/unit/test_caches.py | 2 +- tests/unit/test_departements.py | 12 ++- tests/unit/test_export_xml.py | 2 +- tests/unit/test_formations.py | 56 +++++----- 53 files changed, 424 insertions(+), 542 deletions(-) diff --git a/app/scodoc/notes_table.py b/app/scodoc/notes_table.py index ca49fc1b79..9df33d69c0 100644 --- a/app/scodoc/notes_table.py +++ b/app/scodoc/notes_table.py @@ -107,17 +107,15 @@ def get_sem_ues_modimpls(context, formsemestre_id, modimpls=None): (utilisé quand on ne peut pas construire nt et faire nt.get_ues()) """ if modimpls is None: - modimpls = sco_moduleimpl.do_moduleimpl_list( - context, formsemestre_id=formsemestre_id - ) + modimpls = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id) uedict = {} for modimpl in modimpls: - mod = sco_edit_module.do_module_list( - context, args={"module_id": modimpl["module_id"]} - )[0] + mod = sco_edit_module.do_module_list(args={"module_id": modimpl["module_id"]})[ + 0 + ] modimpl["module"] = mod if not mod["ue_id"] in uedict: - ue = sco_edit_ue.do_ue_list(context, args={"ue_id": mod["ue_id"]})[0] + ue = sco_edit_ue.do_ue_list(args={"ue_id": mod["ue_id"]})[0] uedict[ue["ue_id"]] = ue ues = list(uedict.values()) ues.sort(key=lambda u: u["numero"]) @@ -231,14 +229,14 @@ class NotesTable(object): for modimpl in self._modimpls: mod = modimpl["module"] # has been added here by do_formsemestre_moyennes if not mod["ue_id"] in uedict: - ue = sco_edit_ue.do_ue_list(context, args={"ue_id": mod["ue_id"]})[0] + ue = sco_edit_ue.do_ue_list(args={"ue_id": mod["ue_id"]})[0] uedict[ue["ue_id"]] = ue else: ue = uedict[mod["ue_id"]] modimpl["ue"] = ue # add ue dict to moduleimpl self._matmoys[mod["matiere_id"]] = {} mat = sco_edit_matiere.do_matiere_list( - context, args={"matiere_id": mod["matiere_id"]} + args={"matiere_id": mod["matiere_id"]} )[0] modimpl["mat"] = mat # add matiere dict to moduleimpl # calcul moyennes du module et stocke dans le module diff --git a/app/scodoc/sco_abs.py b/app/scodoc/sco_abs.py index 025bc6d439..24e03cd072 100644 --- a/app/scodoc/sco_abs.py +++ b/app/scodoc/sco_abs.py @@ -1061,7 +1061,7 @@ def invalidate_abs_count_sem(sem): """Invalidate (clear) cached abs counts for all the students of this semestre""" inscriptions = ( sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits( - None, sem["formsemestre_id"] + sem["formsemestre_id"] ) ) for ins in inscriptions: diff --git a/app/scodoc/sco_abs_views.py b/app/scodoc/sco_abs_views.py index 0d7f169261..c9151e4df6 100644 --- a/app/scodoc/sco_abs_views.py +++ b/app/scodoc/sco_abs_views.py @@ -122,7 +122,7 @@ def doSignaleAbsence( J = "NON " M = "" if moduleimpl_id and moduleimpl_id != "NULL": - mod = sco_moduleimpl.do_moduleimpl_list(context, moduleimpl_id=moduleimpl_id)[0] + mod = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0] formsemestre_id = mod["formsemestre_id"] nt = sco_cache.NotesTableCache.get(formsemestre_id) ues = nt.get_ues(etudid=etudid) @@ -967,7 +967,7 @@ def _TablesAbsEtud( ex = [] for ev in a["evals"]: mod = sco_moduleimpl.do_moduleimpl_withmodule_list( - context, moduleimpl_id=ev["moduleimpl_id"] + moduleimpl_id=ev["moduleimpl_id"] )[0] if format == "html": ex.append( @@ -984,7 +984,7 @@ def _TablesAbsEtud( ex = [] for ev in a.get("absent", []): mod = sco_moduleimpl.do_moduleimpl_withmodule_list( - context, moduleimpl_id=ev["moduleimpl_id"] + moduleimpl_id=ev["moduleimpl_id"] )[0] if format == "html": ex.append( diff --git a/app/scodoc/sco_bulletins_json.py b/app/scodoc/sco_bulletins_json.py index a08ee5eb67..cc6ef78308 100644 --- a/app/scodoc/sco_bulletins_json.py +++ b/app/scodoc/sco_bulletins_json.py @@ -372,7 +372,7 @@ def formsemestre_bulletinetud_published_dict( "decisions_ue" ]: # and sco_preferences.get_preference( 'bul_show_uevalid', formsemestre_id): always publish (car utile pour export Apogee) for ue_id in decision["decisions_ue"].keys(): - ue = sco_edit_ue.do_ue_list(context, {"ue_id": ue_id})[0] + ue = sco_edit_ue.do_ue_list({"ue_id": ue_id})[0] d["decision_ue"].append( dict( ue_id=ue["ue_id"], diff --git a/app/scodoc/sco_bulletins_xml.py b/app/scodoc/sco_bulletins_xml.py index ccc77b7eb9..62fe789887 100644 --- a/app/scodoc/sco_bulletins_xml.py +++ b/app/scodoc/sco_bulletins_xml.py @@ -390,7 +390,7 @@ def make_xml_formsemestre_bulletinetud( "decisions_ue" ]: # and sco_preferences.get_preference( 'bul_show_uevalid', formsemestre_id): always publish (car utile pour export Apogee) for ue_id in decision["decisions_ue"].keys(): - ue = sco_edit_ue.do_ue_list(context, {"ue_id": ue_id})[0] + ue = sco_edit_ue.do_ue_list({"ue_id": ue_id})[0] doc.append( Element( "decision_ue", diff --git a/app/scodoc/sco_cache.py b/app/scodoc/sco_cache.py index 26891762b4..9d727c9231 100644 --- a/app/scodoc/sco_cache.py +++ b/app/scodoc/sco_cache.py @@ -264,7 +264,7 @@ def invalidate_formsemestre( # was inval_cache( context, formsemestre_id=None, else: formsemestre_ids = [ formsemestre_id - ] + sco_parcours_dut.list_formsemestre_utilisateurs_uecap(None, formsemestre_id) + ] + sco_parcours_dut.list_formsemestre_utilisateurs_uecap(formsemestre_id) log(f"----- invalidate_formsemestre: clearing {formsemestre_ids} -----") if not pdfonly: diff --git a/app/scodoc/sco_compute_moy.py b/app/scodoc/sco_compute_moy.py index 95ea762efe..f4615301b8 100644 --- a/app/scodoc/sco_compute_moy.py +++ b/app/scodoc/sco_compute_moy.py @@ -79,9 +79,7 @@ def formsemestre_expressions_use_abscounts(context, formsemestre_id): if expr and expr[0] != "#" and ab in expr: return True # 2- moyennes de modules - for mod in sco_moduleimpl.do_moduleimpl_list( - context, formsemestre_id=formsemestre_id - ): + for mod in sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id): if moduleimpl_has_expression(context, mod) and ab in mod["computation_expr"]: return True return False @@ -203,7 +201,7 @@ def do_moduleimpl_moyennes(context, nt, mod): is_malus = mod["module"]["module_type"] == scu.MODULE_MALUS sem = sco_formsemestre.get_formsemestre(mod["formsemestre_id"]) etudids = sco_moduleimpl.do_moduleimpl_listeetuds( - context, moduleimpl_id + moduleimpl_id ) # tous, y compris demissions # Inscrits au semestre (pour traiter les demissions): inssem_set = set( @@ -379,9 +377,7 @@ def do_formsemestre_moyennes(context, nt, formsemestre_id): # args={"formsemestre_id": formsemestre_id} # ) # etudids = [x["etudid"] for x in inscr] - modimpls = sco_moduleimpl.do_moduleimpl_list( - context, formsemestre_id=formsemestre_id - ) + modimpls = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id) # recupere les moyennes des etudiants de tous les modules D = {} valid_evals = [] @@ -389,9 +385,9 @@ def do_formsemestre_moyennes(context, nt, formsemestre_id): mods_att = [] expr_diags = [] for modimpl in modimpls: - mod = sco_edit_module.do_module_list( - context, args={"module_id": modimpl["module_id"]} - )[0] + mod = sco_edit_module.do_module_list(args={"module_id": modimpl["module_id"]})[ + 0 + ] modimpl["module"] = mod # add module dict to moduleimpl (used by nt) moduleimpl_id = modimpl["moduleimpl_id"] assert moduleimpl_id not in D diff --git a/app/scodoc/sco_cost_formation.py b/app/scodoc/sco_cost_formation.py index 2afac35c10..2b2dbc101f 100644 --- a/app/scodoc/sco_cost_formation.py +++ b/app/scodoc/sco_cost_formation.py @@ -60,7 +60,7 @@ def formsemestre_table_estim_cost( sem = sco_formsemestre.get_formsemestre(formsemestre_id) sco_formsemestre_status.fill_formsemestre(sem) Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list( - context, formsemestre_id=formsemestre_id + formsemestre_id=formsemestre_id ) T = [] for M in Mlist: diff --git a/app/scodoc/sco_debouche.py b/app/scodoc/sco_debouche.py index 31cbd7e792..c7c835cc05 100644 --- a/app/scodoc/sco_debouche.py +++ b/app/scodoc/sco_debouche.py @@ -64,7 +64,6 @@ def report_debouche_date(context, start_year=None, format="html", REQUEST=None): tab.caption = "Récapitulatif débouchés à partir du 1/1/%s." % start_year tab.base_url = "%s?start_year=%s" % (REQUEST.URL0, start_year) return tab.make_page( - context, title="""

Débouchés étudiants

""", init_qtip=True, javascripts=["js/etud_info.js"], diff --git a/app/scodoc/sco_edit_formation.py b/app/scodoc/sco_edit_formation.py index 44d5fdb53d..4bf04662bb 100644 --- a/app/scodoc/sco_edit_formation.py +++ b/app/scodoc/sco_edit_formation.py @@ -47,7 +47,7 @@ from app.scodoc import sco_formsemestre from app.scodoc import sco_news -def formation_delete(context, formation_id=None, dialog_confirmed=False, REQUEST=None): +def formation_delete(formation_id=None, dialog_confirmed=False, REQUEST=None): """Delete a formation""" F = sco_formations.formation_list(args={"formation_id": formation_id}) if not F: @@ -84,7 +84,7 @@ def formation_delete(context, formation_id=None, dialog_confirmed=False, REQUEST parameters={"formation_id": formation_id}, ) else: - do_formation_delete(context, F["formation_id"]) + do_formation_delete(F["formation_id"]) H.append( """

OK, formation supprimée.

continuer

""" @@ -95,18 +95,18 @@ def formation_delete(context, formation_id=None, dialog_confirmed=False, REQUEST return "\n".join(H) -def do_formation_delete(context, oid): +def do_formation_delete(oid): """delete a formation (and all its UE, matieres, modules) XXX delete all ues, will break if there are validations ! USE WITH CARE ! """ F = sco_formations.formation_list(args={"formation_id": oid})[0] - if sco_formations.formation_has_locked_sems(context, oid): + if sco_formations.formation_has_locked_sems(oid): raise ScoLockedFormError() cnx = ndb.GetDBConnexion() # delete all UE in this formation - ues = sco_edit_ue.do_ue_list(context, {"formation_id": oid}) + ues = sco_edit_ue.do_ue_list({"formation_id": oid}) for ue in ues: - sco_edit_ue.do_ue_delete(context, ue["ue_id"], force=True) + sco_edit_ue.do_ue_delete(ue["ue_id"], force=True) sco_formations._formationEditor.delete(cnx, oid) @@ -119,12 +119,12 @@ def do_formation_delete(context, oid): ) -def formation_create(context, REQUEST=None): +def formation_create(REQUEST=None): """Creation d'une formation""" - return formation_edit(context, create=True, REQUEST=REQUEST) + return formation_edit(create=True, REQUEST=REQUEST) -def formation_edit(context, formation_id=None, create=False, REQUEST=None): +def formation_edit(formation_id=None, create=False, REQUEST=None): """Edit or create a formation""" if create: H = [ @@ -147,7 +147,7 @@ def formation_edit(context, formation_id=None, create=False, REQUEST=None): if not F: raise ScoValueError("formation inexistante !") initvalues = F[0] - is_locked = sco_formations.formation_has_locked_sems(context, formation_id) + is_locked = sco_formations.formation_has_locked_sems(formation_id) submitlabel = "Modifier les valeurs" H = [ html_sco_header.sco_header(page_title="Modification d'une formation"), @@ -247,9 +247,9 @@ def formation_edit(context, formation_id=None, create=False, REQUEST=None): ) # if create: - formation_id = do_formation_create(context, tf[2]) + formation_id = do_formation_create(tf[2]) else: - do_formation_edit(context, tf[2]) + do_formation_edit(tf[2]) return flask.redirect( url_for( "notes.ue_list", scodoc_dept=g.scodoc_dept, formation_id=formation_id @@ -257,7 +257,7 @@ def formation_edit(context, formation_id=None, create=False, REQUEST=None): ) -def do_formation_create(context, args): +def do_formation_create(args): "create a formation" cnx = ndb.GetDBConnexion() # check unique acronyme/titre/version @@ -282,14 +282,14 @@ def do_formation_create(context, args): return r -def do_formation_edit(context, args): +def do_formation_edit(args): "edit a formation" # log('do_formation_edit( args=%s )'%args) # On autorise la modif de la formation meme si elle est verrouillee # car cela ne change que du cosmetique, (sauf eventuellement le code formation ?) # mais si verrouillée on ne peut changer le type de parcours - if sco_formations.formation_has_locked_sems(context, args["formation_id"]): + if sco_formations.formation_has_locked_sems(args["formation_id"]): if "type_parcours" in args: del args["type_parcours"] # On ne peut jamais supprimer le code formation: @@ -311,17 +311,15 @@ def invalidate_sems_in_formation(formation_id): ) # > formation modif. -def module_move(context, module_id, after=0, REQUEST=None, redirect=1): +def module_move(module_id, after=0, REQUEST=None, redirect=1): """Move before/after previous one (decrement/increment numero)""" - module = sco_edit_module.do_module_list(context, {"module_id": module_id})[0] + module = sco_edit_module.do_module_list({"module_id": module_id})[0] redirect = int(redirect) after = int(after) # 0: deplace avant, 1 deplace apres if after not in (0, 1): raise ValueError('invalid value for "after"') formation_id = module["formation_id"] - others = sco_edit_module.do_module_list( - context, {"matiere_id": module["matiere_id"]} - ) + others = sco_edit_module.do_module_list({"matiere_id": module["matiere_id"]}) # log('others=%s' % others) if len(others) > 1: idx = [p["module_id"] for p in others].index(module_id) @@ -350,16 +348,16 @@ def module_move(context, module_id, after=0, REQUEST=None, redirect=1): ) -def ue_move(context, ue_id, after=0, REQUEST=None, redirect=1): +def ue_move(ue_id, after=0, REQUEST=None, redirect=1): """Move UE before/after previous one (decrement/increment numero)""" - o = sco_edit_ue.do_ue_list(context, {"ue_id": ue_id})[0] + o = sco_edit_ue.do_ue_list({"ue_id": ue_id})[0] # log('ue_move %s (#%s) after=%s' % (ue_id, o['numero'], after)) redirect = int(redirect) after = int(after) # 0: deplace avant, 1 deplace apres if after not in (0, 1): raise ValueError('invalid value for "after"') formation_id = o["formation_id"] - others = sco_edit_ue.do_ue_list(context, {"formation_id": formation_id}) + others = sco_edit_ue.do_ue_list({"formation_id": formation_id}) if len(others) > 1: idx = [p["ue_id"] for p in others].index(ue_id) neigh = None # object to swap with diff --git a/app/scodoc/sco_edit_matiere.py b/app/scodoc/sco_edit_matiere.py index bb877631f0..4f662a9d8f 100644 --- a/app/scodoc/sco_edit_matiere.py +++ b/app/scodoc/sco_edit_matiere.py @@ -47,31 +47,29 @@ _matiereEditor = ndb.EditableTable( ) -def do_matiere_list(context, *args, **kw): +def do_matiere_list(*args, **kw): "list matieres" cnx = ndb.GetDBConnexion() return _matiereEditor.list(cnx, *args, **kw) -def do_matiere_edit(context, *args, **kw): +def do_matiere_edit(*args, **kw): "edit a matiere" from app.scodoc import sco_edit_ue from app.scodoc import sco_edit_formation cnx = ndb.GetDBConnexion() # check - mat = do_matiere_list(context, {"matiere_id": args[0]["matiere_id"]})[0] - if matiere_is_locked(context, mat["matiere_id"]): + mat = do_matiere_list({"matiere_id": args[0]["matiere_id"]})[0] + if matiere_is_locked(mat["matiere_id"]): raise ScoLockedFormError() # edit _matiereEditor.edit(cnx, *args, **kw) - formation_id = sco_edit_ue.do_ue_list(None, {"ue_id": mat["ue_id"]})[0][ - "formation_id" - ] + formation_id = sco_edit_ue.do_ue_list({"ue_id": mat["ue_id"]})[0]["formation_id"] sco_edit_formation.invalidate_sems_in_formation(formation_id) -def do_matiere_create(context, args): +def do_matiere_create(args): "create a matiere" from app.scodoc import sco_edit_ue from app.scodoc import sco_formations @@ -79,7 +77,7 @@ def do_matiere_create(context, args): cnx = ndb.GetDBConnexion() # check - ue = sco_edit_ue.do_ue_list(context, {"ue_id": args["ue_id"]})[0] + ue = sco_edit_ue.do_ue_list({"ue_id": args["ue_id"]})[0] # create matiere r = _matiereEditor.create(cnx, args) @@ -94,11 +92,11 @@ def do_matiere_create(context, args): return r -def matiere_create(context, ue_id=None, REQUEST=None): +def matiere_create(ue_id=None, REQUEST=None): """Creation d'une matiere""" from app.scodoc import sco_edit_ue - UE = sco_edit_ue.do_ue_list(context, args={"ue_id": ue_id})[0] + UE = sco_edit_ue.do_ue_list(args={"ue_id": ue_id})[0] H = [ html_sco_header.sco_header(page_title="Création d'une matière"), """

Création d'une matière dans l'UE %(titre)s (%(acronyme)s)

""" % UE, @@ -145,7 +143,7 @@ associé. return flask.redirect(dest_url) else: # check unicity - mats = do_matiere_list(context, args={"ue_id": ue_id, "titre": tf[2]["titre"]}) + mats = do_matiere_list(args={"ue_id": ue_id, "titre": tf[2]["titre"]}) if mats: return ( "\n".join(H) @@ -153,11 +151,11 @@ associé. + tf[1] + html_sco_header.sco_footer() ) - _ = do_matiere_create(context, tf[2]) + _ = do_matiere_create(tf[2]) return flask.redirect(dest_url) -def do_matiere_delete(context, oid): +def do_matiere_delete(oid): "delete matiere and attached modules" from app.scodoc import sco_formations from app.scodoc import sco_edit_ue @@ -166,9 +164,9 @@ def do_matiere_delete(context, oid): cnx = ndb.GetDBConnexion() # check - mat = do_matiere_list(context, {"matiere_id": oid})[0] - ue = sco_edit_ue.do_ue_list(context, {"ue_id": mat["ue_id"]})[0] - locked = matiere_is_locked(context, mat["matiere_id"]) + mat = do_matiere_list({"matiere_id": oid})[0] + ue = sco_edit_ue.do_ue_list({"ue_id": mat["ue_id"]})[0] + locked = matiere_is_locked(mat["matiere_id"]) if locked: log("do_matiere_delete: mat=%s" % mat) log("do_matiere_delete: ue=%s" % ue) @@ -176,9 +174,9 @@ def do_matiere_delete(context, oid): raise ScoLockedFormError() log("do_matiere_delete: matiere_id=%s" % oid) # delete all modules in this matiere - mods = sco_edit_module.do_module_list(context, {"matiere_id": oid}) + mods = sco_edit_module.do_module_list({"matiere_id": oid}) for mod in mods: - sco_edit_module.do_module_delete(context, mod["module_id"]) + sco_edit_module.do_module_delete(mod["module_id"]) _matiereEditor.delete(cnx, oid) # news @@ -191,12 +189,12 @@ def do_matiere_delete(context, oid): ) -def matiere_delete(context, matiere_id=None, REQUEST=None): +def matiere_delete(matiere_id=None, REQUEST=None): """Delete an UE""" from app.scodoc import sco_edit_ue - M = do_matiere_list(context, args={"matiere_id": matiere_id})[0] - UE = sco_edit_ue.do_ue_list(context, args={"ue_id": M["ue_id"]})[0] + M = do_matiere_list(args={"matiere_id": matiere_id})[0] + UE = sco_edit_ue.do_ue_list(args={"ue_id": M["ue_id"]})[0] H = [ html_sco_header.sco_header(page_title="Suppression d'une matière"), "

Suppression de la matière %(titre)s" % M, @@ -216,26 +214,26 @@ def matiere_delete(context, matiere_id=None, REQUEST=None): elif tf[0] == -1: return flask.redirect(dest_url) else: - do_matiere_delete(context, matiere_id) + do_matiere_delete(matiere_id) return flask.redirect(dest_url) -def matiere_edit(context, matiere_id=None, REQUEST=None): +def matiere_edit(matiere_id=None, REQUEST=None): """Edit matiere""" from app.scodoc import sco_formations from app.scodoc import sco_edit_ue - F = do_matiere_list(context, args={"matiere_id": matiere_id}) + F = do_matiere_list(args={"matiere_id": matiere_id}) if not F: raise ScoValueError("Matière inexistante !") F = F[0] - U = sco_edit_ue.do_ue_list(context, args={"ue_id": F["ue_id"]}) + U = sco_edit_ue.do_ue_list(args={"ue_id": F["ue_id"]}) if not F: raise ScoValueError("UE inexistante !") U = U[0] Fo = sco_formations.formation_list(args={"formation_id": U["formation_id"]})[0] - ues = sco_edit_ue.do_ue_list(context, args={"formation_id": U["formation_id"]}) + ues = sco_edit_ue.do_ue_list(args={"formation_id": U["formation_id"]}) ue_names = ["%(acronyme)s (%(titre)s)" % u for u in ues] ue_ids = [u["ue_id"] for u in ues] H = [ @@ -288,9 +286,7 @@ associé. return flask.redirect(dest_url) else: # check unicity - mats = do_matiere_list( - context, args={"ue_id": tf[2]["ue_id"], "titre": tf[2]["titre"]} - ) + mats = do_matiere_list(args={"ue_id": tf[2]["ue_id"], "titre": tf[2]["titre"]}) if len(mats) > 1 or (len(mats) == 1 and mats[0]["matiere_id"] != matiere_id): return ( "\n".join(H) @@ -307,12 +303,12 @@ associé. {"ue_id": tf[2]["ue_id"], "matiere_id": matiere_id}, ) - do_matiere_edit(context, tf[2]) + do_matiere_edit(tf[2]) return flask.redirect(dest_url) -def matiere_is_locked(context, matiere_id): +def matiere_is_locked(matiere_id): """True if matiere should not be modified (contains modules used in a locked formsemestre) """ diff --git a/app/scodoc/sco_edit_module.py b/app/scodoc/sco_edit_module.py index e491e84630..f6fa00f828 100644 --- a/app/scodoc/sco_edit_module.py +++ b/app/scodoc/sco_edit_module.py @@ -93,13 +93,13 @@ _moduleEditor = ndb.EditableTable( ) -def do_module_list(context, *args, **kw): +def do_module_list(*args, **kw): "list modules" cnx = ndb.GetDBConnexion() return _moduleEditor.list(cnx, *args, **kw) -def do_module_create(context, args) -> int: +def do_module_create(args) -> int: "create a module" # create from app.scodoc import sco_formations @@ -118,15 +118,15 @@ def do_module_create(context, args) -> int: return r -def module_create(context, matiere_id=None, REQUEST=None): +def module_create(matiere_id=None, REQUEST=None): """Creation d'un module""" from app.scodoc import sco_formations from app.scodoc import sco_edit_ue if matiere_id is None: raise ScoValueError("invalid matiere !") - M = sco_edit_matiere.do_matiere_list(context, args={"matiere_id": matiere_id})[0] - UE = sco_edit_ue.do_ue_list(context, args={"ue_id": M["ue_id"]})[0] + M = sco_edit_matiere.do_matiere_list(args={"matiere_id": matiere_id})[0] + UE = sco_edit_ue.do_ue_list(args={"ue_id": M["ue_id"]})[0] Fo = sco_formations.formation_list(args={"formation_id": UE["formation_id"]})[0] parcours = sco_codes_parcours.get_parcours_from_code(Fo["type_parcours"]) semestres_indices = list(range(1, parcours.NB_SEM + 1)) @@ -137,7 +137,7 @@ def module_create(context, matiere_id=None, REQUEST=None): _MODULE_HELP, ] # cherche le numero adequat (pour placer le module en fin de liste) - Mods = do_module_list(context, args={"matiere_id": matiere_id}) + Mods = do_module_list(args={"matiere_id": matiere_id}) if Mods: default_num = max([m["numero"] for m in Mods]) + 10 else: @@ -154,7 +154,7 @@ def module_create(context, matiere_id=None, REQUEST=None): "allow_null": False, "validator": lambda val, field, formation_id=Fo[ "formation_id" - ]: check_module_code_unicity(val, field, formation_id, context), + ]: check_module_code_unicity(val, field, formation_id), }, ), ("titre", {"size": 30, "explanation": "nom du module"}), @@ -237,7 +237,7 @@ def module_create(context, matiere_id=None, REQUEST=None): if tf[0] == 0: return "\n".join(H) + tf[1] + html_sco_header.sco_footer() else: - do_module_create(context, tf[2]) + do_module_create(tf[2]) return flask.redirect( url_for( "notes.ue_list", @@ -247,16 +247,16 @@ def module_create(context, matiere_id=None, REQUEST=None): ) -def do_module_delete(context, oid): +def do_module_delete(oid): "delete module" from app.scodoc import sco_formations - mod = do_module_list(context, {"module_id": oid})[0] - if module_is_locked(context, mod["module_id"]): + mod = do_module_list({"module_id": oid})[0] + if module_is_locked(mod["module_id"]): raise ScoLockedFormError() # S'il y a des moduleimpls, on ne peut pas detruire le module ! - mods = sco_moduleimpl.do_moduleimpl_list(context, module_id=oid) + mods = sco_moduleimpl.do_moduleimpl_list(module_id=oid) if mods: err_page = scu.confirm_dialog( message="""

Destruction du module impossible car il est utilisé dans des semestres existants !

""", @@ -279,11 +279,11 @@ def do_module_delete(context, oid): ) -def module_delete(context, module_id=None, REQUEST=None): +def module_delete(module_id=None, REQUEST=None): """Delete a module""" if not module_id: raise ScoValueError("invalid module !") - Mods = do_module_list(context, args={"module_id": module_id}) + Mods = do_module_list(args={"module_id": module_id}) if not Mods: raise ScoValueError("Module inexistant !") Mod = Mods[0] @@ -306,17 +306,17 @@ def module_delete(context, module_id=None, REQUEST=None): elif tf[0] == -1: return flask.redirect(dest_url) else: - do_module_delete(context, module_id) + do_module_delete(module_id) return flask.redirect(dest_url) -def do_module_edit(context, val): +def do_module_edit(val): "edit a module" from app.scodoc import sco_edit_formation # check - mod = do_module_list(context, {"module_id": val["module_id"]})[0] - if module_is_locked(context, mod["module_id"]): + mod = do_module_list({"module_id": val["module_id"]})[0] + if module_is_locked(mod["module_id"]): # formation verrouillée: empeche de modifier certains champs: protected_fields = ("coefficient", "ue_id", "matiere_id", "semestre_id") for f in protected_fields: @@ -328,27 +328,27 @@ def do_module_edit(context, val): sco_edit_formation.invalidate_sems_in_formation(mod["formation_id"]) -def check_module_code_unicity(code, field, formation_id, context, module_id=None): +def check_module_code_unicity(code, field, formation_id, module_id=None): "true si code module unique dans la formation" - Mods = do_module_list(context, args={"code": code, "formation_id": formation_id}) + Mods = do_module_list(args={"code": code, "formation_id": formation_id}) if module_id: # edition: supprime le module en cours Mods = [m for m in Mods if m["module_id"] != module_id] return len(Mods) == 0 -def module_edit(context, module_id=None, REQUEST=None): +def module_edit(module_id=None, REQUEST=None): """Edit a module""" from app.scodoc import sco_formations from app.scodoc import sco_tag_module if not module_id: raise ScoValueError("invalid module !") - Mod = do_module_list(context, args={"module_id": module_id}) + Mod = do_module_list(args={"module_id": module_id}) if not Mod: raise ScoValueError("invalid module !") Mod = Mod[0] - unlocked = not module_is_locked(context, module_id) + unlocked = not module_is_locked(module_id) Fo = sco_formations.formation_list(args={"formation_id": Mod["formation_id"]})[0] parcours = sco_codes_parcours.get_parcours_from_code(Fo["type_parcours"]) M = ndb.SimpleDictFetch( @@ -400,7 +400,7 @@ def module_edit(context, module_id=None, REQUEST=None): "validator": lambda val, field, formation_id=Mod[ "formation_id" ]: check_module_code_unicity( - val, field, formation_id, context, module_id=module_id + val, field, formation_id, module_id=module_id ), }, ), @@ -493,7 +493,7 @@ def module_edit(context, module_id=None, REQUEST=None): ), ), html_foot_markup="""
""".format( - module_id, ",".join(sco_tag_module.module_tag_list(context, module_id)) + module_id, ",".join(sco_tag_module.module_tag_list(module_id)) ), initvalues=Mod, submitlabel="Modifier ce module", @@ -508,28 +508,28 @@ def module_edit(context, module_id=None, REQUEST=None): tf[2]["ue_id"], tf[2]["matiere_id"] = tf[2]["ue_matiere_id"].split("!") # Check unicité code module dans la formation - do_module_edit(context, tf[2]) + do_module_edit(tf[2]) return flask.redirect(dest_url) # Edition en ligne du code Apogee -def edit_module_set_code_apogee(context, id=None, value=None, REQUEST=None): +def edit_module_set_code_apogee(id=None, value=None, REQUEST=None): "Set UE code apogee" module_id = id value = value.strip("-_ \t") log("edit_module_set_code_apogee: module_id=%s code_apogee=%s" % (module_id, value)) - modules = do_module_list(context, args={"module_id": module_id}) + modules = do_module_list(args={"module_id": module_id}) if not modules: return "module invalide" # should not occur - do_module_edit(context, {"module_id": module_id, "code_apogee": value}) + do_module_edit({"module_id": module_id, "code_apogee": value}) if not value: value = scu.APO_MISSING_CODE_STR return value -def module_list(context, formation_id, REQUEST=None): +def module_list(formation_id, REQUEST=None): """Liste des modules de la formation (XXX inutile ou a revoir) """ @@ -546,7 +546,7 @@ def module_list(context, formation_id, REQUEST=None): ] editable = REQUEST.AUTHENTICATED_USER.has_permission(Permission.ScoChangeFormation) - for Mod in do_module_list(context, args={"formation_id": formation_id}): + for Mod in do_module_list(args={"formation_id": formation_id}): H.append('
  • %s' % Mod) if editable: H.append('modifier' % Mod) @@ -559,7 +559,7 @@ def module_list(context, formation_id, REQUEST=None): return "\n".join(H) -def module_is_locked(context, module_id): +def module_is_locked(module_id): """True if module should not be modified (used in a locked formsemestre) """ @@ -576,39 +576,39 @@ def module_is_locked(context, module_id): return len(r) > 0 -def module_count_moduleimpls(context, module_id): +def module_count_moduleimpls(module_id): "Number of moduleimpls using this module" - mods = sco_moduleimpl.do_moduleimpl_list(context, module_id=module_id) + mods = sco_moduleimpl.do_moduleimpl_list(module_id=module_id) return len(mods) -def formation_add_malus_modules(context, formation_id, titre=None, REQUEST=None): +def formation_add_malus_modules(formation_id, titre=None, REQUEST=None): """Création d'un module de "malus" dans chaque UE d'une formation""" from app.scodoc import sco_edit_ue - ue_list = sco_edit_ue.do_ue_list(context, args={"formation_id": formation_id}) + ue_list = sco_edit_ue.do_ue_list(args={"formation_id": formation_id}) for ue in ue_list: # Un seul module de malus par UE: nb_mod_malus = len( [ mod - for mod in do_module_list(context, args={"ue_id": ue["ue_id"]}) + for mod in do_module_list(args={"ue_id": ue["ue_id"]}) if mod["module_type"] == scu.MODULE_MALUS ] ) if nb_mod_malus == 0: - ue_add_malus_module(context, ue["ue_id"], titre=titre, REQUEST=REQUEST) + ue_add_malus_module(ue["ue_id"], titre=titre, REQUEST=REQUEST) if REQUEST: return flask.redirect("ue_list?formation_id=" + str(formation_id)) -def ue_add_malus_module(context, ue_id, titre=None, code=None, REQUEST=None): +def ue_add_malus_module(ue_id, titre=None, code=None, REQUEST=None): """Add a malus module in this ue""" from app.scodoc import sco_edit_ue - ue = sco_edit_ue.do_ue_list(context, args={"ue_id": ue_id})[0] + ue = sco_edit_ue.do_ue_list(args={"ue_id": ue_id})[0] if titre is None: titre = "" @@ -616,7 +616,7 @@ def ue_add_malus_module(context, ue_id, titre=None, code=None, REQUEST=None): code = "MALUS%d" % ue["numero"] # Tout module doit avoir un semestre_id (indice 1, 2, ...) - semestre_ids = sco_edit_ue.ue_list_semestre_ids(context, ue) + semestre_ids = sco_edit_ue.ue_list_semestre_ids(ue) if semestre_ids: semestre_id = semestre_ids[0] else: @@ -627,14 +627,13 @@ def ue_add_malus_module(context, ue_id, titre=None, code=None, REQUEST=None): ) # Matiere pour placer le module malus - Matlist = sco_edit_matiere.do_matiere_list(context, args={"ue_id": ue_id}) + Matlist = sco_edit_matiere.do_matiere_list(args={"ue_id": ue_id}) numero = max([mat["numero"] for mat in Matlist]) + 10 matiere_id = sco_edit_matiere.do_matiere_create( - context, {"ue_id": ue_id, "titre": "Malus", "numero": numero} + {"ue_id": ue_id, "titre": "Malus", "numero": numero} ) module_id = do_module_create( - context, { "titre": titre, "code": code, diff --git a/app/scodoc/sco_edit_ue.py b/app/scodoc/sco_edit_ue.py index 03268732a9..9d82919a32 100644 --- a/app/scodoc/sco_edit_ue.py +++ b/app/scodoc/sco_edit_ue.py @@ -84,20 +84,20 @@ _ueEditor = ndb.EditableTable( ) -def do_ue_list(context, *args, **kw): +def do_ue_list(*args, **kw): "list UEs" cnx = ndb.GetDBConnexion() return _ueEditor.list(cnx, *args, **kw) -def do_ue_create(context, args): +def do_ue_create(args): "create an ue" from app.scodoc import sco_formations cnx = ndb.GetDBConnexion() # check duplicates ues = do_ue_list( - context, {"formation_id": args["formation_id"], "acronyme": args["acronyme"]} + {"formation_id": args["formation_id"], "acronyme": args["acronyme"]} ) if ues: raise ScoValueError('Acronyme d\'UE "%s" déjà utilisé !' % args["acronyme"]) @@ -115,7 +115,7 @@ def do_ue_create(context, args): return r -def do_ue_delete(context, ue_id, delete_validations=False, REQUEST=None, force=False): +def do_ue_delete(ue_id, delete_validations=False, REQUEST=None, force=False): "delete UE and attached matieres (but not modules)" from app.scodoc import sco_formations from app.scodoc import sco_parcours_dut @@ -123,11 +123,11 @@ def do_ue_delete(context, ue_id, delete_validations=False, REQUEST=None, force=F cnx = ndb.GetDBConnexion() log("do_ue_delete: ue_id=%s, delete_validations=%s" % (ue_id, delete_validations)) # check - ue = do_ue_list(context, {"ue_id": ue_id}) + ue = do_ue_list({"ue_id": ue_id}) if not ue: raise ScoValueError("UE inexistante !") ue = ue[0] - if ue_is_locked(context, ue["ue_id"]): + if ue_is_locked(ue["ue_id"]): raise ScoLockedFormError() # Il y a-t-il des etudiants ayant validé cette UE ? # si oui, propose de supprimer les validations @@ -151,9 +151,9 @@ def do_ue_delete(context, ue_id, delete_validations=False, REQUEST=None, force=F ) # delete all matiere in this UE - mats = sco_edit_matiere.do_matiere_list(context, {"ue_id": ue_id}) + mats = sco_edit_matiere.do_matiere_list({"ue_id": ue_id}) for mat in mats: - sco_edit_matiere.do_matiere_delete(context, mat["matiere_id"]) + sco_edit_matiere.do_matiere_delete(mat["matiere_id"]) # delete uecoef and events ndb.SimpleQuery( "DELETE FROM notes_formsemestre_uecoef WHERE ue_id=%(ue_id)s", @@ -185,18 +185,18 @@ def do_ue_delete(context, ue_id, delete_validations=False, REQUEST=None, force=F return None -def ue_create(context, formation_id=None, REQUEST=None): +def ue_create(formation_id=None, REQUEST=None): """Creation d'une UE""" - return ue_edit(context, create=True, formation_id=formation_id, REQUEST=REQUEST) + return ue_edit(create=True, formation_id=formation_id, REQUEST=REQUEST) -def ue_edit(context, ue_id=None, create=False, formation_id=None, REQUEST=None): +def ue_edit(ue_id=None, create=False, formation_id=None, REQUEST=None): """Modification ou creation d'une UE""" from app.scodoc import sco_formations create = int(create) if not create: - U = do_ue_list(context, args={"ue_id": ue_id}) + U = do_ue_list(args={"ue_id": ue_id}) if not U: raise ScoValueError("UE inexistante !") U = U[0] @@ -341,19 +341,17 @@ def ue_edit(context, ue_id=None, create=False, formation_id=None, REQUEST=None): tf[2]["semestre_id"] = 0 # numero regroupant par semestre ou année: tf[2]["numero"] = next_ue_numero( - context, formation_id, int(tf[2]["semestre_id"] or 0) + formation_id, int(tf[2]["semestre_id"] or 0) ) - ue_id = do_ue_create(context, tf[2]) + ue_id = do_ue_create(tf[2]) if parcours.UE_IS_MODULE or tf[2]["create_matiere"]: matiere_id = sco_edit_matiere.do_matiere_create( - context, {"ue_id": ue_id, "titre": tf[2]["titre"], "numero": 1}, ) if parcours.UE_IS_MODULE: # dans ce mode, crée un (unique) module dans l'UE: _ = sco_edit_module.do_module_create( - context, { "titre": tf[2]["titre"], "code": tf[2]["acronyme"], @@ -365,7 +363,7 @@ def ue_edit(context, ue_id=None, create=False, formation_id=None, REQUEST=None): }, ) else: - do_ue_edit(context, tf[2]) + do_ue_edit(tf[2]) return flask.redirect( url_for( "notes.ue_list", scodoc_dept=g.scodoc_dept, formation_id=formation_id @@ -373,31 +371,31 @@ def ue_edit(context, ue_id=None, create=False, formation_id=None, REQUEST=None): ) -def _add_ue_semestre_id(context, ue_list): +def _add_ue_semestre_id(ue_list): """ajoute semestre_id dans les ue, en regardant le premier module de chacune. Les UE sans modules se voient attribuer le numero UE_SEM_DEFAULT (1000000), qui les place à la fin de la liste. """ for ue in ue_list: - Modlist = sco_edit_module.do_module_list(context, args={"ue_id": ue["ue_id"]}) + Modlist = sco_edit_module.do_module_list(args={"ue_id": ue["ue_id"]}) if Modlist: ue["semestre_id"] = Modlist[0]["semestre_id"] else: ue["semestre_id"] = 1000000 -def next_ue_numero(context, formation_id, semestre_id=None): +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 """ - ue_list = do_ue_list(context, args={"formation_id": formation_id}) + ue_list = do_ue_list(args={"formation_id": formation_id}) if not ue_list: return 0 if semestre_id is None: return ue_list[-1]["numero"] + 1000 else: # Avec semestre: (prend le semestre du 1er module de l'UE) - _add_ue_semestre_id(context, ue_list) + _add_ue_semestre_id(ue_list) ue_list_semestre = [ue for ue in ue_list if ue["semestre_id"] == semestre_id] if ue_list_semestre: return ue_list_semestre[-1]["numero"] + 10 @@ -406,10 +404,10 @@ def next_ue_numero(context, formation_id, semestre_id=None): def ue_delete( - context, ue_id=None, delete_validations=False, dialog_confirmed=False, REQUEST=None + ue_id=None, delete_validations=False, dialog_confirmed=False, REQUEST=None ): """Delete an UE""" - ue = do_ue_list(context, args={"ue_id": ue_id}) + ue = do_ue_list(args={"ue_id": ue_id}) if not ue: raise ScoValueError("UE inexistante !") ue = ue[0] @@ -422,12 +420,10 @@ def ue_delete( cancel_url="ue_list?formation_id=%s" % ue["formation_id"], ) - return do_ue_delete( - context, ue_id, delete_validations=delete_validations, REQUEST=REQUEST - ) + return do_ue_delete(ue_id, delete_validations=delete_validations, REQUEST=REQUEST) -def ue_list(context, formation_id=None, msg="", REQUEST=None): +def ue_list(formation_id=None, msg="", REQUEST=None): """Liste des matières et modules d'une formation, avec liens pour editer (si non verrouillée). """ @@ -439,11 +435,11 @@ def ue_list(context, formation_id=None, msg="", REQUEST=None): raise ScoValueError("invalid formation_id") F = F[0] parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"]) - locked = sco_formations.formation_has_locked_sems(context, formation_id) + locked = sco_formations.formation_has_locked_sems(formation_id) - ue_list = do_ue_list(context, args={"formation_id": formation_id}) + ue_list = do_ue_list(args={"formation_id": formation_id}) # tri par semestre et numero: - _add_ue_semestre_id(context, ue_list) + _add_ue_semestre_id(ue_list) ue_list.sort(key=lambda u: (u["semestre_id"], u["numero"])) has_duplicate_ue_codes = len(set([ue["ue_code"] for ue in ue_list])) != len(ue_list) @@ -612,7 +608,7 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module '%s' % sco_codes_parcours.UE_TYPE_NAME[UE["type"]] ) - ue_editable = editable and not ue_is_locked(context, UE["ue_id"]) + ue_editable = editable and not ue_is_locked(UE["ue_id"]) if ue_editable: H.append( 'modifier' % UE @@ -621,12 +617,12 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module H.append('[verrouillé]') if not parcours.UE_IS_MODULE: H.append('