"""api.__init__ """ from flask import Blueprint from flask import request, g, jsonify from app import db from app.scodoc import sco_utils as scu from app.scodoc.sco_exceptions import ScoException api_bp = Blueprint("api", __name__) api_web_bp = Blueprint("apiweb", __name__) # HTTP ERROR STATUS API_CLIENT_ERROR = 400 # erreur dans les paramètres fournis par le client @api_bp.errorhandler(ScoException) @api_bp.errorhandler(404) def api_error_handler(e): "erreurs API => json" return scu.json_error(404, message=str(e)) def requested_format(default_format="json", allowed_formats=None): """Extract required format from query string. * default value is json. A list of allowed formats may be provided (['json'] considered if not provided). * if the required format is not in allowed list, returns None. NB: if json in not in allowed_formats, format specification is mandatory. """ format_type = request.args.get("format", default_format) if format_type in (allowed_formats or ["json"]): return format_type return None def get_model_api_object(model_cls: db.Model, model_id: int, join_cls: db.Model = None): """ Retourne une réponse contenant la représentation api de l'objet "Model[model_id]" Filtrage du département en fonction d'une classe de jointure (eg: Identite, Formsemstre) -> join_cls exemple d'utilisation : fonction "justificatif()" -> app/api/justificatifs.py """ query = model_cls.query.filter_by(id=model_id) if g.scodoc_dept and join_cls is not None: query = query.join(join_cls).filter_by(dept_id=g.scodoc_dept_id) unique: model_cls = query.first_or_404() return jsonify(unique.to_dict(format_api=True)) from app.api import tokens from app.api import ( absences, assiduites, billets_absences, departements, etudiants, evaluations, formations, formsemestres, jury, justificatifs, logos, partitions, users, )