def test_extract_layer_wmts(self, dbsession, transact):
        from c2cgeoportal_commons.models import main

        del transact

        ogc_server = main.OGCServer(name="mapserver",
                                    url="http://mapserver:8080")
        layer_wmts = main.LayerWMTS(name="layer_wmts")
        layer_wmts.url = "https://example.com"
        layer_wmts.layer = "mylayer"
        layer_wmts.metadatas = [
            main.Metadata("ogcServer", "mapserver"),
            main.Metadata("queryLayers", "testpoint_protected"),
        ]
        dbsession.add_all([ogc_server, layer_wmts])
        dbsession.flush()

        messages = self.extract()

        assert {m.msgid
                for m in messages} == {
                    "layer_wmts",
                    "testpoint_protected",
                    "city",
                    "country",
                    "name",
                }
Ejemplo n.º 2
0
    def test_search_alias(self, dbsession, settings, test_data):
        from c2cgeoportal_commons.models import main
        from c2cgeoportal_geoportal.scripts.theme2fts import Import

        alias_layer = main.LayerWMS(name="alias_layer")
        alias_layer.ogc_server = test_data["ogc_server"]
        alias_layer.interfaces = list(test_data["interfaces"].values())
        add_parent(dbsession, alias_layer,
                   test_data["groups"]["first_level_group"])
        alias_layer.metadatas = [
            main.Metadata(name="searchAlias", value="myalias,mykeyword"),
            main.Metadata(name="searchAlias",
                          value="myotheralias,myotherkeyword"),
        ]
        dbsession.add(alias_layer)
        dbsession.flush()

        Import(dbsession, settings, options())

        for lang in settings["available_locale_names"]:
            for interface in test_data["interfaces"].values():
                if interface.name == "api":
                    continue
                expected = [
                    {
                        "label":
                        f"alias_layer_{lang}",
                        "role":
                        None,
                        "interface":
                        interface,
                        "lang":
                        lang,
                        "public":
                        True,
                        "ts": {
                            "fr":
                            "'ali':1 'fr':3 'lai':2 'myali':4 'mykeyword':5 'myotherali':6 'myotherkeyword':7",
                            "en":
                            "'alia':1 'en':3 'layer':2 'myalia':4 'mykeyword':5 'myotheralia':6 'myotherkeyword':7",
                            "de":
                            "'alias':1 'de':3 'lay':2 'myalias':4 'mykeyword':5 'myotheralias':6 'myotherkeyword':7",
                            "it":
                            "'alias':1 'it':3 'layer':2 'myalias':4 'mykeyword':5 'myotheralias':6 'myotherkeyword':7",
                        },
                        "actions": [{
                            "action": "add_layer",
                            "data": "alias_layer"
                        }],
                    },
                ]
                for e in expected:
                    self.assert_fts(dbsession, e)
Ejemplo n.º 3
0
    def test_get_layer_wms_defaut(self, web_request, dbsession):
        """We should copy properties from default LayerWMS"""
        from c2cgeoportal_commons.models import main

        synchronizer = self.synchronizer(web_request)

        default_wms = main.LayerWMS()
        default_wms.description = "Default description"
        default_wms.metadatas = [main.Metadata(name="isExpanded", value="True")]
        default_wms.exclude_properties = "excluded_property"
        default_wms.interfaces = [main.Interface("interface")]
        default_wms.dimensions = [
            main.Dimension(name="dim", value=None, field="dim", description="description")
        ]
        default_wms.style = "default_style"

        el = etree.fromstring(
            """
<Layer>
    <Name>layer1</Name>
    <Style>
        <Name>default_style</Name>
        <Title>default_style</Title>
    </Style>
</Layer>
"""
        )

        with patch.object(synchronizer, "_default_wms", default_wms):
            layer = synchronizer.get_layer_wms(el, None)

            assert layer.description == "Default description"
            assert len(layer.metadatas) == 1
            assert layer.metadatas[0].name == "isExpanded"
            assert layer.metadatas[0].value == "True"
            assert layer.exclude_properties == "excluded_property"
            assert len(layer.interfaces) == 1
            assert layer.interfaces[0].name == "interface"
            assert len(layer.dimensions) == 1
            assert layer.dimensions[0].name == "dim"
            assert layer.dimensions[0].value is None
            assert layer.dimensions[0].field == "dim"
            assert layer.dimensions[0].description == "description"
            assert layer.style == "default_style"
def test_data(dbsession, transact):
    from sqlalchemy import text

    from c2cgeoportal_commons.models import main

    dbsession.execute(
        text("""
INSERT INTO geodata.testpoint (name)
VALUES ('testpoint_name1');
"""))

    theme = main.Theme(name="test_theme")
    theme.metadatas = [
        main.Metadata(
            name="metadata1",
            value="metadata1_value",
        )
    ]
    dbsession.add(theme)
    dbsession.flush()
    def get_layer_wms(self, el: Element, parent: Optional[main.TreeGroup] = None) -> main.LayerWMS:
        name_el = el.find("Name")
        assert name_el is not None
        name = name_el.text

        layer = cast(
            Optional[main.LayerWMS],
            self._request.dbsession.query(main.LayerWMS).filter(main.LayerWMS.name == name).one_or_none(),
        )

        if layer is None:
            layer = main.LayerWMS()

            # TreeItem
            layer.name = name
            layer.description = self._default_wms.description
            layer.metadatas = [main.Metadata(name=m.name, value=m.value) for m in self._default_wms.metadatas]

            # Layer
            layer.public = False
            layer.geo_table = None
            layer.exclude_properties = self._default_wms.exclude_properties
            layer.interfaces = list(self._default_wms.interfaces) or self._interfaces

            # DimensionLayer
            layer.dimensions = [
                main.Dimension(
                    name=d.name,
                    value=d.value,
                    field=d.field,
                    description=d.description,
                )
                for d in self._default_wms.dimensions
            ]

            # LayerWMS
            layer.ogc_server = self._ogc_server
            layer.layer = name
            layer.style = (
                self._default_wms.style
                if el.find(f"./Style/Name[.='{self._default_wms.style}']") is not None
                else None
            )
            # layer.time_mode =
            # layer.time_widget =

            self._request.dbsession.add(layer)
            if not isinstance(parent, main.LayerGroup):
                self._logger.info("Layer %s added as new layer with no parent", name)
            else:
                layer.parents_relation.append(main.LayergroupTreeitem(group=parent))
                self._logger.info("Layer %s added as new layer in group %s", name, parent.name)
            self._layers_added += 1

        else:
            self._items_found += 1
            if layer.ogc_server is not self._ogc_server:
                self._logger.info(
                    "Layer %s: another layer already exists with the same name in OGC server %s",
                    name,
                    self._ogc_server.name,
                )

            parents = [parent] if isinstance(parent, main.LayerGroup) else []
            if self._force_parents and layer.parents != parents:
                layer.parents_relation = [main.LayergroupTreeitem(group=parent) for parent in parents]
                self._logger.info("Layer %s moved to %s", name, parent.name if parent else "root")

        return layer