BUT: tests unitaires yaml avec association UE/Competences

This commit is contained in:
Emmanuel Viennet 2022-12-08 13:59:23 +01:00
parent fcce474f5a
commit d8a15926e4
4 changed files with 73 additions and 11 deletions

View File

@ -126,11 +126,13 @@ class ApcReferentielCompetences(db.Model, XMLModel):
on cherche les niveaux qui sont présents dans tous les parcours et les range sous
la clé "TC" (toujours présente mais éventuellement liste vide si pas de tronc commun).
résultat:
Résultat: couple
( [ ApcParcours ],
{
"TC" : [ ApcNiveau ],
parcour.id : [ ApcNiveau ]
}
)
"""
parcours_ref = self.parcours.order_by(ApcParcours.numero).all()
if parcour is None:

View File

@ -52,6 +52,7 @@ class UniteEns(db.Model):
niveau_competence_id = db.Column(db.Integer, db.ForeignKey("apc_niveau.id"))
niveau_competence = db.relationship("ApcNiveau", back_populates="ues")
# Une ue appartient soit à tous les parcours (tronc commun), soit à un seul:
parcour_id = db.Column(db.Integer, db.ForeignKey("apc_parcours.id"), index=True)
parcour = db.relationship("ApcParcours", back_populates="ues")

View File

@ -1,9 +1,39 @@
# Tests unitaires jury BUT
# Essais avec un BUT GB et deux parcours sur S1, S2, S3
FormationFilename: scodoc_formation_BUT_GB_v1.xml
ReferentielCompetencesFilename: but-GB-05012022-081625.xml
ReferentielCompetencesSpecialite: GB
ReferentielCompetences:
filename: but-GB-05012022-081625.xml
specialite: GB
Formation:
filename: scodoc_formation_BUT_GB_v1.xml
# Association des UE aux compétences:
ues:
# Tronc commun GB:
'UE 11':
annee: BUT1
competence: Analyser
'UE 12':
annee: BUT1
competence: Experimenter
# Parcours SEE
'UE 1.3 SEE':
annee: BUT1
competence: Gérer
parcours: SEE
'UE 1.4 SEE':
annee: BUT1
competence: Traiter
parcours: SEE
# Parcours BMB
'UE 1.3 BMB':
annee: BUT1
competence: Mener
parcours: BMB
'UE 1.4 BMB':
annee: BUT1
competence: Réaliser
parcours: BMB
FormSemestres:
# S1 et S2 avec les parcours séparés:
@ -45,6 +75,8 @@ Etudiants:
notes_modules:
R1.01: 12
R1.SEE.11: 15
deca:
codes_min: [ ]
S2_SEE:
parcours: SEE
S3:

View File

@ -14,6 +14,7 @@ from app import db
from app.auth.models import User
from app.but.import_refcomp import orebut_import_refcomp
from app.models import (
ApcNiveau,
ApcParcours,
ApcReferentielCompetences,
Evaluation,
@ -23,6 +24,7 @@ from app.models import (
Module,
ModuleImpl,
ModuleUECoef,
UniteEns,
)
from app.scodoc import sco_formations
@ -41,12 +43,14 @@ def setup_but_formation(doc: dict) -> Formation:
"""Importe la formation BUT, l'associe au référentiel de compétences.
Après cette fonction, on a une formation chargée, et associée à son ref. comp.
"""
refcomp_filename = doc["ReferentielCompetencesFilename"]
refcomp_specialite = doc["ReferentielCompetencesSpecialite"]
app.set_sco_dept(DEPT)
refcomp_infos = doc["ReferentielCompetences"]
formation_infos = doc["Formation"]
refcomp_filename = refcomp_infos["filename"]
refcomp_specialite = refcomp_infos["specialite"]
# Lecture fichier XML local:
with open(
os.path.join(RESOURCES_DIR, "formations", doc["FormationFilename"]),
os.path.join(RESOURCES_DIR, "formations", formation_infos["filename"]),
encoding="utf-8",
) as f:
doc = f.read()
@ -82,6 +86,29 @@ def setup_but_formation(doc: dict) -> Formation:
assert referentiel_competence
formation.referentiel_competence_id = referentiel_competence.id
db.session.add(formation)
# --- Association des UEs aux parcours niveaux de compétences
for ue_acronyme, ue_infos in formation_infos["ues"].items():
ue: UniteEns = formation.ues.filter_by(acronyme=ue_acronyme).first()
assert ue is not None # l'UE doit exister dans la formation avec cet acronyme
# Parcours:
if ue_infos.get("parcours", False):
parcour = referentiel_competence.parcours.filter_by(
code=ue_infos["parcours"]
).first()
assert parcour is not None # le parcours indiqué pour cette UE doit exister
ue.set_parcour(parcour)
# Niveaux compétences:
competence = referentiel_competence.competences.filter_by(
titre=ue_infos["competence"]
).first()
assert competence is not None # La compétence de titre indiqué doit exister
niveau: ApcNiveau = competence.niveaux.filter_by(
annee=ue_infos["annee"]
).first()
assert niveau is not None # le niveau de l'année indiquée doit exister
ue.set_niveau_competence(niveau)
db.session.commit()
return formation