Beispiel #1
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
Beispiel #2
0
    def read(self, **kwargs):
        """
        Central method to read one legend entry.

        Args:
            (kwargs): Arbitrary keyword arguments. It must contain the key 'type_code'.
        """
        session = self._adapter_.get_session(self._key_)
        try:
            query = session.query(self._model_)
            if kwargs.get('type_code'):
                results = query.filter(
                    self._model_.type_code == kwargs.get('type_code')
                ).all()
            else:
                raise AttributeError('Necessary parameter is missing.')

            self.records = list()
            for result in results:
                self.records.append(LegendEntryRecord(
                    result.symbol,
                    result.legend_text,
                    result.type_code,
                    result.type_code_list,
                    result.theme
                ))
        finally:
            session.close()
Beispiel #3
0
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
Beispiel #4
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)]
        }
Beispiel #5
0
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_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)
Beispiel #7
0
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 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_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'
Beispiel #10
0
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'
Beispiel #11
0
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')
Beispiel #12
0
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)
Beispiel #13
0
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 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)
Beispiel #16
0
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
Beispiel #17
0
def test_processor_get_legend_entries():
    theme1 = ThemeRecord(u'TEST', {'de': 'Theme 1'})
    theme2 = ThemeRecord(u'TEST', {'de': 'Theme 2'})
    office = OfficeRecord({'de': 'Test Office'})
    law_status = LawStatusRecord.from_config(u'inForce')
    geometries = [
        GeometryRecord(law_status, datetime.date.today(), Point(1, 1))
    ]
    legend1 = LegendEntryRecord(ImageRecord('1'.encode('utf-8')),
                                {'de': 'legend1'},
                                'CodeA',
                                'bla',
                                theme1,
                                view_service_id=1)
    legend2 = LegendEntryRecord(ImageRecord('1'.encode('utf-8')),
                                {'de': 'legend2'},
                                'CodeB',
                                'bla',
                                theme1,
                                view_service_id=1)
    legend3 = LegendEntryRecord(ImageRecord('1'.encode('utf-8')),
                                {'de': 'legend3'},
                                'CodeC',
                                'bla',
                                theme2,
                                view_service_id=1)
    legend4 = LegendEntryRecord(ImageRecord('1'.encode('utf-8')),
                                {'de': 'legend4'},
                                'CodeD',
                                'bla',
                                theme2,
                                view_service_id=1)
    view_service1 = ViewServiceRecord(
        'http://www.test1.url.ch',
        1,
        1.0,
        legend_at_web={'de': 'http://www.test1.url.ch'},
        legends=[legend1, legend2])
    view_service2 = ViewServiceRecord(
        'http://www.test2.url.ch',
        1,
        1.0,
        legend_at_web={'de': 'http://www.test2.url.ch'},
        legends=[legend3, legend4])
    image = ImageRecord('1'.encode('utf-8'))
    plr1 = PlrRecord(
        theme1,
        {'de': 'CONTENT'},
        law_status,
        datetime.datetime.now(),
        office,
        image,
        view_service1,
        geometries,
        type_code='CodeA',
    )
    plr2 = PlrRecord(theme1, {'de': 'CONTENT'},
                     law_status,
                     datetime.datetime.now(),
                     office,
                     image,
                     view_service1,
                     geometries,
                     type_code='CodeB')
    plr3 = PlrRecord(theme1, {'de': 'CONTENT'},
                     law_status,
                     datetime.datetime.now(),
                     office,
                     image,
                     view_service2,
                     geometries,
                     type_code='CodeB')
    plr4 = PlrRecord(theme1, {'de': 'CONTENT'},
                     law_status,
                     datetime.datetime.now(),
                     office,
                     image,
                     view_service2,
                     geometries,
                     type_code='CodeB')

    inside_plrs = [plr1]
    outside_plrs = [plr2, plr3]
    after_process = Processor.get_legend_entries(inside_plrs, outside_plrs)
    assert len(inside_plrs) == len(after_process)
    inside_plrs = [plr3]
    outside_plrs = [plr4]
    after_process = Processor.get_legend_entries(inside_plrs, outside_plrs)
    assert len(after_process) == 1
