Compare commits

...

2 Commits

Author SHA1 Message Date
Jean-Marie PLACE
73d2d84d7b remove long in route (->query-string) 2022-08-24 07:25:47 +02:00
Jean-Marie PLACE
29bdb13e27 first test. url_for must be fixed ? 2022-08-23 17:31:18 +02:00

View File

@ -7,8 +7,9 @@
"""
API : accès aux étudiants
"""
from os import abort
from flask import g, jsonify
from flask import g, jsonify, request, url_for
from flask_login import current_user
from flask_login import login_required
from sqlalchemy import desc, or_
@ -43,6 +44,72 @@ from app.scodoc.sco_permissions import Permission
# )
@bp.route("/etudiants/test")
@api_web_bp.route("/etudiants/test")
@login_required
@scodoc
@permission_required(Permission.ScoView)
def etudiants_test(long=False):
"""
La liste des étudiants des semestres "courants" (tous départements)
(date du jour comprise dans la période couverte par le sem.)
dans lesquels l'utilisateur a la permission ScoView
(donc tous si le dept du rôle est None).
Exemple de résultat :
[
{
"id": 1234,
"code_nip": "12345678",
"code_ine": null,
"nom": "JOHN",
"nom_usuel": None,
"prenom": "DEUF",
"civilite": "M",
}
...
]
En format "long": voir documentation.
"""
allowed_depts = current_user.get_depts_with_permission(Permission.ScoView)
query = Identite.query.order_by(Identite.id)
page = request.args.get("page", 1, type=int)
detail = request.args.get("detail", "short", type=str)
if not None in allowed_depts:
# restreint aux départements autorisés:
query.join(Departement).filter(
or_(Departement.acronym == acronym for acronym in allowed_depts)
)
if detail == "long":
long = True
elif detail == "short":
long = False
else:
abort(400, "bad fmt parameter")
pagination = query.paginate(page, per_page=30, error_out=True)
prev = None
if pagination.has_prev:
prev = url_for("api.etudiants_test", page=page - 1, detail=detail)
next = None
if pagination.has_next:
next = url_for("api.etudiants_test", page=page + 1, detail=detail)
etuds = pagination.items
if long:
data = [etud.to_dict_api() for etud in etuds]
else:
data = [etud.to_dict_short() for etud in etuds]
return jsonify(
{
"etudiants": data,
"prev_url": prev,
"next_url": next,
"count": pagination.total,
}
)
@bp.route("/etudiants/courants", defaults={"long": False})
@bp.route("/etudiants/courants/long", defaults={"long": True})
@api_web_bp.route("/etudiants/courants", defaults={"long": False})