-
Mohammad Torkashvand authoredMohammad Torkashvand authored
budget.py 1.49 KiB
import logging
from typing import Any
from flask import Blueprint, jsonify
from compendium_v2.db.presentation_models import BudgetEntry
from compendium_v2.routes import common
routes = Blueprint('budget', __name__)
logger = logging.getLogger(__name__)
BUDGET_RESPONSE_SCHEMA = {
'$schema': 'http://json-schema.org/draft-07/schema#',
'definitions': {
'budget': {
'type': 'object',
'properties': {
'nren': {'type': 'string'},
'nren_country': {'type': 'string'},
'budget': {'type': 'number'},
'year': {'type': 'integer'},
},
'required': ['nren', 'nren_country', 'budget', 'year'],
'additionalProperties': False
}
},
'type': 'array',
'items': {'$ref': '#/definitions/budget'}
}
@routes.route('/', methods=['GET'])
@common.require_accepts_json
def budget_view() -> Any:
"""
handler for /api/budget/ requests
response will be formatted as:
.. asjson::
compendium_v2.routes.budget.BUDGET_RESPONSE_SCHEMA
:return:
"""
def _extract_data(entry: BudgetEntry):
return {
'nren': entry.nren.name,
'nren_country': entry.nren.country,
'budget': float(entry.budget),
'year': entry.year,
}
entries = sorted(
[_extract_data(entry) for entry in common.get_data(BudgetEntry)],
key=lambda d: (d['year'], d['nren'])
)
return jsonify(entries)