示例#1
0
    def wrapper(*args, **kwargs):

        try:
            if 'geostore' in kwargs["sanitized_params"].keys():
                geostore = kwargs["sanitized_params"]["geostore"]
                logging.info(f'[middleware]: {geostore}')
                geojson = GeostoreService.get(geostore)
                kwargs["sanitized_params"]["geojson"] = geojson
        except GeostoreNotFound:
            return error(status=404, detail='Geostore not found')
        except Exception as err:
            return error(status=502, detail=f'{err}')

        return func(*args, **kwargs)
示例#2
0
def remove_keys(keys, dictionary):
    for key in keys:
        try:
            del dictionary[key]
        except KeyError:
            pass
        except Exception as err:
            return error(status=502, detail=f'{err}')
    return dictionary
示例#3
0
    def execute(config):
        try:
            response = request_to_microservice(config)
            if not response or response.get('errors'):
                raise GeostoreNotFound
            geostore = response.get('data', None).get('attributes', None)
            geojson = geostore.get('geojson', None).get('features', None)[0]

        except Exception as err:
            return error(status=502, detail=f'{err}')
        return geojson
示例#4
0
    def wrapper(*args, **kwargs):
        try:
            logging.debug(f'[middleware] [sanitizer] args: {args}')
            logging.debug(f'[middleware] [sanitizer] kargs: {kwargs}')

            myargs = {
                **kwargs,
                **request.args,
                **request.args.get('payload', {})
            }
            logging.debug(f'[middleware] [sanitizer] User_args: {myargs}')
            # Exclude params like loggedUser here

            sanitized_args = remove_keys(['loggedUser'], myargs)
            kwargs['params'] = sanitized_args
        except GeostoreNotFound:
            return error(status=404, detail='body params not found')
        except Exception as err:
            return error(status=502, detail=f'{err}')

        return func(*args, **kwargs)
示例#5
0
    def wrapper(*args, **kwargs):
        validation_schema = {
            'geostore': {
                'type': 'string',
                'excludes': 'geojson',
                'required': True
            },
            'geojson': {
                'type': 'string',
                'excludes': 'geostore',
                'required': True
            },
            'model_name': {
                'type': 'string',
                'required': True,
                'default': None
            },
            'model_version': {
                'type': 'string',
                'required': False,
                'default': 'last',
                'coerce': to_lower
            }
        }
        try:
            logging.debug(f"[VALIDATOR - prediction params]: {kwargs}")
            validator = Validator(validation_schema,
                                  allow_unknown=True,
                                  purge_unknown=True)
            logging.info(
                f"[VALIDATOR - prediction params]: {validator.validate(kwargs['params'])}"
            )

            if not validator.validate(kwargs['params']):
                return error(status=400, detail=validator.errors)

            kwargs['sanitized_params'] = validator.normalized(kwargs['params'])
            return func(*args, **kwargs)
        except Exception as err:
            return error(status=502, detail=f'{err}')
示例#6
0
def setup_ee():
    """Sets up Earth Engine authentication."""
    try:
        private_key = base64.b64decode(os.getenv('EE_PRIVATE_KEY'))
        service_email = os.getenv('GEO_PREDICTOR_SERVICE_EMAIL')
        credentials = ee.ServiceAccountCredentials(email=service_email,
                                                   key_data=private_key)
        ee.Initialize(credentials=credentials)
        ee.data.setDeadline(60000)
        app.logger.info("EE Initialized")
    except Exception as err:
        logging.error(f'{err}')
        return error(status=502, detail=f'{err}')
示例#7
0
def get_datasets():
    # Receive a payload and post it to DB to get all models. No pagination or filtering capabilities applied yet
    try:
        db = Database()
        query = """
        SELECT  dataset.slug, dataset.name, dataset.bands, dataset.rgb_bands, dataset.provider, image.bands_selections, image.scale, image.bands_min_max
		FROM image 
		INNER JOIN dataset ON image.dataset_id=dataset.id 
        """
        result = db.Query(query)
        app.logger.debug(result)
        # function to post schema
        return jsonify({'data': result}), 200
    except Exception as err:
        return error(status=502, detail=f'{err}')
示例#8
0
def get_models():
    # Receive a payload and post it to DB to get all models. No pagination or filtering capabilities applied yet
    try:
        db = Database()
        query = """
        SELECT model.model_name, model_type, model_output, model_description, model_versions.version as version, model_versions.model_architecture, model_versions.training_params->>'tb_url' as tb_url
        FROM model 
        INNER JOIN model_versions ON model.id=model_versions.model_id
        WHERE deployed is true
        ORDER BY model_name ASC, version ASC 
        """
        result = db.Query(query)
        app.logger.debug(result)
        # function to post schema
        return jsonify({'data': result}), 200
    except Exception as err:
        return error(status=502, detail=f'{err}')
示例#9
0
def internal_server_error(e):
    return error(status=500, detail='Internal Server Error')
示例#10
0
def gone(e):
    return error(status=410, detail='Gone')
示例#11
0
def method_not_allowed(e):
    return error(status=405, detail='Method Not Allowed')
示例#12
0
def page_not_found(e):
    return error(status=404, detail='Not Found')
示例#13
0
def forbidden(e):
    return error(status=403, detail='Forbidden')