def test_get_bbox_with_buffer():
    initial_buffer = Config._config.get('print').get('buffer')
    initial_basic_map_size = Config._config.get('print').get('basic_map_size')

    # Buffer 123.25, landscape feature in a landscape map.
    # Buffer 123.25 is quarter of 493, so the final view is 50% margin, 50% feature.
    Config._config['print']['basic_map_size'] = [493, 280]
    Config._config['print']['buffer'] = 123.25
    geometry = box(0, 1000, 493, 1100)  # 493m width, 100m height
    # Should add buffer (right and left) then adapt height to fit the map size
    print_bbox = ViewServiceRecord.get_bbox(geometry)
    assert get_width_from_bbox(print_bbox) == 986
    assert get_height_from_bbox(print_bbox) == 560

    # Buffer 70, portrait feature in a landscape map.
    # Buffer 70 is quarter of 280, so the final view is 50% margin, 50% feature.
    Config._config['print']['buffer'] = 70
    geometry = box(0, 1000, 100, 1280)  # 100m width, 280m height
    # Should add buffer (top and bottom) then adapt width to fit the map size
    print_bbox = ViewServiceRecord.get_bbox(geometry)
    assert get_width_from_bbox(print_bbox) == 986
    assert get_height_from_bbox(print_bbox) == 560

    # Reset config for further tests.
    Config._config['print']['buffer'] = initial_buffer
    Config._config['print']['basic_map_size'] = initial_basic_map_size
Exemplo n.º 2
0
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 test_get_bbox_without_buffer():
    initial_buffer = Config._config.get('print').get('buffer')
    initial_basic_map_size = Config._config.get('print').get('basic_map_size')

    # No buffer, landscape feature in a landscape map.
    Config._config['print']['buffer'] = 0
    Config._config['print']['basic_map_size'] = [493, 280]
    geometry = box(0, 1000, 493, 1100)  # 493m width, 100m height
    # Should adapt height to fit the map size
    print_bbox = ViewServiceRecord.get_bbox(geometry)
    assert get_width_from_bbox(print_bbox) == 493
    assert get_height_from_bbox(print_bbox) == 280

    # No buffer, portrait feature in a landscape map.
    geometry = box(0, 1000, 100, 1280)  # 100m width, 280m height
    # Should adapt width to fit the map size
    print_bbox = ViewServiceRecord.get_bbox(geometry)
    assert get_width_from_bbox(print_bbox) == 493
    assert get_height_from_bbox(print_bbox) == 280

    # No buffer, portrait feature in a portrait map.
    Config._config['print']['basic_map_size'] = [280, 493]
    geometry = box(0, 1000, 100, 1493)  # 100m width, 493m height
    # Should adapt width to fit the map size
    print_bbox = ViewServiceRecord.get_bbox(geometry)
    assert get_width_from_bbox(print_bbox) == 280
    assert get_height_from_bbox(print_bbox) == 493

    # Reset config for further tests.
    Config._config['print']['buffer'] = initial_buffer
    Config._config['print']['basic_map_size'] = initial_basic_map_size
Exemplo n.º 4
0
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 test_invalid_layer_layer_opacity():
    with pytest.raises(AttributeError):
        ViewServiceRecord('http://example.com', 1, 2.0)
    with pytest.raises(AttributeError):
        ViewServiceRecord('http://example.com', 1, -1.1)
    with pytest.warns(UserWarning,
                      match='Type of "layer_opacity" should be "float"'):
        ViewServiceRecord('http://example.com', 1, 1)
def test_invalid_layer_index_arguments():
    with pytest.raises(AttributeError):
        ViewServiceRecord('http://example.com', -1001, 1)
    with pytest.raises(AttributeError):
        ViewServiceRecord('http://example.com', 1001, 1)
    with pytest.warns(UserWarning,
                      match='Type of "layer_index" should be "int"'):
        ViewServiceRecord('http://example.com', 1.0, 1)
