gfw-api/glad-analysis-tiled

View on GitHub
gladAnalysis/routes/api/v1/glad_router.py

Summary

Maintainability
A
0 mins
Test Coverage
F
46%
"""API ROUTER"""
import urllib

from flask import Blueprint, request

from gladAnalysis.errors import Error
from gladAnalysis.serializers import serialize_response, serialize_latest
from gladAnalysis.utils import util, sqlite_util

glad_analysis_endpoints = Blueprint('glad_analysis_endpoints', __name__)


@glad_analysis_endpoints.route('/admin/<iso_code>', methods=['GET'])
@glad_analysis_endpoints.route('/admin/<iso_code>/<adm1_code>', methods=['GET'])
@glad_analysis_endpoints.route('/admin/<iso_code>/<adm1_code>/<adm2_code>', methods=['GET'])
def glad_stats_iso(iso_code, adm1_code=None, adm2_code=None):
    # Query glad-alerts/summary-stats
    query_params = params = request.args.to_dict()
    route = util.route_constructor(iso_code, adm1_code, adm2_code)

    alerts_uri = '/v1/glad-alerts/summary-stats/admin/{}?{}'.format(route, urllib.parse.urlencode(query_params))
    area_uri = '/v2/geostore/admin/{}'.format(route)

    # if it's just an iso, simplify the geostore because we only really want the area_ha
    if not adm1_code:
        area_uri += '?simplify=0.05'

    glad_alerts = util.query_microservice(alerts_uri, request.headers.get('x-api-key'))
    aoi_area_ha = util.query_microservice(
        area_uri, request.headers.get('x-api-key'))['data']['attributes']['areaHa']

    # format glad alerts to be "count": 4, "week": 5, "year": 2017, etc
    formatted_glad = util.format_alerts_admin(request, glad_alerts)

    # package up iso/adm1/adm2 to limit # of params passed to function
    id_tuple = (iso_code, adm1_code, adm2_code)

    return serialize_response(request, formatted_glad, aoi_area_ha, None, id_tuple)


@glad_analysis_endpoints.route('/latest', methods=['GET'])
def latest():
    latest_data = sqlite_util.get_latest()

    return serialize_latest(latest_data)


@glad_analysis_endpoints.errorhandler(Error)
def handle_error(error):
    return error.serialize