Ejemplo n.º 1
0
    def test_create_log(self):
        from datetime import datetime

        from geojson.feature import FeatureCollection

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Metadata
        from c2cgeoportal_commons.models.static import User
        from c2cgeoportal_geoportal.views.layers import Layers

        self.assertEqual(
            DBSession.query(User.username).all(), [("__test_user", )])

        metadatas = [
            Metadata("lastUpdateDateColumn", "last_update_date"),
            Metadata("lastUpdateUserColumn", "last_update_user"),
        ]
        layer_id = self._create_layer(metadatas=metadatas)
        request = self._get_request(layer_id, username="******")
        request.method = "POST"
        request.body = '{"type": "FeatureCollection", "features": [{"type": "Feature", "properties": {"name": "foo", "child": "c1é"}, "geometry": {"type": "Point", "coordinates": [5, 45]}}]}'  # noqa
        layers = Layers(request)
        collection = layers.create()
        self.assertEqual(request.response.status_int, 201)
        self.assertTrue(isinstance(collection, FeatureCollection))
        self.assertEqual(len(collection.features), 1)
        properties = collection.features[0]

        self.assertEqual(request.user.username, "__test_user")

        self.assertEqual(properties.last_update_user, request.user.id)
        self.assertIsInstance(properties.last_update_date, datetime)
Ejemplo n.º 2
0
    def setup_method(self, _):
        # Always see the diff
        # https://docs.python.org/2/library/unittest.html#unittest.TestCase.maxDiff
        self.maxDiff = None

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Interface, LayerGroup, LayerWMS, Metadata, Theme

        main = Interface(name="desktop")

        ogc_server = create_default_ogcserver()

        layer_noscale = LayerWMS(name="__test_layer_noscale", public=True)
        layer_noscale.layer = "test_noscale"
        layer_noscale.interfaces = [main]
        layer_noscale.ogc_server = ogc_server

        layer_minscale = LayerWMS(name="__test_layer_minscale", public=True)
        layer_minscale.layer = "test_minscale"
        layer_minscale.interfaces = [main]
        layer_minscale.ogc_server = ogc_server

        layer_maxscale = LayerWMS(name="__test_layer_maxscale", public=True)
        layer_maxscale.layer = "test_maxscale"
        layer_maxscale.interfaces = [main]
        layer_maxscale.ogc_server = ogc_server

        layer_boothscale = LayerWMS(name="__test_layer_boothscale",
                                    public=True)
        layer_boothscale.layer = "test_boothscale"
        layer_boothscale.interfaces = [main]
        layer_boothscale.ogc_server = ogc_server

        layer_metadatascale = LayerWMS(name="__test_layer_metadatascale",
                                       public=True)
        layer_metadatascale.layer = "test_boothscale"
        layer_metadatascale.interfaces = [main]
        layer_metadatascale.ogc_server = ogc_server
        layer_metadatascale.metadatas = [
            Metadata("minResolution", "100"),
            Metadata("maxResolution", "1000")
        ]

        layer_group = LayerGroup(name="__test_layer_group")
        layer_group.children = [
            layer_noscale,
            layer_minscale,
            layer_maxscale,
            layer_boothscale,
            layer_metadatascale,
        ]

        theme = Theme(name="__test_theme")
        theme.interfaces = [main]
        theme.children = [layer_group]

        DBSession.add_all([theme])

        transaction.commit()
Ejemplo n.º 3
0
    def test_metadata_log(self):
        from c2cgeoportal_commons.models.main import Metadata
        from c2cgeoportal_geoportal.views.layers import Layers

        metadatas = [
            Metadata("lastUpdateDateColumn", "last_update_date"),
            Metadata("lastUpdateUserColumn", "last_update_user"),
        ]
        layer_id = self._create_layer(metadatas=metadatas)
        request = self._get_request(layer_id, username="******")

        layers = Layers(request)
        cls = layers.metadata()
        self.assertFalse(hasattr(cls, "last_update_date"))
        self.assertFalse(hasattr(cls, "last_update_user"))