Exemplo n.º 7
0
 def set_highlight_url(self, sld_url):
     configured_params = Config.get_real_estate_config().get(
         'visualisation').get('url_params')
     additional_url_params = {}
     for param in configured_params:
         additional_url_params.update({param: getattr(self, param)})
     updated_sld_url = add_url_params(sld_url, additional_url_params)
     self.highlight = ViewServiceRecord(
         add_url_params(self.plan_for_land_register.reference_wms,
                        {'sld': updated_sld_url}), '')
     self.highlight.download_wms_content()
Exemplo n.º 8
0
    def read(self, nb_ident=None, number=None, egrid=None, geometry=None):
        """
        The central read accessor method to get all desired records from configured source.

        .. note:: If you subclass this class your implementation needs to offer this method in the same
            signature. Means the parameters must be the same and the return must be a list of
            :ref:`api-pyramid_oereb-lib-records-real_estate-realestaterecord`. Otherwise the API like way the
            server works would be broken.

        Args:
            nb_ident (int or None): The identification number of the desired real estate. This
                parameter is directly related to the number parameter and both must be set!
                Combination will deliver only one result or crashes.
            number (str or None): The number of parcel or also known real estate. This parameter
                is directly related to the nb_ident parameter and both must be set!
                Combination will deliver only one result or crashes.
            (str or None): The unique identifier of the desired real estate. This will deliver
                only one result or crashes.
            geometry (str): A geometry as WKT string which is used to obtain intersected real
                estates. This may deliver several results.

        Returns:
            list of pyramid_oereb.lib.records.real_estate.RealEstateRecord:
                The list of all found records filtered by the passed criteria.
        """
        plan_for_land_register_config = Config.get_plan_for_land_register_config(
        )

        real_estate_view_service = ViewServiceRecord(
            plan_for_land_register_config.get('reference_wms'),
            plan_for_land_register_config.get('layer_index'),
            plan_for_land_register_config.get('layer_opacity'))

        plan_for_land_register_main_page_config = Config.get_plan_for_land_register_main_page_config(
        )
        real_estate_main_page_view_service = ViewServiceRecord(
            plan_for_land_register_main_page_config.get('reference_wms'),
            plan_for_land_register_main_page_config.get('layer_index'),
            plan_for_land_register_main_page_config.get('layer_opacity'))

        self._source_.read(nb_ident=nb_ident,
                           number=number,
                           egrid=egrid,
                           geometry=geometry)
        for r in self._source_.records:
            if isinstance(r, RealEstateRecord):
                r.set_view_service(real_estate_view_service)
                r.set_main_page_view_service(
                    real_estate_main_page_view_service)
        return self._source_.records
def test_get_bbox_from_url():
    with_bbox = 'https://host/?&SRS=EPSG:2056&BBOX=2475000,1065000,2850000,1300000&' \
                'WIDTH=493&HEIGHT=280&FORMAT=image/png'
    p1, p2 = ViewServiceRecord.get_bbox_from_url(with_bbox)
    assert isinstance(p1, Point)
    assert p1.x == 2475000.0
    assert p1.y == 1065000.0
    assert isinstance(p2, Point)
    assert p2.x == 2850000.0
    assert p2.y == 1300000.0

    no_bbox = 'https://host/?&SRS=EPSG:2056WIDTH=493&HEIGHT=280&FORMAT=image/png'
    p3, p4 = ViewServiceRecord.get_bbox_from_url(no_bbox)
    assert p3 is None
    assert p4 is None
