def convert(query, query_type='sql'): if not query: raise SqlFormatError(message='sql or fs not provided') if query_type == 'fs' and not '&' in query: raise SqlFormatError(message='sql or fs not provided') logging.info('Converting Query: ' + query) endpoint = 'sql2SQL' if query_type == 'fs': endpoint = 'fs2SQL' result = endpoint + query try: config = {'uri': '/convert/' + result, 'method': 'GET'} response = request_to_microservice(config) except Exception as error: raise error if response.get('errors'): errors = response.get('errors') raise SqlFormatError(message=errors[0].get('detail')) query = QueryResponder().deserialize(response) s_query = query.get('attributes', {}).get('query') json_sql = query.get('attributes', {}).get('jsonSql') return s_query, json_sql
def register_dataset(): """Register GEE Dataset Endpoint""" logging.info('Registering new GEE Dataset') # Build query table_name = request.get_json().get('connector').get('table_name') table_type = QueryService.get_type(table_name=table_name) sql = '?sql=SELECT * FROM \"' + table_name + '\" LIMIT 1' if table_type is 'raster': sql = '?sql=SELECT ST_METADATA() from \"' + table_name + '\"' # Convert query query, json_sql = QueryService.convert(sql, query_type='sql') try: response = EarthEngineService.execute_query(query) status = 1 except GEEQueryError as error: logging.error(error.message) status = 2 config = { 'uri': '/dataset/' + request.get_json().get('connector').get('id'), 'method': 'PATCH', 'body': { 'status': status } } response = request_to_microservice(config) return jsonify(response), 200
def register_dataset(): """Register GEE Dataset Endpoint""" logging.info('Registering new GEE Dataset') table_name = request.get_json().get('connector').get('table_name') 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 status = 1 except GEEQueryError as e: logging.error('[ROUTER] /rest-datasets/gee - GEE Query error in GEE query execution: ' + e.message) status = 2 except Exception as e: logging.error('[ROUTER] /rest-datasets/gee - Generic error in GEE query execution: ' + str(e)) status = 2 config = { 'uri': '/dataset/' + request.get_json().get('connector').get('id'), 'method': 'PATCH', 'body': {'status': status} } response = request_to_microservice(config) return jsonify(data=serialize_fields(response, table_name)), 200
def execute(config): response = request_to_microservice(config) if not response or response.get('errors'): raise LayerNotFound(message='Layer not found') layer = response.get('data', None).get('attributes', None) return layer
def convert(query, query_type='sql'): if not query: raise SqlFormatError(message='sql or fs not provided') if query_type == 'fs' and not '&' in query: raise SqlFormatError(message='sql or fs not provided') logging.info('Converting Query: ' + query) endpoint = 'sql2SQL' if query_type == 'fs': endpoint = 'fs2SQL' result = endpoint + query logging.info(f'[QUERY SERVICE - convert]: {result}') try: config = {'uri': '/convert/' + result, 'method': 'GET'} response = request_to_microservice(config) return response except Exception as error: raise error if response.get('errors'): errors = response.get('errors') raise SqlFormatError(message=errors[0].get('detail'))
def callback_to_dataset(body): config = { 'uri': '/dataset/' + request.get_json().get('connector').get('id'), 'method': 'PATCH', 'body': body } return request_to_microservice(config)
def get_geostore(geostore_id, format='esri'): """ make request to geostore microservice for user given geostore ID """ config = { 'uri': '/geostore/{}?format={}'.format(geostore_id, format), 'method': 'GET', } return request_to_microservice(config)
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) bbox = geostore.get('bbox', None) except Exception as e: raise GeostoreNotFound(message=str(e)) return geojson, bbox
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
def get_geojson(geostore): try: config = {'uri': f'/geostore/{geostore}', 'method': 'GET'} response = request_to_microservice(config) return response.get('data').get('attributes').get('geojson') except Exception as error: raise error if response.get('errors'): errors = response.get('errors') raise SqlFormatError(message=errors[0].get('detail'))
def get_fields(dataset): logging.info('[QueryService] Getting fields for dataset') try: request_options = { 'uri': '/fields/' + dataset, 'method': 'GET' } response = request_to_microservice(request_options) if not response or response.get('errors'): raise FieldsGenericError(message='Error obtaining fields') except Exception as error: raise FieldsGenericError(message="Error obtaining fields") return response
def execute(config): try: response = request_to_microservice(config) except Exception as e: raise Exception(str(e)) if response.get('errors'): error = response.get('errors')[0] if error.get('status') == 404: raise GeostoreNotFound(message='') else: raise Exception(error.get('detail')) geostore = response.get('data', None).get('attributes', None) geojson = geostore.get('geojson', None) area_ha = geostore.get('areaHa', None) return geojson, area_ha
def get_geostore(geostore): logging.info('[QueryService] Getting geostore') try: request_options = { 'uri': '/geostore/' + geostore, 'method': 'GET' } response = request_to_microservice(request_options) if not response or response.get('errors'): raise GeostoreNotFoundError(message='Error obtaining geostore') logging.debug('GEOSTORE RESPONSE: ' + str(response)) except Exception as error: logging.error(str(error)) raise GeostoreNotFoundError(message='Error obtaining geostore') return response
def convert(query): logging.info('Converting Query: ' + query) try: config = {'uri': '/convert/sql2SQL?sql=' + query, 'method': 'GET'} response = request_to_microservice(config) except Exception as error: raise error if response.get('errors'): errors = response.get('errors') raise SqlFormatError(message=errors[0].get('detail')) query = response.get('data', None) s_query = query.get('attributes', {}).get('query') json_sql = query.get('attributes', {}).get('jsonSql') return s_query, json_sql
def getDataset(indicator, scenario, temporal_res): logging.info('[NEXGDDP-ROUTER] Get info of indicator') datasets = request_to_microservice({ 'uri': '/dataset?includes=layer&tableName=' + indicator + '/' + scenario + '_' + temporal_res + '&env=' + request.args.get("env", 'production'), 'method': 'GET' }) if datasets.get('data') and len(datasets.get('data')) > 0: return jsonify({"data": datasets.get('data')[0]}), 200 return jsonify( {"errors": [{ "status": 404, "detail": "Dataset doesn't exist" }]}), 404
def execute(config): response = request_to_microservice(config) if not response or response.get('errors'): raise DatasetNotFound(message='Dataset not found') dataset = response.get('data', None).get('attributes', None) return dataset