Ejemplo n.º 4
0
def factory_build_layers(layer_builder, dbsession, add_dimension=True):
    from c2cgeoportal_commons.models.main import \
        RestrictionArea, LayergroupTreeitem, \
        Interface, Dimension, Metadata, LayerGroup

    restrictionareas = [RestrictionArea(name='restrictionarea_{}'.format(i))
                        for i in range(0, 5)]

    interfaces = [Interface(name) for name in ['desktop', 'mobile', 'edit', 'routing']]

    dimensions_protos = [('Date', '2017'),
                         ('Date', '2018'),
                         ('Date', '1988'),
                         ('CLC', 'all'), ]

    metadatas_protos = [('copyable', 'true'),
                        ('disclaimer', '© le momo'),
                        ('snappingConfig', '{"tolerance": 50}')]

    groups = [LayerGroup(name='layer_group_{}'.format(i)) for i in range(0, 5)]

    layers = []
    for i in range(0, 25):

        layer = layer_builder(i)

        if add_dimension:
            layer.dimensions = [Dimension(name=dimensions_protos[id][0],
                                          value=dimensions_protos[id][1],
                                          layer=layer)
                                for id in [i % 3, (i + 2) % 4, (i + 3) % 4]]

        layer.metadatas = [Metadata(name=metadatas_protos[id][0],
                                    value=metadatas_protos[id][1])
                           for id in [i % 3, (i + 2) % 3]]
        for metadata in layer.metadatas:
            metadata.item = layer

        if i % 10 != 1:
                layer.interfaces = [interfaces[i % 4], interfaces[(i + 2) % 4]]

        layer.restrictionareas = [restrictionareas[i % 5], restrictionareas[(i + 2) % 5]]

        dbsession.add(LayergroupTreeitem(group=groups[i % 5],
                                         item=layer,
                                         ordering=len(groups[i % 5].children_relation)))
        dbsession.add(LayergroupTreeitem(group=groups[(i + 3) % 5],
                                         item=layer,
                                         ordering=len(groups[(i + 3) % 5].children_relation)))

        dbsession.add(layer)
        layers.append(layer)
    return {
        'restrictionareas': restrictionareas,
        'layers': layers,
        'interfaces': interfaces
    }
Ejemplo n.º 5
0
    def test_update_log(self):
        from datetime import datetime
        from c2cgeoportal_geoportal.views.layers import Layers
        from c2cgeoportal_commons.models.main import Metadata

        metadatas = [
            Metadata("lastUpdateDateColumn", "last_update_date"),
            Metadata("lastUpdateUserColumn", "last_update_user"),
        ]
        layer_id = self._create_layer(metadatas=metadatas)
        request = self._get_request(layer_id, username="******")
        request.matchdict["feature_id"] = 1
        request.method = "PUT"
        request.body = '{"type": "Feature", "id": 1, "properties": {"name": "foobar", "child": "c2é"}, "geometry": {"type": "Point", "coordinates": [5, 45]}}'  # noqa
        layers = Layers(request)
        feature = layers.update()
        self.assertEqual(feature.id, 1)
        self.assertEqual(feature.last_update_user, request.user.id)
        self.assertIsInstance(feature.last_update_date, datetime)
Ejemplo n.º 6
0
    def test_metadata_columns_order(self):
        from c2cgeoportal_geoportal.views.layers import Layers
        from c2cgeoportal_commons.models.main import Metadata

        attributes_order = "name,email,child_id"

        layer_id = self._create_layer(metadatas=[Metadata("editingAttributesOrder", attributes_order)])
        request = self._get_request(layer_id, username="******")

        layers = Layers(request)
        cls = layers.metadata()

        self.assertEqual(attributes_order.split(","), cls.__attributes_order__)
