def download(dataset_id): """Download GEE Dataset Endpoint""" logging.info('Downloading GEE Dataset') sql = request.args.get('sql', None) or request.get_json().get('sql', None) result_query = build_query(request) try: if sql: query_type = 'sql' else: query_type = 'fs' json_sql = QueryService.convert(result_query, query_type=query_type) except SqlFormatError as e: logging.error('[ROUTER] /download/<dataset_id> - SQL Format error in query conversion: ' + e.message) return error(status=400, detail=e.message) except Exception as e: logging.error('[ROUTER] /download/<dataset_id> - Generic error in query conversion: ' + str(e)) return error(status=500, detail='Generic Error') try: response = EarthEngineService.execute_query(json_sql).response() except GEEQueryError as e: logging.error('[ROUTER] /download/<dataset_id> - GEE Query error in GEE query execution: ' + e.message) return error(status=400, detail=e.message) except Exception as e: logging.error('[ROUTER] /download/<dataset_id> - Generic error in GEE query execution: ' + str(e)) return error(status=500, detail='Generic Error') # @TODO meta = {} # @TODO download content-type return jsonify(data=serialize_query(response, meta)), 200
def query(dataset_id): """Query GEE Dataset Endpoint""" logging.info('Doing GEE Query') sql = request.args.get('sql', None) or request.get_json().get('sql', None) result_query = build_query(request) try: if sql: query_type = 'sql' else: query_type = 'fs' json_sql = QueryService.convert(result_query, query_type=query_type) except SqlFormatError as e: logging.error('[ROUTER]: ' + e.message) return error(status=400, detail=e.message) except Exception as e: logging.error('[ROUTER]: ' + str(e)) return error(status=500, detail='Generic Error') try: response = EarthEngineService.execute_query(json_sql).response() except GEEQueryError as e: logging.error('[ROUTER]: ' + e.message) return error(status=400, detail=e.message) except Exception as e: logging.error('[ROUTER]: ' + str(e)) return error(status=500, detail='Generic Error') # @TODO meta = {} return jsonify(serialize_query(response, meta)), 200
def query(dataset_id): """Query GEE Dataset Endpoint""" logging.info('Doing GEE Query') sql = request.args.get('sql', None) or request.get_json().get('sql', None) result_query = build_query(request) try: if sql: query_type = 'sql' else: query_type = 'fs' json_sql = QueryService.convert(result_query, query_type=query_type) except SqlFormatError as e: logging.error('[ROUTER]: '+e.message) return error(status=400, detail=e.message) except Exception as e: logging.error('[ROUTER]: '+str(e)) return error(status=500, detail="Error performing query") try: response = EarthEngineService.execute_query(json_sql).response() except GEEQueryError as e: logging.error('[ROUTER]: '+e.message) return error(status=400, detail=e.message) except Exception as e: # hotfix until library developments if str(e) == "'_init_cols'": return error(status=500, detail="Query not supported. Please visit https://doc.apihighways.org/ to obtain more information on supported queries.") logging.error('[ROUTER]: '+str(e)) return error(status=500, detail=str(e)) # @TODO meta = {} return jsonify(serialize_query(response, meta)), 200
def download(dataset_id): """Download GEE Dataset Endpoint""" logging.info('Downloading GEE Dataset') sql = request.args.get('sql', None) or request.get_json().get('sql', None) try: result_query = build_query(request) except TypeError as e: return error(status=501, detail="Download not supported for this dataset. Please visit https://doc.apihighways.org/ to obtain more information on supported queries.") try: if sql: query_type = 'sql' else: query_type = 'fs' json_sql = QueryService.convert(result_query, query_type=query_type) except SqlFormatError as e: logging.error('[ROUTER]: '+e.message) return error(status=400, detail=e.message) except Exception as e: logging.error('[ROUTER]: '+str(e)) return error(status=500, detail='Generic Error') try: response = EarthEngineService.execute_query(json_sql).response() except GEEQueryError as e: logging.error('[ROUTER]: '+e.message) return error(status=400, detail=e.message) except Exception as e: logging.error('[ROUTER]: '+str(e)) # @TODO meta = {} # @TODO download content-type return jsonify(data=serialize_query(response, meta)), 200
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")
def fields(dataset_id): """Get GEE Dataset Fields Endpoint""" logging.info('Getting fields of a GEE Dataset') dataset = request.get_json().get('dataset').get('data') table_name = dataset.get('attributes').get('tableName') sql = '?sql=SELECT * FROM \"' + table_name + '\" LIMIT 1' # Convert query json_sql = QueryService.convert(sql, query_type='sql') try: response = EarthEngineService.execute_query(json_sql).metadata except GEEQueryError as e: logging.error('[ROUTER] /fields/<dataset_id> - GEE Query error in GEE query execution: ' + e.message) return error(status=400, detail=e.message) except Exception as e: logging.error('[ROUTER] /fields/<dataset_id> - Generic error in GEE query execution: ' + str(e)) return error(status=500, detail='Generic Error') return jsonify(data=serialize_fields(response, table_name)), 200
def internal_server_error(e): logging.error('Internal Server Error') return error(status=500, detail='Internal Server Error')
def gone(e): logging.error('Gone') return error(status=410, detail='Gone')
def method_not_allowed(e): logging.error('Method Not Allowed') return error(status=405, detail='Method Not Allowed')
def page_not_found(e): logging.error('Not Found') return error(status=404, detail='Not Found')
def forbidden(e): logging.error('Forbidden') return error(status=403, detail='Forbidden')