test unitaire BUT Info: complète formation et config yaml

This commit is contained in:
Emmanuel Viennet 2023-05-14 17:36:06 +02:00
parent a42ae3e8ed
commit 49e8cf8e5f
4 changed files with 127 additions and 31 deletions

View File

@ -3,41 +3,131 @@
# mais à ces niveaux sont associés des UEs dont les coefficients des ressources # mais à ces niveaux sont associés des UEs dont les coefficients des ressources
# varient selon le parcours. # varient selon le parcours.
# #
# Mise en place cursus avec parcours A et B
ReferentielCompetences: ReferentielCompetences:
filename: but-INFO-05012022-081701.xml filename: but-INFO-05012022-081701.xml
specialite: INFO specialite: INFO
Formation: Formation:
filename: scodoc_formation_BUT_INFO_v1.xml filename: scodoc_formation_BUT_INFO_v0514.xml
# nota: les associations UE/Niveaux sont déjà données dans ce fichier XML.
ues: ues:
# S1
'UE11':
annee: BUT1
'UE12':
annee: BUT1
'UE13':
annee: BUT1
'UE14':
annee: BUT1
'UE15':
annee: BUT1
'UE16':
annee: BUT1
# S2
'UE21':
annee: BUT1
'UE22':
annee: BUT1
'UE23':
annee: BUT1
'UE24':
annee: BUT1
'UE25':
annee: BUT1
'UE26':
annee: BUT1
# S3
'UE31':
annee: BUT2
'UE32':
annee: BUT2
'UE33':
annee: BUT2
'UE34':
annee: BUT2
'UE35':
annee: BUT2
'UE36':
annee: BUT2
# S4 # S4
'UE41-A': # UE pour le parcours A 'UE41-A': # UE pour le parcours A
annee: BUT2 annee: BUT2
competence: Réaliser 'UE41-B': # UE pour le parcours B (même contenu, coefs différents)
'UE41-C': # UE pour le parcours C (même contenu, coefs différents)
annee: BUT2 annee: BUT2
competence: Réaliser
'UE42': 'UE42':
annee: BUT2 annee: BUT2
competence: Optimiser
'UE43': 'UE43':
annee: BUT2 annee: BUT2
competence: Administrer
'UE44': 'UE44':
annee: BUT2 annee: BUT2
competence: Gérer
'UE45': 'UE45':
annee: BUT2 annee: BUT2
competence: Conduire
'UE46': 'UE46':
annee: BUT2 annee: BUT2
competence: Collaborer
FormSemestres: FormSemestres:
# S4 avec parcours A et C # Semestres avec parcours A et B
S4: S1:
idx: 1 idx: 1
date_debut: 2023-01-01 date_debut: 2021-09-01
date_fin: 2022-01-15
codes_parcours: ['A', 'B']
S2:
idx: 2
date_debut: 2022-01-16
date_fin: 2022-06-30
codes_parcours: ['A', 'B']
S3:
idx: 3
date_debut: 2022-09-01
date_fin: 2023-01-15
codes_parcours: ['A', 'B']
S4:
idx: 4
date_debut: 2023-01-16
date_fin: 2023-06-30 date_fin: 2023-06-30
codes_parcours: ['A', 'C'] codes_parcours: ['A', 'B']
S5:
idx: 5
date_debut: 2023-09-01
date_fin: 2024-01-15
codes_parcours: ['A', 'B']
S6:
idx: 6
date_debut: 2024-01-16
date_fin: 2024-06-30
codes_parcours: ['A', 'B']
Etudiants:
brillant_a: # cursus S1 -> S6, valide tout
prenom: étudiant
civilite: X
formsemestres:
# on ne note que le portfolio, qui affecte toutes les UEs
S1:
parcours: A
notes_modules:
"P1": 11
S2:
parcours: A
notes_modules:
"P2": 12
S3:
parcours: A
notes_modules:
"P3": 13
S4:
parcours: A
notes_modules:
"P4-A": 14
S5:
parcours: A
notes_modules:
"P5-A": 15
S6:
parcours: A
notes_modules:
"P6-A": 16

View File