def test_processor_get_legend_entries(law_status):
    theme1 = ThemeRecord(u'TEST', {'de': 'Theme 1'})
    theme2 = ThemeRecord(u'TEST', {'de': 'Theme 2'})
    office = OfficeRecord({'de': 'Test Office'})
    geometries = [
        GeometryRecord(law_status, datetime.date.today(), Point(1, 1))
    ]
    legend1 = LegendEntryRecord(ImageRecord('1'.encode('utf-8')),
                                {'de': 'legend1'}, u'type1', u'bla', theme1)
    legend2 = LegendEntryRecord(ImageRecord('1'.encode('utf-8')),
                                {'de': 'legend2'}, u'type2', u'bla', theme1)
    legend3 = LegendEntryRecord(ImageRecord('1'.encode('utf-8')),
                                {'de': 'legend3'}, u'type3', u'bla', theme2)
    legend4 = LegendEntryRecord(ImageRecord('1'.encode('utf-8')),
                                {'de': 'legend4'}, u'type4', u'bla', theme2)
    view_service1 = ViewServiceRecord('http://www.test1.url.ch',
                                      'http://www.test1.url.ch',
                                      legends=[legend1, legend2])
    view_service2 = ViewServiceRecord('http://www.test2.url.ch',
                                      'http://www.test2.url.ch',
                                      legends=[legend3, legend4])
    image = ImageRecord('1'.encode('utf-8'))
    plr1 = PlrRecord(
        theme1,
        {'de': 'CONTENT'},
        law_status,
        datetime.datetime.now(),
        office,
        image,
        view_service1,
        geometries,
        type_code=u'type1',
    )
    plr2 = PlrRecord(theme1, {'de': 'CONTENT'},
                     law_status,
                     datetime.datetime.now(),
                     office,
                     image,
                     view_service1,
                     geometries,
                     type_code=u'type2')
    plr3 = PlrRecord(theme1, {'de': 'CONTENT'},
                     law_status,
                     datetime.datetime.now(),
                     office,
                     image,
                     view_service2,
                     geometries,
                     type_code=u'type2')
    plr4 = PlrRecord(theme1, {'de': 'CONTENT'},
                     law_status,
                     datetime.datetime.now(),
                     office,
                     image,
                     view_service2,
                     geometries,
                     type_code=u'type2')

    inside_plrs = [plr1]
    outside_plrs = [plr2, plr3]
    after_process = Processor.get_legend_entries(inside_plrs, outside_plrs)
    assert len(inside_plrs) == len(after_process)
    inside_plrs = [plr3]
    outside_plrs = [plr4]
    after_process = Processor.get_legend_entries(inside_plrs, outside_plrs)
    assert len(after_process) == 1
def test_mandatory_fields():
    with pytest.raises(TypeError):
        LegendEntryRecord()
Beispiel #20
0
def test_format_plr(parameter):
    with pyramid_oereb_test_config():
        renderer = Renderer(DummyRenderInfo())
        renderer._language = 'de'
        renderer._params = parameter
        renderer._request = MockRequest()
        document = DocumentRecord('Law', law_status(), datetime.date.today(),
                                  {u'de': u'Test Dokument'},
                                  OfficeRecord({u'de': u'BUD'}),
                                  {'de': 'http://mein.dokument.ch'})
        if parameter.flavour == 'reduced':
            documents = [document]
        else:
            documents = None
        theme = ThemeRecord(u'ContaminatedSites', {u'de': u'Test theme'})
        office = OfficeRecord({'de': 'Test Office'})
        legend_entry = LegendEntryRecord(ImageRecord(
            base64.b64encode('1'.encode('utf-8'))), {'de': 'Test'},
                                         'CodeA',
                                         'TypeCodeList',
                                         theme,
                                         view_service_id=1)
        view_service = ViewServiceRecord('http://geowms.bl.ch', 1, 1.0,
                                         {'de': u'http://geowms.bl.ch'},
                                         [legend_entry])
        geometry = GeometryRecord(law_status(), datetime.date.today(),
                                  Point(1, 1))
        plr = PlrRecord(theme, {'de': 'Test'},
                        law_status(),
                        datetime.date.today(),
                        office,
                        ImageRecord('1'.encode('utf-8')),
                        view_service, [geometry],
                        sub_theme={'de': 'Subtopic'},
                        other_theme='Additional topic',
                        type_code='CodeA',
                        type_code_list='TypeCodeList',
                        documents=documents,
                        view_service_id=1)
        plr.part_in_percent = 0.5
        if parameter.flavour == 'full':
            with pytest.raises(ValueError):
                renderer.format_plr([plr])
        else:
            result = renderer.format_plr([plr])
            assert isinstance(result, list)
            assert len(result) == 1
            assert isinstance(result[0], dict)
            expected = {
                'Information': renderer.get_multilingual_text(plr.information),
                'Theme': renderer.format_theme(plr.theme),
                'Lawstatus': {
                    'Code': 'inForce',
                    'Text': {
                        'Language': 'de',
                        'Text': 'In Kraft'
                    }
                },
                'ResponsibleOffice':
                renderer.format_office(plr.responsible_office),
                'Map': renderer.format_map(plr.view_service),
                'SubTheme': 'Subtopic',
                'OtherTheme': 'Additional topic',
                'TypeCode': 'CodeA',
                'TypeCodelist': 'TypeCodeList',
                'LegalProvisions': [renderer.format_document(document)],
                'PartInPercent': 0.5
            }
            if parameter.images:
                expected.update({
                    'Symbol':
                    base64.b64encode('1'.encode('utf-8')).decode('ascii')
                })
            else:
                expected.update({
                    'SymbolRef':
                    'http://example.com/image/symbol/{theme}/{view_service_id}/{code}'
                    .format(theme='ContaminatedSites',
                            view_service_id=1,
                            code='CodeA')
                })
            assert result[0] == expected