Ejemplo n.º 7
0
def metadatas_test_data(dbsession, transact):
    del transact

    from c2cgeoportal_commons.models.main import \
        LayerWMS, LayerWMTS, LayerV1, OGCServer, Metadata, Theme, LayerGroup

    ogc_server = OGCServer(name='ogc_server')

    layer_wms = LayerWMS(name='layer_wms')
    layer_wms.layer = 'wms_layer'
    layer_wms.ogc_server = ogc_server
    layer_wms.metadatas = [
        Metadata(name, value) for name, value in
        [('_string',
          'ceci est un test'), ('_liste',
                                'valeur1,valeur2'), ('_boolean',
                                                     'true'), ('_int', '1'),
         ('_float',
          '2.5'), ('_url',
                   'https://localhost/test.html'), ('_json',
                                                    '{"key":"value"}'),
         ('_color', '#FFFFFF'), ('_unknown', 'This is a unknown format')]
    ]
    for metadata in layer_wms.metadatas:
        metadata.item = layer_wms
    dbsession.add(layer_wms)

    layer_wmts = LayerWMTS(name='layer_wmts')
    layer_wmts.url = 'https://localhost'
    layer_wmts.layer = 'wmts_layer'
    dbsession.add(layer_wmts)

    layer_v1 = LayerV1(name='layer_v1')
    dbsession.add(layer_v1)

    theme = Theme(name='theme')
    dbsession.add(theme)

    group = LayerGroup(name='groups')
    dbsession.add(group)

    dbsession.flush()

    yield {
        'ogc_server': ogc_server,
        'layer_wms': layer_wms,
        'layer_wmts': layer_wmts,
        'layer_v1': layer_v1,
        'theme': theme,
        'group': group
    }
Ejemplo n.º 8
0
    def test_undefined_metadata(self, metadatas_test_data, test_app):
        """Undefined metadata must be kept intact across submissions"""
        from c2cgeoportal_commons.models.main import Metadata

        layer = metadatas_test_data["layer_wms"]
        layer.metadatas = [
            Metadata("_undefined", "This is an undefined metadata")
        ]

        resp = self.get(test_app, "layers_wms/{}".format(layer.id))
        resp.form.submit("submit", status=302)

        metadata = layer.metadatas[0]
        assert metadata.name == "_undefined"
        assert metadata.value == "This is an undefined metadata"
Ejemplo n.º 9
0
    def test_create_no_validation(self):
        from geojson.feature import FeatureCollection
        from c2cgeoportal_geoportal.views.layers import Layers
        from c2cgeoportal_commons.models.main import Metadata

        metadatas = [Metadata("geometryValidation", "False")]
        layer_id = self._create_layer(metadatas=metadatas, geom_type=False)
        request = self._get_request(layer_id, username="******")
        request.method = "POST"
        request.body = '{"type": "FeatureCollection", "features": [{"type": "Feature", "properties": {"name": "foo", "child": "c1é"}, "geometry": {"type": "Point", "coordinates": [5, 45]}}, {"type": "Feature", "properties": {"text": "foo", "child": "c2é"}, "geometry": {"type": "LineString", "coordinates": [[5, 45], [5, 45]]}}]}'  # noqa
        layers = Layers(request)
        collection = layers.create()
        self.assertEqual(request.response.status_int, 201)
        self.assertTrue(isinstance(collection, FeatureCollection))
        self.assertEqual(len(collection.features), 2)
Ejemplo n.º 10
0
    def test_update_no_validation(self):
        from c2cgeoportal_commons.models.main import Metadata
        from c2cgeoportal_geoportal.views.layers import Layers

        metadatas = [Metadata("geometryValidation", "False")]
        layer_id = self._create_layer(metadatas=metadatas, geom_type=False)
        request = self._get_request(layer_id, username="******")
        request.matchdict["feature_id"] = 1
        request.method = "PUT"
        request.body = '{"type": "Feature", "id": 1, "properties": {"name": "foobar", "child": "c2é"}, "geometry": {"type": "LineString", "coordinates": [[5, 45], [5, 45]]}}'  # noqa
        layers = Layers(request)
        feature = layers.update()
        self.assertEqual(feature.id, 1)
        self.assertEqual(feature.name, "foobar")
        self.assertEqual(feature.child, "c2é")
