API: accès aux départements

This commit is contained in:
Emmanuel Viennet 2022-07-21 09:59:54 +02:00
parent 847e275b26
commit 8330ce66ca

View File

@ -21,6 +21,14 @@ def get_departement(dept_ident: str) -> Departement:
return Departement.query.get_or_404(dept_id) return Departement.query.get_or_404(dept_id)
@bp.route("/departements", methods=["GET"])
@token_auth.login_required
@token_permission_required(Permission.APIView)
def departements():
"""Liste les départements"""
return jsonify([dept.to_dict() for dept in Departement.query])
@bp.route("/departements_ids", methods=["GET"]) @bp.route("/departements_ids", methods=["GET"])
@token_auth.login_required @token_auth.login_required
@token_permission_required(Permission.APIView) @token_permission_required(Permission.APIView)
@ -29,12 +37,12 @@ def departements_ids():
return jsonify([dept.id for dept in Departement.query]) return jsonify([dept.id for dept in Departement.query])
@bp.route("/departement/<string:dept_ident>", methods=["GET"]) @bp.route("/departement/<string:acronym>", methods=["GET"])
@token_auth.login_required @token_auth.login_required
@token_permission_required(Permission.APIView) @token_permission_required(Permission.APIView)
def departement(dept_ident: str): def departement(acronym: str):
""" """
Info sur un département. Accès par id ou acronyme. Info sur un département. Accès par acronyme.
Exemple de résultat : Exemple de résultat :
{ {
@ -45,27 +53,29 @@ def departement(dept_ident: str):
"date_creation": "Fri, 15 Apr 2022 12:19:28 GMT" "date_creation": "Fri, 15 Apr 2022 12:19:28 GMT"
} }
""" """
dept = get_departement(dept_ident) dept = Departement.query.filter_by(acronym=acronym).first_or_404()
return jsonify(dept.to_dict()) return jsonify(dept.to_dict())
@bp.route("/departements", methods=["GET"]) @bp.route("/departement/id/<int:dept_id>", methods=["GET"])
@token_auth.login_required @token_auth.login_required
@token_permission_required(Permission.APIView) @token_permission_required(Permission.APIView)
def departements(): def departement_by_id(dept_id: int):
"""Liste les départements""" """
return jsonify([dept.to_dict() for dept in Departement.query]) Info sur un département. Accès par id.
"""
dept = Departement.query.get_or_404(dept_id)
return jsonify(dept.to_dict())
@bp.route("/departement/<string:dept_ident>/etudiants", methods=["GET"]) @bp.route("/departement/<string:acronym>/etudiants", methods=["GET"])
@token_auth.login_required @token_auth.login_required
@token_permission_required(Permission.APIView) @token_permission_required(Permission.APIView)
def list_etudiants(dept_ident: str): def dept_etudiants(acronym: str):
""" """
Retourne la liste des étudiants d'un département Retourne la liste des étudiants d'un département
dept: l'acronym d'un département acronym: l'acronyme d'un département
formsemestre_id: l'id d'un formesemestre
Exemple de résultat : Exemple de résultat :
[ [
@ -83,30 +93,45 @@ def list_etudiants(dept_ident: str):
... ...
] ]
""" """
# Le département, spécifié par un id ou un acronyme dept = Departement.query.filter_by(acronym=acronym).first_or_404()
dept = get_departement(dept_ident)
return jsonify([etud.to_dict_short() for etud in dept.etudiants]) return jsonify([etud.to_dict_short() for etud in dept.etudiants])
@bp.route("/departement/<string:dept_ident>/formsemestres_ids", methods=["GET"]) @bp.route("/departement/id/<int:dept_id>/etudiants", methods=["GET"])
@token_auth.login_required @token_auth.login_required
@token_permission_required(Permission.APIView) @token_permission_required(Permission.APIView)
def formsemestres_ids(dept_ident: str): def dept_etudiants_by_id(dept_id: int):
"""
Retourne la liste des étudiants d'un département d'id donné.
"""
dept = Departement.query.get_or_404(dept_id)
return jsonify([etud.to_dict_short() for etud in dept.etudiants])
@bp.route("/departement/<string:acronym>/formsemestres_ids", methods=["GET"])
@token_auth.login_required
@token_permission_required(Permission.APIView)
def dept_formsemestres_ids(acronym: str):
"""liste des ids formsemestre du département""" """liste des ids formsemestre du département"""
# Le département, spécifié par un id ou un acronyme dept = Departement.query.filter_by(acronym=acronym).first_or_404()
dept = get_departement(dept_ident)
return jsonify([formsemestre.id for formsemestre in dept.formsemestres]) return jsonify([formsemestre.id for formsemestre in dept.formsemestres])
@bp.route("/departement/<string:dept_ident>/formsemestres_courants", methods=["GET"]) @bp.route("/departement/id/<int:dept_id>/formsemestres_ids", methods=["GET"])
@token_auth.login_required @token_auth.login_required
@token_permission_required(Permission.APIView) @token_permission_required(Permission.APIView)
def liste_semestres_courant(dept_ident: str): def dept_formsemestres_ids_by_id(dept_id: int):
""" """liste des ids formsemestre du département"""
Liste des semestres actifs d'un départements donné dept = Departement.query.get_or_404(dept_id)
return jsonify([formsemestre.id for formsemestre in dept.formsemestres])
dept: l'acronym d'un département
@bp.route("/departement/<string:acronym>/formsemestres_courants", methods=["GET"])
@token_auth.login_required
@token_permission_required(Permission.APIView)
def dept_formsemestres_courants(acronym: str):
"""
Liste des semestres actifs d'un département d'acronyme donné
Exemple de résultat : Exemple de résultat :
[ [
@ -144,7 +169,27 @@ def liste_semestres_courant(dept_ident: str):
] ]
""" """
# Le département, spécifié par un id ou un acronyme # Le département, spécifié par un id ou un acronyme
dept = get_departement(dept_ident) dept = Departement.query.filter_by(acronym=acronym).first_or_404()
# Les semestres en cours de ce département
formsemestres = models.FormSemestre.query.filter(
FormSemestre.dept_id == dept.id,
FormSemestre.date_debut <= app.db.func.now(),
FormSemestre.date_fin >= app.db.func.now(),
)
return jsonify([d.to_dict(convert_parcours=True) for d in formsemestres])
@bp.route("/departement/id/<int:dept_id>/formsemestres_courants", methods=["GET"])
@token_auth.login_required
@token_permission_required(Permission.APIView)
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)
# Les semestres en cours de ce département # Les semestres en cours de ce département
formsemestres = models.FormSemestre.query.filter( formsemestres = models.FormSemestre.query.filter(