Exemplo n.º 10
0
def test_format_real_estate(config):
    assert isinstance(config._config, dict)
    renderer = Renderer(DummyRenderInfo())
    renderer._language = u'de'
    renderer._params = Parameter(
        'reduced', 'json', True, False, 'BL0200002829', '1000', 'CH775979211712', 'de')
    geometry = MultiPolygon([Polygon([(0, 0), (1, 1), (1, 0)])])
    view_service = ViewServiceRecord(u'http://geowms.bl.ch', u'http://geowms.bl.ch')
    document = DocumentRecord(law_status(), datetime.date.today(), {u'de': u'Test Dokument'},
                              OfficeRecord({u'de': u'BUD'}), {'de': 'http://mein.dokument.ch'})
    real_estate = RealEstateRecord(u'RealEstate', u'BL', u'Liestal', 2829, 11395,
                                   geometry, u'http://www.geocat.ch', u'1000', u'BL0200002829',
                                   u'CH775979211712', u'Subunit', [], references=[document])
    real_estate.plan_for_land_register = view_service
    result = renderer.format_real_estate(real_estate)
    assert isinstance(result, dict)
    assert result == {
        'Type': u'RealEstate',
        'Canton': u'BL',
        'Municipality': u'Liestal',
        'FosNr': 2829,
        'LandRegistryArea': 11395,
        'PlanForLandRegister': renderer.format_map(view_service),
        'Limit': renderer.from_shapely(geometry),
        'Number': u'1000',
        'IdentDN': u'BL0200002829',
        'EGRID': u'CH775979211712',
        'SubunitOfLandRegister': u'Subunit',
        'MetadataOfGeographicalBaseData': u'http://www.geocat.ch',
        'Reference': [renderer.format_document(document)]
    }
Exemplo n.º 11
0
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
Exemplo n.º 12
0
def test_legend_at_web_no_language():
    # Requests italian, but only german is available -> best effort: deliver german instead
    parameters = Parameter('reduced', 'xml', False, False, 'BL0200002829',
                           '1000', 'CH775979211712', 'it')
    renderer = Renderer(None)
    legend_url = """
    http://example.com?
    SERVICE=WMS&
    REQUEST=GetLegendGraphic&
    FORMAT=image/png&
    SRS=epsg:2056
    """.replace(" ", "").replace('\n', '')
    map = ViewServiceRecord(reference_wms='',
                            legend_at_web={'de': legend_url},
                            layer_index=0,
                            layer_opacity=1.0)
    content = template.render(**{
        'params': parameters,
        'localized': renderer.get_localized_text,
        'map': map
    }).decode('utf-8').split('\n')
    assert len(content) == 6
    assert content[2] == """
        <data:LegendAtWeb>
        http%3A%2F%2Fexample.com%3F
        SERVICE%3DWMS%26
        REQUEST%3DGetLegendGraphic%26
        FORMAT%3Dimage%2Fpng%26
        SRS%3Depsg%3A2056
        </data:LegendAtWeb>
    """.replace(" ", "").replace('\n', '')
Exemplo n.º 13
0
def test_get_egrid_response():
    with pyramid_oereb_test_config():
        request = MockRequest(
            current_route_url='http://example.com/oereb/getegrid/json/')
        # Add params to matchdict as the view will do it for /getegrid/{format}/
        request.matchdict.update({'format': u'json'})

        view_service = ViewServiceRecord('test', 1, 1.0, 'test', None)
        record = RealEstateRecord('test',
                                  'BL',
                                  'test',
                                  1,
                                  100,
                                  MultiPolygon(
                                      [Polygon([(0, 0), (1, 1), (1, 0)])]),
                                  view_service,
                                  number='number',
                                  identdn='identdn',
                                  egrid='egrid')
        response = PlrWebservice(request).__get_egrid_response__([record]).json
        assert response == {
            'GetEGRIDResponse': [{
                'egrid': 'egrid',
                'number': 'number',
                'identDN': 'identdn'
            }]
        }
Exemplo n.º 14
0
def test_empty():
    map = ViewServiceRecord(reference_wms='', layer_index=0, layer_opacity=1.0)
    content = template.render(**{'map': map}).decode('utf-8').split('\n')
    assert content[0] == ''  # empty filler line
    assert content[1] == '<data:layerIndex>0</data:layerIndex>'
    assert content[2] == '<data:layerOpacity>1.0</data:layerOpacity>'
    assert content[3] == ''  # empty filler line
    assert len(content) == 4
