From 8cf11a26000d1b6cdc0f75b9b188d54a5b8aa5e5 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sat, 22 Jun 2024 17:02:29 +0200 Subject: [PATCH] API departement: ameliore code et doc. --- app/api/departements.py | 77 ++++++------------------------ tests/api/test_api_departements.py | 16 +++++++ 2 files changed, 30 insertions(+), 63 deletions(-) diff --git a/app/api/departements.py b/app/api/departements.py index 7d056e46..140482b2 100644 --- a/app/api/departements.py +++ b/app/api/departements.py @@ -226,50 +226,27 @@ def dept_formsemestres_ids_by_id(dept_id: int): @bp.route("/departement//formsemestres_courants") +@bp.route("/departement/id//formsemestres_courants") @login_required @scodoc @permission_required(Permission.ScoView) @as_json -def dept_formsemestres_courants(acronym: str): +def dept_formsemestres_courants(acronym: str = "", dept_id: int | None = None): """ - Liste des semestres actifs d'un département d'acronyme donné + Liste les semestres du département indiqué (par son acronyme ou son id) + contenant la date courante, ou à défaut celle indiquée en argument + (au format ISO). + + QUERY + ----- + date_courante: - Exemple de résultat : - [ - { - "titre": "master machine info", - "gestion_semestrielle": false, - "scodoc7_id": null, - "date_debut": "01/09/2021", - "bul_bgcolor": null, - "date_fin": "15/12/2022", - "resp_can_edit": false, - "dept_id": 1, - "etat": true, - "resp_can_change_ens": false, - "id": 1, - "modalite": "FI", - "ens_can_edit_eval": false, - "formation_id": 1, - "gestion_compensation": false, - "elt_sem_apo": null, - "semestre_id": 1, - "bul_hide_xml": false, - "elt_annee_apo": null, - "block_moyennes": false, - "formsemestre_id": 1, - "titre_num": "master machine info semestre 1", - "date_debut_iso": "2021-09-01", - "date_fin_iso": "2022-12-15", - "responsables": [ - 3, - 2 - ] - }, - ... - ] """ - dept = Departement.query.filter_by(acronym=acronym).first_or_404() + dept = ( + Departement.query.filter_by(acronym=acronym).first_or_404() + if acronym + else Departement.query.get_or_404(dept_id) + ) date_courante = request.args.get("date_courante") date_courante = datetime.fromisoformat(date_courante) if date_courante else None return [ @@ -278,29 +255,3 @@ def dept_formsemestres_courants(acronym: str): dept, date_courante ) ] - - -@bp.route("/departement/id//formsemestres_courants") -@login_required -@scodoc -@permission_required(Permission.ScoView) -@as_json -def dept_formsemestres_courants_by_id(dept_id: int): - """ - Liste des semestres actifs d'un département d'id donné - """ - # Le département, spécifié par un id ou un acronyme - dept = Departement.query.get_or_404(dept_id) - date_courante = request.args.get("date_courante") - if date_courante: - test_date = datetime.fromisoformat(date_courante) - else: - test_date = db.func.current_date() - # Les semestres en cours de ce département - formsemestres = FormSemestre.query.filter( - FormSemestre.dept_id == dept.id, - FormSemestre.date_debut <= test_date, - FormSemestre.date_fin >= test_date, - ) - - return [d.to_dict_api() for d in formsemestres] diff --git a/tests/api/test_api_departements.py b/tests/api/test_api_departements.py index 7553f739..ba5f07dd 100644 --- a/tests/api/test_api_departements.py +++ b/tests/api/test_api_departements.py @@ -280,3 +280,19 @@ def test_semestres_courant(api_headers): assert len(result_a) > 0 sem = result_a[0] assert verify_fields(sem, FORMSEMESTRE_FIELDS) is True + + # accès avec id incorrect + r = requests.get( + f"{API_URL}/departement/id/bad/formsemestres_courants?date_courante=2022-07-01", + headers=api_headers, + verify=CHECK_CERTIFICATE, + timeout=scu.SCO_TEST_API_TIMEOUT, + ) + assert r.status_code == 404 + r = requests.get( + f"{API_URL}/departement/id/-1/formsemestres_courants?date_courante=2022-07-01", + headers=api_headers, + verify=CHECK_CERTIFICATE, + timeout=scu.SCO_TEST_API_TIMEOUT, + ) + assert r.status_code == 404