def _process_location_single(request): """Procesa una request GET para obtener entidades en un punto. En caso de ocurrir un error de parseo, se retorna una respuesta HTTP 400. Args: request (flask.Request): Request GET de flask. Raises: data.DataConnectionException: En caso de ocurrir un error de conexión con la capa de manejo de datos. Returns: flask.Response: respuesta HTTP """ try: qs_params = params.PARAMS_LOCATION.parse_get_params(request.args) except params.ParameterParsingException as e: return formatter.create_param_error_response_single(e.errors, e.fmt) query, fmt = _build_location_query_format(qs_params) es = get_elasticsearch() result = location.run_location_queries(es, [query])[0] return formatter.create_ok_response(N.LOCATION, result, fmt)
def process_place_single(request): """Procesa una request GET para obtener entidades en un punto. En caso de ocurrir un error de parseo, se retorna una respuesta HTTP 400. Args: request (flask.Request): Request GET de flask. Raises: data.DataConnectionException: En caso de ocurrir un error de conexión con la capa de manejo de datos. Returns: flask.Response: respuesta HTTP """ qs_params, errors = params.PARAMS_PLACE.parse_get_params(request.args) if errors: return formatter.create_param_error_response_single(errors) query, fmt = build_place_query_format(qs_params) es = get_elasticsearch() result = process_place_queries(es, [query])[0] return formatter.create_ok_response(PLACE, result, fmt, iterable_result=False)
def _process_street_single(request): """Procesa una request GET para consultar datos de calles. En caso de ocurrir un error de parseo, se retorna una respuesta HTTP 400. Args: request (flask.Request): Request GET de flask. Raises: data.DataConnectionException: En caso de ocurrir un error de conexión con la capa de manejo de datos. Returns: flask.Response: respuesta HTTP """ try: qs_params = params.PARAMS_STREETS.parse_get_params(request.args) except params.ParameterParsingException as e: return formatter.create_param_error_response_single(e.errors, e.fmt) query, fmt = _build_street_query_format(qs_params) if fmt[N.FORMAT] == 'shp': query['fields'] += (N.GEOM, ) es = get_elasticsearch() search = data.StreetsSearch(query) data.ElasticsearchSearch.run_searches(es, [search]) query_result = QueryResult.from_entity_list(search.result.hits, search.result.total, search.result.offset) return formatter.create_ok_response(N.STREETS, query_result, fmt)
def process_address_single(request): """Procesa una request GET para normalizar una dirección. En caso de ocurrir un error de parseo, se retorna una respuesta HTTP 400. Args: request (flask.Request): Request GET de flask. Raises: data.DataConnectionException: En caso de ocurrir un error de conexión con la capa de manejo de datos. Returns: flask.Response: respuesta HTTP """ qs_params, errors = params.PARAMS_ADDRESSES.parse_get_params(request.args) if errors: return formatter.create_param_error_response_single(errors) query, fmt = build_address_query_format(qs_params) es = get_elasticsearch() result = data.search_streets(es, [query])[0] source = get_index_source(STREETS) build_addresses_result(result, query, source) return formatter.create_ok_response(ADDRESSES, result, fmt)
def process_street_single(request): """Procesa una request GET para consultar datos de calles. En caso de ocurrir un error de parseo, se retorna una respuesta HTTP 400. Args: request (flask.Request): Request GET de flask. Raises: data.DataConnectionException: En caso de ocurrir un error de conexión con la capa de manejo de datos. Returns: flask.Response: respuesta HTTP """ qs_params, errors = params.PARAMS_STREETS.parse_get_params(request.args) if errors: return formatter.create_param_error_response_single(errors) query, fmt = build_street_query_format(qs_params) es = get_elasticsearch() result = data.search_streets(es, [query])[0] source = get_index_source(STREETS) for match in result: match[SOURCE] = source return formatter.create_ok_response(STREETS, result, fmt)
def _process_entity_single(request, name, param_parser, key_translations): """Procesa una request GET para consultar datos de una entidad. En caso de ocurrir un error de parseo, se retorna una respuesta HTTP 400. Args: request (flask.Request): Request GET de flask. name (str): Nombre de la entidad. param_parser (ParameterSet): Objeto utilizado para parsear los parámetros. key_translations (dict): Traducciones de keys a utilizar para convertir el diccionario de parámetros del usuario a un diccionario representando una query a Elasticsearch. Raises: data.DataConnectionException: En caso de ocurrir un error de conexión con la capa de manejo de datos. Returns: flask.Response: respuesta HTTP """ try: qs_params = param_parser.parse_get_params(request.args) except params.ParametersParseException as e: return formatter.create_param_error_response_single(e.errors, e.fmt) # Construir query a partir de parámetros query = utils.translate_keys(qs_params.values, key_translations, ignore=[N.FLATTEN, N.FORMAT]) # Construir reglas de formato a partir de parámetros fmt = { key: qs_params.values[key] for key in [N.FLATTEN, N.FIELDS, N.FORMAT] if key in qs_params.values } if fmt[N.FORMAT] == 'shp': query['fields'] += (N.GEOM, ) es = get_elasticsearch() search_class = data.entity_search_class(name) search = search_class(query) data.ElasticsearchSearch.run_searches(es, [search]) query_result = QueryResult.from_entity_list(search.result.hits, qs_params.received_values(), search.result.total, search.result.offset) return formatter.create_ok_response(name, query_result, fmt)
def process_entity_single(request, name, param_parser, key_translations, csv_fields): """Procesa una request GET para consultar datos de una entidad. En caso de ocurrir un error de parseo, se retorna una respuesta HTTP 400. Args: request (flask.Request): Request GET de flask. name (str): Nombre de la entidad. param_parser (ParameterSet): Objeto utilizado para parsear los parámetros. key_translations (dict): Traducciones de keys a utilizar para convertir el diccionario de parámetros del usuario a un diccionario representando una query a Elasticsearch. csv_fields (dict): Diccionario a utilizar para modificar los campos cuando se utiliza el formato CSV. Raises: data.DataConnectionException: En caso de ocurrir un error de conexión con la capa de manejo de datos. Returns: flask.Response: respuesta HTTP """ try: qs_params = param_parser.parse_get_params(request.args) except params.ParameterParsingException as e: return formatter.create_param_error_response_single(e.errors) # Construir query a partir de parámetros query = translate_keys(qs_params, key_translations, ignore=[N.FLATTEN, N.FORMAT]) # Construir reglas de formato a partir de parámetros fmt = { key: qs_params[key] for key in [N.FLATTEN, N.FIELDS, N.FORMAT] if key in qs_params } fmt[N.CSV_FIELDS] = csv_fields es = get_elasticsearch() result = data.search_entities(es, name, [query])[0] source = get_index_source(name) for match in result: match[N.SOURCE] = source return formatter.create_ok_response(name, result, fmt)
def _process_street_single(request): """Procesa una request GET para consultar datos de calles. En caso de ocurrir un error de parseo, se retorna una respuesta HTTP 400. Args: request (flask.Request): Request GET de flask. Raises: data.DataConnectionException: En caso de ocurrir un error de conexión con la capa de manejo de datos. Returns: flask.Response: respuesta HTTP """ try: qs_params = params.PARAMS_STREETS.parse_get_params(request.args) except params.ParametersParseException as e: return formatter.create_param_error_response_single(e.errors, e.fmt) query_results, formats = _process_street_queries([qs_params]) return formatter.create_ok_response(N.STREETS, query_results[0], formats[0])