def get_egrid_ident(self): """ Returns a list with the matched EGRIDs for the given NBIdent and property number. Returns: pyramid.response.Response: The `getegrid` response. """ params = Parameter('json' if self._is_json() else 'xml') identdn = self._request.matchdict.get('identdn') number = self._request.matchdict.get('number') try: if identdn and number: records = self._real_estate_reader.read( params, **{ 'nb_ident': identdn, 'number': number }) response = self.__get_egrid_response__(records) else: raise HTTPBadRequest('IDENTDN and NUMBER must be defined.') except HTTPNoContent as err: response = HTTPNoContent('{}'.format(err)) except HTTPBadRequest as err: response = HTTPBadRequest('{}'.format(err)) response.extras = OerebStats(service='GetEgridIdent', params={ 'identdn': identdn, 'number': number }) return response
def get_egrid_coord(self): """ Returns a list with the matched EGRIDs for the given coordinates. Returns: pyramid.response.Response: The `getegrid` response. """ params = Parameter('json' if self._is_json() else 'xml') xy = self._params.get('XY') gnss = self._params.get('GNSS') try: if xy or gnss: geom_wkt = 'SRID={0};{1}' if xy: geom_wkt = geom_wkt.format( Config.get('srid'), self.__parse_xy__(xy, buffer_dist=1.0).wkt) elif gnss: geom_wkt = geom_wkt.format(Config.get('srid'), self.__parse_gnss__(gnss).wkt) records = self._real_estate_reader.read( params, **{'geometry': geom_wkt}) response = self.__get_egrid_response__(records) else: raise HTTPBadRequest('XY or GNSS must be defined.') except HTTPNoContent as err: response = HTTPNoContent('{}'.format(err)) except HTTPBadRequest as err: response = HTTPBadRequest('{}'.format(err)) response.extras = OerebStats(service='GetEgridCoord', params={ 'xy': xy, 'gnss': gnss }) return response
def get_egrid_address(self): """ Returns a list with the matched EGRIDs for the given postal address. Returns: pyramid.response.Response: The `getegrid` response. """ params = Parameter('json' if self._is_json() else 'xml') postalcode = self._request.matchdict.get('postalcode') localisation = self._request.matchdict.get('localisation') number = self._request.matchdict.get('number') try: if postalcode and localisation and number: reader = AddressReader( Config.get_address_config().get('source').get('class'), **Config.get_address_config().get('source').get('params')) addresses = reader.read(params, localisation, int(postalcode), number) if len(addresses) == 0: raise HTTPNoContent() geometry = 'SRID={srid};{wkt}'.format( srid=Config.get('srid'), wkt=addresses[0].geom.wkt) records = self._real_estate_reader.read( params, **{'geometry': geometry}) response = self.__get_egrid_response__(records) else: raise HTTPBadRequest( 'POSTALCODE, LOCALISATION and NUMBER must be defined.') except HTTPNoContent as err: response = HTTPNoContent('{}'.format(err)) except HTTPBadRequest as err: response = HTTPBadRequest('{}'.format(err)) response.extras = OerebStats(service='GetEgridAddress', params={ 'postalcode': postalcode, 'localisation': localisation, 'number': number }) return response
def get_extract_by_id(self): """ Returns the extract in the specified format and flavour. Returns: pyramid.response.Response: The `extract` response. """ start_time = timer() log.debug("get_extract_by_id() start") try: params = self.__validate_extract_params__() processor = self._request.pyramid_oereb_processor # read the real estate from configured source by the passed parameters real_estate_reader = processor.real_estate_reader if params.egrid: real_estate_records = real_estate_reader.read( params, egrid=params.egrid) elif params.identdn and params.number: real_estate_records = real_estate_reader.read( params, nb_ident=params.identdn, number=params.number) else: raise HTTPBadRequest("Missing required argument") # check if result is strictly one (we queried with primary keys) if len(real_estate_records) == 1: extract = processor.process( real_estate_records[0], params, self._request.route_url('{0}/sld'.format(route_prefix))) if params.format == 'json': log.debug("get_extract_by_id() calling json") response = render_to_response('pyramid_oereb_extract_json', (extract, params), request=self._request) elif params.format == 'xml': log.debug("get_extract_by_id() calling xml") response = render_to_response('pyramid_oereb_extract_xml', (extract, params), request=self._request) elif params.format == 'pdf': log.debug("get_extract_by_id() calling pdf") response = render_to_response( 'pyramid_oereb_extract_print', (extract, params), request=self._request) else: raise HTTPBadRequest("The format '{}' is wrong".format( params.format)) end_time = timer() log.debug("DONE with extract, time spent: {} seconds".format( end_time - start_time)) else: raise HTTPNoContent("No real estate found") except HTTPNoContent as err: response = HTTPNoContent('{}'.format(err)) except HTTPBadRequest as err: response = HTTPBadRequest('{}'.format(err)) try: response.extras = OerebStats(service='GetExtractById', output_format=params.format, params=vars(params)) except UnboundLocalError: response.extras = OerebStats(service='GetExtractById', params={'error': response.message}) except Exception: # if params is not set we get UnboundLocalError # or we could get ValueError # in any case, the logging should never crash the response delivery try: response.extras = OerebStats( service='GetExtractById', params={'error': response.message}) except AttributeError: response.extras = OerebStats(service='GetExtractById') return response