Ejemplo n.º 11
0
def layer_groups_test_data(dbsession, transact):
    del transact

    from c2cgeoportal_commons.models.main import LayerGroup, Metadata, LayergroupTreeitem

    metadatas_protos = [("copyable", "true"),
                        ("disclaimer", "© le momo"),
                        ("snappingConfig", '{"tolerance": 50}')]

    groups = []
    for i in range(0, 12):
        group = LayerGroup(
            name='groups_{num:02d}'.format(num=i),
            is_expanded=False,
            is_internal_wms=True,
            is_base_layer=False)
        group.metadatas = [Metadata(name=metadatas_protos[id][0],
                                    value=metadatas_protos[id][1])
                           for id in [i % 3, (i + 2) % 3]]
        for metadata in group.metadatas:
            metadata.item = group

        dbsession.add(group)
        groups.append(group)

    tree = {1: {2: {3, 4, 5}, 6: {4, 5}, 8: {7}, 9: {0, 10, 11}}}

    def add_relation(parent_idx, child_idx):
        dbsession.add(LayergroupTreeitem(group=groups[parent_idx],
                                         item=groups[child_idx],
                                         ordering=len(group.children_relation)))

    def flatten_tree(key, value):
        if isinstance(value, set):
            for val in value:
                add_relation(key, val)
        else:
            for val in value.keys():
                add_relation(key, val)
                flatten_tree(val, value[val])

    flatten_tree(1, tree[1])

    dbsession.flush()

    yield {
        "groups": groups
    }
Ejemplo n.º 12
0
def metadatas_test_data(dbsession, transact):
    del transact

    from c2cgeoportal_commons.models.main import LayerWMS, LayerWMTS, OGCServer, Metadata, Theme, LayerGroup

    ogc_server = OGCServer(name="ogc_server")

    layer_wms = LayerWMS(name="layer_wms")
    layer_wms.layer = "wms_layer"
    layer_wms.ogc_server = ogc_server
    layer_wms.metadatas = [
        Metadata(name, value)
        for name, value in [
            ("_string", "ceci est un test"),
            ("_liste", "valeur1,valeur2"),
            ("_boolean", "true"),
            ("_int", "1"),
            ("_float", "2.5"),
            ("_url", "https://localhost/test.html"),
            ("_json", '{"key":"value"}'),
            ("_color", "#FFFFFF"),
            ("_unknown", "This is a unknown format"),
        ]
    ]
    for metadata in layer_wms.metadatas:
        metadata.item = layer_wms
    dbsession.add(layer_wms)

    layer_wmts = LayerWMTS(name="layer_wmts")
    layer_wmts.url = "https://localhost"
    layer_wmts.layer = "wmts_layer"
    dbsession.add(layer_wmts)

    theme = Theme(name="theme")
    dbsession.add(theme)

    group = LayerGroup(name="groups")
    dbsession.add(group)

    dbsession.flush()

    yield {
        "ogc_server": ogc_server,
        "layer_wms": layer_wms,
        "layer_wmts": layer_wmts,
        "theme": theme,
        "group": group,
    }
Ejemplo n.º 13
0
    def test_metadata_editing_enumeration_config(self):
        import json

        from c2cgeoportal_commons.models.main import Metadata
        from c2cgeoportal_geoportal.views.layers import Layers

        editing_enumerations = '{"a_column": {"value": "value_column", "order_by": "order_column"}}'

        metadatas = [Metadata("editingEnumerations", editing_enumerations)]
        layer_id = self._create_layer(metadatas=metadatas)
        request = self._get_request(layer_id, username="******")

        layers = Layers(request)
        cls = layers.metadata()

        self.assertEqual(json.loads(editing_enumerations),
                         cls.__enumerations_config__)
