예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
    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
예제 #4
0
    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