BUT: tests unitaires yaml: associe modules/parcours + fix formation GB exemple

This commit is contained in:
Emmanuel Viennet 2022-12-08 17:57:01 +01:00
parent d8a15926e4
commit 26abfd622a
4 changed files with 184 additions and 26 deletions

View File

@ -1142,7 +1142,7 @@ def confirm_dialog(
def objects_renumber(db, obj_list) -> None: def objects_renumber(db, obj_list) -> None:
"""fixe les numeros des objets d'une liste de modèles """fixe les numeros des objets d'une liste de modèles
pour ne pas changer son ordre""" pour ne pas changer son ordre"""
log(f"objects_renumber {obj_list}") log(f"objects_renumber")
for i, obj in enumerate(obj_list): for i, obj in enumerate(obj_list):
obj.numero = i obj.numero = i
db.session.add(obj) db.session.add(obj)

View File

@ -625,7 +625,26 @@
</matiere> </matiere>
<matiere titre="SAÉ" numero="0"/> <matiere titre="SAÉ" numero="0"/>
</ue> </ue>
<ue acronyme="UE 23" numero="6" titre="Mener des études dans un contexte de fonctionnement cellulaire et physiologique normal" type="0" ue_code="UCOD25" ects="5.0" is_external="0" code_apogee="7WEC2" coefficient="50.0" semestre_idx="2" color="#feb40b" coef_rcue="1.0" parcour_id="7" apc_niveau_libelle="Mener des études dans un contexte de fonctionnement cellulaire et physiologique normal " apc_niveau_annee="BUT1" apc_niveau_ordre="1" reference="41"> <ue acronyme="UE 1.4 BMB" numero="6" titre="Mettre en oeuvre les examens les plus courants en laboratoire de biologie médicale" type="0" ue_code="UCOD20" ects="4.0" is_external="0" code_apogee="7WED1" coefficient="40.0" semestre_idx="1" color="#80cb3f" coef_rcue="1.0" parcour_id="7" apc_niveau_libelle="Mettre en oeuvre les examens les plus courants en laboratoire de biologie médical " apc_niveau_annee="BUT1" apc_niveau_ordre="1" reference="37">
<matiere titre="Ressources" numero="0">
<module titre="Communication" abbrev="Communication" code="R112 (UE14)" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="1.0" ects="" semestre_id="1" numero="1" code_apogee="7WES1COM" module_type="0"/>
<module titre="Mettre en œuvre un examen de biologie médicale de première intention en hématologie et immunologie dans le cadre dun contrôle et/ou dune prévention" abbrev="Mettre en œuvre un examen de biologie médicale de première intention en hématologie et immunologie dans le cadre dun contrôle et/ou dune prévention" code="SAÉ1.BMB.04" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="16.0" ects="" semestre_id="1" numero="3" code_apogee="7WES1EBM" module_type="3">
<coefficients ue_reference="37" coef="16.0"/>
<parcours code="BMB" numero="0" libelle="Biologie médicale et biotechnologie "/>
<app_critiques code="AC14.01" libelle="Mettre en oeuvre les approches d'hématologie afin de réaliser un hémogramme et le groupage sanguin"/>
<app_critiques code="AC14.03" libelle="Utiliser les techniques de bases en immunologie et réaliser les examens sérologiques les plus fréquents"/>
</module>
<module titre="Anglais" abbrev="Anglais" code="R113 (UE14)" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="1.0" ects="" semestre_id="1" numero="13" code_apogee="7WES1ANG" module_type="0"/>
<module titre="Projet personnel et professionnel (PPP)" abbrev="Projet personnel et professionnel (PPP)" code="R114 (UE14)" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="0.5" ects="" semestre_id="1" numero="14" code_apogee="7WES1PPP" module_type="0"/>
<module titre="Immunologie" abbrev="Immunologie" code="R1.BMB.17" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="10.5" ects="" semestre_id="1" numero="16" code_apogee="7WES1HEM" module_type="2">
<coefficients ue_reference="37" coef="10.0"/>
<parcours code="BMB" numero="0" libelle="Biologie médicale et biotechnologie "/>
</module>
<module titre="Immunologie" abbrev="Immunologie" code="R118BMB" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="11.0" ects="" semestre_id="1" numero="17" code_apogee="7WES1IMM" module_type="2"/>
</matiere>
<matiere titre="SAÉ" numero="0"/>
</ue>
<ue acronyme="UE 23 BMB" numero="7" titre="Mener des études dans un contexte de fonctionnement cellulaire et physiologique normal" type="0" ue_code="UCOD25" ects="5.0" is_external="0" code_apogee="7WEC2" coefficient="50.0" semestre_idx="2" color="#feb40b" coef_rcue="1.0" parcour_id="7" apc_niveau_libelle="Mener des études dans un contexte de fonctionnement cellulaire et physiologique normal " apc_niveau_annee="BUT1" apc_niveau_ordre="1" reference="41">
<matiere titre="Ressources" numero="1"> <matiere titre="Ressources" numero="1">
<module titre="Cultiver des cellules dans le respect des bonnes pratiques de laboratoire" abbrev="Cultiver des cellules dans le respect des bonnes pratiques de laboratoire" code="SAE23" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="18.0" ects="" semestre_id="2" numero="4" code_apogee="7WES2CUL" module_type="3"> <module titre="Cultiver des cellules dans le respect des bonnes pratiques de laboratoire" abbrev="Cultiver des cellules dans le respect des bonnes pratiques de laboratoire" code="SAE23" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="18.0" ects="" semestre_id="2" numero="4" code_apogee="7WES2CUL" module_type="3">
<coefficients ue_reference="41" coef="18.0"/> <coefficients ue_reference="41" coef="18.0"/>
@ -650,26 +669,7 @@
</matiere> </matiere>
<matiere titre="SAÉ" numero="1"/> <matiere titre="SAÉ" numero="1"/>
</ue> </ue>
<ue acronyme="UE 1.4 BMB" numero="7" titre="Mettre en oeuvre les examens les plus courants en laboratoire de biologie médicale" type="0" ue_code="UCOD20" ects="4.0" is_external="0" code_apogee="7WED1" coefficient="40.0" semestre_idx="1" color="#80cb3f" coef_rcue="1.0" parcour_id="7" apc_niveau_libelle="Mettre en oeuvre les examens les plus courants en laboratoire de biologie médical " apc_niveau_annee="BUT1" apc_niveau_ordre="1" reference="37"> <ue acronyme="UE 24 BMB" numero="8" titre="Mettre en oeuvre les examens les plus courants en laboratoire de biologie médicale" type="0" ue_code="UCOD26" ects="5.0" is_external="0" code_apogee="7WED2" coefficient="50.0" semestre_idx="2" color="#80cb3f" coef_rcue="1.0" parcour_id="7" apc_niveau_libelle="Mettre en oeuvre les examens les plus courants en laboratoire de biologie médical " apc_niveau_annee="BUT1" apc_niveau_ordre="1" reference="42">
<matiere titre="Ressources" numero="0">
<module titre="Communication" abbrev="Communication" code="R112 (UE14)" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="1.0" ects="" semestre_id="1" numero="1" code_apogee="7WES1COM" module_type="0"/>
<module titre="Mettre en œuvre un examen de biologie médicale de première intention en hématologie et immunologie dans le cadre dun contrôle et/ou dune prévention" abbrev="Mettre en œuvre un examen de biologie médicale de première intention en hématologie et immunologie dans le cadre dun contrôle et/ou dune prévention" code="SAÉ1.BMB.04" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="16.0" ects="" semestre_id="1" numero="3" code_apogee="7WES1EBM" module_type="3">
<coefficients ue_reference="37" coef="16.0"/>
<parcours code="BMB" numero="0" libelle="Biologie médicale et biotechnologie "/>
<app_critiques code="AC14.01" libelle="Mettre en oeuvre les approches d'hématologie afin de réaliser un hémogramme et le groupage sanguin"/>
<app_critiques code="AC14.03" libelle="Utiliser les techniques de bases en immunologie et réaliser les examens sérologiques les plus fréquents"/>
</module>
<module titre="Anglais" abbrev="Anglais" code="R113 (UE14)" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="1.0" ects="" semestre_id="1" numero="13" code_apogee="7WES1ANG" module_type="0"/>
<module titre="Projet personnel et professionnel (PPP)" abbrev="Projet personnel et professionnel (PPP)" code="R114 (UE14)" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="0.5" ects="" semestre_id="1" numero="14" code_apogee="7WES1PPP" module_type="0"/>
<module titre="Immunologie" abbrev="Immunologie" code="R1.BMB.17" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="10.5" ects="" semestre_id="1" numero="16" code_apogee="7WES1HEM" module_type="2">
<coefficients ue_reference="37" coef="10.0"/>
<parcours code="BMB" numero="0" libelle="Biologie médicale et biotechnologie "/>
</module>
<module titre="Immunologie" abbrev="Immunologie" code="R118BMB" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="11.0" ects="" semestre_id="1" numero="17" code_apogee="7WES1IMM" module_type="2"/>
</matiere>
<matiere titre="SAÉ" numero="0"/>
</ue>
<ue acronyme="UE 24" numero="8" titre="Mettre en oeuvre les examens les plus courants en laboratoire de biologie médicale" type="0" ue_code="UCOD26" ects="5.0" is_external="0" code_apogee="7WED2" coefficient="50.0" semestre_idx="2" color="#80cb3f" coef_rcue="1.0" parcour_id="7" apc_niveau_libelle="Mettre en oeuvre les examens les plus courants en laboratoire de biologie médical " apc_niveau_annee="BUT1" apc_niveau_ordre="1" reference="42">
<matiere titre="Ressources" numero="1"> <matiere titre="Ressources" numero="1">
<module titre="Mettre en œuvre un examen de biologie médicale de première intention en biochimie dans le cadre dun contrôle et/ou dune prévention" abbrev="Mettre en œuvre un examen de biologie médicale de première intention en biochimie dans le cadre dun contrôle et/ou dune prévention" code="SAE24" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="9.0" ects="" semestre_id="2" numero="16" code_apogee="7WES2EBM" module_type="3"> <module titre="Mettre en œuvre un examen de biologie médicale de première intention en biochimie dans le cadre dun contrôle et/ou dune prévention" abbrev="Mettre en œuvre un examen de biologie médicale de première intention en biochimie dans le cadre dun contrôle et/ou dune prévention" code="SAE24" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="9.0" ects="" semestre_id="2" numero="16" code_apogee="7WES2EBM" module_type="3">
<coefficients ue_reference="42" coef="9.0"/> <coefficients ue_reference="42" coef="9.0"/>
@ -702,6 +702,80 @@
</matiere> </matiere>
<matiere titre="SAÉ" numero="1"/> <matiere titre="SAÉ" numero="1"/>
</ue> </ue>
<ue acronyme="UE 23 SEE" numero="9" titre="Caractériser un écosystème" type="0" ue_code="UCOD14" ects="6.0" is_external="0" code_apogee="7WFC2" coefficient="60.0" semestre_idx="2" color="#feb40b" coef_rcue="1.0" parcour_id="5" apc_niveau_libelle="Caractériser un écosystème" apc_niveau_annee="BUT1" apc_niveau_ordre="1" reference="769">
<matiere titre="Ressources" numero="1">
<module titre="Observation, échantillonnage et découvertes du milieu" abbrev="Observation, échantillonnage et découvertes du milieu" code="R214SEE" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="1.5" ects="" semestre_id="2" numero="13" code_apogee="7WES2OED" module_type="2">
<coefficients ue_reference="769" coef="1.5"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
<module titre="Biodiversité animale" abbrev="Biodiversité animale" code="R215SEE" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="4.5" ects="" semestre_id="2" numero="14" code_apogee="7WES2BDA" module_type="2">
<coefficients ue_reference="769" coef="4.5"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
<module titre="Biodiversité végétale" abbrev="Biodiversité végétale" code="R216SEE" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="4.5" ects="" semestre_id="2" numero="15" code_apogee="7WES2BDV" module_type="2">
<coefficients ue_reference="769" coef="4.5"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
<module titre="Biodiversité microbienne" abbrev="Biodiversité microbienne" code="R217SEE" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="4.5" ects="" semestre_id="2" numero="17" code_apogee="7WES2BDM" module_type="2">
<coefficients ue_reference="769" coef="4.5"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
<module titre="Géosciences" abbrev="Géosciences" code="R218SEE" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="7.0" ects="" semestre_id="2" numero="18" code_apogee="7WFS2GEO" module_type="2">
<coefficients ue_reference="769" coef="7.0"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
<module titre="Cartographie" abbrev="Cartographie" code="R219SEE" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="3.0" ects="" semestre_id="2" numero="19" code_apogee="7WFS2CAR" module_type="2">
<coefficients ue_reference="769" coef="3.0"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
<module titre="Climatologie" abbrev="Climatologie" code="R220SEE" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="3.0" ects="" semestre_id="2" numero="20" code_apogee="7WFS2CLI" module_type="2">
<coefficients ue_reference="769" coef="3.0"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
<module titre="Bases d'écologie" abbrev="Bases d'écologie" code="R221SEE" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="5.5" ects="" semestre_id="2" numero="21" code_apogee="7WFS2ECO" module_type="2">
<coefficients ue_reference="769" coef="5.5"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
<module titre="Description d'un milieu et de sa biodiversité" abbrev="Description d'un milieu et de sa biodiversité" code="SAE23" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="22.0" ects="" semestre_id="2" numero="29" code_apogee="7WFS2SAE" module_type="3">
<coefficients ue_reference="769" coef="22.0"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
<module titre="Portfolio" abbrev="Portfolio" code="Portfolio23" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="2.0" ects="" semestre_id="2" numero="30" code_apogee="7WES2POF" module_type="3">
<coefficients ue_reference="769" coef="2.0"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
</matiere>
<matiere titre="SAÉ" numero="2"/>
</ue>
<ue acronyme="UE 24 SEE" numero="10" titre="Caractériser les pollutions" type="0" ue_code="UCOD15" ects="4.0" is_external="0" code_apogee="7WFD2" coefficient="40.0" semestre_idx="2" color="#80cb3f" coef_rcue="1.0" parcour_id="5" apc_niveau_libelle="Caractériser les pollutions" apc_niveau_annee="BUT1" apc_niveau_ordre="1" reference="770">
<matiere titre="Ressources" numero="1">
<module titre="Pollutions biologiques" abbrev="Pollutions biologiques" code="R222SEE" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="6.5" ects="" semestre_id="2" numero="22" code_apogee="7WFS2PBI" module_type="2">
<coefficients ue_reference="770" coef="6.5"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
<module titre="Pollutions chimiques" abbrev="Pollutions chimiques" code="R223SEE" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="7.0" ects="" semestre_id="2" numero="23" code_apogee="7WFS2PCH" module_type="2">
<coefficients ue_reference="770" coef="7.0"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
<module titre="Pollutions physiques" abbrev="Pollutions physiques" code="R224SEE" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="6.5" ects="" semestre_id="2" numero="24" code_apogee="7WFS2PPH" module_type="2">
<coefficients ue_reference="770" coef="6.5"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
<module titre="Utilisation de logiciel pour l'échantillonnage" abbrev="Utilisation de logiciel pour l'échantillonnage" code="R225SEE" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="1.5" ects="" semestre_id="2" numero="25" code_apogee="7WFS2ULE" module_type="2">
<coefficients ue_reference="770" coef="1.5"/>
</module>
<module titre="Echantillonner une matrice environnementale et mettre en oeuvre le dosage d'un polluant" abbrev="Echantillonner une matrice environnementale et mettre en oeuvre le dosage d'un polluant" code="SAE24" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="14.0" ects="" semestre_id="2" numero="31" code_apogee="7WFS2SAE" module_type="3">
<coefficients ue_reference="770" coef="14.0"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
<module titre="Portfolio" abbrev="Portfolio" code="Portfolio24" heures_cours="0.0" heures_td="0.0" heures_tp="0.0" coefficient="2.0" ects="" semestre_id="2" numero="32" code_apogee="" module_type="3">
<coefficients ue_reference="770" coef="2.0"/>
<parcours code="SEE" numero="0" libelle="Sciences de l'environnement et écotechnologies"/>
</module>
</matiere>
<matiere titre="SAÉ" numero="2"/>
</ue>
<ue acronyme="UE 3.2" numero="9" titre="Expérimenter dans le génie biologique" type="0" ue_code="UCOD47" ects="4.0" is_external="0" code_apogee="" coefficient="0.0" semestre_idx="3" color="#f97b3d" coef_rcue="1.0" parcour_id="" apc_niveau_libelle="Expérimenter pour comprendre une problématique scientifique" apc_niveau_annee="BUT2" apc_niveau_ordre="2" reference="1089"> <ue acronyme="UE 3.2" numero="9" titre="Expérimenter dans le génie biologique" type="0" ue_code="UCOD47" ects="4.0" is_external="0" code_apogee="" coefficient="0.0" semestre_idx="3" color="#f97b3d" coef_rcue="1.0" parcour_id="" apc_niveau_libelle="Expérimenter pour comprendre une problématique scientifique" apc_niveau_annee="BUT2" apc_niveau_ordre="2" reference="1089">
<matiere titre="Expérimenter dans le génie biologique" numero="1"/> <matiere titre="Expérimenter dans le génie biologique" numero="1"/>
</ue> </ue>

View File

@ -9,14 +9,14 @@ Formation:
filename: scodoc_formation_BUT_GB_v1.xml filename: scodoc_formation_BUT_GB_v1.xml
# Association des UE aux compétences: # Association des UE aux compétences:
ues: ues:
# Tronc commun GB: # S1 : Tronc commun GB
'UE 11': 'UE 11':
annee: BUT1 annee: BUT1
competence: Analyser competence: Analyser
'UE 12': 'UE 12':
annee: BUT1 annee: BUT1
competence: Experimenter competence: Experimenter
# Parcours SEE # S1 Parcours SEE
'UE 1.3 SEE': 'UE 1.3 SEE':
annee: BUT1 annee: BUT1
competence: Gérer competence: Gérer
@ -25,7 +25,7 @@ Formation:
annee: BUT1 annee: BUT1
competence: Traiter competence: Traiter
parcours: SEE parcours: SEE
# Parcours BMB # S1 Parcours BMB
'UE 1.3 BMB': 'UE 1.3 BMB':
annee: BUT1 annee: BUT1
competence: Mener competence: Mener
@ -34,6 +34,69 @@ Formation:
annee: BUT1 annee: BUT1
competence: Réaliser competence: Réaliser
parcours: BMB parcours: BMB
# S2 : Tronc commun GB
'UE 21':
annee: BUT1
competence: Analyser
'UE 22':
annee: BUT1
competence: Experimenter
# S2 Parcours SEE
'UE 23 SEE':
annee: BUT1
competence: Gérer
parcours: SEE
'UE 24 SEE':
annee: BUT1
competence: Traiter
parcours: SEE
# S2 Parcours BMB
'UE 23 BMB':
annee: BUT1
competence: Mener
parcours: BMB
'UE 24 BMB':
annee: BUT1
competence: Réaliser
parcours: BMB
# S3 : Tronc commun GB
'UE 3.1':
annee: BUT2
competence: Analyser
'UE 3.2':
annee: BUT2
competence: Experimenter
# S3 BMB
'UE 3.3 BMB':
annee: BUT2
competence: Mener
parcours: BMB
'UE 3.4 BMB':
annee: BUT2
competence: Réaliser
parcours: BMB
'UE 3.5 BMB':
annee: BUT2
competence: Mettre en œuvre
parcours: BMB
# S3 SEE
'UE 3.3 SEE':
annee: BUT2
competence: Gérer
parcours: SEE
'UE 3.4 SEE':
annee: BUT2
competence: Traiter
parcours: SEE
'UE 3.5 SEE':
annee: BUT2
competence: Déployer
parcours: SEE
modules_parcours:
# cette section permet d'associer des modules à des parcours
# les codes modules peuvent être des regexp
BMB: [ .*BMB.* ]
SEE: [ .*SEE.* ]
FormSemestres: FormSemestres:
# S1 et S2 avec les parcours séparés: # S1 et S2 avec les parcours séparés:

View File

@ -1,8 +1,8 @@
""" Test jury BUT avec parcours """ Test jury BUT avec parcours
""" """
import datetime
import os import os
from pathlib import Path from pathlib import Path
import re
from flask import current_app, g from flask import current_app, g
import pytest import pytest
@ -110,9 +110,30 @@ def setup_but_formation(doc: dict) -> Formation:
ue.set_niveau_competence(niveau) ue.set_niveau_competence(niveau)
db.session.commit() db.session.commit()
associe_modules_et_parcours(formation, formation_infos)
return formation return formation
def associe_modules_et_parcours(formation: Formation, formation_infos: dict):
"""Associe les modules à des parcours, grâce au champ modules_parcours"""
for code_parcours, codes_modules in formation_infos.get(
"modules_parcours", {}
).items():
parcour = formation.referentiel_competence.parcours.filter_by(
code=code_parcours
).first()
assert parcour is not None # code parcours doit exister dans le ref. comp.
for code_module in codes_modules:
for module in [
module
for module in formation.modules
if re.match(code_module, module.code)
]:
module.parcours.append(parcour)
db.session.add(module)
db.session.commit()
def _un_semestre( def _un_semestre(
formation: Formation, formation: Formation,
parcours: list[ApcParcours], parcours: list[ApcParcours],