Ejemplo n.º 14
0
def theme_test_data(dbsession, transact):
    del transact

    from c2cgeoportal_commons.models.main import \
        Theme, Role, Functionality, LayergroupTreeitem, \
        Interface, Metadata, LayerGroup, LayerWMS, OGCServer

    interfaces = [
        Interface(name) for name in ['desktop', 'mobile', 'edit', 'routing']
    ]

    groups = [LayerGroup(name='layer_group_{}'.format(i)) for i in range(0, 5)]

    layer = LayerWMS(name='layer_wms')
    layer.ogc_server = OGCServer(name='server')
    dbsession.add(layer)
    layers = [layer]

    functionalities = [
        Functionality(name=name, value='value_{}'.format(v))
        for name in ('default_basemap', 'location') for v in range(0, 4)
    ]

    roles = [Role('secretary_' + str(i)) for i in range(0, 4)]

    metadatas_protos = [('copyable', 'true'), ('disclaimer', '© le momo'),
                        ('snappingConfig', '{"tolerance": 50}')]
    themes = []
    for i in range(0, 25):
        theme = Theme(name='theme_{}'.format(i),
                      ordering=1,
                      icon='icon_{}'.format(i))
        theme.public = 1 == i % 2
        theme.interfaces = [interfaces[i % 4], interfaces[(i + 2) % 4]]
        theme.metadatas = [
            Metadata(name=metadatas_protos[id][0],
                     value=metadatas_protos[id][1])
            for id in [i % 3, (i + 2) % 3]
        ]
        for metadata in theme.metadatas:
            metadata.item = theme
        theme.functionalities = [
            functionalities[i % 8], functionalities[(i + 3) % 8]
        ]
        theme.restricted_roles = [roles[i % 4], roles[(i + 2) % 4]]

        dbsession.add(
            LayergroupTreeitem(group=theme,
                               item=groups[i % 5],
                               ordering=len(groups[i % 5].children_relation)))
        dbsession.add(
            LayergroupTreeitem(group=theme,
                               item=groups[(i + 3) % 5],
                               ordering=len(groups[(i + 3) %
                                                   5].children_relation)))

        dbsession.add(theme)
        themes.append(theme)

    dbsession.flush()

    yield {
        'themes': themes,
        'interfaces': interfaces,
        'groups': groups,
        'layers': layers,
        'functionalities': functionalities,
        'roles': roles,
    }
