Compare commits
2 Commits
master
...
test_pagin
Author | SHA1 | Date | |
---|---|---|---|
|
73d2d84d7b | ||
|
29bdb13e27 |
|
@ -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})
|
||||
|
|
Loading…
Reference in New Issue
Block a user