Пример #1
0
    def get_capabilities(self):
        """
        Returns the capabilities of this service.

        Returns:
            pyramid.response.Response: The `capabilities` response.
        """
        themes = list()
        for theme in Config.get_themes():
            text = list()
            for lang in theme.text:
                text.append({
                    'Language': lang,
                    'Text': theme.text[lang]
                })
            themes.append({
                'Code': theme.code,
                'Text': text
            })
        capabilities = {
            u'GetCapabilitiesResponse': {
                u'topic': themes,
                u'municipality': [record.fosnr for record in self._municipality_reader.read()],
                u'flavour': Config.get_flavour(),
                u'language': Config.get_language(),
                u'crs': Config.get_crs()
            }
        }
        renderer_name = 'json' if self._is_json() else 'pyramid_oereb_capabilities_xml'
        response = render_to_response(renderer_name, capabilities, request=self._request)
        if self._is_json():
            response.content_type = 'application/json; charset=UTF-8'
        return response
Пример #2
0
    def get_capabilities(self):
        """
        Returns the capabilities of this service.

        Returns:
            pyramid.response.Response: The `capabilities` response.
        """

        params = Parameter('json' if self._is_json() else 'xml')

        supported_languages = Config.get_language()
        themes = list()
        for theme in Config.get_themes():
            text = list()
            for lang in theme.text:
                if lang in supported_languages:
                    text.append({'Language': lang, 'Text': theme.text[lang]})
            themes.append({'Code': theme.code, 'Text': text})
        capabilities = {
            u'GetCapabilitiesResponse': {
                u'topic':
                themes,
                u'municipality': [
                    record.fosnr
                    for record in self._municipality_reader.read(params)
                ],
                u'flavour':
                Config.get_flavour(),
                u'language':
                supported_languages,
                u'crs': [Config.get_crs()]
            }
        }

        # Try - catch for backward compatibility with old specification.
        try:
            output_format = self.__validate_format_param__(['xml', 'json'])
        except HTTPBadRequest:
            output_format = None
            log.warning(
                'Deprecated way to specify the format. Use "/capabilities/{format}" instead'
            )
        renderer_name = 'json' if output_format == 'json' or self._is_json(
        ) else 'pyramid_oereb_capabilities_xml'  # noqa: E501
        response = render_to_response(renderer_name,
                                      capabilities,
                                      request=self._request)
        if self._is_json():
            response.content_type = 'application/json; charset=UTF-8'
        response.extras = OerebStats(service='GetCapabilities',
                                     output_format=output_format)
        return response
Пример #3
0
    def get_capabilities(self):
        """
        Returns the capabilities of this service.

        Returns:
            pyramid.response.Response: The `capabilities` response.
        """

        output_format = self.__validate_format_param__(self._DEFAULT_FORMATS)
        params = Parameter(output_format)

        supported_languages = Config.get_language()
        themes = list()
        for theme in Config.get_themes():
            text = list()
            for lang in theme.title:
                if lang in supported_languages:
                    text.append({'Language': lang, 'Text': theme.title[lang]})
            themes.append({'Code': theme.code, 'Text': text})
        processor = create_processor()
        capabilities = {
            u'GetCapabilitiesResponse': {
                u'topic':
                themes,
                u'municipality': [
                    record.fosnr
                    for record in processor.municipality_reader.read(params)
                ],
                u'flavour':
                Config.get_flavour(),
                u'language':
                supported_languages,
                u'crs': [Config.get_crs()]
            }
        }

        renderer_name = 'json' if output_format == 'json' else 'pyramid_oereb_capabilities_xml'  # noqa: E501
        response = render_to_response(renderer_name,
                                      capabilities,
                                      request=self._request)
        if output_format == 'json':
            response.content_type = 'application/json; charset=UTF-8'
        # response.extras = OerebStats(service='GetCapabilities', output_format=output_format)
        return response