Ejemplo n.º 15
0
def factory_build_layers(layer_builder, dbsession, add_dimension=True):
    from c2cgeoportal_commons.models.main import (
        Dimension,
        Interface,
        LayerGroup,
        LayergroupTreeitem,
        Metadata,
        RestrictionArea,
    )

    restrictionareas = [
        RestrictionArea(name=f"restrictionarea_{i}") for i in range(0, 5)
    ]

    interfaces = [
        Interface(name) for name in ["desktop", "mobile", "edit", "routing"]
    ]

    dimensions_protos = [("Date", "2017"), ("Date", "2018"), ("Date", "1988"),
                         ("CLC", "all")]

    metadatas_protos = [
        ("copyable", "true"),
        ("disclaimer", "© le momo"),
        ("snappingConfig", '{"tolerance": 50}'),
    ]

    groups = [LayerGroup(name=f"layer_group_{i}") for i in range(0, 5)]

    layers = []
    for i in range(0, 25):

        layer = layer_builder(i)

        if add_dimension:
            layer.dimensions = [
                Dimension(name=dimensions_protos[id][0],
                          value=dimensions_protos[id][1],
                          layer=layer)
                for id in [i % 3, (i + 2) % 4, (i + 3) % 4]
            ]

        layer.metadatas = [
            Metadata(name=metadatas_protos[id][0],
                     value=metadatas_protos[id][1])
            for id in [i % 3, (i + 2) % 3]
        ]
        for metadata in layer.metadatas:
            metadata.item = layer

        if i % 10 != 1:
            layer.interfaces = [interfaces[i % 4], interfaces[(i + 2) % 4]]

        layer.restrictionareas = [
            restrictionareas[i % 5], restrictionareas[(i + 2) % 5]
        ]

        dbsession.add(
            LayergroupTreeitem(group=groups[i % 5],
                               item=layer,
                               ordering=len(groups[i % 5].children_relation)))
        dbsession.add(
            LayergroupTreeitem(group=groups[(i + 3) % 5],
                               item=layer,
                               ordering=len(groups[(i + 3) %
                                                   5].children_relation)))

        dbsession.add(layer)
        layers.append(layer)
    return {
        "restrictionareas": restrictionareas,
        "layers": layers,
        "interfaces": interfaces
    }
    def setup_method(self, _):
        # Always see the diff
        # https://docs.python.org/2/library/unittest.html#unittest.TestCase.maxDiff
        self.maxDiff = None

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Theme, LayerGroup, Interface, LayerWMS, Metadata

        desktop = Interface(name="desktop")

        ogc_server_internal = create_default_ogcserver()

        layer_wms = LayerWMS(name="__test_layer_internal_wms", public=True)
        layer_wms.layer = "__test_layer_internal_wms"
        layer_wms.ogc_server = ogc_server_internal
        layer_wms.interfaces = [desktop]
        layer_wms.metadatas = [
            Metadata("string", "string"),
            Metadata("list", "1, 2, a"),
            Metadata("boolean", "y"),
            Metadata("boolean2", "no"),
            Metadata("boolean3", "Hello"),
            Metadata("integer", "1"),
            Metadata("float", "5.5"),
            Metadata("json", '{"test": 123}'),
            Metadata("json_wrong", '{"test": 123'),
            Metadata("date", "Sep 25 2003"),
            Metadata("time", "10:36:28"),
            Metadata("datetime", "Sep 25 10:36:28 BRST 2003"),
            Metadata("date2", "Sep 25 10:36:28 BRST 2003"),
            Metadata("time2", "Sep 25 10:36:28 BRST 2003"),
            Metadata("datetime2", "Hello"),
            Metadata("url1", "http://example.com/hi?a=b#c"),
            Metadata("url2", "static:///path/icon.png"),
            Metadata("url3", "static://static/path/icon.png"),
            Metadata("url4", "static://cgxp/path/icon.png"),
            Metadata("url5", "static://project:static/path/icon.png"),
            Metadata("url6", "static://project:cgxp/path/icon.png"),
            Metadata("url7", "config://server"),
            Metadata("url8", "config://server/index.html"),
            Metadata("url9", "/dummy/static/icon.png"),
            Metadata("url10", "dummy/static/icon.png"),
            Metadata("url11", "https:///static/icon.png"),
            Metadata("url12", "static://test"),
            Metadata("url13", "static://test/"),
            Metadata("url14", "config:///static/icon.png"),
            Metadata("url15", "config://unknown_server"),
            Metadata("url16", "https://"),
            Metadata("url17", "https:///"),
            Metadata("url18", "https:///static"),
            Metadata("url19", ""),
            Metadata("url20", "/"),
            Metadata("unknown", "Hello"),
        ]

        layer_group = LayerGroup(name="__test_layer_group")
        layer_group.children = [layer_wms]

        theme = Theme(name="__test_theme")
        theme.interfaces = [desktop]
        theme.children = [layer_group]

        DBSession.add(theme)

        transaction.commit()