Exemplo n.º 15
0
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)
Exemplo n.º 16
0
def test_reference_wms():
    map = ViewServiceRecord(reference_wms='http://example.com',
                            layer_index=0,
                            layer_opacity=1.0)
    content = template.render(**{'map': map}).decode('utf-8').split('\n')
    assert content[
        1] == '<data:ReferenceWMS>http%3A%2F%2Fexample.com</data:ReferenceWMS>'
    assert len(content) == 5
Exemplo n.º 17
0
def test_init():
    record = ViewServiceRecord('http://www.test.url.ch', 1, 1.0,
                               'http://www.test.url.ch', None)
    assert isinstance(record.reference_wms, str)
    assert isinstance(record.layer_index, int)
    assert isinstance(record.layer_opacity, float)
    assert isinstance(record.legend_at_web, str)
    assert isinstance(record.legends, list)
Exemplo n.º 18
0
def test_view_service_correct_init_ns():
    with_bbox = 'https://host/?&SRS=EPSG:2056&BBOX=2475000,1065000,2850000,1300000&' \
                'WIDTH=493&HEIGHT=280&FORMAT=image/png'
    test_view_service = ViewServiceRecord(with_bbox, 1, 1.0,
                                          {'de': 'http://www.test.url.ch'},
                                          None)
    assert isinstance(test_view_service.min_NS95, Point)
    assert test_view_service.min_NS95.x == 2475000.0
    assert test_view_service.min_NS95.y == 1065000.0
    assert isinstance(test_view_service.max_NS95, Point)
    assert test_view_service.max_NS95.x == 2850000.0
    assert test_view_service.max_NS95.y == 1300000.0

    no_bbox = 'https://host/?&SRS=EPSG:2056WIDTH=493&HEIGHT=280&FORMAT=image/png'
    test_view_service_no_bbox = ViewServiceRecord(
        no_bbox, 1, 1.0, {'de': 'http://www.test.url.ch'}, None)
    assert test_view_service_no_bbox.min_NS95 is None
    assert test_view_service_no_bbox.max_NS95 is None
