forked from ScoDoc/ScoDoc
traitement exceptions imports xml
This commit is contained in:
parent
ec93a8cdbc
commit
6627a9c6b2
@ -1,3 +1,8 @@
|
||||
##############################################################################
|
||||
# ScoDoc
|
||||
# Copyright (c) 1999 - 2021 Emmanuel Viennet. All rights reserved.
|
||||
# See LICENSE
|
||||
##############################################################################
|
||||
from xml.etree import ElementTree
|
||||
from typing import TextIO
|
||||
|
||||
@ -14,14 +19,20 @@ from app.models.but_refcomp import (
|
||||
ApcAnneeParcours,
|
||||
ApcParcoursNiveauCompetence,
|
||||
)
|
||||
from app.scodoc.sco_exceptions import FormatError
|
||||
from app.scodoc.sco_exceptions import ScoFormatError
|
||||
|
||||
|
||||
def orebut_import_refcomp(xml_file: TextIO, dept_id: int, orig_filename=None):
|
||||
tree = ElementTree.parse(xml_file)
|
||||
root = tree.getroot()
|
||||
def orebut_import_refcomp(xml_data: str, dept_id: int, orig_filename=None):
|
||||
"""Importation XML Orébut
|
||||
peut lever TypeError ou ScoFormatError
|
||||
Résultat: instance de ApcReferentielCompetences
|
||||
"""
|
||||
try:
|
||||
root = ElementTree.XML(xml_data)
|
||||
except ElementTree.ParseError:
|
||||
raise ScoFormatError("fichier XML Orébut invalide")
|
||||
if root.tag != "referentiel_competence":
|
||||
raise FormatError("élément racine 'referentiel_competence' manquant")
|
||||
raise ScoFormatError("élément racine 'referentiel_competence' manquant")
|
||||
args = ApcReferentielCompetences.attr_from_xml(root.attrib)
|
||||
args["dept_id"] = dept_id
|
||||
args["scodoc_orig_filename"] = orig_filename
|
||||
@ -29,7 +40,7 @@ def orebut_import_refcomp(xml_file: TextIO, dept_id: int, orig_filename=None):
|
||||
db.session.add(ref)
|
||||
competences = root.find("competences")
|
||||
if not competences:
|
||||
raise FormatError("élément 'competences' manquant")
|
||||
raise ScoFormatError("élément 'competences' manquant")
|
||||
for competence in competences.findall("competence"):
|
||||
c = ApcCompetence(**ApcCompetence.attr_from_xml(competence.attrib))
|
||||
ref.competences.append(c)
|
||||
@ -58,7 +69,7 @@ def orebut_import_refcomp(xml_file: TextIO, dept_id: int, orig_filename=None):
|
||||
# --- PARCOURS
|
||||
parcours = root.find("parcours")
|
||||
if not parcours:
|
||||
raise FormatError("élément 'parcours' manquant")
|
||||
raise ScoFormatError("élément 'parcours' manquant")
|
||||
for parcour in parcours.findall("parcour"):
|
||||
parc = ApcParcours(**ApcParcours.attr_from_xml(parcour.attrib))
|
||||
ref.parcours.append(parc)
|
||||
@ -71,9 +82,9 @@ def orebut_import_refcomp(xml_file: TextIO, dept_id: int, orig_filename=None):
|
||||
# Retrouve la competence
|
||||
comp = ref.competences.filter_by(titre=nom).all()
|
||||
if len(comp) == 0:
|
||||
raise FormatError(f"competence {nom} référencée mais on définie")
|
||||
raise ScoFormatError(f"competence {nom} référencée mais on définie")
|
||||
elif len(comp) > 1:
|
||||
raise FormatError(f"competence {nom} ambigüe")
|
||||
raise ScoFormatError(f"competence {nom} ambigüe")
|
||||
ass = ApcParcoursNiveauCompetence(
|
||||
niveau=niveau, annee_parcours=a, competence=comp[0]
|
||||
)
|
||||
@ -94,13 +105,14 @@ ref = ApcReferentielCompetences(**ApcReferentielCompetences.attr_from_xml(root.a
|
||||
|
||||
competences = root.find("competences")
|
||||
if not competences:
|
||||
raise FormatError("élément 'competences' manquant")
|
||||
raise ScoFormatError("élément 'competences' manquant")
|
||||
|
||||
competence = competences.findall("competence")[0] # XXX
|
||||
|
||||
from app.but.import_refcomp import *
|
||||
f = open("but-RT-refcomp-30112021.xml")
|
||||
ref = orebut_import_refcomp(f, 0)
|
||||
dept_id = models.Departement.query.first().id
|
||||
data = open("tests/data/but-RT-refcomp-exemple.xml").read()
|
||||
ref = orebut_import_refcomp(data, dept_id)
|
||||
#------
|
||||
from app.but.import_refcomp import *
|
||||
ref = ApcReferentielCompetences.query.first()
|
||||
|
@ -1,3 +1,8 @@
|
||||
##############################################################################
|
||||
# ScoDoc
|
||||
# Copyright (c) 1999 - 2021 Emmanuel Viennet. All rights reserved.
|
||||
# See LICENSE
|
||||
##############################################################################
|
||||
"""ScoDoc 9 models : Référentiel Compétence BUT 2021
|
||||
"""
|
||||
from datetime import datetime
|
||||
|
@ -98,7 +98,7 @@ from chardet import detect as chardet_detect
|
||||
import app.scodoc.sco_utils as scu
|
||||
import app.scodoc.notesdb as ndb
|
||||
from app import log
|
||||
from app.scodoc.sco_exceptions import ScoValueError, FormatError
|
||||
from app.scodoc.sco_exceptions import ScoValueError, ScoFormatError
|
||||
from app.scodoc.gen_tables import GenTable
|
||||
from app.scodoc.sco_vdi import ApoEtapeVDI
|
||||
from app.scodoc.sco_codes_parcours import code_semestre_validant
|
||||
@ -681,7 +681,7 @@ class ApoData(object):
|
||||
self.periode = periode #
|
||||
try:
|
||||
self.read_csv(data)
|
||||
except FormatError as e:
|
||||
except ScoFormatError as e:
|
||||
# essaie de retrouver le nom du fichier pour enrichir le message d'erreur
|
||||
filename = ""
|
||||
if self.orig_filename is None:
|
||||
@ -689,7 +689,7 @@ class ApoData(object):
|
||||
filename = self.titles.get("apoC_Fichier_Exp", filename)
|
||||
else:
|
||||
filename = self.orig_filename
|
||||
raise FormatError(
|
||||
raise ScoFormatError(
|
||||
"<h3>Erreur lecture du fichier Apogée <tt>%s</tt></h3><p>" % filename
|
||||
+ e.args[0]
|
||||
+ "</p>"
|
||||
@ -759,13 +759,13 @@ class ApoData(object):
|
||||
|
||||
def read_csv(self, data: str):
|
||||
if not data:
|
||||
raise FormatError("Fichier Apogée vide !")
|
||||
raise ScoFormatError("Fichier Apogée vide !")
|
||||
|
||||
f = StringIOFileLineWrapper(data) # pour traiter comme un fichier
|
||||
# check that we are at the begining of Apogee CSV
|
||||
line = f.readline().strip()
|
||||
if line != "XX-APO_TITRES-XX":
|
||||
raise FormatError("format incorrect: pas de XX-APO_TITRES-XX")
|
||||
raise ScoFormatError("format incorrect: pas de XX-APO_TITRES-XX")
|
||||
|
||||
# 1-- En-tête: du début jusqu'à la balise XX-APO_VALEURS-XX
|
||||
idx = data.index("XX-APO_VALEURS-XX")
|
||||
@ -779,13 +779,13 @@ class ApoData(object):
|
||||
# 3-- La section XX-APO_TYP_RES-XX est ignorée:
|
||||
line = f.readline().strip()
|
||||
if line != "XX-APO_TYP_RES-XX":
|
||||
raise FormatError("format incorrect: pas de XX-APO_TYP_RES-XX")
|
||||
raise ScoFormatError("format incorrect: pas de XX-APO_TYP_RES-XX")
|
||||
_apo_skip_section(f)
|
||||
|
||||
# 4-- Définition de colonnes: (on y trouve aussi l'étape)
|
||||
line = f.readline().strip()
|
||||
if line != "XX-APO_COLONNES-XX":
|
||||
raise FormatError("format incorrect: pas de XX-APO_COLONNES-XX")
|
||||
raise ScoFormatError("format incorrect: pas de XX-APO_COLONNES-XX")
|
||||
self.cols = _apo_read_cols(f)
|
||||
self.apo_elts = self._group_elt_cols(self.cols)
|
||||
|
||||
@ -794,7 +794,7 @@ class ApoData(object):
|
||||
while True: # skip
|
||||
line = f.readline()
|
||||
if not line:
|
||||
raise FormatError("format incorrect: pas de XX-APO_VALEURS-XX")
|
||||
raise ScoFormatError("format incorrect: pas de XX-APO_VALEURS-XX")
|
||||
if line.strip() == "XX-APO_VALEURS-XX":
|
||||
break
|
||||
self.column_titles = f.readline()
|
||||
@ -885,7 +885,7 @@ class ApoData(object):
|
||||
"""
|
||||
m = re.match("[12][0-9]{3}", self.titles["apoC_annee"])
|
||||
if not m:
|
||||
raise FormatError(
|
||||
raise ScoFormatError(
|
||||
'Annee scolaire (apoC_annee) invalide: "%s"' % self.titles["apoC_annee"]
|
||||
)
|
||||
return int(m.group(0))
|
||||
@ -943,7 +943,7 @@ class ApoData(object):
|
||||
log("Fichier Apogee invalide:")
|
||||
log("Colonnes declarees: %s" % declared)
|
||||
log("Colonnes presentes: %s" % present)
|
||||
raise FormatError(
|
||||
raise ScoFormatError(
|
||||
"""Fichier Apogee invalide<br/>Colonnes declarees: <tt>%s</tt>
|
||||
<br/>Colonnes presentes: <tt>%s</tt>"""
|
||||
% (declared, present)
|
||||
@ -1032,7 +1032,7 @@ def _apo_read_cols(f):
|
||||
line = f.readline().strip(" " + APO_NEWLINE)
|
||||
fs = line.split(APO_SEP)
|
||||
if fs[0] != "apoL_a01_code":
|
||||
raise FormatError("invalid line: %s (expecting apoL_a01_code)" % line)
|
||||
raise ScoFormatError("invalid line: %s (expecting apoL_a01_code)" % line)
|
||||
col_keys = fs
|
||||
|
||||
while True: # skip premiere partie (apoL_a02_nom, ...)
|
||||
@ -1052,14 +1052,14 @@ def _apo_read_cols(f):
|
||||
# sanity check
|
||||
col_id = fs[0] # apoL_c0001, ...
|
||||
if col_id in cols:
|
||||
raise FormatError("duplicate column definition: %s" % col_id)
|
||||
raise ScoFormatError("duplicate column definition: %s" % col_id)
|
||||
m = re.match(r"^apoL_c([0-9]{4})$", col_id)
|
||||
if not m:
|
||||
raise FormatError(
|
||||
raise ScoFormatError(
|
||||
"invalid column id: %s (expecting apoL_c%04d)" % (line, col_id)
|
||||
)
|
||||
if int(m.group(1)) != i:
|
||||
raise FormatError("invalid column id: %s for index %s" % (col_id, i))
|
||||
raise ScoFormatError("invalid column id: %s for index %s" % (col_id, i))
|
||||
|
||||
cols[col_id] = DictCol(list(zip(col_keys, fs)))
|
||||
cols[col_id].lineno = f.lineno # for debuging purpose
|
||||
@ -1083,14 +1083,14 @@ def _apo_read_TITRES(f):
|
||||
else:
|
||||
log("Error read CSV: \nline=%s\nfields=%s" % (line, fields))
|
||||
log(dir(f))
|
||||
raise FormatError(
|
||||
raise ScoFormatError(
|
||||
"Fichier Apogee incorrect (section titres, %d champs au lieu de 2)"
|
||||
% len(fields)
|
||||
)
|
||||
d[k] = v
|
||||
#
|
||||
if not d.get("apoC_Fichier_Exp", None):
|
||||
raise FormatError("Fichier Apogee incorrect: pas de titre apoC_Fichier_Exp")
|
||||
raise ScoFormatError("Fichier Apogee incorrect: pas de titre apoC_Fichier_Exp")
|
||||
# keep only basename: may be a windows or unix pathname
|
||||
s = d["apoC_Fichier_Exp"].split("/")[-1]
|
||||
s = s.split("\\")[-1] # for DOS paths, eg C:\TEMP\VL4RT_V3ASR.TXT
|
||||
|
@ -56,7 +56,7 @@ class ScoValueError(ScoException):
|
||||
self.dest_url = dest_url
|
||||
|
||||
|
||||
class FormatError(ScoValueError):
|
||||
class ScoFormatError(ScoValueError):
|
||||
pass
|
||||
|
||||
|
||||
|
@ -50,7 +50,7 @@ from app.scodoc import sco_tag_module
|
||||
from app.scodoc import sco_xml
|
||||
import sco_version
|
||||
from app.scodoc.gen_tables import GenTable
|
||||
from app.scodoc.sco_exceptions import ScoValueError
|
||||
from app.scodoc.sco_exceptions import ScoValueError, ScoFormatError
|
||||
from app.scodoc.sco_permissions import Permission
|
||||
|
||||
_formationEditor = ndb.EditableTable(
|
||||
@ -184,9 +184,9 @@ def formation_import_xml(doc: str, import_tags=True):
|
||||
f = dom.getElementsByTagName("formation")[0] # or dom.documentElement
|
||||
D = sco_xml.xml_to_dicts(f)
|
||||
except:
|
||||
raise ScoValueError(
|
||||
"Le document xml ne correspond pas à un programme BUT. (élément 'formation' inexistant "
|
||||
"par exemple)."
|
||||
raise ScoFormatError(
|
||||
"""Ce document xml ne correspond pas à un programme exporté par ScoDoc.
|
||||
(élément 'formation' inexistant par exemple)."""
|
||||
)
|
||||
assert D[0] == "formation"
|
||||
F = D[1]
|
||||
|
@ -47,7 +47,7 @@ from app.scodoc.sco_formsemestre_inscriptions import (
|
||||
from app.scodoc.gen_tables import GenTable
|
||||
from app.scodoc.sco_exceptions import (
|
||||
AccessDenied,
|
||||
FormatError,
|
||||
ScoFormatError,
|
||||
ScoException,
|
||||
ScoValueError,
|
||||
ScoInvalidDateError,
|
||||
@ -640,7 +640,7 @@ def scolars_import_admission(datafile, formsemestre_id=None, type_admission=None
|
||||
if (idx_nom is None) or (idx_prenom is None):
|
||||
log("fields indices=" + ", ".join([str(x) for x in fields]))
|
||||
log("fields titles =" + ", ".join([fields[x][0] for x in fields]))
|
||||
raise FormatError(
|
||||
raise ScoFormatError(
|
||||
"scolars_import_admission: colonnes nom et prenom requises",
|
||||
dest_url=url_for(
|
||||
"scolar.form_students_import_infos_admissions",
|
||||
@ -672,7 +672,7 @@ def scolars_import_admission(datafile, formsemestre_id=None, type_admission=None
|
||||
try:
|
||||
val = convertor(line[idx])
|
||||
except ValueError:
|
||||
raise FormatError(
|
||||
raise ScoFormatError(
|
||||
'scolars_import_admission: valeur invalide, ligne %d colonne %s: "%s"'
|
||||
% (nline, field_name, line[idx]),
|
||||
dest_url=url_for(
|
||||
@ -758,7 +758,7 @@ def adm_get_fields(titles, formsemestre_id):
|
||||
convertor = adm_convert_text
|
||||
# doublons ?
|
||||
if k in [x[0] for x in fields.values()]:
|
||||
raise FormatError(
|
||||
raise ScoFormatError(
|
||||
'scolars_import_admission: titre "%s" en double (ligne 1)'
|
||||
% (title),
|
||||
dest_url=url_for(
|
||||
|
@ -22,6 +22,7 @@ from app.models.formations import Formation
|
||||
from app.models.but_refcomp import ApcReferentielCompetences
|
||||
from app.but.import_refcomp import orebut_import_refcomp
|
||||
from app.but.forms.refcomp_forms import FormationRefCompForm, RefCompLoadForm
|
||||
from app.scodoc.sco_exceptions import ScoFormatError
|
||||
from app.scodoc.sco_permissions import Permission
|
||||
from app.views import notes_bp as bp
|
||||
|
||||
@ -86,7 +87,16 @@ def refcomp_load(formation_id=None):
|
||||
if form.validate_on_submit():
|
||||
f = form.upload.data
|
||||
filename = secure_filename(f.filename)
|
||||
ref = orebut_import_refcomp(f, dept_id=g.scodoc_dept_id, orig_filename=filename)
|
||||
try:
|
||||
xml_data = f.read()
|
||||
ref = orebut_import_refcomp(
|
||||
xml_data, dept_id=g.scodoc_dept_id, orig_filename=filename
|
||||
)
|
||||
except TypeError as exc:
|
||||
raise ScoFormatError("fichier XML Orébut invalide") from exc
|
||||
except ScoFormatError:
|
||||
raise
|
||||
|
||||
if formation is not None:
|
||||
return redirect(
|
||||
url_for(
|
||||
|
544
tests/data/but-RT-refcomp-exemple.xml
Normal file
544
tests/data/but-RT-refcomp-exemple.xml
Normal file
@ -0,0 +1,544 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<referentiel_competence specialite="RT" specialite_long="Réseaux et télécommunications" type="B.U.T.">
|
||||
<competences>
|
||||
<competence name="Administrer" numero="1" libelle_long="Administrer les réseaux et l’Internet" couleur="c1">
|
||||
<situations>
|
||||
<situation>Conception et administration de l’infrastructure du réseau informatique d’une entreprise</situation>
|
||||
<situation>Installation et administration des services réseau informatique d’une entreprise</situation>
|
||||
<situation>Déploiement et administration des solutions fixes pour les clients d’un opérateur de télécommunication </situation>
|
||||
</situations>
|
||||
<composantes_essentielles>
|
||||
<composante>en choisissant les solutions et technologies réseaux adaptées</composante>
|
||||
<composante>en respectant les principes fondamentaux de la sécurité informatique</composante>
|
||||
<composante>en utilisant une approche rigoureuse pour la résolution des dysfonctionnements </composante>
|
||||
<composante>en respectant les règles métiers</composante>
|
||||
<composante>en assurant une veille technologique </composante>
|
||||
</composantes_essentielles>
|
||||
<niveaux>
|
||||
<niveau ordre="1" libelle="Assister l’administrateur du réseau" annee="BUT1">
|
||||
<acs>
|
||||
<ac code="AC11.01">Maîtriser les lois fondamentales de l’électricité afin d’intervenir sur des équipements de réseaux et télécommunications</ac>
|
||||
<ac code="AC11.02">Comprendre l'architecture et les fondements des systèmes numériques, les principes du codage de l'information, des communications et de l'Internet</ac>
|
||||
<ac code="AC11.03">Configurer les fonctions de base du réseau local</ac>
|
||||
<ac code="AC11.04">Maîtriser les rôles et les principes fondamentaux des systèmes d’exploitation afin d’interagir avec ceux-ci pour la configuration et l'administration des réseaux et services fournis </ac>
|
||||
<ac code="AC11.05">Identifier les dysfonctionnements du réseau local et savoir les signaler</ac>
|
||||
<ac code="AC11.06">Installer un poste client, expliquer la procédure mise en place</ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="2" libelle="Administrer un réseau " annee="BUT2">
|
||||
<acs>
|
||||
<ac code="AC21.01">Configurer et dépanner le routage dynamique dans un réseau</ac>
|
||||
<ac code="AC21.02">Configurer et expliquer une politique simple de QoS et les fonctions de base de la sécurité d’un réseau</ac>
|
||||
<ac code="AC21.03">Déployer des postes clients et des solutions virtualisées adaptées à une situation donnée</ac>
|
||||
<ac code="AC21.04">Déployer des services réseaux avancés</ac>
|
||||
<ac code="AC21.05">Identifier les réseaux opérateurs et l’architecture d’Internet</ac>
|
||||
<ac code="AC21.06">Travailler en équipe pour développer ses compétences professionnelles</ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="3" libelle="Concevoir un réseau" annee="BUT3">
|
||||
<acs>
|
||||
<ac code="AC31.01">Concevoir un projet de réseau informatique d’une entreprise en intégrant les problématiques de haute disponibilité, de QoS, de sécurité et de supervision</ac>
|
||||
<ac code="AC31.02">Réaliser la documentation technique de ce projet</ac>
|
||||
<ac code="AC31.03">Réaliser une maquette de démonstration du projet</ac>
|
||||
<ac code="AC31.04">Défendre/argumenter un projet </ac>
|
||||
<ac code="AC31.05">Communiquer avec les acteurs du projet</ac>
|
||||
<ac code="AC31.06">Gérer le projet et les différentes étapes de sa mise en œuvre en respectant les délais </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
</niveaux>
|
||||
</competence>
|
||||
<competence name="Connecter" numero="2" libelle_long="Connecter les entreprises et les usagers " couleur="c2">
|
||||
<situations>
|
||||
<situation>Déploiement des supports et systèmes de transmission</situation>
|
||||
<situation>Mise en service et administration des équipements d’accès fixe ou mobile d’un opérateur de télécommunications </situation>
|
||||
<situation>Déploiement et administration des accès sans fil pour l'entreprise</situation>
|
||||
<situation>Déploiement des systèmes de communications </situation>
|
||||
</situations>
|
||||
<composantes_essentielles>
|
||||
<composante>en communiquant avec le client et les différents acteurs impliqués, parfois en anglais </composante>
|
||||
<composante>en faisant preuve d’une démarche scientifique</composante>
|
||||
<composante>en choisissant les solutions et technologies adaptées</composante>
|
||||
<composante>en proposant des solutions respectueuses de l'environnement </composante>
|
||||
</composantes_essentielles>
|
||||
<niveaux>
|
||||
<niveau ordre="1" libelle="Découvrir les transmissions et la ToIP" annee="BUT1">
|
||||
<acs>
|
||||
<ac code="AC12.01">Mesurer, analyser et commenter les signaux</ac>
|
||||
<ac code="AC12.02">Caractériser des systèmes de transmissions élémentaires et découvrir la modélisation mathématique de leur fonctionnement </ac>
|
||||
<ac code="AC12.03">Déployer des supports de transmission</ac>
|
||||
<ac code="AC12.04">Connecter les systèmes de ToIP</ac>
|
||||
<ac code="AC12.05">Communiquer avec un tiers (client, collaborateur...) et adapter son discours et sa langue à son interlocuteur</ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="2" libelle="Maîtriser les différentes composantes des solutions de connexion des entreprises et des usagers" annee="BUT2">
|
||||
<acs>
|
||||
<ac code="AC22.01">Déployer et caractériser des systèmes de transmissions complexes </ac>
|
||||
<ac code="AC22.02">Mettre en place un accès distant sécurisé</ac>
|
||||
<ac code="AC22.03">Mettre en place une connexion multi-site via un réseau opérateur</ac>
|
||||
<ac code="AC22.04">Déployer des réseaux d’accès des opérateurs</ac>
|
||||
<ac code="AC22.05">Capacité à questionner un cahier des charges RT</ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="3" libelle="Déployer une solution de connexion ou de communication sur IP" annee="BUT3">
|
||||
<acs>
|
||||
<ac code="AC32.01">Déployer un système de communication pour l’entreprise</ac>
|
||||
<ac code="AC32.02">Déployer un réseau d’accès sans fil pour le réseau d’entreprise en intégrant les enjeux de la sécurité</ac>
|
||||
<ac code="AC32.03">Déployer un réseau d’accès fixe ou mobile pour un opérateur de télécommunications en intégrant la sécurité </ac>
|
||||
<ac code="AC32.04">Permettre aux collaborateurs de se connecter de manière sécurisée au système d’information de l’entreprise </ac>
|
||||
<ac code="AC32.05">Collaborer en mode projet en français et en anglais </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
</niveaux>
|
||||
</competence>
|
||||
<competence name="Programmer" numero="3" libelle_long="Créer des outils et applications informatiques pour les R&T " couleur="c3">
|
||||
<situations>
|
||||
<situation>Conception, déploiement et maintenance du système d’information d’une entreprise </situation>
|
||||
<situation>Automatisation du déploiement et de la maintenance des outils logiciels </situation>
|
||||
<situation>Développement d’outils informatiques à usage interne d'une équipe </situation>
|
||||
</situations>
|
||||
<composantes_essentielles>
|
||||
<composante>en étant à l’écoute des besoins du client</composante>
|
||||
<composante>en documentant le travail réalisé</composante>
|
||||
<composante>en utilisant les outils numériques à bon escient</composante>
|
||||
<composante>en choisissant les outils de développement adaptés </composante>
|
||||
<composante>en intégrant les problématiques de sécurité </composante>
|
||||
</composantes_essentielles>
|
||||
<niveaux>
|
||||
<niveau ordre="1" libelle="S’intégrer dans un service informatique" annee="BUT1">
|
||||
<acs>
|
||||
<ac code="AC13.01">Utiliser un système informatique et ses outils</ac>
|
||||
<ac code="AC13.02">Lire, exécuter, corriger et modifier un programme</ac>
|
||||
<ac code="AC13.03">Traduire un algorithme, dans un langage et pour un environnement donné</ac>
|
||||
<ac code="AC13.04">Connaître l’architecture et les technologies d’un site Web</ac>
|
||||
<ac code="AC13.05">Choisir les mécanismes de gestion de données adaptés au développement de l’outil et argumenter ses choix</ac>
|
||||
<ac code="AC13.06">S’intégrer dans un environnement propice au développement et au travail collaboratif </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="2" libelle="Développer une application R&T " annee="BUT2">
|
||||
<acs>
|
||||
<ac code="AC23.01">Automatiser l’administration système avec des scripts</ac>
|
||||
<ac code="AC23.02">Développer une application à partir d’un cahier des charges donné, pour le Web ou les périphériques mobiles </ac>
|
||||
<ac code="AC23.03">Utiliser un protocole réseau pour programmer une application client/serveur</ac>
|
||||
<ac code="AC23.04">Installer, administrer un système de gestion de données</ac>
|
||||
<ac code="AC23.05">Accéder à un ensemble de données depuis une application et/ou un site web </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="3" libelle="Piloter un projet de développement d’une application R&T" annee="BUT3">
|
||||
<acs>
|
||||
<ac code="AC33.01">Élaborer les spécifications techniques et le cahier des charges d’une application informatique </ac>
|
||||
<ac code="AC33.02">Mettre en place un environnement de travail collaboratif</ac>
|
||||
<ac code="AC33.03">Participer à la formation des utilisateurs</ac>
|
||||
<ac code="AC33.04">Déployer et maintenir une solution informatique </ac>
|
||||
<ac code="AC33.05">S’informer sur les évolutions et les nouveautés technologiques </ac>
|
||||
<ac code="AC33.06">Sécuriser l'environnement numérique d'une application </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
</niveaux>
|
||||
</competence>
|
||||
<competence name="Sécuriser" numero="4" libelle_long="Administrer un système d’information sécurisé" couleur="c4">
|
||||
<situations>
|
||||
<situation>Analyse de l’existant et étude des besoins de sécurité d’une petite structure </situation>
|
||||
<situation>Évolution et mise en conformité du système d’information d’une entreprise </situation>
|
||||
</situations>
|
||||
<composantes_essentielles>
|
||||
<composante>en visant un juste compromis entre exigences de sécurité et contraintes d’utilisation </composante>
|
||||
<composante>en respectant les normes et le cadre juridique</composante>
|
||||
<composante>en intégrant les dernières technologies</composante>
|
||||
<composante>en travaillant en équipe</composante>
|
||||
<composante>en sensibilisant efficacement des utilisateurs </composante>
|
||||
</composantes_essentielles>
|
||||
<niveaux>
|
||||
<niveau ordre="1" libelle="Sensibiliser aux vulnérabilités d'un système d'information et aux remédiations possibles " annee="BUT2">
|
||||
<acs>
|
||||
<ac code="AC24.01Cyber">Connaître et utiliser les bonnes pratiques et les recommandations de cybersécurité</ac>
|
||||
<ac code="AC24.02Cyber">Mettre en œuvre les outils fondamentaux de sécurisation d’une infrastructure du réseau </ac>
|
||||
<ac code="AC24.03Cyber">Sécuriser les services</ac>
|
||||
<ac code="AC24.04Cyber">Choisir les outils cryptographiques adaptés au besoin fonctionnel du système d’information </ac>
|
||||
<ac code="AC24.05Cyber">Connaître les différents types d’attaque</ac>
|
||||
<ac code="AC24.06Cyber">Comprendre des documents techniques en anglais </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="2" libelle="Mettre en œuvre un système d’information sécurisé pour une petite structure " annee="BUT3">
|
||||
<acs>
|
||||
<ac code="AC34.01Cyber">Participer activement à une analyse de risque pour définir une politique de sécurité pour une petite structure </ac>
|
||||
<ac code="AC34.02Cyber">Mettre en œuvre des outils avancés de sécurisation d’une infrastructure du réseau</ac>
|
||||
<ac code="AC34.03Cyber">Sécuriser les systèmes d’exploitation</ac>
|
||||
<ac code="AC34.04Cyber">Proposer une architecture sécurisée de système d'information pour une petite structure </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
</niveaux>
|
||||
</competence>
|
||||
<competence name="Orchestrer" numero="5" libelle_long="Coordonner des infrastructures modulaires" couleur="c4">
|
||||
<situations>
|
||||
<situation>Industrialisation du déploiement des infrastructures systèmes, réseaux et sécurité en sauvegardant et en restaurant ses configurations</situation>
|
||||
<situation>Maintenance des outils pour l’intégration et la mise en production du code logiciel</situation>
|
||||
<situation>Administration d’un cluster de containers </situation>
|
||||
<situation>Analyse des performances d’un système pour améliorer les processus de production </situation>
|
||||
</situations>
|
||||
<composantes_essentielles>
|
||||
<composante>en respectant un cahier des charges</composante>
|
||||
<composante>en documentant le travail réalisé</composante>
|
||||
<composante>en intégrant les problématiques de sécurité</composante>
|
||||
<composante>en assurant une veille technologique</composante>
|
||||
<composante>en respectant les pratiques d’équipes et des méthodes de production </composante>
|
||||
</composantes_essentielles>
|
||||
<niveaux>
|
||||
<niveau ordre="1" libelle="Assister l’administrateur infrastructure et Cloud " annee="BUT2">
|
||||
<acs>
|
||||
<ac code="AC24.01DevCloud">Proposer une solution Cloud adaptée à l’entreprise </ac>
|
||||
<ac code="AC24.02DevCloud">Virtualiser un environnement</ac>
|
||||
<ac code="AC24.03DevCloud">Utiliser les services du Cloud</ac>
|
||||
<ac code="AC24.04DevCloud">Analyser un service Cloud au travers des métriques </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="2" libelle="Administrer une infrastructure Cloud" annee="BUT3">
|
||||
<acs>
|
||||
<ac code="AC34.01DevCloud">Concevoir, administrer et superviser une infrastructure Cloud</ac>
|
||||
<ac code="AC34.02DevCloud">Orchestrer les ressources Cloud</ac>
|
||||
<ac code="AC34.03DevCloud">Investiguer sur les incidents et les résoudre afin d’améliorer la qualité et la fiabilité des infrastructures </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
</niveaux>
|
||||
</competence>
|
||||
<competence name="Etendre" numero="6" libelle_long="Gérer les infrastructures des réseaux mobiles " couleur="c4">
|
||||
<situations>
|
||||
<situation>Gestion des infrastructures d’un opérateur de réseaux mobiles et d’Internet des Objets</situation>
|
||||
<situation>Gestion des infrastructures de réseaux mobiles dans le contexte industriel, personnel ou médical </situation>
|
||||
</situations>
|
||||
<composantes_essentielles>
|
||||
<composante>en respectant les normes et protocoles en vigueur </composante>
|
||||
<composante>en intégrant les dernières technologies mobiles </composante>
|
||||
</composantes_essentielles>
|
||||
<niveaux>
|
||||
<niveau ordre="1" libelle="Mettre en œuvre les réseaux pour la mobilité " annee="BUT2">
|
||||
<acs>
|
||||
<ac code="AC24.01IOM">Comprendre les architectures et spécificités des réseaux dédiés à l'IoT</ac>
|
||||
<ac code="AC24.02IOM">Mettre en œuvre des systèmes de transmissions pour l’accès à un réseau IoT</ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="2" libelle="Raccorder des objets connectés aux réseaux mobiles " annee="BUT3">
|
||||
<acs>
|
||||
<ac code="AC34.01IOM">Comprendre les architectures, protocoles et services des réseaux mobiles 4G/5G</ac>
|
||||
<ac code="AC34.02IOM">Choisir un réseau pour satisfaire les contraintes énergétiques et spectrales, en délai, en débit et en portée des objets connectés</ac>
|
||||
<ac code="AC34.03IOM">Mettre en œuvre des réseaux mobiles personnels ou industriels</ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
</niveaux>
|
||||
</competence>
|
||||
<competence name="Piloter" numero="7" libelle_long="Mettre en œuvre des projets techniques et réglementaires des R&T dans son activité " couleur="c4">
|
||||
<situations>
|
||||
<situation>Adéquation technique des solutions réseaux informatiques et télécoms à la demande client </situation>
|
||||
<situation>Élaboration de solutions techniques clients adaptées</situation>
|
||||
<situation>Accompagnement technique de la mise en place des solutions clients </situation>
|
||||
</situations>
|
||||
<composantes_essentielles>
|
||||
<composante>en maîtrisant les enjeux techniques et réglementaires des nouvelles technologies</composante>
|
||||
<composante>en pilotant un projet technique R&T</composante>
|
||||
<composante>en faisant preuve de vision stratégique en phase avec le marché des réseaux et des télécommunications </composante>
|
||||
<composante>en collaborant de façon responsable avec des équipes </composante>
|
||||
</composantes_essentielles>
|
||||
<niveaux>
|
||||
<niveau ordre="1" libelle="Mettre en œuvre un projet R&T " annee="BUT2">
|
||||
<acs>
|
||||
<ac code="AC24.01PPR">Compréhension d’un cahier des charges technique R&T </ac>
|
||||
<ac code="AC24.02PPR">Planification des étapes d’un projet technique R&T</ac>
|
||||
<ac code="AC24.03PPR">Co-animation d’une équipe technique</ac>
|
||||
<ac code="AC24.04PPR">Proposition de solutions techniques R&T efficientes</ac>
|
||||
<ac code="AC24.05PPR">Échanges vulgarisés ou techniques avec tous les acteurs d’un projet </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="2" libelle="Opérationnaliser un projet R&T " annee="BUT3">
|
||||
<acs>
|
||||
<ac code="AC34.01PPR">Rédaction d'un appel d'offres ou d'un cahier des charges technique R&T</ac>
|
||||
<ac code="AC34.02PPR">Animation technique d’équipes pluridisciplinaires</ac>
|
||||
<ac code="AC34.03PPR">Coordination d’équipes sur une partie de projet R&T ou sa totalité</ac>
|
||||
<ac code="AC34.04PPR">Mise en place de solutions techniques R&T efficientes</ac>
|
||||
<ac code="AC34.05PPR">Livraison et suivi technique de projet R&T</ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
</niveaux>
|
||||
</competence>
|
||||
<competence name="Rapprocher" numero="8" libelle_long="Gérer les infrastructures et les services des réseaux opérateurs " couleur="c4">
|
||||
<situations>
|
||||
<situation>Gestion des services d’un ensemble de clients entreprises d’un opérateur </situation>
|
||||
<situation>Gestion du déploiement de nouvelles infrastructures </situation>
|
||||
</situations>
|
||||
<composantes_essentielles>
|
||||
<composante>en respectant les règles métiers et les délais</composante>
|
||||
<composante>en assurant une communication optimale avec le client</composante>
|
||||
<composante>en mettant en place des processus opérationnels de gestion d’incidents </composante>
|
||||
<composante>en pilotant les acteurs terrain </composante>
|
||||
</composantes_essentielles>
|
||||
<niveaux>
|
||||
<niveau ordre="1" libelle="Gérer les infrastructures des réseaux opérateurs " annee="BUT2">
|
||||
<acs>
|
||||
<ac code="AC24.01ROM">Administrer les réseaux d’accès fixes et mobiles</ac>
|
||||
<ac code="AC24.02ROM">Virtualiser des services réseaux</ac>
|
||||
<ac code="AC24.03ROM">Décrire/comprendre l’architecture et les offres des opérateurs </ac>
|
||||
<ac code="AC24.04ROM">Gérer le routage/commutation et les interconnexions </ac>
|
||||
<ac code="AC24.05ROM">Automatiser la gestion des équipements réseaux </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="2" libelle="Administrer les services des opérateurs de télécommunications " annee="BUT3">
|
||||
<acs>
|
||||
<ac code="AC34.01ROM">Administrer/superviser les infrastructures et les services télécom</ac>
|
||||
<ac code="AC34.02ROM">Administrer et déployer des fonctions réseaux virtualisées et programmer le réseau</ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
</niveaux>
|
||||
</competence>
|
||||
<competence name="Surveiller" numero="9" libelle_long="Surveiller un système d’information sécurisé" couleur="c5">
|
||||
<situations>
|
||||
<situation>Surveillance et analyse du système d’information </situation>
|
||||
<situation>Audit de sécurité</situation>
|
||||
<situation>Gestion d’un incident de sécurité </situation>
|
||||
</situations>
|
||||
<composantes_essentielles>
|
||||
<composante>en assurant une veille permanente</composante>
|
||||
<composante>en réalisant les mises à jour critiques</composante>
|
||||
<composante>en automatisant des tâches</composante>
|
||||
<composante>en s’intégrant dans une équipe</composante>
|
||||
<composante>en surveillant le comportement du réseau</composante>
|
||||
<composante>en veillant au respect des contrats et à la conformité des obligations du système d'information </composante>
|
||||
</composantes_essentielles>
|
||||
<niveaux>
|
||||
<niveau ordre="1" libelle="Prendre en main les outils de surveillance et de test du système d'information " annee="BUT2">
|
||||
<acs>
|
||||
<ac code="AC25.01Cyber">Administrer les protections contre les logiciels malveillants </ac>
|
||||
<ac code="AC25.02Cyber">Prendre en main des outils de test de pénétration réseau/système</ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="2" libelle="Mettre en œuvre le système de surveillance d’incidents de sécurité " annee="BUT3">
|
||||
<acs>
|
||||
<ac code="AC35.01Cyber">Surveiller l’activité du système d’information</ac>
|
||||
<ac code="AC35.02Cyber">Appliquer une méthodologie de tests de pénétration</ac>
|
||||
<ac code="AC35.03Cyber">Réagir face à un incident de sécurité</ac>
|
||||
<ac code="AC35.04Cyber">Administrer les outils de surveillance du système d’information</ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
</niveaux>
|
||||
</competence>
|
||||
<competence name="Développer" numero="10" libelle_long="Accompagner le développement d’applications" couleur="c5">
|
||||
<situations>
|
||||
<situation>Déploiement d’une application</situation>
|
||||
<situation>Intervention sur la chaîne de développement dans une optique DevOps </situation>
|
||||
<situation>Surveillance de la qualité de la production</situation>
|
||||
<situation>Mise en place des services réseaux nécessaires au développement </situation>
|
||||
</situations>
|
||||
<composantes_essentielles>
|
||||
<composante>en respectant un cahier des charges</composante>
|
||||
<composante>en documentant le travail réalisé</composante>
|
||||
<composante>en respectant les bonnes pratiques de développement et de production </composante>
|
||||
<composante>en visant l’amélioration continue </composante>
|
||||
</composantes_essentielles>
|
||||
<niveaux>
|
||||
<niveau ordre="1" libelle="Développer pour le Cloud " annee="BUT2">
|
||||
<acs>
|
||||
<ac code="AC25.01DevCloud">Développer un microservice</ac>
|
||||
<ac code="AC25.02DevCloud">Mettre en production une application</ac>
|
||||
<ac code="AC25.03DevCloud">Programmer son réseau par le code</ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="2" libelle="S’intégrer dans une équipe DevOps " annee="BUT3">
|
||||
<acs>
|
||||
<ac code="AC35.01DevCloud">Adopter les pratiques de pilotage de projet</ac>
|
||||
<ac code="AC35.02DevCloud">Concevoir, gérer et sécuriser un environnement de microservices </ac>
|
||||
<ac code="AC35.03DevCloud">Gérer son infrastructure comme du code </ac>
|
||||
<ac code="AC35.04DevCloud">Gérer une chaîne d’intégration et/ou de déploiement continu </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
</niveaux>
|
||||
</competence>
|
||||
<competence name="Exploiter" numero="11" libelle_long="Mettre en œuvre des applications et des protocoles sécurisés pour l’Internet des Objets " couleur="c5">
|
||||
<situations>
|
||||
<situation>Déploiement d’un système IoT de la source capteur aux traitements des données </situation>
|
||||
<situation>Gestion, administration et sécurisation d’un système IoT </situation>
|
||||
</situations>
|
||||
<composantes_essentielles>
|
||||
<composante>en travaillant au sein d’une équipe pluridisciplinaire</composante>
|
||||
<composante>en respectant les normes et contraintes opérationnelles </composante>
|
||||
</composantes_essentielles>
|
||||
<niveaux>
|
||||
<niveau ordre="1" libelle="Mettre en œuvre des solutions pour l’Internet des Objets " annee="BUT2">
|
||||
<acs>
|
||||
<ac code="AC25.01IOM">Intégrer des systèmes électroniques et des systèmes d’exploitation embarqués </ac>
|
||||
<ac code="AC25.02IOM">Mettre en œuvre des protocoles pour les réseaux de l’IoT</ac>
|
||||
<ac code="AC25.03IOM">Mettre en œuvre des applications et traiter des données issues des objets connectés </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="2" libelle="Créer des solutions sécurisées pour l’Internet des Objets " annee="BUT3">
|
||||
<acs>
|
||||
<ac code="AC35.01IOM">Superviser et analyser le déploiement des réseaux sans-fil </ac>
|
||||
<ac code="AC35.02IOM">Sécuriser les objets connectés</ac>
|
||||
<ac code="AC35.03IOM">Créer et innover pour l’IoT </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
</niveaux>
|
||||
</competence>
|
||||
<competence name="Organiser" numero="12" libelle_long="Gérer des activités réseaux et télécommunications en termes organisationnels, relationnels, financiers et commerciaux" couleur="c5">
|
||||
<situations>
|
||||
<situation>Communication et stratégie technique en interne et en externe pour des projets R&T </situation>
|
||||
<situation>Suivi des objectifs opérationnels de projets R&T</situation>
|
||||
<situation>Pilotage de la relation client </situation>
|
||||
</situations>
|
||||
<composantes_essentielles>
|
||||
<composante>en pilotant avec agilité des solutions techniques</composante>
|
||||
<composante>en sachant communiquer à l’écrit et à l’oral avec tous les acteurs d’un projet</composante>
|
||||
<composante>en respectant des contraintes technico-économiques (financières, éthiques, temporelles, contractuelles, qualité) </composante>
|
||||
</composantes_essentielles>
|
||||
<niveaux>
|
||||
<niveau ordre="1" libelle="Élaborer un projet technique " annee="BUT2">
|
||||
<acs>
|
||||
<ac code="AC25.01PPR">Prise en compte des contraintes d’un pilotage de projet R&T</ac>
|
||||
<ac code="AC25.02PPR">Planification de solutions techniques R&T efficientes</ac>
|
||||
<ac code="AC25.03PPR">Prise de conscience des enjeux de la communication dans les relations interpersonnelles </ac>
|
||||
<ac code="AC25.04PPR">Établissement d’un relationnel de qualité </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="2" libelle="Mettre en place et suivre un projet technique " annee="BUT3">
|
||||
<acs>
|
||||
<ac code="AC35.01PPR">Rigueur dans le pilotage d’un projet R&T dans sa globalité</ac>
|
||||
<ac code="AC35.02PPR">Flexibilité dans la gestion des équipes et des tâches</ac>
|
||||
<ac code="AC35.03PPR">Prise de responsabilité envers les équipes</ac>
|
||||
<ac code="AC35.04PPR">Valorisation de solutions déployées, ou d’offres techniques, ou d’offres commerciales </ac>
|
||||
<ac code="AC35.05PPR">Force de propositions de solutions R&T innovantes responsables</ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
</niveaux>
|
||||
</competence>
|
||||
<competence name="Unifier" numero="13" libelle_long="Gérer les communications unifiées et la vidéo sur Internet " couleur="c5">
|
||||
<situations>
|
||||
<situation>Déploiement et administration des services de communication </situation>
|
||||
<situation>Administration des services multimédia </situation>
|
||||
</situations>
|
||||
<composantes_essentielles>
|
||||
<composante>en automatisant la gestion réseau des communications </composante>
|
||||
<composante>en sécurisant les infrastructures</composante>
|
||||
<composante>en gérant les interconnexions</composante>
|
||||
<composante>en assurant une communication optimale avec le client </composante>
|
||||
<composante>en respectant les règles métiers et les délais </composante>
|
||||
</composantes_essentielles>
|
||||
<niveaux>
|
||||
<niveau ordre="1" libelle="Mettre en oeuvre le système de téléphonie de l’entreprise " annee="BUT2">
|
||||
<acs>
|
||||
<ac code="AC25.01ROM">Choisir une architecture et déployer des services de ToIP </ac>
|
||||
<ac code="AC25.02ROM">Administrer un service de téléphonie pour l’entreprise </ac>
|
||||
<ac code="AC25.03ROM">Mettre en place une politique de QoS pour les applications </ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
<niveau ordre="2" libelle="Administrer les communications unifiées et les services vidéo de l’entreprise" annee="BUT3">
|
||||
<acs>
|
||||
<ac code="AC35.01ROM">Administrer les services multimédias pour une entreprise</ac>
|
||||
</acs>
|
||||
</niveau>
|
||||
</niveaux>
|
||||
</competence>
|
||||
</competences>
|
||||
<parcours>
|
||||
<parcour numero="1" libelle="Cybersécurité" code="Cyber">
|
||||
<annee ordre="1">
|
||||
<competence nom="Administrer" niveau="1"/>
|
||||
<competence nom="Connecter" niveau="1"/>
|
||||
<competence nom="Programmer" niveau="1"/>
|
||||
</annee>
|
||||
<annee ordre="2">
|
||||
<competence nom="Administrer" niveau="2"/>
|
||||
<competence nom="Connecter" niveau="2"/>
|
||||
<competence nom="Programmer" niveau="2"/>
|
||||
<competence nom="Sécuriser" niveau="1"/>
|
||||
<competence nom="Surveiller" niveau="1"/>
|
||||
</annee>
|
||||
<annee ordre="3">
|
||||
<competence nom="Administrer" niveau="3"/>
|
||||
<competence nom="Connecter" niveau="3"/>
|
||||
<competence nom="Programmer" niveau="3"/>
|
||||
<competence nom="Sécuriser" niveau="2"/>
|
||||
<competence nom="Surveiller" niveau="2"/>
|
||||
</annee>
|
||||
</parcour>
|
||||
<parcour numero="2" libelle="Développement système et cloud" code="DevCloud">
|
||||
<annee ordre="1">
|
||||
<competence nom="Administrer" niveau="1"/>
|
||||
<competence nom="Connecter" niveau="1"/>
|
||||
<competence nom="Programmer" niveau="1"/>
|
||||
</annee>
|
||||
<annee ordre="2">
|
||||
<competence nom="Administrer" niveau="2"/>
|
||||
<competence nom="Connecter" niveau="2"/>
|
||||
<competence nom="Programmer" niveau="2"/>
|
||||
<competence nom="Orchestrer" niveau="1"/>
|
||||
<competence nom="Développer" niveau="1"/>
|
||||
</annee>
|
||||
<annee ordre="3">
|
||||
<competence nom="Administrer" niveau="3"/>
|
||||
<competence nom="Connecter" niveau="3"/>
|
||||
<competence nom="Programmer" niveau="3"/>
|
||||
<competence nom="Orchestrer" niveau="2"/>
|
||||
<competence nom="Développer" niveau="2"/>
|
||||
</annee>
|
||||
</parcour>
|
||||
<parcour numero="3" libelle="Internet des objets et mobilité" code="IOM">
|
||||
<annee ordre="1">
|
||||
<competence nom="Administrer" niveau="1"/>
|
||||
<competence nom="Connecter" niveau="1"/>
|
||||
<competence nom="Programmer" niveau="1"/>
|
||||
</annee>
|
||||
<annee ordre="2">
|
||||
<competence nom="Administrer" niveau="2"/>
|
||||
<competence nom="Connecter" niveau="2"/>
|
||||
<competence nom="Programmer" niveau="2"/>
|
||||
<competence nom="Etendre" niveau="1"/>
|
||||
<competence nom="Exploiter" niveau="1"/>
|
||||
</annee>
|
||||
<annee ordre="3">
|
||||
<competence nom="Administrer" niveau="3"/>
|
||||
<competence nom="Connecter" niveau="3"/>
|
||||
<competence nom="Programmer" niveau="3"/>
|
||||
<competence nom="Etendre" niveau="2"/>
|
||||
<competence nom="Exploiter" niveau="2"/>
|
||||
</annee>
|
||||
</parcour>
|
||||
<parcour numero="4" libelle="Pilotage de projets de réseaux" code="PPR">
|
||||
<annee ordre="1">
|
||||
<competence nom="Administrer" niveau="1"/>
|
||||
<competence nom="Connecter" niveau="1"/>
|
||||
<competence nom="Programmer" niveau="1"/>
|
||||
</annee>
|
||||
<annee ordre="2">
|
||||
<competence nom="Administrer" niveau="2"/>
|
||||
<competence nom="Connecter" niveau="2"/>
|
||||
<competence nom="Programmer" niveau="2"/>
|
||||
<competence nom="Piloter" niveau="1"/>
|
||||
<competence nom="Organiser" niveau="1"/>
|
||||
</annee>
|
||||
<annee ordre="3">
|
||||
<competence nom="Administrer" niveau="3"/>
|
||||
<competence nom="Connecter" niveau="3"/>
|
||||
<competence nom="Programmer" niveau="3"/>
|
||||
<competence nom="Piloter" niveau="2"/>
|
||||
<competence nom="Organiser" niveau="2"/>
|
||||
</annee>
|
||||
</parcour>
|
||||
<parcour numero="5" libelle="Réseaux Opérateurs et Multimédia" code="ROM">
|
||||
<annee ordre="1">
|
||||
<competence nom="Administrer" niveau="1"/>
|
||||
<competence nom="Connecter" niveau="1"/>
|
||||
<competence nom="Programmer" niveau="1"/>
|
||||
</annee>
|
||||
<annee ordre="2">
|
||||
<competence nom="Administrer" niveau="2"/>
|
||||
<competence nom="Connecter" niveau="2"/>
|
||||
<competence nom="Programmer" niveau="2"/>
|
||||
<competence nom="Rapprocher" niveau="1"/>
|
||||
<competence nom="Unifier" niveau="1"/>
|
||||
</annee>
|
||||
<annee ordre="3">
|
||||
<competence nom="Administrer" niveau="3"/>
|
||||
<competence nom="Connecter" niveau="3"/>
|
||||
<competence nom="Programmer" niveau="3"/>
|
||||
<competence nom="Rapprocher" niveau="2"/>
|
||||
<competence nom="Unifier" niveau="2"/>
|
||||
</annee>
|
||||
</parcour>
|
||||
</parcours>
|
||||
</referentiel_competence>
|
@ -8,6 +8,7 @@ import io
|
||||
from flask import g
|
||||
import app
|
||||
from app import db
|
||||
from app import models
|
||||
from app.but.import_refcomp import orebut_import_refcomp
|
||||
from app.models.but_refcomp import (
|
||||
ApcReferentielCompetences,
|
||||
@ -15,39 +16,19 @@ from app.models.but_refcomp import (
|
||||
ApcSituationPro,
|
||||
)
|
||||
|
||||
ref_xml = """<?xml version="1.0" encoding="UTF-8"?>
|
||||
<referentiel_competence specialite="RT" specialite_long="Réseaux et télécommunications" type="B.U.T.">
|
||||
<competences>
|
||||
<competence name="Administrer" numero="1" libelle_long="Administrer les réseaux et l’Internet"
|
||||
couleur="c1">
|
||||
<situations>
|
||||
<situation>Conception et administration de l’infrastructure du réseau informatique d’une entreprise</situation>
|
||||
<situation>Installation et administration des services réseau informatique d’une entreprise</situation>
|
||||
</situations>
|
||||
</competence>
|
||||
<competence name="Tester" numero="2" libelle_long="Tester...">
|
||||
<situations>
|
||||
<situation>
|
||||
Tests unitaires d'une application.
|
||||
</situation>
|
||||
</situations>
|
||||
</competence>
|
||||
</competences>
|
||||
<parcours>
|
||||
<parcour>
|
||||
</parcour>
|
||||
</parcours>
|
||||
</referentiel_competence>
|
||||
"""
|
||||
|
||||
|
||||
def test_but_refcomp(test_client):
|
||||
"""modèles ref. comp."""
|
||||
f = io.StringIO(ref_xml)
|
||||
ref = orebut_import_refcomp(0, f)
|
||||
assert ref.references.count() == 2
|
||||
assert ref.competences[0].situations.count() == 2
|
||||
xml_data = open("tests/data/but-RT-refcomp-exemple.xml").read()
|
||||
dept_id = models.Departement.query.first().id
|
||||
ref = orebut_import_refcomp(xml_data, dept_id)
|
||||
assert ref.competences.count() == 13
|
||||
assert ref.competences[0].situations.count() == 3
|
||||
assert ref.competences[0].situations[0].libelle.startswith("Conception ")
|
||||
assert (
|
||||
ref.competences[-1].situations[-1].libelle
|
||||
== "Administration des services multimédia"
|
||||
)
|
||||
# test cascades on delete
|
||||
db.session.delete(ref)
|
||||
db.session.commit()
|
||||
|
Loading…
Reference in New Issue
Block a user