Ejemplo n.º 17
0
def theme_test_data(dbsession, transact):
    del transact

    from c2cgeoportal_commons.models.main import (
        Functionality,
        Interface,
        LayerGroup,
        LayergroupTreeitem,
        LayerWMS,
        Metadata,
        OGCServer,
        Role,
        Theme,
    )

    interfaces = [
        Interface(name) for name in ["desktop", "mobile", "edit", "routing"]
    ]

    groups = [LayerGroup(name="layer_group_{}".format(i)) for i in range(0, 5)]

    layer = LayerWMS(name="layer_wms")
    layer.ogc_server = OGCServer(name="server")
    dbsession.add(layer)
    layers = [layer]

    functionalities = [
        Functionality(name=name, value="value_{}".format(v))
        for name in ("default_basemap", "location") for v in range(0, 4)
    ]

    roles = [Role("secretary_" + str(i)) for i in range(0, 4)]

    metadatas_protos = [
        ("copyable", "true"),
        ("disclaimer", "© le momo"),
        ("snappingConfig", '{"tolerance": 50}'),
    ]
    themes = []
    for i in range(0, 25):
        theme = Theme(name="theme_{}".format(i),
                      ordering=1,
                      icon="icon_{}".format(i))
        theme.public = 1 == i % 2
        theme.interfaces = [interfaces[i % 4], interfaces[(i + 2) % 4]]
        theme.metadatas = [
            Metadata(name=metadatas_protos[id][0],
                     value=metadatas_protos[id][1])
            for id in [i % 3, (i + 2) % 3]
        ]
        for metadata in theme.metadatas:
            metadata.item = theme
        theme.functionalities = [
            functionalities[i % 8], functionalities[(i + 3) % 8]
        ]
        theme.restricted_roles = [roles[i % 4], roles[(i + 2) % 4]]

        dbsession.add(
            LayergroupTreeitem(group=theme,
                               item=groups[i % 5],
                               ordering=len(groups[i % 5].children_relation)))
        dbsession.add(
            LayergroupTreeitem(group=theme,
                               item=groups[(i + 3) % 5],
                               ordering=len(groups[(i + 3) %
                                                   5].children_relation)))

        dbsession.add(theme)
        themes.append(theme)

    dbsession.flush()

    yield {
        "themes": themes,
        "interfaces": interfaces,
        "groups": groups,
        "layers": layers,
        "functionalities": functionalities,
        "roles": roles,
    }
