resource-watch/adapter-earth-engine

View on GitHub
adapterearthengine/middleware.py

Summary

Maintainability
A
25 mins
Test Coverage
A
100%
import json
import logging
from functools import wraps

from flask import request

from adapterearthengine.routes.api import error
from adapterearthengine.services.dataset_service import DatasetService
from adapterearthengine.errors import DatasetNotFound


def is_microservice_or_admin(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        logging.debug("Checking microservice user")
        logged_user = json.loads(request.args.get("loggedUser", None))
        if (logged_user.get("id") == "microservice") or (
            logged_user.get("role") == "ADMIN"
        ):
            logging.debug("is microservice or admin")
            return func(*args, **kwargs)
        else:
            return error(status=403, detail="Not authorized")

    return wrapper


def get_dataset_from_id(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        logging.debug("Getting dataset from id")
        logging.debug("Getting dataset from id")

        try:
            dataset_object = DatasetService.get(
                kwargs["dataset_id"], request.headers.get("x-api-key")
            )
        except DatasetNotFound:
            return error(
                status=404,
                detail="Dataset with id {} doesn't exist".format(kwargs["dataset_id"]),
            )

        connector_type = dataset_object.get("connectorType", None)
        provider = dataset_object.get("provider", None)

        if connector_type != "rest":
            return error(
                status=422,
                detail="This operation is only supported for datasets with connectorType 'rest'",
            )

        if provider != "gee":
            return error(
                status=422,
                detail="This operation is only supported for datasets with provider 'gee'",
            )

        kwargs["dataset"] = dataset_object
        return func(*args, **kwargs)

    return wrapper