@ -5,7 +5,7 @@
Ce test suppose une base département existante. Ce test suppose une base département existante.
Usage: pytest tests/unit/test_cursus_but.py Usage: pytest tests/unit/test_but_cursus.py
""" """

View File

@ -298,10 +298,11 @@ def setup_from_yaml(filename: str) -> dict:
with open(filename, encoding="utf-8") as f: with open(filename, encoding="utf-8") as f:
doc = yaml.safe_load(f.read()) doc = yaml.safe_load(f.read())
# Charge de ref. comp. avant la formation, de façon à pouvoir
# re-créer les associations UE/Niveaux
yaml_setup_but.setup_formation_referentiel(doc.get("ReferentielCompetences", {}))
formation = setup_formation(doc["Formation"]) formation = setup_formation(doc["Formation"])
yaml_setup_but.setup_formation_referentiel(
formation, doc.get("ReferentielCompetences", {})
)
yaml_setup_but.associe_ues_et_parcours(formation, doc["Formation"]) yaml_setup_but.associe_ues_et_parcours(formation, doc["Formation"])
setup_formsemestres(formation, doc) setup_formsemestres(formation, doc)
etudiants = doc.get("Etudiants") etudiants = doc.get("Etudiants")

View File

@ -32,13 +32,15 @@ from app.scodoc import sco_utils as scu
from app.scodoc import sco_pv_dict from app.scodoc import sco_pv_dict
def setup_formation_referentiel(formation: Formation, refcomp_infos: dict): def setup_formation_referentiel(
refcomp_infos: dict, formation: Formation = None
) -> ApcReferentielCompetences:
"""Si il y a un référentiel de compétences, indiqué dans le YAML, """Si il y a un référentiel de compétences, indiqué dans le YAML,
le charge au besoin et l'associe à la formation. le charge au besoin et l'associe à la formation.
""" """
if not refcomp_infos: if not refcomp_infos:
return return None
assert formation.is_apc() # si ref; comp., doit être APC assert formation is None or formation.is_apc() # si ref. comp., doit être APC
refcomp_filename = refcomp_infos["filename"] refcomp_filename = refcomp_infos["filename"]
refcomp_specialite = refcomp_infos["specialite"] refcomp_specialite = refcomp_infos["specialite"]
# --- Chargement Référentiel # --- Chargement Référentiel
@ -66,8 +68,10 @@ def setup_formation_referentiel(formation: Formation, refcomp_infos: dict):
specialite=refcomp_specialite specialite=refcomp_specialite
).first() # le recherche à nouveau (test) ).first() # le recherche à nouveau (test)
assert referentiel_competence assert referentiel_competence
formation.referentiel_competence_id = referentiel_competence.id if formation:
db.session.add(formation) formation.referentiel_competence_id = referentiel_competence.id
db.session.add(formation)
return referentiel_competence
def associe_ues_et_parcours(formation: Formation, formation_infos: dict): def associe_ues_et_parcours(formation: Formation, formation_infos: dict):
@ -100,15 +104,16 @@ def associe_ues_et_parcours(formation: Formation, formation_infos: dict):
ue.set_parcours(parcours) ue.set_parcours(parcours)
# Niveaux compétences: # Niveaux compétences:
competence = referentiel_competence.competences.filter_by( if ue_infos.get("competence"):
titre=ue_infos["competence"] competence = referentiel_competence.competences.filter_by(
).first() titre=ue_infos["competence"]
assert competence is not None # La compétence de titre indiqué doit exister ).first()
niveau: ApcNiveau = competence.niveaux.filter_by( assert competence is not None # La compétence de titre indiqué doit exister
annee=ue_infos["annee"] niveau: ApcNiveau = competence.niveaux.filter_by(
).first() annee=ue_infos["annee"]
assert niveau is not None # le niveau de l'année indiquée doit exister ).first()
ue.set_niveau_competence(niveau) assert niveau is not None # le niveau de l'année indiquée doit exister
ue.set_niveau_competence(niveau)
db.session.commit() db.session.commit()
associe_modules_et_parcours(formation, formation_infos) associe_modules_et_parcours(formation, formation_infos)