def test_format_map(config, params): assert isinstance(config._config, dict) with pyramid_oereb_test_config(): renderer = Renderer(DummyRenderInfo()) renderer._language = u'de' renderer._params = params renderer._request = MockRequest() legend_entry = LegendEntryRecord( ImageRecord('1'.encode('utf-8')), {u'de': u'Legendeneintrag'}, u'type1', u'type_code_list', ThemeRecord(u'ContaminatedSites', {u'de': u'Test'})) view_service = ViewServiceRecord( 'http://my.wms.ch', 'http://my.wms.ch?SERVICE=WMS&REQUEST=GetLegendGraphic', [legend_entry]) view_service.image = ImageRecord('1'.encode('utf-8')) result = renderer.format_map(view_service) assert isinstance(result, dict) assert result == { 'Image': base64.b64encode('1'.encode('utf-8')).decode('ascii'), 'ReferenceWMS': 'http://my.wms.ch', 'LegendAtWeb': 'http://my.wms.ch?SERVICE=WMS&REQUEST=GetLegendGraphic', 'OtherLegend': [renderer.format_legend_entry(legend_entry)] }
def get_logo_config(): """ Returns a dictionary of the configured file path's to the logos. Returns: dict: The configured paths to the logos wrapped in a dictionary. """ assert Config._config is not None confederation_key = 'confederation' oereb_key = 'oereb' canton_key = 'canton' msg = 'The definition for "{key}" must be set. Got: {found_config}' logo_dict = Config._config.get('logo') if not logo_dict.get(confederation_key): raise ConfigurationError( msg.format(key=confederation_key, found_config=logo_dict)) if not logo_dict.get(oereb_key): raise ConfigurationError( msg.format(key=oereb_key, found_config=logo_dict)) if not logo_dict.get(canton_key): raise ConfigurationError( msg.format(key=canton_key, found_config=logo_dict)) file_adapter = FileAdapter() confederation_logo = ImageRecord( file_adapter.read(logo_dict.get(confederation_key))) oereb_logo = ImageRecord(file_adapter.read(logo_dict.get(oereb_key))) canton_logo = ImageRecord(file_adapter.read(logo_dict.get(canton_key))) return { confederation_key: confederation_logo, oereb_key: oereb_logo, canton_key: canton_logo }
def test_format_legend_entry(parameter, config): assert isinstance(config._config, dict) with pyramid_oereb_test_config(): renderer = Renderer(DummyRenderInfo()) renderer._language = u'de' renderer._params = parameter renderer._request = MockRequest() theme = ThemeRecord(u'ContaminatedSites', {u'de': u'Test'}) legend_entry = LegendEntryRecord(ImageRecord('1'.encode('utf-8')), {u'de': u'Legendeneintrag'}, u'type1', u'type_code_list', theme, u'Subthema', u'Weiteres Thema') result = renderer.format_legend_entry(legend_entry) expected = { 'LegendText': renderer.get_multilingual_text({'de': 'Legendeneintrag'}), 'TypeCode': 'type1', 'TypeCodelist': 'type_code_list', 'Theme': renderer.format_theme(theme), 'SubTheme': 'Subthema', 'OtherTheme': 'Weiteres Thema' } if parameter.images: expected.update( {'Symbol': ImageRecord('1'.encode('utf-8')).encode()}) else: expected.update({ 'SymbolRef': 'http://example.com/image/symbol/{theme_code}/{code}'.format( theme_code='ContaminatedSites', code='type1') }) assert isinstance(result, dict) assert result == expected
def test_format_map(params, legend_at_web, expected_legend_at_web): with pyramid_oereb_test_config(): renderer = Renderer(DummyRenderInfo()) renderer._language = u'de' renderer._params = params renderer._request = MockRequest() legend_entry = LegendEntryRecord(ImageRecord('1'.encode('utf-8')), {u'de': u'Legendeneintrag'}, u'CodeA', u'type_code_list', ThemeRecord(u'ContaminatedSites', {u'de': u'Test'}), view_service_id=1) view_service = ViewServiceRecord('http://my.wms.ch', 1, 1.0, legend_at_web, [legend_entry]) view_service.image = ImageRecord('1'.encode('utf-8')) result = renderer.format_map(view_service) assert isinstance(result, dict) expected_result = { 'Image': base64.b64encode('1'.encode('utf-8')).decode('ascii'), 'layerIndex': 1, 'layerOpacity': 1.0, 'ReferenceWMS': 'http://my.wms.ch', 'OtherLegend': [renderer.format_legend_entry(legend_entry)] } if expected_legend_at_web is not None: expected_result['LegendAtWeb'] = expected_legend_at_web assert result == expected_result
def create_dummy_extract(): date = datetime.datetime.now() real_estate = RealEstateRecord( u'test', u'BL', u'Laufen', 2770, 1000, MultiPolygon(), ViewServiceRecord('test_link', 1, 1.0, {'de': 'test_legend'})) plr_office = OfficeRecord({u'en': u'PLR Authority'}) resolver = DottedNameResolver() date_method_string = Config.get('extract').get('base_data').get( 'methods').get('date') date_method = resolver.resolve(date_method_string) av_update_date = date_method(real_estate) base_data = Config.get_base_data(av_update_date) av_provider_method_string = Config.get('extract').get('base_data').get( 'methods').get('provider') av_provider_method = resolver.resolve(av_provider_method_string) cadaster_state = date theme = ThemeRecord(u'TEST', {u'de': u'TEST TEXT'}) datasources = [DatasourceRecord(theme, date, plr_office)] plr_cadastre_authority = Config.get_plr_cadastre_authority() embeddable = EmbeddableRecord(cadaster_state, plr_cadastre_authority, av_provider_method(real_estate), av_update_date, datasources) record = ExtractRecord(real_estate, ImageRecord('100'.encode('utf-8')), ImageRecord('100'.encode('utf-8')), ImageRecord('100'.encode('utf-8')), ImageRecord('100'.encode('utf-8')), plr_office, base_data, embeddable) return record
def get_test_extract(): date = datetime.datetime.now() with pyramid_oereb_test_config(): view_service = ViewServiceRecord(u'http://geowms.bl.ch', 1, 1.0, u'http://geowms.bl.ch', None) real_estate = RealEstateRecord(u'RealEstate', u'BL', u'Liestal', 2829, 11395, MultiPolygon([Polygon([(0, 0), (1, 1), (1, 0)])]), u'http://www.geocat.ch', u'1000', u'BL0200002829', u'CH775979211712') real_estate.set_view_service(view_service) real_estate.set_main_page_view_service(view_service) office_record = OfficeRecord({'de': u'AGI'}) resolver = DottedNameResolver() date_method_string = Config.get('extract').get('base_data').get('methods').get('date') date_method = resolver.resolve(date_method_string) av_update_date = date_method(real_estate) base_data = Config.get_base_data(av_update_date) av_provider_method_string = Config.get('extract').get('base_data').get('methods').get('provider') av_provider_method = resolver.resolve(av_provider_method_string) cadaster_state = date theme = ThemeRecord(u'TEST', {'de': u'TEST TEXT'}) datasources = [DatasourceRecord(theme, date, office_record)] plr_cadastre_authority = Config.get_plr_cadastre_authority() embeddable = EmbeddableRecord( cadaster_state, plr_cadastre_authority, av_provider_method(real_estate), av_update_date, datasources ) extract = ExtractRecord( real_estate, ImageRecord('1'.encode('utf-8')), ImageRecord('2'.encode('utf-8')), ImageRecord('3'.encode('utf-8')), ImageRecord('4'.encode('utf-8')), office_record, base_data, embeddable, exclusions_of_liability=[ ExclusionOfLiabilityRecord({'de': u'Haftungsausschluss'}, {'de': u'Test'}) ], glossaries=[GlossaryRecord({'de': u'Glossar'}, {'de': u'Test'})], general_information={'de': u'Allgemeine Informationen'}, certification={'de': u'certification'}, certification_at_web={'de': u'certification_at_web'}, ) # extract.qr_code = 'VGhpcyBpcyBub3QgYSBRUiBjb2Rl'.encode('utf-8') TODO: # qr_code Must be an image ('base64Binary'), but even with images xml validation # fails on it. # extract.electronic_signature = 'Signature' # TODO: fix signature rendering first return extract
def test_init(): date = datetime.datetime.now() real_estate = RealEstateRecord(u'test', u'BL', u'Laufen', 2770, 1000, MultiPolygon(), ViewServiceRecord( 'test_link', 'test_legend' )) plr_office = OfficeRecord({u'en': u'PLR Authority'}) resolver = DottedNameResolver() date_method_string = Config.get('extract').get('base_data').get('methods').get('date') date_method = resolver.resolve(date_method_string) av_update_date = date_method(real_estate) base_data = Config.get_base_data(av_update_date) av_provider_method_string = Config.get('extract').get('base_data').get('methods').get('provider') av_provider_method = resolver.resolve(av_provider_method_string) cadaster_state = date theme = ThemeRecord(u'TEST', {u'de': u'TEST TEXT'}) datasources = [DatasourceRecord(theme, date, plr_office)] plr_cadastre_authority = Config.get_plr_cadastre_authority() embeddable = EmbeddableRecord( cadaster_state, plr_cadastre_authority, av_provider_method(real_estate), av_update_date, datasources ) record = ExtractRecord( real_estate, ImageRecord('100'.encode('utf-8')), ImageRecord('100'.encode('utf-8')), ImageRecord('100'.encode('utf-8')), ImageRecord('100'.encode('utf-8')), plr_office, base_data, embeddable ) assert isinstance(record.extract_identifier, str) assert isinstance(record.real_estate, RealEstateRecord) assert isinstance(record.not_concerned_theme, list) assert isinstance(record.concerned_theme, list) assert isinstance(record.theme_without_data, list) assert isinstance(record.creation_date, datetime.date) assert isinstance(record.logo_plr_cadastre, ImageRecord) assert isinstance(record.federal_logo, ImageRecord) assert isinstance(record.cantonal_logo, ImageRecord) assert isinstance(record.municipality_logo, ImageRecord) assert isinstance(record.exclusions_of_liability, list) assert isinstance(record.glossaries, list) assert isinstance(record.plr_cadastre_authority, OfficeRecord) assert isinstance(record.base_data, dict) assert isinstance(record.embeddable, EmbeddableRecord)
def get_municipality(request): """ Returns the requested municipality logo from database. Args: request (pyramid.request.Request): The request containing the fosnr as matchdict parameter. Returns: pyramid.response.Response: The generated response object. """ fosnr = request.matchdict.get('fosnr') source_params = Config.get_municipality_config().get('source').get( 'params') session = database_adapter.get_session(source_params.get('db_connection')) try: model = DottedNameResolver().resolve(source_params.get('model')) municipality = session.query(model).filter_by(fosnr=fosnr).first() if municipality: logo = getattr(municipality, 'logo', None) if logo: response = request.response response.status_int = 200 response.body = b64.decode(logo) response.content_type = ImageRecord.get_mimetype( bytearray(response.body)) return response raise HTTPNotFound() finally: session.close()
def test_sub_theme(): parameters = Parameter( response_format='xml', flavour='reduced', with_geometry=False, images=True, identdn='BL0200002829', number='1000', egrid='CH775979211712', language='de') renderer = Renderer(DummyRenderInfo()) renderer._language = u'de' renderer._request = MockRequest() renderer._request.route_url = lambda url, **kwargs: "http://example.com/current/view" legend_entry = LegendEntryRecord( symbol=ImageRecord('1'.encode('utf-8')), legend_text={'de': 'legend1'}, type_code='LandUsePlans', type_code_list='bla', theme=ThemeRecord(u'LandUsePlans', {'de': 'Theme 1'}), sub_theme={'de': 'sub theme de'} ) content = template.render(**{ 'params': parameters, 'localized': renderer.get_localized_text, 'multilingual': renderer.get_multilingual_text, 'legend_entry': legend_entry }).decode('utf-8').split('\n') no_empty_lines = list(filter(lambda line: line != '', content)) assert no_empty_lines[19] == '<data:SubTheme>sub theme de</data:SubTheme>' assert len(no_empty_lines) == 20
def read(self, params, fosnr=None): """ Central method to read a municipality by it's id_bfs identifier. Args: params (pyramid_oereb.views.webservice.Parameter): The parameters of the extract request. fosnr (int or None): The federal number of the municipality defined by the statistics office. """ session = self._adapter_.get_session(self._key_) try: self.records = list() if fosnr: results = session.query( self._model_).filter(self._model_.fosnr == fosnr).all() else: results = session.query(self._model_).all() for result in results: logo = ImageRecord(b64.decode(result.logo)) self.records.append( self._record_class_( result.fosnr, result.name, result.published, logo, geom=to_shape(result.geom).wkt if isinstance( result.geom, _SpatialElement) else None, )) finally: session.close()
def test_init_with_relation(): legend_records = [LegendEntryRecord( ImageRecord('100'.encode('utf-8')), {'en': 'test'}, 'test_code', 'test', ThemeRecord('test', {'de': 'Test'}))] record = ViewServiceRecord('http://www.test.url.ch', 'http://www.test.url.ch', legend_records) assert isinstance(record.reference_wms, str) assert isinstance(record.legend_at_web, str) assert isinstance(record.legends, list)
def test_get_symbol_ref(config): assert isinstance(config._config, dict) record = LegendEntryRecord( ImageRecord('1'.encode('utf-8')), {'de': 'Test'}, 'test', 'http://my.codelist.com/test.xml', ThemeRecord('ContaminatedSites', {'de': 'Belastete Standorte'})) with pyramid_oereb_test_config(): request = DummyRequest() url = urlparse(get_symbol_ref(request, record)) assert url.path == '/image/symbol/ContaminatedSites/test'
def create_dummy_plr(): office = OfficeRecord({'en': 'Office'}) view_service = ViewServiceRecord('http://my.wms.com', 1, 1.0) law_status = LawStatusRecord.from_config(u'inForce') geometry = GeometryRecord(law_status, datetime.date.today(), Point(1, 1)) record = PlrRecord(ThemeRecord('code', dict()), {'en': 'Content'}, law_status, datetime.date(1985, 8, 29), office, ImageRecord('1'.encode('utf-8')), view_service, [geometry]) return record
def test_format_legend_entry(parameter): with pyramid_oereb_test_config(): renderer = Renderer(DummyRenderInfo()) renderer._language = u'de' renderer._params = parameter renderer._request = MockRequest() theme = ThemeRecord(u'ContaminatedSites', {u'de': u'Test'}) legend_entry = LegendEntryRecord( ImageRecord(FileAdapter().read('tests/resources/python.svg')), {u'de': u'Legendeneintrag'}, u'CodeA', u'type_code_list', theme, {'de': u'Subthema'}, u'Weiteres Thema', view_service_id=1 ) result = renderer.format_legend_entry(legend_entry) expected = { 'LegendText': renderer.get_multilingual_text({'de': 'Legendeneintrag'}), 'TypeCode': 'CodeA', 'TypeCodelist': 'type_code_list', 'Theme': renderer.format_theme(theme), 'SubTheme': 'Subthema', 'OtherTheme': 'Weiteres Thema' } if parameter.images: expected.update({ 'Symbol': ImageRecord(FileAdapter().read('tests/resources/python.svg')).encode() }) else: expected.update({ 'SymbolRef': 'http://example.com/image/symbol/{theme_code}/{view_service_id}/{code}.svg' .format( theme_code='ContaminatedSites', view_service_id=1, code='CodeA' ) }) assert isinstance(result, dict) assert result == expected
def test_init(): record = LegendEntryRecord(ImageRecord('100'.encode('utf-8')), {'de': 'test'}, 'test_code', 'test', ThemeRecord('test', {'de': 'Test'})) assert isinstance(record.symbol, ImageRecord) assert isinstance(record.legend_text, dict) assert isinstance(record.type_code, str) assert isinstance(record.type_code_list, str) assert isinstance(record.theme, ThemeRecord) assert record.sub_theme is None assert record.other_theme is None assert record.legend_text == {'de': 'test'}
def test_init(law_status): office = OfficeRecord({'en': 'Office'}) view_service = ViewServiceRecord('http://my.wms.com') geometry = GeometryRecord(law_status, datetime.date.today(), Point(1, 1)) record = PlrRecord( ThemeRecord('code', dict()), {'en': 'Content'}, law_status, datetime.date(1985, 8, 29), office, ImageRecord('1'.encode('utf-8')), view_service, [geometry]) assert record.information == {'en': 'Content'} assert record.sub_theme is None assert isinstance(record.geometries, list) assert isinstance(record.responsible_office, OfficeRecord) assert isinstance(record.theme, ThemeRecord) assert isinstance(record.symbol, ImageRecord)
def from_db_to_legend_entry_record(self, theme, legend_entries_from_db): legend_entry_records = [] for legend_entry_from_db in legend_entries_from_db: legend_entry_records.append( self._legend_entry_record_class( ImageRecord(base64.b64decode(legend_entry_from_db.symbol)), legend_entry_from_db.legend_text, legend_entry_from_db.type_code, legend_entry_from_db.type_code_list, theme, sub_theme=legend_entry_from_db.sub_theme, other_theme=legend_entry_from_db.other_theme)) return legend_entry_records
def test_get_symbol_ref(): record = LegendEntryRecord( ImageRecord(FileAdapter().read('tests/resources/logo_canton.png')), {'de': 'Test'}, 'CodeA', 'http://my.codelist.com/test.xml', ThemeRecord('ContaminatedSites', {'de': 'Belastete Standorte'}), view_service_id='1' ) with pyramid_oereb_test_config(): request = DummyRequest() url = urlparse(get_symbol_ref(request, record)) assert url.path == '/image/symbol/ContaminatedSites/1/CodeA.png'
def test_get_symbol_ref(): record = LegendEntryRecord( ImageRecord('1'.encode('utf-8')), {'de': 'Test'}, 'CodeA', 'http://my.codelist.com/test.xml', ThemeRecord('ContaminatedSites', {'de': 'Belastete Standorte'}), view_service_id='1' ) with pyramid_oereb_test_config(): request = DummyRequest() url = urlparse(get_symbol_ref(request, record)) assert url.path == '/image/symbol/ContaminatedSites/1/CodeA'
def test_init(): logo = ImageRecord('abcde') geometry = shapely.wkt.loads( 'MULTIPOLYGON(((123 456, 456 789, 789 123, 123 456)))') record = MunicipalityRecord(969, u'FantasyMunicipality', True, logo, geom=geometry) assert isinstance(record.fosnr, int) assert isinstance(record.name, str) assert isinstance(record.published, bool) assert isinstance(record.logo, ImageRecord) assert isinstance(record.geom, shapely.geometry.multipolygon.MultiPolygon)
def test_get_symbol_ref(config, theme_code): assert isinstance(config._config, dict) with pyramid_oereb_test_config(): request = MockRequest() record = LegendEntryRecord(ImageRecord('1'.encode('utf-8')), {'de': 'Test'}, u'test', u'test', ThemeRecord(theme_code, {'de': 'Test'})) if theme_code == u'NotExistingTheme': with pytest.raises(HTTPServerError): Base.get_symbol_ref(request, record) else: ref = Base.get_symbol_ref(request, record) assert ref == 'http://example.com/image/symbol/{}/{}'.format( theme_code, record.type_code)
def test_get_symbol_ref(config): assert isinstance(config._config, dict) record = LegendEntryRecord( ImageRecord('1'.encode('utf-8')), {'de': 'Test'}, 'test', 'http://my.codelist.com/test.xml', ThemeRecord('ContaminatedSites', {'de': 'Belastete Standorte'})) with pyramid_oereb_test_config(): request = DummyRequest() url = urlparse(get_symbol_ref(request, record)) params = parse_qs(url.query) assert url.path == '/image/symbol/ContaminatedSites' assert params.get('CODE')[0] == 'test' assert params.get('TEXT')[0] == base64.b64encode(json.dumps({'de': 'Test'}).encode('utf-8'))\ .decode('ascii')
def test_get_symbol_ref(theme_code): with pyramid_oereb_test_config(): request = MockRequest() record = LegendEntryRecord(ImageRecord( FileAdapter().read('tests/resources/python.svg')), {'de': 'Test'}, u'test', u'test', ThemeRecord(theme_code, {'de': 'Test'}), view_service_id=1) if theme_code == u'NotExistingTheme': with pytest.raises(HTTPServerError): Base.get_symbol_ref(request, record) else: ref = Base.get_symbol_ref(request, record) assert ref == 'http://example.com/image/symbol/{}/{}/{}.svg'.format( theme_code, record.view_service_id, record.type_code)
def from_db_to_legend_entry_record(self, theme, legend_entries_from_db, public_law_restriction_from_db): legend_entry_records = [] for legend_entry_from_db in legend_entries_from_db: # Filter legend by view service to deliver dedicated legend entries only if public_law_restriction_from_db.view_service_id == legend_entry_from_db.view_service_id: legend_entry_records.append(self._legend_entry_record_class( ImageRecord(base64.b64decode(legend_entry_from_db.symbol)), legend_entry_from_db.legend_text, legend_entry_from_db.type_code, legend_entry_from_db.type_code_list, theme, view_service_id=legend_entry_from_db.view_service_id, sub_theme=legend_entry_from_db.sub_theme, other_theme=legend_entry_from_db.other_theme )) return legend_entry_records
def get_symbol(request): """ Returns the symbol for the requested theme and type code from database. Args: request (pyramid.request.Request): The request containing the codes as matchdict parameters. Returns: pyramid.response.Response: The generated response object. """ theme_code = request.matchdict.get('theme_code') view_service_id = request.matchdict.get('view_service_id') type_code = request.matchdict.get('type_code') plr = None for p in Config.get('plrs'): if str(p.get('code')).lower() == str(theme_code).lower(): plr = p break if plr is None: raise HTTPNotFound('No theme with code {}.'.format(theme_code)) source_params = plr.get('source').get('params') session = database_adapter.get_session(source_params.get('db_connection')) try: model = DottedNameResolver().resolve('{module_}.{class_}'.format( module_=source_params.get('models'), class_='LegendEntry')) legend_entry = session.query(model).filter( cast(model.type_code, Text) == cast(type_code, Text)).filter( model.view_service_id == view_service_id).first() if legend_entry: symbol = getattr(legend_entry, 'symbol', None) if symbol: response = request.response response.status_int = 200 response.body = b64.decode(symbol) response.content_type = ImageRecord.get_mimetype( bytearray(response.body)) return response raise HTTPNotFound() finally: session.close()
def test_get_symbol_ref(config, theme_code): assert isinstance(config._config, dict) with pyramid_oereb_test_config(): request = MockRequest() record = LegendEntryRecord(ImageRecord('1'.encode('utf-8')), {'de': 'Test'}, u'test', u'test', ThemeRecord(theme_code, {'de': 'Test'})) if theme_code == u'NotExistingTheme': with pytest.raises(HTTPServerError): Base.get_symbol_ref(request, record) else: ref = Base.get_symbol_ref(request, record) assert ref == 'http://example.com/image/symbol/{}?TEXT={}&CODE={}'.format( theme_code, base64.b64encode( json.dumps(record.legend_text).encode('utf-8')).decode( 'ascii').replace('=', '%3D'), record.type_code)
def test_init_with_relation(): legend_records = [ LegendEntryRecord(ImageRecord('100'.encode('utf-8')), {'en': 'test'}, 'test_code', 'test', ThemeRecord('test', {'de': 'Test'}), view_service_id=1) ] record = ViewServiceRecord('http://www.test.url.ch', 1, 1.0, {'de': 'http://www.test.url.ch'}, legend_records) assert isinstance(record.reference_wms, str) assert isinstance(record.layer_index, int) assert isinstance(record.layer_opacity, float) assert isinstance(record.legend_at_web, dict) for legend in record.legend_at_web: assert isinstance(legend, str) assert isinstance(record.legends, list)
def test_sub_theme(): parameters = Parameter(flavour='reduced', format='xml', geometry=False, images=True, identdn='BL0200002829', number='1000', egrid='CH775979211712', language='de') renderer = Renderer(DummyRenderInfo()) renderer._language = u'de' renderer._request = MockRequest() renderer._request.route_url = lambda url, **kwargs: "http://example.com/current/view" office = OfficeRecord(name={'de': 'office de'}) law_status = LawStatusRecord(code='runningModifications', text={'de': 'law status de'}) geometry = GeometryRecord(law_status, datetime.now(), Polygon(), 'test', office=office) public_law_restriction = PlrRecord( theme=ThemeRecord(u'LandUsePlans', {'de': 'Theme 1'}), information={'de': 'information de'}, law_status=law_status, published_from=datetime.now(), responsible_office=office, symbol=ImageRecord('1'.encode('utf-8')), view_service=ViewServiceRecord(reference_wms='', layer_index=0, layer_opacity=1.0), geometries=[geometry], sub_theme={'de': 'sub theme de'}) content = template.render( **{ 'params': parameters, 'localized': renderer.get_localized_text, 'multilingual': renderer.get_multilingual_text, 'public_law_restriction': public_law_restriction }).decode('utf-8').split('\n') no_empty_lines = list(filter(lambda line: line != '', content)) assert no_empty_lines[ 18] == ' <data:SubTheme>sub theme de</data:SubTheme>' assert len(no_empty_lines) == 72
def download_wms_content(self): """ Simply downloads the image found behind the URL stored in the instance attribute "reference_wms". Raises: LookupError: Raised if the response is not code 200 or content-type doesn't contains type "image". AttributeError: Raised if the URL itself isn't valid at all. """ main_msg = "Image for WMS couldn't be retrieved." if uri_validator(self.reference_wms): log.debug( "Downloading image, url: {url}".format(url=self.reference_wms)) try: response = requests.get(self.reference_wms, proxies=Config.get('proxies')) except Exception as ex: dedicated_msg = "An image could not be downloaded. URL was: {url}, error was " \ "{response}".format( url=self.reference_wms, response=ex ) log.error(dedicated_msg) raise LookupError(dedicated_msg) content_type = response.headers.get('content-type', '') if response.status_code == 200 and content_type.find('image') > -1: self.image = ImageRecord(response.content) else: dedicated_msg = "The image could not be downloaded. URL was: {url}, Response was " \ "{response}".format( url=self.reference_wms, response=response.content.decode('utf-8') ) log.error(main_msg) log.error(dedicated_msg) raise LookupError(dedicated_msg) else: dedicated_msg = "URL seems to be not valid. URL was: {url}".format( url=self.reference_wms) log.error(main_msg) log.error(dedicated_msg) raise AttributeError(dedicated_msg)
def read(self): """ Central method to read a municipality by it's id_bfs identifier. """ session = self._adapter_.get_session(self._key_) try: results = session.query(self._model_).all() self.records = list() for result in results: logo = ImageRecord(base64.b64decode(result.logo)) self.records.append( self._record_class_( result.fosnr, result.name, result.published, logo, geom=to_shape(result.geom).wkt if isinstance( result.geom, _SpatialElement) else None, )) finally: session.close()