Code source de geonature.core.gn_synthese.routes

from flask import Blueprint, jsonify, request

from geonature.core.gn_permissions.decorators import login_required
from geonature.core.gn_synthese.models import Synthese, SyntheseLogEntry
from geonature.utils.env import db

from sqlalchemy import func
from sqlalchemy.orm import load_only
from werkzeug.exceptions import BadRequest


from geonature.core.gn_synthese.blueprints import (
    reports_blueprint,
    synthese_routes,
    statistics_routes,
    taxon_info_routes,
    other_routes,
    export_routes,
)

[docs] routes = Blueprint("gn_synthese", __name__)
routes.register_blueprint(reports_blueprint, url_prefix="/reports") routes.register_blueprint(synthese_routes, url_prefix="/") routes.register_blueprint(statistics_routes, url_prefix="/") routes.register_blueprint(taxon_info_routes, url_prefix="/") routes.register_blueprint(other_routes, url_prefix="/") routes.register_blueprint(export_routes, url_prefix="/") @routes.route("/log", methods=["get"]) @login_required
[docs] def list_synthese_log_entries() -> dict: """Get log history from synthese Parameters ---------- Returns ------- dict log action list """ # FIXME SQLA 2 deletion_entries = SyntheseLogEntry.query.options( load_only( SyntheseLogEntry.id_synthese, SyntheseLogEntry.last_action, SyntheseLogEntry.meta_last_action_date, ) ) create_update_entries = Synthese.query.with_entities( Synthese.id_synthese, db.case( (Synthese.meta_create_date < Synthese.meta_update_date, "U"), else_="I", ).label("last_action"), func.coalesce(Synthese.meta_update_date, Synthese.meta_create_date).label( "meta_last_action_date" ), ) query = deletion_entries.union(create_update_entries) # Filter try: query = query.filter_by_params(request.args) except ValueError as exc: raise BadRequest(*exc.args) from exc # Sort try: query = query.sort(request.args.getlist("sort")) except ValueError as exc: raise BadRequest(*exc.args) from exc # Paginate limit = request.args.get("limit", type=int, default=50) page = request.args.get("page", type=int, default=1) results = query.paginate(page=page, per_page=limit, error_out=False) return jsonify( { "items": [item.as_dict() for item in results.items], "total": results.total, "limit": limit, "page": page, } )