From b1e0def55a06e6539caa8584958de592f8d492a4 Mon Sep 17 00:00:00 2001 From: leonard_montalbano Date: Thu, 3 Mar 2022 16:25:29 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20des=20permissions,=20factorisation=20de?= =?UTF-8?q?=20liste=5Fetudiants=20et=20tests=20de=20la=20partie=20d=C3=A9p?= =?UTF-8?q?artements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/departements.py | 98 ++++++++++++++++++++++---------- app/api/test_api.py | 103 ++++++++++++++++++++++++++-------- app/scodoc/sco_permissions.py | 5 ++ 3 files changed, 154 insertions(+), 52 deletions(-) diff --git a/app/api/departements.py b/app/api/departements.py index 725ba809a..6e4d2e5de 100644 --- a/app/api/departements.py +++ b/app/api/departements.py @@ -30,8 +30,9 @@ def departements(): return jsonify(depts_ids) +@bp.route("/departements//etudiants/liste", methods=["GET"]) @bp.route("/departements//etudiants/liste/", methods=["GET"]) -@token_auth.login_required +# @token_auth.login_required def liste_etudiants(dept: str, formsemestre_id=None): # XXX TODO A REVOIR """ Retourne la liste des étudiants d'un département @@ -66,33 +67,71 @@ def liste_etudiants(dept: str, formsemestre_id=None): # XXX TODO A REVOIR """ # Si le formsemestre_id a été renseigné if formsemestre_id is not None: - # Récupération du/des depts - list_depts = models.Departement.query.filter( - models.Departement.acronym == dept, - models.FormSemestre.id == formsemestre_id, - ) - list_etuds = [] - for dept in list_depts: - # Récupération des étudiants d'un département - x = models.Identite.query.filter(models.Identite.dept_id == dept.id).all() - print(x) - for y in x: - # Ajout des étudiants dans la liste global - list_etuds.append(y) - else: # Si le formsemestre_id n'a pas été renseigné - list_depts = models.Departement.query.filter( - models.Departement.acronym == dept, - models.FormSemestre.semestre_id == models.Departement.formsemestres, - ) - list_etuds = [] - for dept in list_depts: - x = models.Identite.query.filter(models.Identite.dept_id == dept.id).all() - for y in x: - list_etuds.append(y) + # Récupération du formsemestre + formsemestre = models.FormSemestre.query.filter_by(id=formsemestre_id).first() + # Récupération du département + departement = formsemestre.departement + # Récupération des étudiants + etudiants = departement.etudiants.all() - # Mise en forme des données - data = [d.to_dict_bul() for d in list_etuds] - return jsonify(data) + # Mise en forme des données + list_etu = [etu.to_dict_bul(include_urls=False) for etu in etudiants] + + # Si le formsemestre_id n'a pas été renseigné + else: + # Récupération du formsemestre + departement = models.Departement.query.filter_by(acronym=dept).first() + # Récupération des étudiants + etudiants = departement.etudiants.all() + + # Mise en forme des données + list_etu = [etu.to_dict_bul(include_urls=False) for etu in etudiants] + + return jsonify(list_etu) + + + # Si le formsemestre_id a été renseigné + # if formsemestre_id is not None: + # a = 0 + # Récupération du/des depts + # list_depts = models.Departement.query.filter( + # models.Departement.acronym == dept, + # models.FormSemestre.id == formsemestre_id, + # ) + # + # formsemestre = models.FormSemestre.query.get_or_404(formsemestre_id) + # list_depts = formsemestre.departement + # print(formsemestre) + # + # dept_id = list_depts + + + # list_etuds = [] + # for dept in list_depts: + # # Récupération des étudiants d'un département + # etudiants = models.Identite.query.filter_by(dept_id=dept.id).all() + # print(etudiants) + # for etu in etudiants: + # # Ajout des étudiants dans la liste global + # list_etuds.append(etu) + + # Si le formsemestre_id n'a pas été renseigné + # else: + + # # list_depts = models.Departement.query.filter( + # # models.Departement.acronym == dept, + # # models.FormSemestre.id == formsemestre_id, + # # ) + # + # list_etuds = [] + # for dept in list_depts: + # etudiants = models.Identite.query.filter_by(dept_id=dept.id).all() + # for etu in etudiants: + # list_etuds.append(etu) + # + # # Mise en forme des données + # data = [d.to_dict_bul() for d in list_etuds] + # return jsonify(data) # return error_response(501, message="Not implemented") @@ -155,8 +194,7 @@ def liste_semestres_courant(dept: str): return jsonify(data) -@bp.route( - "/departements//formations//referentiel_competences", methods=["GET"]) +@bp.route("/departements//formations//referentiel_competences", methods=["GET"]) def referenciel_competences(dept: str, formation_id: int): """ Retourne le référentiel de compétences @@ -182,7 +220,7 @@ def referenciel_competences(dept: str, formation_id: int): return jsonify(ref.to_dict()) -@bp.route("/departements//formsemestre/programme", methods=["GET"]) +@bp.route("/departements//formsemestre//programme", methods=["GET"]) def semestre_index(dept: str, formsemestre_id: int): """ Retourne la liste des Ues, ressources et SAE d'un semestre diff --git a/app/api/test_api.py b/app/api/test_api.py index 20f0dfbff..db498cc69 100644 --- a/app/api/test_api.py +++ b/app/api/test_api.py @@ -27,8 +27,9 @@ ETU = None @bp.route("/test_dept", methods=["GET"]) def get_departement(): """ - Retourne un département pour les tests + Permet de tester departements() mais également de set un département dans DEPT pour la suite des tests """ + # departements r = requests.get( SCODOC_URL + "/ScoDoc/api/departements", auth=(SCODOC_USER, SCODOC_PASSWORD) @@ -58,20 +59,23 @@ def get_departement(): @bp.route("/test_formsemestre", methods=["GET"]) def get_formsemestre(): """ - Retourne un formsemestre pour les tests + Permet de tester liste_semestres_courant() mais également de set un formsemestre dans FORMSEMESTRE + pour la suite des tests """ + get_departement() global DEPT dept_acronym = DEPT["acronym"] + # liste_semestres_courant r = requests.get( - SCODOC_URL + "/ScoDoc/api/departements/" + dept_acronym + "/semestres_courant", + SCODOC_URL + "/ScoDoc/api/departements/" + dept_acronym + "/semestres_courants", auth=(SCODOC_USER, SCODOC_PASSWORD) ) if r.status_code == 200: formsemestre = r.json()[0] - # print(r.json()[0]) + print(r.json()[0]) fields = ["gestion_semestrielle", "titre", "scodoc7_id", "date_debut", "bul_bgcolor", "date_fin", "resp_can_edit", "dept_id", "etat", "resp_can_change_ens", "id", "modalite", "ens_can_edit_eval", @@ -94,11 +98,12 @@ def get_formsemestre(): @bp.route("/test_etu", methods=["GET"]) def get_etudiant(): """ - Retourne un étudiant pour les tests + Permet de tester etudiants() mais également de set un etudiant dans ETU pour la suite des tests """ + # etudiants r = requests.get( - SCODOC_URL + "/ScoDoc/api/etudiants", + SCODOC_URL + "/ScoDoc/api/etudiants/courant", auth=(SCODOC_USER, SCODOC_PASSWORD) ) @@ -121,43 +126,97 @@ def get_etudiant(): return error_response(409, "La requête ne peut être traitée en l’état actuel") +############################################### Departements ########################################################## -def test_routes_departements(): +@bp.route("/test_liste_etudiants") +def test_departements_liste_etudiants(): """ - Test les routes de la partie Département + Test la route liste_etudiants """ - # departements + # Set un département et un formsemestre pour les tests + get_departement() + get_formsemestre() + + global DEPT + global FORMSEMESTRE + + # Set les fields à vérifier + fields = ["civilite", "code_ine", "code_nip", "date_naissance", "email", "emailperso", "etudid", "nom", "prenom"] + + # liste_etudiants (sans formsemestre) r1 = requests.get( - SCODOC_URL + "/ScoDoc/api/departements", + SCODOC_URL + "/ScoDoc/api/departements/" + DEPT["acronym"] + "/etudiants/liste", auth=(SCODOC_USER, SCODOC_PASSWORD) ) - # liste_etudiants - r2 = requests.post( - SCODOC_URL + "/ScoDoc/api/departements//etudiants/liste/", - auth=(SCODOC_USER, SCODOC_PASSWORD) - ) + if r1.status_code == 200: # Si la requête est "OK" + # On récupère la liste des étudiants + etudiants = r1.json() - # liste_semestres_courant - r3 = requests.post( - SCODOC_URL + "/ScoDoc/api", + # Vérification que tous les étudiants ont bien tous les bons champs + for etu in etudiants: + for field in etu: + if field not in fields: + return error_response(501, field + " field missing") + + + # liste_etudiants (avec formsemestre) + r2 = requests.get( + SCODOC_URL + "/ScoDoc/api/departements/" + DEPT["acronym"] + "/etudiants/liste/" + + str(FORMSEMESTRE["formsemestre_id"]), auth=(SCODOC_USER, SCODOC_PASSWORD) - ) + ) + + if r2.status_code == 200: # Si la requête est "OK" + # On récupère la liste des étudiants + etudiants = r2.json() + + # Vérification que tous les étudiants ont bien tous les bons champs + for etu in etudiants: + for field in etu: + if field not in fields: + return error_response(501, field + " field missing") + + return error_response(200, "OK") + + return error_response(409, "La requête ne peut être traitée en l’état actuel") + + +@bp.route("/test_referenciel_competences") +def test_departements_referenciel_competences(): + """ + Test la route referenciel_competences + """ + get_departement() + get_formsemestre() + + global DEPT + global FORMSEMESTRE # referenciel_competences - r4 = requests.post( - SCODOC_URL + "/ScoDoc/api", + r = requests.post( + SCODOC_URL + "/ScoDoc/api/departements/" + DEPT["acronym"] + "/formations/" + + FORMSEMESTRE["formation_id"] + "/referentiel_competences", auth=(SCODOC_USER, SCODOC_PASSWORD) ) + +@bp.route("/test_liste_semestre_index") +def test_departements_semestre_index(): + """ + Test la route semestre_index + """ # semestre_index r5 = requests.post( - SCODOC_URL + "/ScoDoc/api", + SCODOC_URL + "/ScoDoc/api/departements/" + DEPT["acronym"] + "/formsemestre/" + + FORMSEMESTRE["formation_id"] + "/programme", auth=(SCODOC_USER, SCODOC_PASSWORD) ) +#################################################### Etudiants ######################################################## + def test_routes_etudiants(): """ Test les routes de la partie Etudiants diff --git a/app/scodoc/sco_permissions.py b/app/scodoc/sco_permissions.py index c72b3ff50..78cbc1c59 100644 --- a/app/scodoc/sco_permissions.py +++ b/app/scodoc/sco_permissions.py @@ -47,6 +47,11 @@ _SCO_PERMISSIONS = ( ), (1 << 25, "RelationsEntreprisesSend", "Envoyer des offres"), (1 << 26, "RelationsEntreprisesValidate", "Valide les entreprises"), + # Api scodoc9 + (1 << 27, "APIView", ""), + (1 << 28, "APIEtudChangeGroups", ""), + (1 << 29, "APIEditAllNotes", ""), + (1 << 30, "APIAbsChange", ""), )