Exemplo n.º 19
0
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
Exemplo n.º 20
0
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
Exemplo n.º 21
0
def test_embeddable(params):
    renderer = Renderer(DummyRenderInfo())
    renderer._language = u'de'
    renderer._params = params
    date = datetime.datetime.now()
    view_service = ViewServiceRecord(u'http://geowms.bl.ch',
                                     1,
                                     1.0,
                                     {'de': 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.plan_for_land_register = view_service
    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)

    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, OfficeRecord({u'de': u'Test 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
    )
    result = renderer.format_embeddable(embeddable)
    assert result == {
        'cadasterOrganisationName': plr_cadastre_authority.name.get('de'),
        'datasource': [{
            'topic': {
                'Text': {'Text': u'TEST TEXT', 'Language': 'de'},
                'Code': 'TEST'
            },
            'dataownerName': u'Test Office',
            'transferFromSource': date.strftime('%d-%m-%YT%H:%M:%S')
        }],
        'cadasterState': cadaster_state.strftime('%d-%m-%YT%H:%M:%S'),
        'dataOwnerNameCadastralSurveying': u'This is only a dummy',
        'transferFromSourceCadastralSurveying': av_update_date.strftime('%d-%m-%YT%H:%M:%S')
    }
Exemplo n.º 22
0
    def set_highlight_url(self, sld_url):
        """
        Set the highlight of the real estate.

        Args:
            sld_url (str): The URL which provides the sld to style and filter the highlight of the real
            estate.
        """
        configured_params = Config.get_real_estate_config().get(
            'visualisation').get('url_params')
        additional_url_params = {}
        for param in configured_params:
            additional_url_params.update({param: getattr(self, param)})
        updated_sld_url = add_url_params(sld_url, additional_url_params)
        self.highlight = ViewServiceRecord(
            add_url_params(self.plan_for_land_register.reference_wms,
                           {'sld': updated_sld_url}),
            self.plan_for_land_register.layer_index,
            self.plan_for_land_register.layer_opacity,
            legend_at_web={})
        self.highlight.download_wms_content()
Exemplo n.º 23
0
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)
Exemplo n.º 24
0
def test_check_min_max_attributes():
    min_val = Point(1, 1)
    max_val = Point(2, 2)

    # test None values, expect no error
    ViewServiceRecord.check_min_max_attributes(None, 'test1', None, 'test2')

    # combinations of value + None
    with pytest.raises(AttributeError):
        ViewServiceRecord.check_min_max_attributes(min_val, 'test1', None,
                                                   'test2')
    with pytest.raises(AttributeError):
        ViewServiceRecord.check_min_max_attributes(None, 'test1', min_val,
                                                   'test2')

    # type error
    with pytest.raises(AttributeError):
        ViewServiceRecord.check_min_max_attributes(1, 'test1', 2, 'test2')

    # inverted values
    with pytest.raises(AttributeError):
        ViewServiceRecord.check_min_max_attributes(max_val, 'test1', min_val,
                                                   'test2')
Exemplo n.º 25
0
def test_legend_at_web():
    parameters = Parameter('reduced', 'xml', False, False, 'BL0200002829',
                           '1000', 'CH775979211712', 'de')
    renderer = Renderer(None)
    map = ViewServiceRecord(reference_wms='',
                            legend_at_web={'de': 'http://example-legend.com'},
                            layer_index=0,
                            layer_opacity=1.0)
    content = template.render(**{
        'params': parameters,
        'localized': renderer.get_localized_text,
        'map': map
    }).decode('utf-8').split('\n')
    assert len(content) == 6
    assert content[
        2] == '<data:LegendAtWeb>http%3A%2F%2Fexample-legend.com</data:LegendAtWeb>'
Exemplo n.º 26
0
def test_reference_wms():
    map = ViewServiceRecord(
        reference_wms=
        'http://example.com?SERVICE=WMS&REQUEST=GetMap&FORMAT=image/png&SRS=epsg:2056',
        layer_index=0,
        layer_opacity=1.0)
    content = template.render(**{'map': map}).decode('utf-8').split('\n')
    assert content[1] == """
    <data:ReferenceWMS>
    http%3A%2F%2Fexample.com%3F
    SERVICE%3DWMS%26
    REQUEST%3DGetMap%26
    FORMAT%3Dimage%2Fpng%26
    SRS%3Depsg%3A2056
    </data:ReferenceWMS>
    """.replace(" ", "").replace('\n', '')
    assert len(content) == 5
Exemplo n.º 27
0
def test_legend_at_web_no_language():
    # Requests italian, but only german is available -> best effort: deliver german instead
    parameters = Parameter('reduced', 'xml', False, False, 'BL0200002829',
                           '1000', 'CH775979211712', 'it')
    renderer = Renderer(None)
    map = ViewServiceRecord(reference_wms='',
                            legend_at_web={'de': 'http://example-legend.com'},
                            layer_index=0,
                            layer_opacity=1.0)
    content = template.render(**{
        'params': parameters,
        'localized': renderer.get_localized_text,
        'map': map
    }).decode('utf-8').split('\n')
    assert len(content) == 6
    assert content[
        2] == '<data:LegendAtWeb>http%3A%2F%2Fexample-legend.com</data:LegendAtWeb>'
Exemplo n.º 28
0
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
Exemplo n.º 30
0
def test_init():
    date = datetime.datetime.now()
    real_estate = RealEstateRecord(
        u'test', u'BL', u'Laufen', 2770, 1000, MultiPolygon(),
        ViewServiceRecord('test_link', 1, 1.0, '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)