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
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
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
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
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