Ejemplo n.º 18
0
    def setup_method(self, _):
        # Always see the diff
        # https://docs.python.org/2/library/unittest.html#unittest.TestCase.maxDiff
        self.maxDiff = None

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import \
            Theme, LayerGroup, Functionality, Interface, OGCServer, LayerWMS, LayerWMTS, \
            Metadata, Dimension, OGCSERVER_AUTH_NOAUTH

        main = Interface(name="desktop")
        mobile = Interface(name="mobile")
        min_levels = Interface(name="min_levels")

        ogc_server_internal, _ = create_default_ogcserver()
        ogc_server_external = OGCServer(name="__test_ogc_server_chtopo",
                                        url="http://wms.geo.admin.ch/",
                                        image_type="image/jpeg",
                                        auth=OGCSERVER_AUTH_NOAUTH)
        ogc_server_external.wfs_support = False

        layer_internal_wms = LayerWMS(name="__test_layer_internal_wms",
                                      public=True)
        layer_internal_wms.layer = "__test_layer_internal_wms"
        layer_internal_wms.interfaces = [main, min_levels]
        layer_internal_wms.metadatas = [Metadata("test", "internal_wms")]
        layer_internal_wms.ogc_server = ogc_server_internal

        layer_external_wms = LayerWMS(name="__test_layer_external_wms",
                                      layer="ch.swisstopo.dreiecksvermaschung",
                                      public=True)
        layer_external_wms.interfaces = [main]
        layer_external_wms.metadatas = [Metadata("test", "external_wms")]
        layer_external_wms.ogc_server = ogc_server_external

        layer_wmts = LayerWMTS(name="__test_layer_wmts", public=True)
        layer_wmts.url = "http://example.com/1.0.0/WMTSCapabilities.xml"
        layer_wmts.layer = "map"
        layer_wmts.interfaces = [main, mobile]
        layer_wmts.metadatas = [Metadata("test", "wmts")]
        layer_wmts.dimensions = [Dimension("year", "2015")]

        layer_group_1 = LayerGroup(name="__test_layer_group_1")
        layer_group_1.children = [
            layer_internal_wms, layer_external_wms, layer_wmts
        ]
        layer_group_1.metadatas = [Metadata("test", "group_1")]

        layer_group_2 = LayerGroup(name="__test_layer_group_2")
        layer_group_2.children = [
            layer_wmts, layer_internal_wms, layer_external_wms
        ]

        layer_group_3 = LayerGroup(name="__test_layer_group_3")
        layer_group_3.children = [
            layer_wmts, layer_internal_wms, layer_external_wms
        ]

        layer_group_4 = LayerGroup(name="__test_layer_group_4")
        layer_group_4.children = [layer_group_2]

        theme = Theme(name="__test_theme")
        theme.interfaces = [main, mobile]
        theme.metadatas = [Metadata("test", "theme")]
        theme.children = [layer_group_1, layer_group_2]
        theme_layer = Theme(name="__test_theme_layer")
        theme_layer.interfaces = [min_levels]
        theme_layer.children = [layer_internal_wms]

        functionality1 = Functionality(name="test_name", value="test_value_1")
        functionality2 = Functionality(name="test_name", value="test_value_2")
        theme.functionalities = [functionality1, functionality2]

        DBSession.add_all([theme, theme_layer])

        transaction.commit()
    def test_themes_edit_columns_extras(self):
        from c2cgeoportal_geoportal.views.theme import Theme
        from c2cgeoportal_commons.models.main import Metadata

        metadatas = [
            Metadata("lastUpdateDateColumn", "last_update_date"),
            Metadata("lastUpdateUserColumn", "last_update_user"),
        ]
        layer_id = self._create_layer(geom_type=False,
                                      exclude_properties=True,
                                      metadatas=metadatas)
        theme_view = Theme(
            self._get_request(layer_id,
                              username="******",
                              params={"interface": "main"}))

        themes = theme_view.themes()
        layers = themes["themes"][0]["children"][0]["children"]

        self.assertEqual(
            [layer["edit_columns"] for layer in layers],
            [[
                {
                    "nillable": True,
                    "type": "xsd:integer",
                    "name": "child_id"
                },
                {
                    "nillable": True,
                    "type": "xsd:boolean",
                    "name": "deleted"
                },
                {
                    "nillable": True,
                    "type": "xsd:date",
                    "name": "date"
                },
                {
                    "nillable": True,
                    "type": "xsd:time",
                    "name": "start_time"
                    # }, {
                    #     "nillable": True,
                    #     "type": "xsd:duration",
                    #     "name": "interval"
                },
                {
                    "nillable": True,
                    "type": "xsd:string",
                    "name": "short_name1"
                },
                {
                    "nillable": True,
                    "type": "xsd:string",
                    "name": "short_name2",
                    "maxLength": 50
                },
                {
                    "nillable": True,
                    "type": "xsd:integer",
                    "name": "short_number"
                },
                {
                    "nillable": True,
                    "type": "xsd:double",
                    "name": "double_number"
                },
                {
                    "nillable": True,
                    "type": "xsd:base64Binary",
                    "name": "large_binary"
                },
                {
                    "enumeration": ["one", "two", "three"],
                    "type": "xsd:string",
                    "name": "value",
                    "nillable": True,
                    "restriction": "enumeration",
                },
                {
                    "fractionDigits": 2,
                    "nillable": True,
                    "type": "xsd:decimal",
                    "name": "numeric",
                    "totalDigits": 5,
                },
                {
                    "name": "numeric2",
                    "type": "xsd:decimal",
                    "nillable": True
                },
                {
                    "srid": 21781,
                    "nillable": True,
                    "type": "gml:GeometryPropertyType",
                    "name": "geom"
                },
                {
                    "restriction": "enumeration",
                    "nillable": True,
                    "type": "xsd:string",
                    "name": "child",
                    "enumeration": ["c1\xe9", "c2\xe9"],
                },
            ]],
        )
Ejemplo n.º 20
0
def new_metadata(name, value, item):
    from c2cgeoportal_commons.models.main import Metadata

    metadata = Metadata(name, value)
    metadata.item = item
    return metadata