forked from ScoDoc/ScoDoc
Un peu de nettoyage de d'optimisation (gain ~ 30-40% sur calcul NT).
This commit is contained in:
parent
e243fe6bb0
commit
e8e3423193
@ -130,12 +130,12 @@ base de données (tous les départements, et les utilisateurs) avant de commence
|
|||||||
|
|
||||||
On utilise SQLAlchemy avec Alembic et Flask-Migrate.
|
On utilise SQLAlchemy avec Alembic et Flask-Migrate.
|
||||||
|
|
||||||
flask db migrate -m "ScoDoc 9.0.x: ..." # ajuster le message !
|
flask db migrate -m "message explicatif....."
|
||||||
flask db upgrade
|
flask db upgrade
|
||||||
|
|
||||||
Ne pas oublier de commiter les migrations (`git add migrations` ...).
|
Ne pas oublier de d'ajouter le script de migration à git (`git add migrations/...`).
|
||||||
|
|
||||||
Mémo pour développeurs: séquence re-création d'une base (vérifiez votre `.env`
|
**Mémo**: séquence re-création d'une base (vérifiez votre `.env`
|
||||||
ou variables d'environnement pour interroger la bonne base !).
|
ou variables d'environnement pour interroger la bonne base !).
|
||||||
|
|
||||||
dropdb SCODOC_DEV
|
dropdb SCODOC_DEV
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
"""
|
"""
|
||||||
# PAS ENCORE IMPLEMENTEE, juste un essai
|
# PAS ENCORE IMPLEMENTEE, juste un essai
|
||||||
# Pour P. Bouron, il faudrait en priorité l'équivalent de
|
# Pour P. Bouron, il faudrait en priorité l'équivalent de
|
||||||
# Scolarite/Notes/do_moduleimpl_withmodule_list
|
# Scolarite/Notes/moduleimpl_withmodule_list (alias scodoc7 do_moduleimpl_withmodule_list)
|
||||||
# Scolarite/Notes/evaluation_create
|
# Scolarite/Notes/evaluation_create
|
||||||
# Scolarite/Notes/evaluation_delete
|
# Scolarite/Notes/evaluation_delete
|
||||||
# Scolarite/Notes/formation_list
|
# Scolarite/Notes/formation_list
|
||||||
|
@ -102,7 +102,7 @@ def get_sem_ues_modimpls(formsemestre_id, modimpls=None):
|
|||||||
(utilisé quand on ne peut pas construire nt et faire nt.get_ues())
|
(utilisé quand on ne peut pas construire nt et faire nt.get_ues())
|
||||||
"""
|
"""
|
||||||
if modimpls is None:
|
if modimpls is None:
|
||||||
modimpls = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
|
modimpls = sco_moduleimpl.moduleimpl_list(formsemestre_id=formsemestre_id)
|
||||||
uedict = {}
|
uedict = {}
|
||||||
for modimpl in modimpls:
|
for modimpl in modimpls:
|
||||||
mod = sco_edit_module.do_module_list(args={"module_id": modimpl["module_id"]})[
|
mod = sco_edit_module.do_module_list(args={"module_id": modimpl["module_id"]})[
|
||||||
@ -212,7 +212,7 @@ class NotesTable(object):
|
|||||||
valid_evals,
|
valid_evals,
|
||||||
mods_att,
|
mods_att,
|
||||||
self.expr_diagnostics,
|
self.expr_diagnostics,
|
||||||
) = sco_compute_moy.do_formsemestre_moyennes(self, formsemestre_id)
|
) = sco_compute_moy.compute_modimpls_moyennes(self, formsemestre_id)
|
||||||
self._mods_att = mods_att # liste des modules avec des notes en attente
|
self._mods_att = mods_att # liste des modules avec des notes en attente
|
||||||
self._matmoys = {} # moyennes par matieres
|
self._matmoys = {} # moyennes par matieres
|
||||||
self._valid_evals = {} # { evaluation_id : eval }
|
self._valid_evals = {} # { evaluation_id : eval }
|
||||||
@ -221,7 +221,7 @@ class NotesTable(object):
|
|||||||
uedict = {} # public member: { ue_id : ue }
|
uedict = {} # public member: { ue_id : ue }
|
||||||
self.uedict = uedict
|
self.uedict = uedict
|
||||||
for modimpl in self._modimpls:
|
for modimpl in self._modimpls:
|
||||||
mod = modimpl["module"] # has been added here by do_formsemestre_moyennes
|
mod = modimpl["module"] # has been added here by compute_modimpls_moyennes
|
||||||
if not mod["ue_id"] in uedict:
|
if not mod["ue_id"] in uedict:
|
||||||
ue = sco_edit_ue.do_ue_list(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
|
uedict[ue["ue_id"]] = ue
|
||||||
|
@ -474,7 +474,7 @@ def _get_abs_description(a, cursor=None):
|
|||||||
desc = a["description"]
|
desc = a["description"]
|
||||||
if a["moduleimpl_id"] and a["moduleimpl_id"] != "NULL":
|
if a["moduleimpl_id"] and a["moduleimpl_id"] != "NULL":
|
||||||
# Trouver le nom du module
|
# Trouver le nom du module
|
||||||
Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
Mlist = sco_moduleimpl.moduleimpl_withmodule_list(
|
||||||
moduleimpl_id=a["moduleimpl_id"]
|
moduleimpl_id=a["moduleimpl_id"]
|
||||||
)
|
)
|
||||||
if Mlist:
|
if Mlist:
|
||||||
|
@ -115,7 +115,7 @@ def doSignaleAbsence(
|
|||||||
J = "NON "
|
J = "NON "
|
||||||
M = ""
|
M = ""
|
||||||
if moduleimpl_id and moduleimpl_id != "NULL":
|
if moduleimpl_id and moduleimpl_id != "NULL":
|
||||||
mod = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
mod = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
formsemestre_id = mod["formsemestre_id"]
|
formsemestre_id = mod["formsemestre_id"]
|
||||||
nt = sco_cache.NotesTableCache.get(formsemestre_id)
|
nt = sco_cache.NotesTableCache.get(formsemestre_id)
|
||||||
ues = nt.get_ues(etudid=etudid)
|
ues = nt.get_ues(etudid=etudid)
|
||||||
@ -939,7 +939,7 @@ def _tables_abs_etud(
|
|||||||
return ""
|
return ""
|
||||||
ex = []
|
ex = []
|
||||||
for ev in a["evals"]:
|
for ev in a["evals"]:
|
||||||
mod = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
mod = sco_moduleimpl.moduleimpl_withmodule_list(
|
||||||
moduleimpl_id=ev["moduleimpl_id"]
|
moduleimpl_id=ev["moduleimpl_id"]
|
||||||
)[0]
|
)[0]
|
||||||
if format == "html":
|
if format == "html":
|
||||||
@ -957,7 +957,7 @@ def _tables_abs_etud(
|
|||||||
def descr_abs(a):
|
def descr_abs(a):
|
||||||
ex = []
|
ex = []
|
||||||
for ev in a.get("absent", []):
|
for ev in a.get("absent", []):
|
||||||
mod = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
mod = sco_moduleimpl.moduleimpl_withmodule_list(
|
||||||
moduleimpl_id=ev["moduleimpl_id"]
|
moduleimpl_id=ev["moduleimpl_id"]
|
||||||
)[0]
|
)[0]
|
||||||
if format == "html":
|
if format == "html":
|
||||||
|
@ -292,7 +292,7 @@ def invalidate_formsemestre( # was inval_cache(formsemestre_id=None, pdfonly=Fa
|
|||||||
|
|
||||||
|
|
||||||
class DefferedSemCacheManager:
|
class DefferedSemCacheManager:
|
||||||
"""Experimental: pour effectuer des opérations indépendantes dans la
|
"""Contexte pour effectuer des opérations indépendantes dans la
|
||||||
même requete qui invalident le cache. Par exemple, quand on inscrit
|
même requete qui invalident le cache. Par exemple, quand on inscrit
|
||||||
des étudiants un par un à un semestre, chaque inscription va invalider
|
des étudiants un par un à un semestre, chaque inscription va invalider
|
||||||
le cache, et la suivante va le reconstruire... pour l'invalider juste après.
|
le cache, et la suivante va le reconstruire... pour l'invalider juste après.
|
||||||
|
@ -79,7 +79,7 @@ def formsemestre_expressions_use_abscounts(formsemestre_id):
|
|||||||
if expr and expr[0] != "#" and ab in expr:
|
if expr and expr[0] != "#" and ab in expr:
|
||||||
return True
|
return True
|
||||||
# 2- moyennes de modules
|
# 2- moyennes de modules
|
||||||
for mod in sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id):
|
for mod in sco_moduleimpl.moduleimpl_list(formsemestre_id=formsemestre_id):
|
||||||
if moduleimpl_has_expression(mod) and ab in mod["computation_expr"]:
|
if moduleimpl_has_expression(mod) and ab in mod["computation_expr"]:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
@ -199,7 +199,7 @@ def do_moduleimpl_moyennes(nt, mod):
|
|||||||
moduleimpl_id = mod["moduleimpl_id"]
|
moduleimpl_id = mod["moduleimpl_id"]
|
||||||
is_malus = mod["module"]["module_type"] == scu.MODULE_MALUS
|
is_malus = mod["module"]["module_type"] == scu.MODULE_MALUS
|
||||||
sem = sco_formsemestre.get_formsemestre(mod["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(mod["formsemestre_id"])
|
||||||
etudids = sco_moduleimpl.do_moduleimpl_listeetuds(
|
etudids = sco_moduleimpl.moduleimpl_listeetuds(
|
||||||
moduleimpl_id
|
moduleimpl_id
|
||||||
) # tous, y compris demissions
|
) # tous, y compris demissions
|
||||||
# Inscrits au semestre (pour traiter les demissions):
|
# Inscrits au semestre (pour traiter les demissions):
|
||||||
@ -365,7 +365,7 @@ def do_moduleimpl_moyennes(nt, mod):
|
|||||||
return R, valid_evals, attente, diag_info
|
return R, valid_evals, attente, diag_info
|
||||||
|
|
||||||
|
|
||||||
def do_formsemestre_moyennes(nt, formsemestre_id):
|
def compute_modimpls_moyennes(nt, formsemestre_id):
|
||||||
"""retourne dict { moduleimpl_id : { etudid, note_moyenne_dans_ce_module } },
|
"""retourne dict { moduleimpl_id : { etudid, note_moyenne_dans_ce_module } },
|
||||||
la liste des moduleimpls, la liste des evaluations valides,
|
la liste des moduleimpls, la liste des evaluations valides,
|
||||||
liste des moduleimpls avec notes en attente.
|
liste des moduleimpls avec notes en attente.
|
||||||
@ -375,7 +375,7 @@ def do_formsemestre_moyennes(nt, formsemestre_id):
|
|||||||
# args={"formsemestre_id": formsemestre_id}
|
# args={"formsemestre_id": formsemestre_id}
|
||||||
# )
|
# )
|
||||||
# etudids = [x["etudid"] for x in inscr]
|
# etudids = [x["etudid"] for x in inscr]
|
||||||
modimpls = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
|
modimpls = sco_moduleimpl.moduleimpl_list(formsemestre_id=formsemestre_id)
|
||||||
# recupere les moyennes des etudiants de tous les modules
|
# recupere les moyennes des etudiants de tous les modules
|
||||||
D = {}
|
D = {}
|
||||||
valid_evals = []
|
valid_evals = []
|
||||||
|
@ -59,9 +59,7 @@ def formsemestre_table_estim_cost(
|
|||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
sco_formsemestre_status.fill_formsemestre(sem)
|
sco_formsemestre_status.fill_formsemestre(sem)
|
||||||
Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
Mlist = sco_moduleimpl.moduleimpl_withmodule_list(formsemestre_id=formsemestre_id)
|
||||||
formsemestre_id=formsemestre_id
|
|
||||||
)
|
|
||||||
T = []
|
T = []
|
||||||
for M in Mlist:
|
for M in Mlist:
|
||||||
Mod = M["module"]
|
Mod = M["module"]
|
||||||
|
@ -257,7 +257,7 @@ def do_module_delete(oid):
|
|||||||
raise ScoLockedFormError()
|
raise ScoLockedFormError()
|
||||||
|
|
||||||
# S'il y a des moduleimpls, on ne peut pas detruire le module !
|
# S'il y a des moduleimpls, on ne peut pas detruire le module !
|
||||||
mods = sco_moduleimpl.do_moduleimpl_list(module_id=oid)
|
mods = sco_moduleimpl.moduleimpl_list(module_id=oid)
|
||||||
if mods:
|
if mods:
|
||||||
err_page = f"""<h3>Destruction du module impossible car il est utilisé dans des semestres existants !</h3>
|
err_page = f"""<h3>Destruction du module impossible car il est utilisé dans des semestres existants !</h3>
|
||||||
<p class="help">Il faut d'abord supprimer le semestre. Mais il est peut être préférable de
|
<p class="help">Il faut d'abord supprimer le semestre. Mais il est peut être préférable de
|
||||||
@ -580,7 +580,7 @@ def module_is_locked(module_id):
|
|||||||
|
|
||||||
def module_count_moduleimpls(module_id):
|
def module_count_moduleimpls(module_id):
|
||||||
"Number of moduleimpls using this module"
|
"Number of moduleimpls using this module"
|
||||||
mods = sco_moduleimpl.do_moduleimpl_list(module_id=module_id)
|
mods = sco_moduleimpl.moduleimpl_list(module_id=module_id)
|
||||||
return len(mods)
|
return len(mods)
|
||||||
|
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ def do_evaluation_list(args, sortkey=None):
|
|||||||
|
|
||||||
def do_evaluation_list_in_formsemestre(formsemestre_id):
|
def do_evaluation_list_in_formsemestre(formsemestre_id):
|
||||||
"list evaluations in this formsemestre"
|
"list evaluations in this formsemestre"
|
||||||
mods = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
|
mods = sco_moduleimpl.moduleimpl_list(formsemestre_id=formsemestre_id)
|
||||||
evals = []
|
evals = []
|
||||||
for mod in mods:
|
for mod in mods:
|
||||||
evals += do_evaluation_list(args={"moduleimpl_id": mod["moduleimpl_id"]})
|
evals += do_evaluation_list(args={"moduleimpl_id": mod["moduleimpl_id"]})
|
||||||
@ -213,7 +213,7 @@ def _check_evaluation_args(args):
|
|||||||
jour = args.get("jour", None)
|
jour = args.get("jour", None)
|
||||||
args["jour"] = jour
|
args["jour"] = jour
|
||||||
if jour:
|
if jour:
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
||||||
d, m, y = [int(x) for x in sem["date_debut"].split("/")]
|
d, m, y = [int(x) for x in sem["date_debut"].split("/")]
|
||||||
date_debut = datetime.date(y, m, d)
|
date_debut = datetime.date(y, m, d)
|
||||||
@ -301,7 +301,7 @@ def do_evaluation_create(
|
|||||||
r = _evaluationEditor.create(cnx, args)
|
r = _evaluationEditor.create(cnx, args)
|
||||||
|
|
||||||
# news
|
# news
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
mod["moduleimpl_id"] = M["moduleimpl_id"]
|
mod["moduleimpl_id"] = M["moduleimpl_id"]
|
||||||
mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod
|
mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod
|
||||||
@ -332,7 +332,7 @@ def do_evaluation_edit(args):
|
|||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
_evaluationEditor.edit(cnx, args)
|
_evaluationEditor.edit(cnx, args)
|
||||||
# inval cache pour ce semestre
|
# inval cache pour ce semestre
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
sco_cache.invalidate_formsemestre(formsemestre_id=M["formsemestre_id"])
|
sco_cache.invalidate_formsemestre(formsemestre_id=M["formsemestre_id"])
|
||||||
|
|
||||||
|
|
||||||
@ -357,7 +357,7 @@ def do_evaluation_delete(evaluation_id):
|
|||||||
|
|
||||||
_evaluationEditor.delete(cnx, evaluation_id)
|
_evaluationEditor.delete(cnx, evaluation_id)
|
||||||
# inval cache pour ce semestre
|
# inval cache pour ce semestre
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
sco_cache.invalidate_formsemestre(formsemestre_id=M["formsemestre_id"])
|
sco_cache.invalidate_formsemestre(formsemestre_id=M["formsemestre_id"])
|
||||||
# news
|
# news
|
||||||
mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
@ -373,9 +373,6 @@ def do_evaluation_delete(evaluation_id):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
_DEE_TOT = 0
|
|
||||||
|
|
||||||
|
|
||||||
def do_evaluation_etat(evaluation_id, partition_id=None, select_first_partition=False):
|
def do_evaluation_etat(evaluation_id, partition_id=None, select_first_partition=False):
|
||||||
"""donne infos sur l'etat du evaluation
|
"""donne infos sur l'etat du evaluation
|
||||||
{ nb_inscrits, nb_notes, nb_abs, nb_neutre, nb_att,
|
{ nb_inscrits, nb_notes, nb_abs, nb_neutre, nb_att,
|
||||||
@ -412,7 +409,7 @@ def do_evaluation_etat(evaluation_id, partition_id=None, select_first_partition=
|
|||||||
last_modif = None
|
last_modif = None
|
||||||
# ---- Liste des groupes complets et incomplets
|
# ---- Liste des groupes complets et incomplets
|
||||||
E = do_evaluation_list(args={"evaluation_id": evaluation_id})[0]
|
E = do_evaluation_list(args={"evaluation_id": evaluation_id})[0]
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
is_malus = Mod["module_type"] == scu.MODULE_MALUS # True si module de malus
|
is_malus = Mod["module_type"] == scu.MODULE_MALUS # True si module de malus
|
||||||
formsemestre_id = M["formsemestre_id"]
|
formsemestre_id = M["formsemestre_id"]
|
||||||
@ -735,7 +732,7 @@ def formsemestre_evaluations_cal(formsemestre_id):
|
|||||||
if not e["jour"]:
|
if not e["jour"]:
|
||||||
continue
|
continue
|
||||||
day = e["jour"].strftime("%Y-%m-%d")
|
day = e["jour"].strftime("%Y-%m-%d")
|
||||||
mod = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
mod = sco_moduleimpl.moduleimpl_withmodule_list(
|
||||||
moduleimpl_id=e["moduleimpl_id"]
|
moduleimpl_id=e["moduleimpl_id"]
|
||||||
)[0]
|
)[0]
|
||||||
txt = mod["module"]["code"] or mod["module"]["abbrev"] or "eval"
|
txt = mod["module"]["code"] or mod["module"]["abbrev"] or "eval"
|
||||||
@ -812,7 +809,7 @@ def evaluation_date_first_completion(evaluation_id):
|
|||||||
# (pour avoir l'etat et le groupe) et aussi les inscriptions
|
# (pour avoir l'etat et le groupe) et aussi les inscriptions
|
||||||
# au module (pour gerer les modules optionnels correctement)
|
# au module (pour gerer les modules optionnels correctement)
|
||||||
# E = do_evaluation_list(args={"evaluation_id": evaluation_id})[0]
|
# E = do_evaluation_list(args={"evaluation_id": evaluation_id})[0]
|
||||||
# M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
# M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
# formsemestre_id = M["formsemestre_id"]
|
# formsemestre_id = M["formsemestre_id"]
|
||||||
# insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits( formsemestre_id)
|
# insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_listinscrits( formsemestre_id)
|
||||||
# insmod = sco_moduleimpl.do_moduleimpl_inscription_list(moduleimpl_id=E["moduleimpl_id"])
|
# insmod = sco_moduleimpl.do_moduleimpl_inscription_list(moduleimpl_id=E["moduleimpl_id"])
|
||||||
@ -854,7 +851,7 @@ def formsemestre_evaluations_delai_correction(formsemestre_id, format="html"):
|
|||||||
evals = nt.get_sem_evaluation_etat_list()
|
evals = nt.get_sem_evaluation_etat_list()
|
||||||
T = []
|
T = []
|
||||||
for e in evals:
|
for e in evals:
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=e["moduleimpl_id"])[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=e["moduleimpl_id"])[0]
|
||||||
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
if (e["evaluation_type"] != scu.EVALUATION_NORMALE) or (
|
if (e["evaluation_type"] != scu.EVALUATION_NORMALE) or (
|
||||||
Mod["module_type"] == scu.MODULE_MALUS
|
Mod["module_type"] == scu.MODULE_MALUS
|
||||||
@ -1035,7 +1032,7 @@ def evaluation_describe(evaluation_id="", edit_in_place=True):
|
|||||||
|
|
||||||
E = do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
E = do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
||||||
moduleimpl_id = E["moduleimpl_id"]
|
moduleimpl_id = E["moduleimpl_id"]
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
formsemestre_id = M["formsemestre_id"]
|
formsemestre_id = M["formsemestre_id"]
|
||||||
u = sco_users.user_info(M["responsable_id"])
|
u = sco_users.user_info(M["responsable_id"])
|
||||||
@ -1115,7 +1112,7 @@ def evaluation_create_form(
|
|||||||
the_eval = do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
the_eval = do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
||||||
moduleimpl_id = the_eval["moduleimpl_id"]
|
moduleimpl_id = the_eval["moduleimpl_id"]
|
||||||
#
|
#
|
||||||
M = sco_moduleimpl.do_moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
is_malus = M["module"]["module_type"] == scu.MODULE_MALUS # True si module de malus
|
is_malus = M["module"]["module_type"] == scu.MODULE_MALUS # True si module de malus
|
||||||
formsemestre_id = M["formsemestre_id"]
|
formsemestre_id = M["formsemestre_id"]
|
||||||
min_note_max = scu.NOTES_PRECISION # le plus petit bareme possible
|
min_note_max = scu.NOTES_PRECISION # le plus petit bareme possible
|
||||||
|
@ -171,7 +171,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
initvalues = sem
|
initvalues = sem
|
||||||
semestre_id = initvalues["semestre_id"]
|
semestre_id = initvalues["semestre_id"]
|
||||||
# add associated modules to tf-checked:
|
# add associated modules to tf-checked:
|
||||||
ams = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
|
ams = sco_moduleimpl.moduleimpl_list(formsemestre_id=formsemestre_id)
|
||||||
sem_module_ids = set([x["module_id"] for x in ams])
|
sem_module_ids = set([x["module_id"] for x in ams])
|
||||||
initvalues["tf-checked"] = ["MI" + str(x["module_id"]) for x in ams]
|
initvalues["tf-checked"] = ["MI" + str(x["module_id"]) for x in ams]
|
||||||
for x in ams:
|
for x in ams:
|
||||||
@ -751,7 +751,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
# (retire le "MI" du début du nom de champs)
|
# (retire le "MI" du début du nom de champs)
|
||||||
checkedmods = [int(x[2:]) for x in tf[2]["tf-checked"]]
|
checkedmods = [int(x[2:]) for x in tf[2]["tf-checked"]]
|
||||||
sco_formsemestre.do_formsemestre_edit(tf[2])
|
sco_formsemestre.do_formsemestre_edit(tf[2])
|
||||||
ams = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
|
ams = sco_moduleimpl.moduleimpl_list(formsemestre_id=formsemestre_id)
|
||||||
existingmods = [x["module_id"] for x in ams]
|
existingmods = [x["module_id"] for x in ams]
|
||||||
mods_tocreate = [x for x in checkedmods if not x in existingmods]
|
mods_tocreate = [x for x in checkedmods if not x in existingmods]
|
||||||
# modules a existants a modifier
|
# modules a existants a modifier
|
||||||
@ -801,7 +801,7 @@ def do_formsemestre_createwithmodules(edit=False):
|
|||||||
ok, diag = formsemestre_delete_moduleimpls(formsemestre_id, mods_todelete)
|
ok, diag = formsemestre_delete_moduleimpls(formsemestre_id, mods_todelete)
|
||||||
msg += diag
|
msg += diag
|
||||||
for module_id in mods_toedit:
|
for module_id in mods_toedit:
|
||||||
moduleimpl_id = sco_moduleimpl.do_moduleimpl_list(
|
moduleimpl_id = sco_moduleimpl.moduleimpl_list(
|
||||||
formsemestre_id=formsemestre_id, module_id=module_id
|
formsemestre_id=formsemestre_id, module_id=module_id
|
||||||
)[0]["moduleimpl_id"]
|
)[0]["moduleimpl_id"]
|
||||||
modargs = {
|
modargs = {
|
||||||
@ -846,7 +846,7 @@ def formsemestre_delete_moduleimpls(formsemestre_id, module_ids_to_del):
|
|||||||
msg = []
|
msg = []
|
||||||
for module_id in module_ids_to_del:
|
for module_id in module_ids_to_del:
|
||||||
# get id
|
# get id
|
||||||
moduleimpl_id = sco_moduleimpl.do_moduleimpl_list(
|
moduleimpl_id = sco_moduleimpl.moduleimpl_list(
|
||||||
formsemestre_id=formsemestre_id, module_id=module_id
|
formsemestre_id=formsemestre_id, module_id=module_id
|
||||||
)[0]["moduleimpl_id"]
|
)[0]["moduleimpl_id"]
|
||||||
mod = sco_edit_module.do_module_list({"module_id": module_id})[0]
|
mod = sco_edit_module.do_module_list({"module_id": module_id})[0]
|
||||||
@ -1015,7 +1015,7 @@ def do_formsemestre_clone(
|
|||||||
formsemestre_id = sco_formsemestre.do_formsemestre_create(args)
|
formsemestre_id = sco_formsemestre.do_formsemestre_create(args)
|
||||||
log("created formsemestre %s" % formsemestre_id)
|
log("created formsemestre %s" % formsemestre_id)
|
||||||
# 2- create moduleimpls
|
# 2- create moduleimpls
|
||||||
mods_orig = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=orig_formsemestre_id)
|
mods_orig = sco_moduleimpl.moduleimpl_list(formsemestre_id=orig_formsemestre_id)
|
||||||
for mod_orig in mods_orig:
|
for mod_orig in mods_orig:
|
||||||
args = mod_orig.copy()
|
args = mod_orig.copy()
|
||||||
args["formsemestre_id"] = formsemestre_id
|
args["formsemestre_id"] = formsemestre_id
|
||||||
@ -1191,7 +1191,7 @@ def _reassociate_moduleimpls(cnx, formsemestre_id, ues_old2new, modules_old2new)
|
|||||||
et met à jour les décisions de jury (validations d'UE).
|
et met à jour les décisions de jury (validations d'UE).
|
||||||
"""
|
"""
|
||||||
# re-associate moduleimpls to new modules:
|
# re-associate moduleimpls to new modules:
|
||||||
modimpls = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
|
modimpls = sco_moduleimpl.moduleimpl_list(formsemestre_id=formsemestre_id)
|
||||||
for mod in modimpls:
|
for mod in modimpls:
|
||||||
mod["module_id"] = modules_old2new[mod["module_id"]]
|
mod["module_id"] = modules_old2new[mod["module_id"]]
|
||||||
sco_moduleimpl.do_moduleimpl_edit(mod, formsemestre_id=formsemestre_id)
|
sco_moduleimpl.do_moduleimpl_edit(mod, formsemestre_id=formsemestre_id)
|
||||||
@ -1308,7 +1308,7 @@ def do_formsemestre_delete(formsemestre_id):
|
|||||||
sco_cache.EvaluationCache.invalidate_sem(formsemestre_id)
|
sco_cache.EvaluationCache.invalidate_sem(formsemestre_id)
|
||||||
|
|
||||||
# --- Destruction des modules de ce semestre
|
# --- Destruction des modules de ce semestre
|
||||||
mods = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
|
mods = sco_moduleimpl.moduleimpl_list(formsemestre_id=formsemestre_id)
|
||||||
for mod in mods:
|
for mod in mods:
|
||||||
# evaluations
|
# evaluations
|
||||||
evals = sco_evaluations.do_evaluation_list(
|
evals = sco_evaluations.do_evaluation_list(
|
||||||
|
@ -237,7 +237,7 @@ def do_formsemestre_inscription_with_modules(
|
|||||||
gdone[group_id] = 1
|
gdone[group_id] = 1
|
||||||
|
|
||||||
# inscription a tous les modules de ce semestre
|
# inscription a tous les modules de ce semestre
|
||||||
modimpls = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
modimpls = sco_moduleimpl.moduleimpl_withmodule_list(
|
||||||
formsemestre_id=formsemestre_id
|
formsemestre_id=formsemestre_id
|
||||||
)
|
)
|
||||||
for mod in modimpls:
|
for mod in modimpls:
|
||||||
@ -448,7 +448,7 @@ def formsemestre_inscription_option(etudid, formsemestre_id):
|
|||||||
]
|
]
|
||||||
|
|
||||||
# Cherche les moduleimpls et les inscriptions
|
# Cherche les moduleimpls et les inscriptions
|
||||||
mods = sco_moduleimpl.do_moduleimpl_withmodule_list(formsemestre_id=formsemestre_id)
|
mods = sco_moduleimpl.moduleimpl_withmodule_list(formsemestre_id=formsemestre_id)
|
||||||
inscr = sco_moduleimpl.do_moduleimpl_inscription_list(etudid=etudid)
|
inscr = sco_moduleimpl.do_moduleimpl_inscription_list(etudid=etudid)
|
||||||
# Formulaire
|
# Formulaire
|
||||||
modimpls_by_ue_ids = scu.DictDefault(defaultvalue=[]) # ue_id : [ moduleimpl_id ]
|
modimpls_by_ue_ids = scu.DictDefault(defaultvalue=[]) # ue_id : [ moduleimpl_id ]
|
||||||
@ -680,7 +680,7 @@ def do_moduleimpl_incription_options(
|
|||||||
# inscriptions
|
# inscriptions
|
||||||
for moduleimpl_id in a_inscrire:
|
for moduleimpl_id in a_inscrire:
|
||||||
# verifie que ce module existe bien
|
# verifie que ce module existe bien
|
||||||
mods = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)
|
mods = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)
|
||||||
if len(mods) != 1:
|
if len(mods) != 1:
|
||||||
raise ScoValueError(
|
raise ScoValueError(
|
||||||
"inscription: invalid moduleimpl_id: %s" % moduleimpl_id
|
"inscription: invalid moduleimpl_id: %s" % moduleimpl_id
|
||||||
@ -693,7 +693,7 @@ def do_moduleimpl_incription_options(
|
|||||||
# desinscriptions
|
# desinscriptions
|
||||||
for moduleimpl_id in a_desinscrire:
|
for moduleimpl_id in a_desinscrire:
|
||||||
# verifie que ce module existe bien
|
# verifie que ce module existe bien
|
||||||
mods = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)
|
mods = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)
|
||||||
if len(mods) != 1:
|
if len(mods) != 1:
|
||||||
raise ScoValueError(
|
raise ScoValueError(
|
||||||
"desinscription: invalid moduleimpl_id: %s" % moduleimpl_id
|
"desinscription: invalid moduleimpl_id: %s" % moduleimpl_id
|
||||||
|
@ -453,7 +453,7 @@ def retreive_formsemestre_from_request() -> int:
|
|||||||
if "formsemestre_id" in args:
|
if "formsemestre_id" in args:
|
||||||
formsemestre_id = args["formsemestre_id"]
|
formsemestre_id = args["formsemestre_id"]
|
||||||
elif "moduleimpl_id" in args and args["moduleimpl_id"]:
|
elif "moduleimpl_id" in args and args["moduleimpl_id"]:
|
||||||
modimpl = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=args["moduleimpl_id"])
|
modimpl = sco_moduleimpl.moduleimpl_list(moduleimpl_id=args["moduleimpl_id"])
|
||||||
if not modimpl:
|
if not modimpl:
|
||||||
return None # suppressed ?
|
return None # suppressed ?
|
||||||
modimpl = modimpl[0]
|
modimpl = modimpl[0]
|
||||||
@ -463,7 +463,7 @@ def retreive_formsemestre_from_request() -> int:
|
|||||||
if not E:
|
if not E:
|
||||||
return None # evaluation suppressed ?
|
return None # evaluation suppressed ?
|
||||||
E = E[0]
|
E = E[0]
|
||||||
modimpl = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
modimpl = sco_moduleimpl.moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
formsemestre_id = modimpl["formsemestre_id"]
|
formsemestre_id = modimpl["formsemestre_id"]
|
||||||
elif "group_id" in args:
|
elif "group_id" in args:
|
||||||
group = sco_groups.get_group(args["group_id"])
|
group = sco_groups.get_group(args["group_id"])
|
||||||
@ -593,9 +593,7 @@ def formsemestre_description_table(formsemestre_id, with_evals=False):
|
|||||||
use_ue_coefs = sco_preferences.get_preference("use_ue_coefs", formsemestre_id)
|
use_ue_coefs = sco_preferences.get_preference("use_ue_coefs", formsemestre_id)
|
||||||
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"])
|
parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"])
|
||||||
Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
Mlist = sco_moduleimpl.moduleimpl_withmodule_list(formsemestre_id=formsemestre_id)
|
||||||
formsemestre_id=formsemestre_id
|
|
||||||
)
|
|
||||||
|
|
||||||
R = []
|
R = []
|
||||||
sum_coef = 0
|
sum_coef = 0
|
||||||
@ -885,7 +883,7 @@ def html_expr_diagnostic(diagnostics):
|
|||||||
last_id, last_msg = None, None
|
last_id, last_msg = None, None
|
||||||
for diag in diagnostics:
|
for diag in diagnostics:
|
||||||
if "moduleimpl_id" in diag:
|
if "moduleimpl_id" in diag:
|
||||||
mod = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
mod = sco_moduleimpl.moduleimpl_withmodule_list(
|
||||||
moduleimpl_id=diag["moduleimpl_id"]
|
moduleimpl_id=diag["moduleimpl_id"]
|
||||||
)[0]
|
)[0]
|
||||||
H.append(
|
H.append(
|
||||||
@ -982,9 +980,7 @@ def formsemestre_status(formsemestre_id=None):
|
|||||||
# porté du DTML
|
# porté du DTML
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id, raise_soft_exc=True)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id, raise_soft_exc=True)
|
||||||
Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
Mlist = sco_moduleimpl.moduleimpl_withmodule_list(formsemestre_id=formsemestre_id)
|
||||||
formsemestre_id=formsemestre_id
|
|
||||||
)
|
|
||||||
# inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
# inscrits = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
|
||||||
# args={"formsemestre_id": formsemestre_id}
|
# args={"formsemestre_id": formsemestre_id}
|
||||||
# )
|
# )
|
||||||
|
@ -47,7 +47,7 @@ from flask import url_for, make_response
|
|||||||
|
|
||||||
import app.scodoc.sco_utils as scu
|
import app.scodoc.sco_utils as scu
|
||||||
import app.scodoc.notesdb as ndb
|
import app.scodoc.notesdb as ndb
|
||||||
from app import log
|
from app import log, cache
|
||||||
from app.scodoc.scolog import logdb
|
from app.scodoc.scolog import logdb
|
||||||
from app.scodoc import html_sco_header
|
from app.scodoc import html_sco_header
|
||||||
from app.scodoc import sco_codes_parcours
|
from app.scodoc import sco_codes_parcours
|
||||||
@ -438,6 +438,7 @@ def etud_add_group_infos(etud, sem, sep=" "):
|
|||||||
return etud
|
return etud
|
||||||
|
|
||||||
|
|
||||||
|
@cache.memoize(timeout=50) # seconds
|
||||||
def get_etud_groups_in_partition(partition_id):
|
def get_etud_groups_in_partition(partition_id):
|
||||||
"""Returns { etudid : group }, with all students in this partition"""
|
"""Returns { etudid : group }, with all students in this partition"""
|
||||||
infos = ndb.SimpleDictFetch(
|
infos = ndb.SimpleDictFetch(
|
||||||
@ -1391,6 +1392,7 @@ def do_evaluation_listeetuds_groups(
|
|||||||
Si include_dems, compte aussi les etudiants démissionnaires
|
Si include_dems, compte aussi les etudiants démissionnaires
|
||||||
(sinon, par défaut, seulement les 'I')
|
(sinon, par défaut, seulement les 'I')
|
||||||
"""
|
"""
|
||||||
|
# nb: pour notes_table / do_evaluation_etat, getallstudents est vrai et include_dems faux
|
||||||
fromtables = [
|
fromtables = [
|
||||||
"notes_moduleimpl_inscription Im",
|
"notes_moduleimpl_inscription Im",
|
||||||
"notes_formsemestre_inscription Isem",
|
"notes_formsemestre_inscription Isem",
|
||||||
@ -1402,7 +1404,7 @@ def do_evaluation_listeetuds_groups(
|
|||||||
if not groups:
|
if not groups:
|
||||||
return [] # no groups, so no students
|
return [] # no groups, so no students
|
||||||
rg = ["gm.group_id = '%(group_id)s'" % g for g in groups]
|
rg = ["gm.group_id = '%(group_id)s'" % g for g in groups]
|
||||||
rq = """and Isem.etudid = gm.etudid
|
rq = """and Isem.etudid = gm.etudid
|
||||||
and gd.partition_id = p.id
|
and gd.partition_id = p.id
|
||||||
and p.formsemestre_id = Isem.formsemestre_id
|
and p.formsemestre_id = Isem.formsemestre_id
|
||||||
"""
|
"""
|
||||||
@ -1415,7 +1417,7 @@ def do_evaluation_listeetuds_groups(
|
|||||||
req = (
|
req = (
|
||||||
"SELECT distinct Im.etudid FROM "
|
"SELECT distinct Im.etudid FROM "
|
||||||
+ ", ".join(fromtables)
|
+ ", ".join(fromtables)
|
||||||
+ """ WHERE Isem.etudid = Im.etudid
|
+ """ WHERE Isem.etudid = Im.etudid
|
||||||
and Im.moduleimpl_id = M.id
|
and Im.moduleimpl_id = M.id
|
||||||
and Isem.formsemestre_id = M.formsemestre_id
|
and Isem.formsemestre_id = M.formsemestre_id
|
||||||
and E.moduleimpl_id = M.id
|
and E.moduleimpl_id = M.id
|
||||||
@ -1426,10 +1428,9 @@ def do_evaluation_listeetuds_groups(
|
|||||||
req += " and Isem.etat='I'"
|
req += " and Isem.etat='I'"
|
||||||
req += r
|
req += r
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
|
cursor = cnx.cursor()
|
||||||
cursor.execute(req, {"evaluation_id": evaluation_id})
|
cursor.execute(req, {"evaluation_id": evaluation_id})
|
||||||
res = cursor.fetchall()
|
return [x[0] for x in cursor]
|
||||||
return [x[0] for x in res]
|
|
||||||
|
|
||||||
|
|
||||||
def do_evaluation_listegroupes(evaluation_id, include_default=False):
|
def do_evaluation_listegroupes(evaluation_id, include_default=False):
|
||||||
@ -1443,7 +1444,7 @@ def do_evaluation_listegroupes(evaluation_id, include_default=False):
|
|||||||
else:
|
else:
|
||||||
c = " AND p.partition_name is not NULL"
|
c = " AND p.partition_name is not NULL"
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
|
cursor = cnx.cursor()
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
"""SELECT DISTINCT gd.id AS group_id
|
"""SELECT DISTINCT gd.id AS group_id
|
||||||
FROM group_descr gd, group_membership gm, partition p,
|
FROM group_descr gd, group_membership gm, partition p,
|
||||||
@ -1457,8 +1458,7 @@ def do_evaluation_listegroupes(evaluation_id, include_default=False):
|
|||||||
+ c,
|
+ c,
|
||||||
{"evaluation_id": evaluation_id},
|
{"evaluation_id": evaluation_id},
|
||||||
)
|
)
|
||||||
res = cursor.fetchall()
|
group_ids = [x[0] for x in cursor]
|
||||||
group_ids = [x[0] for x in res]
|
|
||||||
return listgroups(group_ids)
|
return listgroups(group_ids)
|
||||||
|
|
||||||
|
|
||||||
|
@ -304,7 +304,7 @@ class DisplayedGroupsInfos(object):
|
|||||||
else:
|
else:
|
||||||
group_ids = [int(g) for g in group_ids]
|
group_ids = [int(g) for g in group_ids]
|
||||||
if not formsemestre_id and moduleimpl_id:
|
if not formsemestre_id and moduleimpl_id:
|
||||||
mods = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)
|
mods = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)
|
||||||
if len(mods) != 1:
|
if len(mods) != 1:
|
||||||
raise ValueError("invalid moduleimpl_id")
|
raise ValueError("invalid moduleimpl_id")
|
||||||
formsemestre_id = mods[0]["formsemestre_id"]
|
formsemestre_id = mods[0]["formsemestre_id"]
|
||||||
|
@ -228,7 +228,7 @@ def _make_table_notes(
|
|||||||
return "<p>Aucune évaluation !</p>"
|
return "<p>Aucune évaluation !</p>"
|
||||||
E = evals[0]
|
E = evals[0]
|
||||||
moduleimpl_id = E["moduleimpl_id"]
|
moduleimpl_id = E["moduleimpl_id"]
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
||||||
# (debug) check that all evals are in same module:
|
# (debug) check that all evals are in same module:
|
||||||
@ -872,9 +872,7 @@ def formsemestre_check_absences_html(formsemestre_id):
|
|||||||
</p>""",
|
</p>""",
|
||||||
]
|
]
|
||||||
# Modules, dans l'ordre
|
# Modules, dans l'ordre
|
||||||
Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
Mlist = sco_moduleimpl.moduleimpl_withmodule_list(formsemestre_id=formsemestre_id)
|
||||||
formsemestre_id=formsemestre_id
|
|
||||||
)
|
|
||||||
for M in Mlist:
|
for M in Mlist:
|
||||||
evals = sco_evaluations.do_evaluation_list(
|
evals = sco_evaluations.do_evaluation_list(
|
||||||
{"moduleimpl_id": M["moduleimpl_id"]}
|
{"moduleimpl_id": M["moduleimpl_id"]}
|
||||||
|
@ -100,7 +100,7 @@ def do_moduleimpl_delete(oid, formsemestre_id=None):
|
|||||||
) # > moduleimpl_delete
|
) # > moduleimpl_delete
|
||||||
|
|
||||||
|
|
||||||
def do_moduleimpl_list(moduleimpl_id=None, formsemestre_id=None, module_id=None):
|
def moduleimpl_list(moduleimpl_id=None, formsemestre_id=None, module_id=None):
|
||||||
"list moduleimpls"
|
"list moduleimpls"
|
||||||
args = locals()
|
args = locals()
|
||||||
cnx = ndb.GetDBConnexion()
|
cnx = ndb.GetDBConnexion()
|
||||||
@ -122,10 +122,11 @@ def do_moduleimpl_edit(args, formsemestre_id=None, cnx=None):
|
|||||||
) # > modif moduleimpl
|
) # > modif moduleimpl
|
||||||
|
|
||||||
|
|
||||||
def do_moduleimpl_withmodule_list(
|
def moduleimpl_withmodule_list(
|
||||||
moduleimpl_id=None, formsemestre_id=None, module_id=None
|
moduleimpl_id=None, formsemestre_id=None, module_id=None
|
||||||
):
|
):
|
||||||
"""Liste les moduleimpls et ajoute dans chacun le module correspondant
|
"""Liste les moduleimpls et ajoute dans chacun
|
||||||
|
l'UE, la matière et le module auxquels ils appartiennent.
|
||||||
Tri la liste par semestre/UE/numero_matiere/numero_module.
|
Tri la liste par semestre/UE/numero_matiere/numero_module.
|
||||||
|
|
||||||
Attention: Cette fonction fait partie de l'API ScoDoc 7 et est publiée.
|
Attention: Cette fonction fait partie de l'API ScoDoc 7 et est publiée.
|
||||||
@ -134,22 +135,33 @@ def do_moduleimpl_withmodule_list(
|
|||||||
from app.scodoc import sco_edit_matiere
|
from app.scodoc import sco_edit_matiere
|
||||||
from app.scodoc import sco_edit_module
|
from app.scodoc import sco_edit_module
|
||||||
|
|
||||||
args = locals()
|
modimpls = moduleimpl_list(
|
||||||
modimpls = do_moduleimpl_list(
|
|
||||||
**{
|
**{
|
||||||
"moduleimpl_id": moduleimpl_id,
|
"moduleimpl_id": moduleimpl_id,
|
||||||
"formsemestre_id": formsemestre_id,
|
"formsemestre_id": formsemestre_id,
|
||||||
"module_id": module_id,
|
"module_id": module_id,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
for mo in modimpls:
|
ues = {}
|
||||||
mo["module"] = sco_edit_module.do_module_list(
|
matieres = {}
|
||||||
args={"module_id": mo["module_id"]}
|
modules = {}
|
||||||
)[0]
|
for mi in modimpls:
|
||||||
mo["ue"] = sco_edit_ue.do_ue_list(args={"ue_id": mo["module"]["ue_id"]})[0]
|
module_id = mi["module_id"]
|
||||||
mo["matiere"] = sco_edit_matiere.do_matiere_list(
|
if not mi["module_id"] in modules:
|
||||||
args={"matiere_id": mo["module"]["matiere_id"]}
|
modules[module_id] = sco_edit_module.do_module_list(
|
||||||
)[0]
|
args={"module_id": module_id}
|
||||||
|
)[0]
|
||||||
|
mi["module"] = modules[module_id]
|
||||||
|
ue_id = mi["module"]["ue_id"]
|
||||||
|
if not ue_id in ues:
|
||||||
|
ues[ue_id] = sco_edit_ue.do_ue_list(args={"ue_id": ue_id})[0]
|
||||||
|
mi["ue"] = ues[ue_id]
|
||||||
|
matiere_id = mi["module"]["matiere_id"]
|
||||||
|
if not matiere_id in matieres:
|
||||||
|
matieres[matiere_id] = sco_edit_matiere.do_matiere_list(
|
||||||
|
args={"matiere_id": matiere_id}
|
||||||
|
)[0]
|
||||||
|
mi["matiere"] = matieres[matiere_id]
|
||||||
|
|
||||||
# tri par semestre/UE/numero_matiere/numero_module
|
# tri par semestre/UE/numero_matiere/numero_module
|
||||||
modimpls.sort(
|
modimpls.sort(
|
||||||
@ -173,7 +185,7 @@ def do_moduleimpl_inscription_list(moduleimpl_id=None, etudid=None):
|
|||||||
return _moduleimpl_inscriptionEditor.list(cnx, args)
|
return _moduleimpl_inscriptionEditor.list(cnx, args)
|
||||||
|
|
||||||
|
|
||||||
def do_moduleimpl_listeetuds(moduleimpl_id):
|
def moduleimpl_listeetuds(moduleimpl_id):
|
||||||
"retourne liste des etudids inscrits a ce module"
|
"retourne liste des etudids inscrits a ce module"
|
||||||
req = """SELECT DISTINCT Im.etudid
|
req = """SELECT DISTINCT Im.etudid
|
||||||
FROM notes_moduleimpl_inscription Im,
|
FROM notes_moduleimpl_inscription Im,
|
||||||
@ -306,7 +318,7 @@ def can_change_module_resp(moduleimpl_id):
|
|||||||
"""Check if current user can modify module resp. (raise exception if not).
|
"""Check if current user can modify module resp. (raise exception if not).
|
||||||
= Admin, et dir des etud. (si option l'y autorise)
|
= Admin, et dir des etud. (si option l'y autorise)
|
||||||
"""
|
"""
|
||||||
M = do_moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[0]
|
M = moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
# -- check lock
|
# -- check lock
|
||||||
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
@ -322,7 +334,7 @@ def can_change_module_resp(moduleimpl_id):
|
|||||||
|
|
||||||
def can_change_ens(moduleimpl_id, raise_exc=True):
|
def can_change_ens(moduleimpl_id, raise_exc=True):
|
||||||
"check if current user can modify ens list (raise exception if not)"
|
"check if current user can modify ens list (raise exception if not)"
|
||||||
M = do_moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[0]
|
M = moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
# -- check lock
|
# -- check lock
|
||||||
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
|
@ -63,7 +63,7 @@ def moduleimpl_inscriptions_edit(moduleimpl_id, etuds=[], submitted=False):
|
|||||||
|
|
||||||
* Si pas les droits: idem en readonly
|
* Si pas les droits: idem en readonly
|
||||||
"""
|
"""
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
formsemestre_id = M["formsemestre_id"]
|
formsemestre_id = M["formsemestre_id"]
|
||||||
mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
@ -263,9 +263,7 @@ def moduleimpl_inscriptions_stats(formsemestre_id):
|
|||||||
can_change = authuser.has_permission(Permission.ScoEtudInscrit) and sem["etat"]
|
can_change = authuser.has_permission(Permission.ScoEtudInscrit) and sem["etat"]
|
||||||
|
|
||||||
# Liste des modules
|
# Liste des modules
|
||||||
Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
Mlist = sco_moduleimpl.moduleimpl_withmodule_list(formsemestre_id=formsemestre_id)
|
||||||
formsemestre_id=formsemestre_id
|
|
||||||
)
|
|
||||||
# Decrit les inscriptions aux modules:
|
# Decrit les inscriptions aux modules:
|
||||||
commons = [] # modules communs a tous les etuds du semestre
|
commons = [] # modules communs a tous les etuds du semestre
|
||||||
options = [] # modules ou seuls quelques etudiants sont inscrits
|
options = [] # modules ou seuls quelques etudiants sont inscrits
|
||||||
|
@ -58,7 +58,7 @@ from app.scodoc import sco_users
|
|||||||
def moduleimpl_evaluation_menu(evaluation_id, nbnotes=0):
|
def moduleimpl_evaluation_menu(evaluation_id, nbnotes=0):
|
||||||
"Menu avec actions sur une evaluation"
|
"Menu avec actions sur une evaluation"
|
||||||
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
||||||
modimpl = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
modimpl = sco_moduleimpl.moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
|
|
||||||
group_id = sco_groups.get_default_group(modimpl["formsemestre_id"])
|
group_id = sco_groups.get_default_group(modimpl["formsemestre_id"])
|
||||||
|
|
||||||
@ -156,7 +156,7 @@ def moduleimpl_evaluation_menu(evaluation_id, nbnotes=0):
|
|||||||
|
|
||||||
def moduleimpl_status(moduleimpl_id=None, partition_id=None):
|
def moduleimpl_status(moduleimpl_id=None, partition_id=None):
|
||||||
"""Tableau de bord module (liste des evaluations etc)"""
|
"""Tableau de bord module (liste des evaluations etc)"""
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
formsemestre_id = M["formsemestre_id"]
|
formsemestre_id = M["formsemestre_id"]
|
||||||
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
|
@ -174,7 +174,7 @@ def _get_formsemestre_infos_from_news(n):
|
|||||||
elif n["type"] == NEWS_NOTE:
|
elif n["type"] == NEWS_NOTE:
|
||||||
moduleimpl_id = n["object"]
|
moduleimpl_id = n["object"]
|
||||||
if n["object"]:
|
if n["object"]:
|
||||||
mods = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)
|
mods = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)
|
||||||
if not mods:
|
if not mods:
|
||||||
return {} # module does not exists anymore
|
return {} # module does not exists anymore
|
||||||
return {} # pas d'indication du module
|
return {} # pas d'indication du module
|
||||||
|
@ -26,7 +26,7 @@ def can_edit_notes(authuser, moduleimpl_id, allow_ens=True):
|
|||||||
from app.scodoc import sco_formsemestre
|
from app.scodoc import sco_formsemestre
|
||||||
from app.scodoc import sco_parcours_dut
|
from app.scodoc import sco_parcours_dut
|
||||||
|
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
||||||
if not sem["etat"]:
|
if not sem["etat"]:
|
||||||
return False # semestre verrouillé
|
return False # semestre verrouillé
|
||||||
@ -64,7 +64,7 @@ def can_edit_evaluation(moduleimpl_id=None):
|
|||||||
# acces pour resp. moduleimpl et resp. form semestre (dir etud)
|
# acces pour resp. moduleimpl et resp. form semestre (dir etud)
|
||||||
if moduleimpl_id is None:
|
if moduleimpl_id is None:
|
||||||
raise ValueError("no moduleimpl specified") # bug
|
raise ValueError("no moduleimpl specified") # bug
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
||||||
|
|
||||||
if (
|
if (
|
||||||
@ -200,4 +200,4 @@ def can_handle_passwd(user, allow_admindepts=False):
|
|||||||
if (current_user.dept == user.dept) or allow_admindepts:
|
if (current_user.dept == user.dept) or allow_admindepts:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
@ -244,7 +244,7 @@ class PlacementRunner:
|
|||||||
# gr_title = sco_groups.listgroups_abbrev(d['groups'])
|
# gr_title = sco_groups.listgroups_abbrev(d['groups'])
|
||||||
self.current_user = current_user
|
self.current_user = current_user
|
||||||
self.moduleimpl_id = self.eval_data["moduleimpl_id"]
|
self.moduleimpl_id = self.eval_data["moduleimpl_id"]
|
||||||
self.moduleimpl_data = sco_moduleimpl.do_moduleimpl_list(
|
self.moduleimpl_data = sco_moduleimpl.moduleimpl_list(
|
||||||
moduleimpl_id=self.moduleimpl_id
|
moduleimpl_id=self.moduleimpl_id
|
||||||
)[0]
|
)[0]
|
||||||
self.module_data = sco_edit_module.do_module_list(
|
self.module_data = sco_edit_module.do_module_list(
|
||||||
|
@ -177,9 +177,7 @@ def do_evaluation_upload_xls():
|
|||||||
evaluation_id = int(vals["evaluation_id"])
|
evaluation_id = int(vals["evaluation_id"])
|
||||||
comment = vals["comment"]
|
comment = vals["comment"]
|
||||||
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
||||||
M = sco_moduleimpl.do_moduleimpl_withmodule_list(moduleimpl_id=E["moduleimpl_id"])[
|
M = sco_moduleimpl.moduleimpl_withmodule_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
0
|
|
||||||
]
|
|
||||||
# Check access
|
# Check access
|
||||||
# (admin, respformation, and responsable_id)
|
# (admin, respformation, and responsable_id)
|
||||||
if not sco_permissions_check.can_edit_notes(authuser, E["moduleimpl_id"]):
|
if not sco_permissions_check.can_edit_notes(authuser, E["moduleimpl_id"]):
|
||||||
@ -253,7 +251,7 @@ def do_evaluation_upload_xls():
|
|||||||
)
|
)
|
||||||
# news
|
# news
|
||||||
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
mod["moduleimpl_id"] = M["moduleimpl_id"]
|
mod["moduleimpl_id"] = M["moduleimpl_id"]
|
||||||
mod["url"] = url_for(
|
mod["url"] = url_for(
|
||||||
@ -292,9 +290,7 @@ def do_evaluation_upload_xls():
|
|||||||
def do_evaluation_set_missing(evaluation_id, value, dialog_confirmed=False):
|
def do_evaluation_set_missing(evaluation_id, value, dialog_confirmed=False):
|
||||||
"""Initialisation des notes manquantes"""
|
"""Initialisation des notes manquantes"""
|
||||||
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
||||||
M = sco_moduleimpl.do_moduleimpl_withmodule_list(moduleimpl_id=E["moduleimpl_id"])[
|
M = sco_moduleimpl.moduleimpl_withmodule_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
0
|
|
||||||
]
|
|
||||||
# Check access
|
# Check access
|
||||||
# (admin, respformation, and responsable_id)
|
# (admin, respformation, and responsable_id)
|
||||||
if not sco_permissions_check.can_edit_notes(current_user, E["moduleimpl_id"]):
|
if not sco_permissions_check.can_edit_notes(current_user, E["moduleimpl_id"]):
|
||||||
@ -340,7 +336,7 @@ def do_evaluation_set_missing(evaluation_id, value, dialog_confirmed=False):
|
|||||||
comment = "Initialisation notes manquantes"
|
comment = "Initialisation notes manquantes"
|
||||||
nb_changed, _, _ = _notes_add(current_user, evaluation_id, L, comment)
|
nb_changed, _, _ = _notes_add(current_user, evaluation_id, L, comment)
|
||||||
# news
|
# news
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
mod["moduleimpl_id"] = M["moduleimpl_id"]
|
mod["moduleimpl_id"] = M["moduleimpl_id"]
|
||||||
mod["url"] = url_for(
|
mod["url"] = url_for(
|
||||||
@ -429,7 +425,7 @@ def evaluation_suppress_alln(evaluation_id, dialog_confirmed=False):
|
|||||||
% E["moduleimpl_id"]
|
% E["moduleimpl_id"]
|
||||||
]
|
]
|
||||||
# news
|
# news
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
mod["moduleimpl_id"] = M["moduleimpl_id"]
|
mod["moduleimpl_id"] = M["moduleimpl_id"]
|
||||||
mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod
|
mod["url"] = "Notes/moduleimpl_status?moduleimpl_id=%(moduleimpl_id)s" % mod
|
||||||
@ -476,7 +472,7 @@ def _notes_add(user, evaluation_id: int, notes: list, comment=None, do_it=True):
|
|||||||
nb_changed = 0
|
nb_changed = 0
|
||||||
nb_suppress = 0
|
nb_suppress = 0
|
||||||
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
existing_decisions = (
|
existing_decisions = (
|
||||||
[]
|
[]
|
||||||
) # etudids pour lesquels il y a une decision de jury et que la note change
|
) # etudids pour lesquels il y a une decision de jury et que la note change
|
||||||
@ -598,7 +594,7 @@ def saisie_notes_tableur(evaluation_id, group_ids=()):
|
|||||||
if not evals:
|
if not evals:
|
||||||
raise ScoValueError("invalid evaluation_id")
|
raise ScoValueError("invalid evaluation_id")
|
||||||
E = evals[0]
|
E = evals[0]
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
formsemestre_id = M["formsemestre_id"]
|
formsemestre_id = M["formsemestre_id"]
|
||||||
if not sco_permissions_check.can_edit_notes(current_user, E["moduleimpl_id"]):
|
if not sco_permissions_check.can_edit_notes(current_user, E["moduleimpl_id"]):
|
||||||
return (
|
return (
|
||||||
@ -769,7 +765,7 @@ def feuille_saisie_notes(evaluation_id, group_ids=[]):
|
|||||||
if not evals:
|
if not evals:
|
||||||
raise ScoValueError("invalid evaluation_id")
|
raise ScoValueError("invalid evaluation_id")
|
||||||
E = evals[0]
|
E = evals[0]
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
formsemestre_id = M["formsemestre_id"]
|
formsemestre_id = M["formsemestre_id"]
|
||||||
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
||||||
@ -868,9 +864,7 @@ def saisie_notes(evaluation_id, group_ids=[]):
|
|||||||
if not evals:
|
if not evals:
|
||||||
raise ScoValueError("invalid evaluation_id")
|
raise ScoValueError("invalid evaluation_id")
|
||||||
E = evals[0]
|
E = evals[0]
|
||||||
M = sco_moduleimpl.do_moduleimpl_withmodule_list(moduleimpl_id=E["moduleimpl_id"])[
|
M = sco_moduleimpl.moduleimpl_withmodule_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
0
|
|
||||||
]
|
|
||||||
formsemestre_id = M["formsemestre_id"]
|
formsemestre_id = M["formsemestre_id"]
|
||||||
# Check access
|
# Check access
|
||||||
# (admin, respformation, and responsable_id)
|
# (admin, respformation, and responsable_id)
|
||||||
@ -1230,7 +1224,7 @@ def save_note(etudid=None, evaluation_id=None, value=None, comment=""):
|
|||||||
% (evaluation_id, etudid, authuser, value)
|
% (evaluation_id, etudid, authuser, value)
|
||||||
)
|
)
|
||||||
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
Mod["url"] = url_for(
|
Mod["url"] = url_for(
|
||||||
"notes.moduleimpl_status",
|
"notes.moduleimpl_status",
|
||||||
|
@ -149,7 +149,7 @@ def list_operations(evaluation_id):
|
|||||||
def evaluation_list_operations(evaluation_id):
|
def evaluation_list_operations(evaluation_id):
|
||||||
"""Page listing operations on evaluation"""
|
"""Page listing operations on evaluation"""
|
||||||
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
E = sco_evaluations.do_evaluation_list({"evaluation_id": evaluation_id})[0]
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
|
|
||||||
Ops = list_operations(evaluation_id)
|
Ops = list_operations(evaluation_id)
|
||||||
|
|
||||||
|
@ -1059,11 +1059,11 @@ def edit_moduleimpl_expr(moduleimpl_id):
|
|||||||
@scodoc7func
|
@scodoc7func
|
||||||
def view_module_abs(moduleimpl_id, format="html"):
|
def view_module_abs(moduleimpl_id, format="html"):
|
||||||
"""Visualisation des absences a un module"""
|
"""Visualisation des absences a un module"""
|
||||||
M = sco_moduleimpl.do_moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[0]
|
M = sco_moduleimpl.moduleimpl_withmodule_list(moduleimpl_id=moduleimpl_id)[0]
|
||||||
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
sem = sco_formsemestre.get_formsemestre(M["formsemestre_id"])
|
||||||
debut_sem = ndb.DateDMYtoISO(sem["date_debut"])
|
debut_sem = ndb.DateDMYtoISO(sem["date_debut"])
|
||||||
fin_sem = ndb.DateDMYtoISO(sem["date_fin"])
|
fin_sem = ndb.DateDMYtoISO(sem["date_fin"])
|
||||||
list_insc = sco_moduleimpl.do_moduleimpl_listeetuds(moduleimpl_id)
|
list_insc = sco_moduleimpl.moduleimpl_listeetuds(moduleimpl_id)
|
||||||
|
|
||||||
T = []
|
T = []
|
||||||
for etudid in list_insc:
|
for etudid in list_insc:
|
||||||
@ -1213,7 +1213,7 @@ def formsemestre_enseignants_list(formsemestre_id, format="html"):
|
|||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
# resp. de modules:
|
# resp. de modules:
|
||||||
mods = sco_moduleimpl.do_moduleimpl_withmodule_list(formsemestre_id=formsemestre_id)
|
mods = sco_moduleimpl.moduleimpl_withmodule_list(formsemestre_id=formsemestre_id)
|
||||||
sem_ens = {}
|
sem_ens = {}
|
||||||
for mod in mods:
|
for mod in mods:
|
||||||
if not mod["responsable_id"] in sem_ens:
|
if not mod["responsable_id"] in sem_ens:
|
||||||
@ -1527,7 +1527,7 @@ def evaluation_delete(evaluation_id):
|
|||||||
if not El:
|
if not El:
|
||||||
raise ValueError("Evalution inexistante ! (%s)" % evaluation_id)
|
raise ValueError("Evalution inexistante ! (%s)" % evaluation_id)
|
||||||
E = El[0]
|
E = El[0]
|
||||||
M = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
M = sco_moduleimpl.moduleimpl_list(moduleimpl_id=E["moduleimpl_id"])[0]
|
||||||
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
Mod = sco_edit_module.do_module_list(args={"module_id": M["module_id"]})[0]
|
||||||
tit = "Suppression de l'évaluation %(description)s (%(jour)s)" % E
|
tit = "Suppression de l'évaluation %(description)s (%(jour)s)" % E
|
||||||
etat = sco_evaluations.do_evaluation_etat(evaluation_id)
|
etat = sco_evaluations.do_evaluation_etat(evaluation_id)
|
||||||
@ -2424,7 +2424,7 @@ def check_sem_integrity(formsemestre_id, fix=False):
|
|||||||
"""
|
"""
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
|
|
||||||
modimpls = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id)
|
modimpls = sco_moduleimpl.moduleimpl_list(formsemestre_id=formsemestre_id)
|
||||||
bad_ue = []
|
bad_ue = []
|
||||||
bad_sem = []
|
bad_sem = []
|
||||||
formations_set = set() # les formations mentionnées dans les UE et modules
|
formations_set = set() # les formations mentionnées dans les UE et modules
|
||||||
@ -2534,9 +2534,7 @@ def check_formsemestre_integrity(formsemestre_id):
|
|||||||
# de formations
|
# de formations
|
||||||
diag = []
|
diag = []
|
||||||
|
|
||||||
Mlist = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
Mlist = sco_moduleimpl.moduleimpl_withmodule_list(formsemestre_id=formsemestre_id)
|
||||||
formsemestre_id=formsemestre_id
|
|
||||||
)
|
|
||||||
for mod in Mlist:
|
for mod in Mlist:
|
||||||
if mod["module"]["ue_id"] != mod["matiere"]["ue_id"]:
|
if mod["module"]["ue_id"] != mod["matiere"]["ue_id"]:
|
||||||
diag.append(
|
diag.append(
|
||||||
@ -2593,14 +2591,14 @@ def check_integrity_all():
|
|||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
# Support for legacy ScoDoc 7 API
|
# Support for legacy ScoDoc 7 API
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
@bp.route("/do_moduleimpl_list")
|
@bp.route("/moduleimpl_list")
|
||||||
@scodoc
|
@scodoc
|
||||||
@permission_required(Permission.ScoView)
|
@permission_required(Permission.ScoView)
|
||||||
@scodoc7func
|
@scodoc7func
|
||||||
def do_moduleimpl_list(
|
def moduleimpl_list(
|
||||||
moduleimpl_id=None, formsemestre_id=None, module_id=None, format="json"
|
moduleimpl_id=None, formsemestre_id=None, module_id=None, format="json"
|
||||||
):
|
):
|
||||||
data = sco_moduleimpl.do_moduleimpl_list(
|
data = sco_moduleimpl.moduleimpl_list(
|
||||||
moduleimpl_id=moduleimpl_id,
|
moduleimpl_id=moduleimpl_id,
|
||||||
formsemestre_id=formsemestre_id,
|
formsemestre_id=formsemestre_id,
|
||||||
module_id=module_id,
|
module_id=module_id,
|
||||||
@ -2608,15 +2606,16 @@ def do_moduleimpl_list(
|
|||||||
return scu.sendResult(data, format=format)
|
return scu.sendResult(data, format=format)
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/do_moduleimpl_withmodule_list")
|
@bp.route("/do_moduleimpl_withmodule_list") # ancien nom
|
||||||
|
@bp.route("/moduleimpl_withmodule_list")
|
||||||
@scodoc
|
@scodoc
|
||||||
@permission_required(Permission.ScoView)
|
@permission_required(Permission.ScoView)
|
||||||
@scodoc7func
|
@scodoc7func
|
||||||
def do_moduleimpl_withmodule_list(
|
def moduleimpl_withmodule_list(
|
||||||
moduleimpl_id=None, formsemestre_id=None, module_id=None
|
moduleimpl_id=None, formsemestre_id=None, module_id=None
|
||||||
):
|
):
|
||||||
"""API ScoDoc 7"""
|
"""API ScoDoc 7"""
|
||||||
data = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
data = sco_moduleimpl.moduleimpl_withmodule_list(
|
||||||
moduleimpl_id=moduleimpl_id,
|
moduleimpl_id=moduleimpl_id,
|
||||||
formsemestre_id=formsemestre_id,
|
formsemestre_id=formsemestre_id,
|
||||||
module_id=module_id,
|
module_id=module_id,
|
||||||
|
13
bench.py
Normal file
13
bench.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
"""Script pour faciliter le lancement de benchmarks
|
||||||
|
"""
|
||||||
|
|
||||||
|
from tests.bench.notes_table import bench_notes_table
|
||||||
|
|
||||||
|
BENCH_DEPT = "RT"
|
||||||
|
BENCH_FORMSEMESTRE_IDS = (
|
||||||
|
149, # RT S1 2020-21
|
||||||
|
145, # RT S2 2021
|
||||||
|
119, # RT S1 2029
|
||||||
|
)
|
||||||
|
|
||||||
|
bench_notes_table(BENCH_DEPT, BENCH_FORMSEMESTRE_IDS)
|
@ -78,7 +78,7 @@ pp(sem)
|
|||||||
# semdescr = GET(s, f"Notes/formsemestre_description?formsemestre_id={sem['formsemestre_id']}&with_evals=0&format=json" )
|
# semdescr = GET(s, f"Notes/formsemestre_description?formsemestre_id={sem['formsemestre_id']}&with_evals=0&format=json" )
|
||||||
|
|
||||||
# ---- Liste les modules et prend le premier
|
# ---- Liste les modules et prend le premier
|
||||||
mods = GET(s, f"/Notes/do_moduleimpl_list?formsemestre_id={sem['formsemestre_id']}")
|
mods = GET(s, f"/Notes/moduleimpl_list?formsemestre_id={sem['formsemestre_id']}")
|
||||||
print(f"{len(mods)} modules dans le semestre {sem['titre']}")
|
print(f"{len(mods)} modules dans le semestre {sem['titre']}")
|
||||||
|
|
||||||
mod = mods[0]
|
mod = mods[0]
|
||||||
|
50
tests/bench/notes_table.py
Normal file
50
tests/bench/notes_table.py
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# Simple benchmark
|
||||||
|
# mesure temps execution NotesTable
|
||||||
|
|
||||||
|
import time
|
||||||
|
|
||||||
|
from flask import g
|
||||||
|
from flask_login import login_user
|
||||||
|
|
||||||
|
from config import RunningConfig as BenchConfig
|
||||||
|
import app
|
||||||
|
from app import db, create_app
|
||||||
|
from app import clear_scodoc_cache
|
||||||
|
from app.auth.models import get_super_admin
|
||||||
|
from app.scodoc import notesdb as ndb
|
||||||
|
from app.scodoc import notes_table
|
||||||
|
|
||||||
|
|
||||||
|
def setup_generator(dept: str):
|
||||||
|
# Setup
|
||||||
|
apptest = create_app(BenchConfig)
|
||||||
|
# Run tests:
|
||||||
|
with apptest.test_client() as client:
|
||||||
|
with apptest.app_context():
|
||||||
|
with apptest.test_request_context():
|
||||||
|
# Clear application cache:
|
||||||
|
print("clearing cache...")
|
||||||
|
clear_scodoc_cache()
|
||||||
|
# initialize scodoc "g":
|
||||||
|
g.stored_get_formsemestre = {}
|
||||||
|
# Loge l'utilisateur super-admin
|
||||||
|
admin_user = get_super_admin()
|
||||||
|
login_user(admin_user)
|
||||||
|
app.set_sco_dept(dept) # set db connection
|
||||||
|
yield client
|
||||||
|
ndb.close_db_connection()
|
||||||
|
# Teardown:
|
||||||
|
db.session.commit()
|
||||||
|
db.session.remove()
|
||||||
|
|
||||||
|
|
||||||
|
def bench_notes_table(dept: str, formsemestre_ids: list[int]) -> float:
|
||||||
|
for client in setup_generator(dept):
|
||||||
|
tot_time = 0.0
|
||||||
|
for formsemestre_id in formsemestre_ids:
|
||||||
|
print(f"building sem {formsemestre_id}...")
|
||||||
|
t0 = time.time()
|
||||||
|
nt = notes_table.NotesTable(formsemestre_id)
|
||||||
|
tot_time += time.time() - t0
|
||||||
|
print(f"Total time: {tot_time}")
|
||||||
|
return tot_time
|
@ -251,7 +251,7 @@ class ScoFake(object):
|
|||||||
if not responsable_id:
|
if not responsable_id:
|
||||||
responsable_id = self.default_user.id
|
responsable_id = self.default_user.id
|
||||||
oid = sco_moduleimpl.do_moduleimpl_create(locals())
|
oid = sco_moduleimpl.do_moduleimpl_create(locals())
|
||||||
oids = sco_moduleimpl.do_moduleimpl_list(moduleimpl_id=oid) # API inconsistency
|
oids = sco_moduleimpl.moduleimpl_list(moduleimpl_id=oid) # API inconsistency
|
||||||
if not oids:
|
if not oids:
|
||||||
raise ScoValueError("moduleimpl not created !")
|
raise ScoValueError("moduleimpl not created !")
|
||||||
return oids[0]
|
return oids[0]
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
# - formation_list
|
# - formation_list
|
||||||
# - formation_export
|
# - formation_export
|
||||||
# - formsemestre_list
|
# - formsemestre_list
|
||||||
# - do_moduleimpl_list
|
# - moduleimpl_list
|
||||||
# - do_module_impl_with_module_list
|
# - do_module_impl_with_module_list
|
||||||
# - do_formsemestre_delete
|
# - do_formsemestre_delete
|
||||||
# - do_module_list
|
# - do_module_list
|
||||||
@ -231,28 +231,24 @@ def test_formations(test_client):
|
|||||||
|
|
||||||
# --- Liste des modules
|
# --- Liste des modules
|
||||||
|
|
||||||
lim_sem1 = sco_moduleimpl.do_moduleimpl_list(
|
lim_sem1 = sco_moduleimpl.moduleimpl_list(formsemestre_id=sem1["formsemestre_id"])
|
||||||
formsemestre_id=sem1["formsemestre_id"]
|
|
||||||
)
|
|
||||||
|
|
||||||
assert len(lim_sem1) == 2
|
assert len(lim_sem1) == 2
|
||||||
assert mod["module_id"] in (lim_sem1[0]["module_id"], lim_sem1[1]["module_id"])
|
assert mod["module_id"] in (lim_sem1[0]["module_id"], lim_sem1[1]["module_id"])
|
||||||
assert mod2["module_id"] in (lim_sem1[0]["module_id"], lim_sem1[1]["module_id"])
|
assert mod2["module_id"] in (lim_sem1[0]["module_id"], lim_sem1[1]["module_id"])
|
||||||
|
|
||||||
lim_modid = sco_moduleimpl.do_moduleimpl_list(module_id=mod["module_id"])
|
lim_modid = sco_moduleimpl.moduleimpl_list(module_id=mod["module_id"])
|
||||||
|
|
||||||
assert len(lim_modid) == 1
|
assert len(lim_modid) == 1
|
||||||
|
|
||||||
lim_modimpl_id = sco_moduleimpl.do_moduleimpl_list(
|
lim_modimpl_id = sco_moduleimpl.moduleimpl_list(moduleimpl_id=mi["moduleimpl_id"])
|
||||||
moduleimpl_id=mi["moduleimpl_id"]
|
|
||||||
)
|
|
||||||
# print(lim_modimpl_id)
|
# print(lim_modimpl_id)
|
||||||
|
|
||||||
# ---- Test de do_moduleimpl_withmodule_list
|
# ---- Test de moduleimpl_withmodule_list
|
||||||
|
|
||||||
assert lim_modid == lim_modimpl_id # doit etre le meme resultat
|
assert lim_modid == lim_modimpl_id # doit etre le meme resultat
|
||||||
|
|
||||||
liimp_sem1 = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
liimp_sem1 = sco_moduleimpl.moduleimpl_withmodule_list(
|
||||||
formsemestre_id=sem1["formsemestre_id"]
|
formsemestre_id=sem1["formsemestre_id"]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -262,16 +258,14 @@ def test_formations(test_client):
|
|||||||
liimp_sem1[0]["module_id"],
|
liimp_sem1[0]["module_id"],
|
||||||
liimp_sem1[1]["module_id"],
|
liimp_sem1[1]["module_id"],
|
||||||
)
|
)
|
||||||
liimp_sem2 = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
liimp_sem2 = sco_moduleimpl.moduleimpl_withmodule_list(
|
||||||
formsemestre_id=sem2["formsemestre_id"]
|
formsemestre_id=sem2["formsemestre_id"]
|
||||||
)
|
)
|
||||||
assert modt["module_id"] == liimp_sem2[0]["module_id"]
|
assert modt["module_id"] == liimp_sem2[0]["module_id"]
|
||||||
liimp_modid = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
liimp_modid = sco_moduleimpl.moduleimpl_withmodule_list(module_id=mod["module_id"])
|
||||||
module_id=mod["module_id"]
|
|
||||||
)
|
|
||||||
assert len(liimp_modid) == 1
|
assert len(liimp_modid) == 1
|
||||||
|
|
||||||
liimp_modimplid = sco_moduleimpl.do_moduleimpl_withmodule_list(
|
liimp_modimplid = sco_moduleimpl.moduleimpl_withmodule_list(
|
||||||
moduleimpl_id=mi["moduleimpl_id"]
|
moduleimpl_id=mi["moduleimpl_id"]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -305,9 +299,7 @@ def test_formations(test_client):
|
|||||||
|
|
||||||
assert len(li_module2) == 3 # verification de la suppression du module
|
assert len(li_module2) == 3 # verification de la suppression du module
|
||||||
|
|
||||||
lim_sem2 = sco_moduleimpl.do_moduleimpl_list(
|
lim_sem2 = sco_moduleimpl.moduleimpl_list(formsemestre_id=sem2["formsemestre_id"])
|
||||||
formsemestre_id=sem2["formsemestre_id"]
|
|
||||||
)
|
|
||||||
|
|
||||||
assert len(lim_sem2) == 0 # deuxieme vérification si le module s'est bien sup
|
assert len(lim_sem2) == 0 # deuxieme vérification si le module s'est bien sup
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user