Пример #4
0
    def __validate_extract_params__(self):
        """
        Validates the input parameters for get_extract_by_id.

        Returns:
            pyramid_oereb.views.webservice.Parameter: The validated parameters.
        """

        # Check flavour
        extract_flavour = self._request.matchdict.get('flavour').lower()
        if extract_flavour not in ['reduced', 'full', 'signed', 'embeddable']:
            raise HTTPBadRequest(
                'Invalid flavour: {0}'.format(extract_flavour))

        # Get and check format
        extract_format = self.__validate_format_param__(['pdf', 'xml', 'json'])

        # With geometry?
        with_geometry = False
        user_requested_geometry = False
        if self._request.matchdict.get('param1').lower() == 'geometry':
            with_geometry = True
            user_requested_geometry = True

        # Check for invalid combinations
        if extract_flavour in ['full', 'signed'] and extract_format != 'pdf':
            raise HTTPBadRequest(
                'The flavours full and signed are only available for format PDF.'
            )
        if extract_flavour == 'embeddable' and extract_format == 'pdf':
            raise HTTPBadRequest(
                'The flavour embeddable is not available for format PDF.')
        if extract_format == 'pdf' and user_requested_geometry:
            raise HTTPBadRequest('Geometry is not available for format PDF.')

        # If PDF is to be produced, always include geometry
        # (even though the URL shall not contain geometry parameter)
        if extract_format == 'pdf':
            with_geometry = True

        # With images?

        with_images = self._params.get('WITHIMAGES') is not None

        params = Parameter(extract_flavour, extract_format, with_geometry,
                           with_images)

        # Get id
        if user_requested_geometry:
            id_param_1 = 'param2'
            id_param_2 = 'param3'
        else:
            id_param_1 = 'param1'
            id_param_2 = 'param2'
        id_part_1 = self._request.matchdict.get(id_param_1)
        id_part_2 = self._request.matchdict.get(id_param_2)
        if id_part_2:
            params.set_identdn(id_part_1)
            params.set_number(id_part_2)
        else:
            params.set_egrid(id_part_1)

        # Language
        language = str(self._params.get('LANG')).lower()
        if language not in Config.get_language() and self._params.get('LANG') is not \
                None:
            raise HTTPBadRequest(
                'Requested language is not available. Following languages are configured: {languages} The '
                'requested language was: {language}'.format(languages=str(
                    Config.get_language()),
                                                            language=language))
        if self._params.get('LANG'):
            params.set_language(language)

        # Topics
        topics = self._params.get('TOPICS')
        if topics:
            params.set_topics(topics.split(','))

        return params
Пример #5
0
    def __validate_extract_params__(self):
        """
        Validates the input parameters for get_extract_by_id.

        Returns:
            pyramid_oereb.views.webservice.Parameter: The validated parameters.
        """

        # Get and check format
        extract_format = self.__validate_format_param__(self._EXTRACT_FORMATS)

        # With geometry?
        with_geometry = False
        user_requested_geometry = False
        if self._params.get('GEOMETRY', 'false').lower() == 'true':
            with_geometry = True
            user_requested_geometry = True

        # Check for invalid combinations
        if extract_format == 'pdf' and user_requested_geometry:
            raise HTTPBadRequest('Geometry is not available for format PDF.')

        # If PDF is to be produced, check if geometry should be included
        # (this override can be needed for the print service. Note that, to be compliant to specification,
        # the URL for a PDF request should not contain the geometry parameter)
        if extract_format == 'pdf':
            with_geometry = Config.get('print', {}).get('with_geometry',
                                                        True) or with_geometry

        # With images?
        with_images = self._params.get('WITHIMAGES', 'false').lower() == 'true'

        # Signed?
        signed = self._params.get('SIGNED', 'false').lower() == 'true'

        params = Parameter(extract_format,
                           with_geometry=with_geometry,
                           images=with_images,
                           signed=signed)

        # Get id
        if self.__has_params__(['EGRID']):
            params.set_egrid(self._params['EGRID'])
        elif self.__has_params__(['IDENTDN', 'NUMBER']):
            params.set_identdn(self._params['IDENTDN'])
            params.set_number(self._params['NUMBER'])
        else:
            raise HTTPBadRequest(
                'Invalid parameters. You need one of the following combinations: '
                'EGRID or IDENTDN and NUMBER.')

        # Language
        if 'LANG' in self._params:
            language = str(self._params.get('LANG')).lower()
            if language not in Config.get_language():
                raise HTTPBadRequest(
                    'Requested language is not available. Following languages are '
                    'configured: {languages}. The '
                    'requested language was: {language}.'.format(
                        languages=str(Config.get_language()),
                        language=language))
            params.set_language(language)

        # Topics
        topics = self._params.get('TOPICS')
        if topics:
            params.set_topics(topics.split(','))

        return params