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 main = Interface(name="desktop") ogc_server, _ = create_default_ogcserver() layer_wms = LayerWMS(name="__test_layer_wms", public=True) layer_wms.layer = "testpoint_unprotected" layer_wms.interfaces = [main] layer_wms.ogc_server = ogc_server layer_group = LayerGroup(name="__test_layer_group") layer_group.children = [layer_wms] theme = Theme(name="__test/theme") theme.interfaces = [main] theme.children = [ layer_group ] DBSession.add(theme) transaction.commit()
def test_theme(self): from c2cgeoportal_commons.models import DBSession from c2cgeoportal_commons.models.static import User from c2cgeoportal_geoportal.views.theme import Theme request = self._create_request_obj() theme_view = Theme(request) # unautenticated themes, errors = theme_view._themes() assert {e[:90] for e in errors} == set() assert len(themes) == 1 groups = {g["name"] for g in themes[0]["children"]} assert groups == {"__test_layer_group"} layers = {l["name"] for l in themes[0]["children"][0]["children"]} assert layers == {"__test_public_layer"} # authenticated request.params = {} request.user = DBSession.query(User).filter_by(username="******").one() themes, errors = theme_view._themes() assert {e[:90] for e in errors} == set() assert len(themes) == 1 groups = {g["name"] for g in themes[0]["children"]} assert groups == {"__test_layer_group"} layers = {l["name"] for l in themes[0]["children"][0]["children"]} assert layers == {"__test_private_layer_edit", "__test_public_layer", "__test_private_layer"}
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 main = Interface(name="desktop") ogc_server = create_default_ogcserver() layer_wms = LayerWMS(name="__test_layer_wms", public=True) layer_wms.layer = "testpoint_unprotected" layer_wms.interfaces = [main] layer_wms.ogc_server = ogc_server layer_group = LayerGroup(name="__test_layer_group") layer_group.children = [layer_wms] theme = Theme(name="__test/theme") theme.interfaces = [main] theme.children = [layer_group] DBSession.add(theme) transaction.commit()
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()
def test_error(self): from c2cgeoportal_geoportal.views.theme import Theme theme_view = Theme(self._create_request_obj(params={"version": "2"})) themes = theme_view.themes() self.assertEqual( set(themes["errors"]), set(["The theme has an unsupported name '__test/theme'."]))
def test_themev2_noauth_edit_permission(self): from c2cgeoportal_geoportal.views.theme import Theme request = self._create_request_obj() request.params = {"interface": "main"} theme_view = Theme(request) themes = theme_view.themes() self.assertEqual(set(themes["errors"]), set()) self.assertEqual([t["name"] for t in themes["themes"]], [])
def setUp(self): # noqa # Always see the diff # https://docs.python.org/2/library/unittest.html#unittest.TestCase.maxDiff self.maxDiff = None self.clean() from c2cgeoportal_commons.models import DBSession from c2cgeoportal_commons.models.static import User from c2cgeoportal_commons.models.main import \ Theme, LayerGroup, Interface, LayerWMS, LayerWMTS, Role, RestrictionArea main = Interface(name=u"desktop") role = Role(name=u"__test_role") user = User(username=u"__test_user", password=u"__test_user", role=role) user.email = "*****@*****.**" ogc_server_internal, _ = create_default_ogcserver() layer_wms = LayerWMS(name=u"__test_layer_wms", public=True) layer_wms.layer = "__test_public_layer" layer_wms.interfaces = [main] layer_wms.ogc_server = ogc_server_internal layer_wms_private = LayerWMS(name=u"__test_layer_wms_private", public=True) layer_wms_private.layer = "__test_private_layer" layer_wms_private.public = False layer_wms_private.interfaces = [main] layer_wms_private.ogc_server = ogc_server_internal layer_wmts = LayerWMTS(name=u"__test_layer_wmts", public=True) layer_wmts.url = "http://example.com/1.0.0/WMTSCapabilities.xml" layer_wmts.layer = "map" layer_wmts.interfaces = [main] layer_wmts_private = LayerWMTS(name=u"__test_layer_wmts_private", public=True) layer_wmts_private.url = "http://example.com/1.0.0/WMTSCapabilities.xml" layer_wmts_private.layer = "map" layer_wmts_private.public = False layer_wmts_private.interfaces = [main] layer_group = LayerGroup(name=u"__test_layer_group") layer_group.children = [layer_wms, layer_wms_private, layer_wmts, layer_wmts_private] theme = Theme(name=u"__test_theme") theme.interfaces = [main] theme.children = [layer_group] restriction_area = RestrictionArea( name=u"__test_ra1", layers=[layer_wms_private, layer_wmts_private], roles=[role] ) DBSession.add_all([theme, restriction_area, user]) transaction.commit()
def test_theme_geoserver(self): from c2cgeoportal_geoportal.views.theme import Theme request = self._create_request_obj() theme_view = Theme(request) # unautenticated v1 themes, errors = theme_view._themes("interface_geoserver") assert {e[:90] for e in errors} == set() assert len(themes) == 1 layers = {l["name"] for l in themes[0]["children"][0]["children"]} assert layers == {"__test_public_layer_geoserver"}
def test_theme(self): from c2cgeoportal_geoportal.views.theme import Theme request = DummyRequest() request.static_url = lambda url: "http://example.com/dummy/static/url" request.route_url = lambda url, _query={}: mapserv_url request.user = None theme_view = Theme(request) _, errors = theme_view._themes("desktop2", True, 2) self.assertEqual( len([e for e in errors if e == "Too many recursions with group '__test_layer_group'"]), 1 )
def main(): parser = argparse.ArgumentParser( description="Create and populate the database tables.") parser.add_argument('-i', '--iniconfig', default='production.ini', help='project .ini config file') parser.add_argument( '-n', '--app-name', default="app", help='The application name (optional, default is "app")') options = parser.parse_args() # read the configuration env = {} env.update(os.environ) env["LOG_LEVEL"] = "INFO" env["GUNICORN_ACCESS_LOG_LEVEL"] = "INFO" env["C2CGEOPORTAL_LOG_LEVEL"] = "WARN" fileConfig(options.iniconfig, defaults=env) get_app(options.iniconfig, options.app_name, options=env) from c2cgeoportal_commons.models import DBSession from c2cgeoportal_commons.models.main import Interface, OGCServer, Theme, LayerGroup, LayerWMS session = DBSession() interfaces = session.query(Interface).all() ogc_server = session.query(OGCServer).filter( OGCServer.name == "source for image/png").one() layer_borders = LayerWMS("Borders", "borders") layer_borders.interfaces = interfaces layer_borders.ogc_server = ogc_server layer_density = LayerWMS("Density", "density") layer_density.interfaces = interfaces layer_density.ogc_server = ogc_server group = LayerGroup("Demo") group.children = [layer_borders, layer_density] theme = Theme("Demo") theme.children = [group] theme.interfaces = interfaces session.add(theme) transaction.commit() print("Successfully added the demo theme")
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 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()
def test_no_layers(self): # mapfile error from c2cgeoportal_geoportal.views.theme import Theme request = self._create_request_obj() theme_view = Theme(request) request.params = {} invalidate_region() themes, errors = theme_view._themes("interface_no_layers") assert themes == [] assert {e[:90] for e in errors} == { "The layer '__test_public_layer_no_layers' do not have any layers" }
def test_themev2_auth_no_edit_permission(self): from c2cgeoportal_geoportal.views.theme import Theme request = self._create_request_obj(username="******") request.params = {"interface": "main"} theme_view = Theme(request) themes = theme_view.themes() self.assertEqual(set(themes["errors"]), set()) self.assertEqual([t["name"] for t in themes["themes"]], ["__test_theme"]) self.assertEqual([c["name"] for c in themes["themes"][0]["children"]], ["__test_layer_group"]) layers = themes["themes"][0]["children"][0]["children"] self.assertEqual([l["name"] for l in layers], ["__test_private_layer"]) self.assertEqual("editable" in layers[0], False)
def test_notmapfile(self): # mapfile error from c2cgeoportal_geoportal.views.theme import Theme theme_view = Theme(self._create_request_obj()) invalidate_region() themes, errors = theme_view._themes("interface_notmapfile") assert len(themes) == 0 assert { e[:90] for e in errors } == { "GetCapabilities from URL http://mapserver:8080/?map=not_a_mapfile&SERVICE=WMS&VERSION=1.1.", }
def test_not_in_mapfile(self): # mapfile error from c2cgeoportal_geoportal.views.theme import Theme theme_view = Theme(self._create_request_obj()) invalidate_region() themes, errors = theme_view._themes("interface_not_in_mapfile") assert len(themes) == 0 assert { e[:90] for e in errors } == { "The layer '__test_public_layer_not_in_mapfile' (__test_public_layer_not_in_mapfile) is not" }
def setup_method(self, _): # Always see the diff # https://docs.python.org/2/library/unittest.html#unittest.TestCase.maxDiff self.maxDiff = None setup_db() self._tables = [] import transaction from c2cgeoportal_commons.models import DBSession from c2cgeoportal_commons.models.main import ( OGCSERVER_AUTH_NOAUTH, Interface, LayerGroup, Role, Theme, TreeItem, ) from c2cgeoportal_commons.models.static import User for treeitem in DBSession.query(TreeItem).all(): DBSession.delete(treeitem) self.role = Role(name="__test_role") self.user = User(username="******", password="******", settings_role=self.role, roles=[self.role]) self.main = Interface(name="main") self.ogc_server = create_default_ogcserver() self.ogc_server.auth = OGCSERVER_AUTH_NOAUTH self.metadata = None self.layer_ids = [] self.layer_group_1 = LayerGroup(name="__test_layer_group_1") theme = Theme(name="__test_theme") theme.interfaces = [self.main] theme.children = [self.layer_group_1] DBSession.add_all( [self.main, self.user, self.role, theme, self.layer_group_1]) transaction.commit()
def test_not_in_mapfile(self): # mapfile error from c2cgeoportal_geoportal.views.theme import Theme theme_view = Theme(self._create_request_obj()) invalidate_region() themes, errors = theme_view._themes("interface_not_in_mapfile") assert len(themes) == 1 groups = {g["name"] for g in themes[0]["children"]} assert groups == {"__test_layer_group"} layers = {l["name"] for l in themes[0]["children"][0]["children"]} assert layers == {"__test_public_layer_not_in_mapfile"} assert {e[:90] for e in errors} == { "The layer '__test_public_layer_not_in_mapfile' (__test_public_layer_not_in_mapfile) is not" }
def test_notmapfile(self): # mapfile error from c2cgeoportal_geoportal.views.theme import Theme theme_view = Theme(self._create_request_obj()) invalidate_region() themes, errors = theme_view._themes("interface_notmapfile") assert len(themes) == 1 groups = {g["name"] for g in themes[0]["children"]} assert groups == {"__test_layer_group"} layers = {l["name"] for l in themes[0]["children"][0]["children"]} assert layers == {"__test_public_layer_notmapfile"} assert {e[:90] for e in errors} == { "GetCapabilities from URL http://mapserver:8080/?map=not_a_mapfile&SERVICE=WMS&VERSION=1.1.", }
def interface_test_data(dbsession, transact): del transact from c2cgeoportal_commons.models.main import Interface, LayerWMS, OGCServer, Theme themes = [] for i in range(0, 5): theme = Theme(name=f"theme_{i}", ordering=1) themes.append(theme) servers = [OGCServer(name=f"server_{i}") for i in range(0, 4)] layers = [] for i in range(0, 15): layer = LayerWMS(name=f"layer_wms_{i}") layer.public = 1 == i % 2 layer.ogc_server = servers[i % 4] dbsession.add(layer) layers.append(layer) interfaces = [] for i in range(0, 5): interface = Interface(name=f"interface_{i}", description=f"description_{i}") interface.themes = [themes[i % 2], themes[(i + 5) % 5]] interface.layers = [layers[i % 2], layers[(i + 4) % 5]] dbsession.add(interface) interfaces.append(interface) dbsession.flush() yield {"interfaces": interfaces}
def main(): parser = argparse.ArgumentParser( description="Create and populate the database tables." ) parser.add_argument( '-i', '--iniconfig', default='geoportal/production.ini', help='project .ini config file' ) parser.add_argument( '-n', '--app-name', default="app", help='The application name (optional, default is "app")' ) options = parser.parse_args() # read the configuration fileConfig(options.iniconfig, defaults=os.environ) get_app(options.iniconfig, options.app_name, options=os.environ) from c2cgeoportal_commons.models import DBSession from c2cgeoportal_commons.models.main import Interface, OGCServer, Theme, LayerGroup, LayerWMS session = DBSession() interfaces = session.query(Interface).all() ogc_server = session.query(OGCServer).filter(OGCServer.name == "source for image/png").one() layer_borders = LayerWMS("Borders", "borders") layer_borders.interfaces = interfaces layer_borders.ogc_server = ogc_server layer_density = LayerWMS("Density", "density") layer_density.interfaces = interfaces layer_density.ogc_server = ogc_server group = LayerGroup("Demo") group.children = [layer_borders, layer_density] theme = Theme("Demo") theme.children = [group] theme.interfaces = interfaces session.add(theme) transaction.commit()
def setup_method(self, _): # Always see the diff # https://docs.python.org/2/library/unittest.html#unittest.TestCase.maxDiff self.maxDiff = None cleanup_db() self._tables = [] import transaction from c2cgeoportal_commons.models import DBSession from c2cgeoportal_commons.models.main import Role, Interface, TreeItem, Theme, \ LayerGroup, OGCSERVER_AUTH_NOAUTH from c2cgeoportal_commons.models.static import User for treeitem in DBSession.query(TreeItem).all(): DBSession.delete(treeitem) self.role = Role(name="__test_role") self.user = User( username="******", password="******", role=self.role ) self.main = Interface(name="main") self.ogc_server, external_ogc_server = create_default_ogcserver() self.ogc_server.auth = OGCSERVER_AUTH_NOAUTH external_ogc_server.auth = OGCSERVER_AUTH_NOAUTH self.metadata = None self.layer_ids = [] self.layer_group_1 = LayerGroup(name="__test_layer_group_1") theme = Theme(name="__test_theme") theme.interfaces = [self.main] theme.children = [self.layer_group_1] DBSession.add_all([self.main, self.user, self.role, theme, self.layer_group_1]) transaction.commit()
def _create_theme_obj(self, **kwargs): from c2cgeoportal_geoportal.views.theme import Theme kwargs["additional_settings"] = { "admin_interface": { "available_metadata": [{ "name": "test" }] } } return Theme(self._create_request_obj(**kwargs))
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, Theme main = Interface(name="desktop") ogc_server = create_default_ogcserver() layer_wms_1 = LayerWMS(name="__test_layer_wms_1", public=True) layer_wms_1.layer = "testpoint_unprotected" layer_wms_1.interfaces = [main] layer_wms_1.ogc_server = ogc_server layer_wms_2 = LayerWMS(name="__test_layer_wms_2", public=True) layer_wms_2.layer = "testpoint_substitution" layer_wms_2.interfaces = [main] layer_wms_2.ogc_server = ogc_server layer_wms_3 = LayerWMS(name="__test_layer_wms_3", public=True) layer_wms_3.layer = "testpoint_unprotected,testpoint_substitution" layer_wms_3.interfaces = [main] layer_wms_3.ogc_server = ogc_server layer_group_1 = LayerGroup(name="__test_layer_group_1") layer_group_1.children = [layer_wms_1, layer_wms_2] layer_group_2 = LayerGroup(name="__test_layer_group_2") layer_group_2.children = [layer_wms_1, layer_wms_3] theme = Theme(name="__test_theme") theme.interfaces = [main] theme.children = [layer_group_1, layer_group_2] DBSession.add(theme) transaction.commit()
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 }
def themes_ordering_test_data(dbsession, transact): del transact from c2cgeoportal_commons.models.main import Theme themes = [] for i in range(0, 25): theme = Theme(name="theme_{}".format(i), ordering=100) dbsession.add(theme) themes.append(theme) dbsession.flush() yield {"themes": themes}
def main(): parser = argparse.ArgumentParser( description="Create and populate the database tables." ) fill_arguments(parser) options = parser.parse_args() settings = get_appsettings(options) with transaction.manager: session = get_session(settings, transaction.manager) from c2cgeoportal_commons.models.main import Interface, OGCServer, Theme, LayerGroup, LayerWMS interfaces = session.query(Interface) \ .filter(Interface.name != 'api') \ .filter(Interface.name != 'iframe_api') \ .all() ogc_server = session.query(OGCServer).filter(OGCServer.name == "source for image/png").one() layer_borders = LayerWMS("Borders", "borders") layer_borders.interfaces = interfaces layer_borders.ogc_server = ogc_server layer_density = LayerWMS("Density", "density") layer_density.interfaces = interfaces layer_density.ogc_server = ogc_server group = LayerGroup("Demo") group.children = [layer_borders, layer_density] theme = Theme("Demo") theme.children = [group] theme.interfaces = interfaces session.add(theme) print("Successfully added the demo theme")
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, }
def theme_test_data(dbsession, transact): del transact from c2cgeoportal_commons.models.main import Theme themes = [] for i in range(0, 3): theme = Theme(name=f"theme_{i}", ordering=i, icon=f"icon_{i}") dbsession.add(theme) themes.append(theme) dbsession.flush() yield { "themes": themes, }
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, }
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 ( Dimension, Interface, LayerGroup, LayerWMS, LayerWMTS, Theme, ) ogc_server = create_default_ogcserver() main = Interface(name="main") layer_wms_1 = LayerWMS(name="__test_layer_wms_1", public=True) layer_wms_1.layer = "testpoint_unprotected" layer_wms_1.interfaces = [main] layer_wms_1.ogc_server = ogc_server Dimension("A", "a", layer_wms_1) layer_wms_2 = LayerWMS(name="__test_layer_wms_2", public=True) layer_wms_2.layer = "testpoint_unprotected" layer_wms_2.interfaces = [main] layer_wms_2.ogc_server = ogc_server Dimension("A", "b", layer_wms_2) layer_wms_3 = LayerWMS(name="__test_layer_wms_3", public=True) layer_wms_3.layer = "testpoint_unprotected" layer_wms_3.interfaces = [main] layer_wms_3.ogc_server = ogc_server Dimension("A", None, layer_wms_3) layer_wms_4 = LayerWMS(name="__test_layer_wms_4", public=True) layer_wms_4.layer = "testpoint_unprotected" layer_wms_4.interfaces = [main] layer_wms_4.ogc_server = ogc_server Dimension("A", "a", layer_wms_4) layer_wms_5 = LayerWMS(name="__test_layer_wms_5", public=True) layer_wms_5.layer = "testpoint_unprotected" layer_wms_5.interfaces = [main] layer_wms_5.ogc_server = ogc_server Dimension("B", "b", layer_wms_5) layer_wms_6 = LayerWMS(name="__test_layer_wms_6", public=True) layer_wms_6.layer = "testpoint_unprotected" layer_wms_6.interfaces = [main] layer_wms_6.ogc_server = ogc_server Dimension("FILTER", "countries:\"name\" IN ( 'Germany' , 'Italy' )", layer_wms_6) layer_wms_7 = LayerWMS(name="__test_layer_wms_7", public=True) layer_wms_7.layer = "testpoint_unprotected" layer_wms_7.interfaces = [main] layer_wms_7.ogc_server = ogc_server Dimension("FLOOR", None, layer_wms_7, "floor") layer_wmts = LayerWMTS(name="__test_layer_wmts", public=True) layer_wmts.url = "http://tilecloudchain/1.0.0/WMTSCapabilities.xml" layer_wmts.layer = "map" layer_wmts.interfaces = [main] Dimension("B", "b", layer_wmts) layer_wmts_2 = LayerWMTS(name="__test_layer_wmts_2", public=True) layer_wmts_2.url = "http://tilecloudchain/1.0.0/WMTSCapabilities.xml" layer_wmts_2.layer = "map" layer_wmts_2.interfaces = [main] Dimension("FILTER", "countries:\"name\" IN ( 'Germany' , 'Italy' )", layer_wmts_2) layer_group_1 = LayerGroup(name="__test_layer_group_1") layer_group_1.children = [layer_wms_1, layer_wmts, layer_wmts_2] layer_group_2 = LayerGroup(name="__test_layer_group_2") layer_group_2.children = [layer_wms_1, layer_wms_2] layer_group_3 = LayerGroup(name="__test_layer_group_3") layer_group_3.children = [layer_wms_1, layer_wms_3] layer_group_4 = LayerGroup(name="__test_layer_group_4") layer_group_4.children = [layer_wms_1, layer_wms_4] layer_group_5 = LayerGroup(name="__test_layer_group_5") layer_group_5.children = [layer_wms_1, layer_wms_5, layer_wms_6] layer_group_6 = LayerGroup(name="__test_layer_group_6") layer_group_6.children = [layer_wms_3] layer_group_7 = LayerGroup(name="__test_layer_group_7") layer_group_7.children = [layer_wms_7] theme = Theme(name="__test_theme") theme.interfaces = [main] theme.children = [ layer_group_1, layer_group_2, layer_group_3, layer_group_4, layer_group_5, layer_group_6, layer_group_7, ] DBSession.add(theme) transaction.commit()
def _create_theme_obj(self, **kwargs): from c2cgeoportal_geoportal.views.theme import Theme return Theme(self._create_request_obj(**kwargs))
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 LayerV1, Theme, Interface, LayerGroup create_default_ogcserver() main = Interface(name="main") mobile = Interface(name="mobile") layer = LayerV1(name="__test_layer") layer.interfaces = [main, mobile] mobile_only_layer = LayerV1(name="__test_mobile_only_layer") mobile_only_layer.interfaces = [mobile] desktop_only_layer = LayerV1(name="__test_desktop_only_layer") desktop_only_layer.interfaces = [main] group = LayerGroup(name="__test_layer_group") group.children = [layer, mobile_only_layer, desktop_only_layer] theme = Theme(name="__test_theme") theme.children = [group] theme.interfaces = [main, mobile] mobile_only_group = LayerGroup(name="__test_mobile_only_layer_group") mobile_only_group.children = [layer] mobile_only_theme = Theme(name="__test_mobile_only_theme") mobile_only_theme.children = [mobile_only_group] mobile_only_theme.interfaces = [mobile] desktop_only_group = LayerGroup(name="__test_desktop_only_layer_group") desktop_only_group.children = [layer] desktop_only_theme = Theme(name="__test_desktop_only_theme") desktop_only_theme.children = [desktop_only_group] desktop_only_theme.interfaces = [main] # the following theme should not appear in the list of themes on desktop # nor on mobile # It should be accessible by explicitly loading it in mobile though mobile_private_group = LayerGroup( name="__test_mobile_private_layer_group") mobile_private_group.children = [layer] mobile_private_theme = Theme(name="__test_mobile_private_theme") mobile_private_theme.children = [mobile_private_group] DBSession.add_all([ layer, mobile_only_layer, desktop_only_layer, theme, mobile_only_theme, desktop_only_theme, mobile_private_theme ]) transaction.commit()
def setup_method(self, _): # Always see the diff # https://docs.python.org/2/library/unittest.html#unittest.TestCase.maxDiff self.maxDiff = None self._tables = [] from c2cgeoportal_geoportal.lib import functionality functionality.FUNCTIONALITIES_TYPES = None from c2cgeoportal_commons.models import DBSession from c2cgeoportal_commons.models.main import Role, \ RestrictionArea, TreeItem, Theme, LayerGroup, Interface, LayerWMS from c2cgeoportal_commons.models.static import User from sqlalchemy import Column, Table, types from sqlalchemy.ext.declarative import declarative_base from geoalchemy2 import Geometry for o in DBSession.query(RestrictionArea).all(): DBSession.delete(o) for o in DBSession.query(Role).all(): DBSession.delete(o) for o in DBSession.query(User).all(): DBSession.delete(o) for o in DBSession.query(TreeItem).all(): DBSession.delete(o) ogcserver = create_default_ogcserver() role1 = Role(name="__test_role1") role1.id = 999 user1 = User(username="******", password="******", settings_role=role1, roles=[role1]) user1.email = "*****@*****.**" role2 = Role(name="__test_role2", extent=WKTElement( "POLYGON((1 2, 1 4, 3 4, 3 2, 1 2))", srid=21781 )) user2 = User(username="******", password="******", settings_role=role2, roles=[role2]) main = Interface(name="main") engine = DBSession.c2c_rw_bind engine.connect() a_geo_table = Table( "a_geo_table", declarative_base(bind=engine).metadata, Column("id", types.Integer, primary_key=True), Column("geom", Geometry("POINT", srid=21781)), schema="geodata" ) self._tables = [a_geo_table] a_geo_table.drop(checkfirst=True) a_geo_table.create() private_layer = LayerWMS(name="__test_private_layer", public=False) private_layer.layer = "__test_private_layer" private_layer.geo_table = "geodata.a_geo_table" private_layer.interfaces = [main] private_layer.ogc_server = ogcserver group = LayerGroup(name="__test_layer_group") group.children = [private_layer] theme = Theme(name="__test_theme") theme.children = [group] theme.interfaces = [main] DBSession.add(RestrictionArea( name="__test_ra1", description="", layers=[private_layer], roles=[role1], )) DBSession.add(RestrictionArea( name="__test_ra2", description="", layers=[private_layer], roles=[role2], readwrite=True, )) DBSession.add_all([ user1, user2, role1, role2, theme, group, private_layer, ]) transaction.commit()
def setUp(self): # noqa # Always see the diff # https://docs.python.org/2/library/unittest.html#unittest.TestCase.maxDiff self.maxDiff = None self.clean() from c2cgeoportal_commons.models import DBSession from c2cgeoportal_commons.models.static import User from c2cgeoportal_commons.models.main import \ Theme, LayerGroup, Interface, LayerWMS, LayerWMTS, Role, RestrictionArea main = Interface(name=u"desktop") role = Role(name=u"__test_role") user = User(username=u"__test_user", password=u"__test_user", role=role) user.email = "*****@*****.**" ogc_server_internal, _ = create_default_ogcserver() layer_wms = LayerWMS(name=u"__test_layer_wms", public=True) layer_wms.layer = "__test_public_layer" layer_wms.interfaces = [main] layer_wms.ogc_server = ogc_server_internal layer_wms_private = LayerWMS(name=u"__test_layer_wms_private", public=True) layer_wms_private.layer = "__test_private_layer" layer_wms_private.public = False layer_wms_private.interfaces = [main] layer_wms_private.ogc_server = ogc_server_internal layer_wmts = LayerWMTS(name=u"__test_layer_wmts", public=True) layer_wmts.url = "http://example.com/1.0.0/WMTSCapabilities.xml" layer_wmts.layer = "map" layer_wmts.interfaces = [main] layer_wmts_private = LayerWMTS(name=u"__test_layer_wmts_private", public=True) layer_wmts_private.url = "http://example.com/1.0.0/WMTSCapabilities.xml" layer_wmts_private.layer = "map" layer_wmts_private.public = False layer_wmts_private.interfaces = [main] layer_group = LayerGroup(name=u"__test_layer_group") layer_group.children = [ layer_wms, layer_wms_private, layer_wmts, layer_wmts_private ] theme = Theme(name=u"__test_theme") theme.interfaces = [main] theme.children = [layer_group] restriction_area = RestrictionArea( name=u"__test_ra1", layers=[layer_wms_private, layer_wmts_private], roles=[role]) DBSession.add_all([theme, restriction_area, user]) transaction.commit()
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()
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, }
def theme_test_data(dbsession): from c2cgeoportal_commons.models.main import \ Theme, Role, Functionality, LayergroupTreeitem, \ Interface, Metadata, LayerGroup, LayerWMS, OGCServer dbsession.begin_nested() 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, } dbsession.rollback()
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, \ LayerV1, OGCServer, LayerWMS, LayerWMTS, \ Metadata, Dimension, OGCSERVER_AUTH_NOAUTH main = Interface(name="desktop") mobile = Interface(name="mobile") min_levels = Interface(name="min_levels") layer_v1 = LayerV1(name="__test_layer_v1", public=True) layer_v1.interfaces = [main] layer_v1.metadatas = [Metadata("test", "v1")] 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_v1, 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 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, OGCServer, LayerWMS, LayerWMTS main = Interface(name="main") ogc_server_internal, _ = create_default_ogcserver() ogc_server_external = OGCServer(name="__test_ogc_server_external", url="http://wms.geo.admin.ch/", image_type="image/jpeg") layer_internal_wms = LayerWMS(name="__test_layer_internal_wms", public=True) layer_internal_wms.layer = "__test_layer_internal_wms" layer_internal_wms.interfaces = [main] 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.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] layer_group_1 = LayerGroup(name="__test_layer_group_1") layer_group_1.children = [layer_internal_wms] layer_group_2 = LayerGroup(name="__test_layer_group_2") layer_group_2.children = [layer_external_wms] layer_group_3 = LayerGroup(name="__test_layer_group_3") layer_group_3.children = [layer_wmts] layer_group_4 = LayerGroup(name="__test_layer_group_4") layer_group_4.children = [layer_group_1, layer_group_2] layer_group_5 = LayerGroup(name="__test_layer_group_5") layer_group_5.children = [layer_group_1, layer_group_3] layer_group_6 = LayerGroup(name="__test_layer_group_6") layer_group_6.children = [layer_internal_wms] layer_group_7 = LayerGroup(name="__test_layer_group_7") layer_group_7.children = [layer_group_1, layer_group_6] layer_group_8 = LayerGroup(name="__test_layer_group_8") layer_group_8.children = [layer_group_2, layer_group_6] theme = Theme(name="__test_theme") theme.interfaces = [main] theme.children = [ layer_group_1, layer_group_2, layer_group_3, layer_group_4, layer_group_5, layer_group_7, layer_group_8, ] DBSession.add(theme) transaction.commit()
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, LayerWMTS, Dimension ogc_server, _ = create_default_ogcserver() main = Interface(name="main") layer_wms_1 = LayerWMS(name="__test_layer_wms_1", public=True) layer_wms_1.layer = "__test_layer_wms_1" layer_wms_1.interfaces = [main] layer_wms_1.ogc_server = ogc_server Dimension("A", "a", layer_wms_1) layer_wms_2 = LayerWMS(name="__test_layer_wms_2", public=True) layer_wms_2.layer = "__test_layer_wms_2" layer_wms_2.interfaces = [main] layer_wms_2.ogc_server = ogc_server Dimension("A", "b", layer_wms_2) layer_wms_3 = LayerWMS(name="__test_layer_wms_3", public=True) layer_wms_3.layer = "__test_layer_wms_3" layer_wms_3.interfaces = [main] layer_wms_3.ogc_server = ogc_server Dimension("A", None, layer_wms_3) layer_wms_4 = LayerWMS(name="__test_layer_wms_4", public=True) layer_wms_4.layer = "__test_layer_wms_4" layer_wms_4.interfaces = [main] layer_wms_4.ogc_server = ogc_server Dimension("A", "a", layer_wms_4) layer_wms_5 = LayerWMS(name="__test_layer_wms_5", public=True) layer_wms_5.layer = "__test_layer_wms_5" layer_wms_5.interfaces = [main] layer_wms_5.ogc_server = ogc_server Dimension("B", "b", layer_wms_5) layer_wms_6 = LayerWMS(name="__test_layer_wms_6", public=True) layer_wms_6.layer = "__test_layer_wms_6" layer_wms_6.interfaces = [main] layer_wms_6.ogc_server = ogc_server Dimension("FILTER", "countries:\"name\" IN ( 'Germany' , 'Italy' )", layer_wms_6) 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] Dimension("B", "b", layer_wmts) layer_wmts_2 = LayerWMTS(name="__test_layer_wmts_2", public=True) layer_wmts_2.url = "http://example.com/1.0.0/WMTSCapabilities.xml" layer_wmts_2.layer = "map" layer_wmts_2.interfaces = [main] Dimension("FILTER", "countries:\"name\" IN ( 'Germany' , 'Italy' )", layer_wmts_2) layer_group_1 = LayerGroup(name="__test_layer_group_1") layer_group_1.children = [layer_wms_1, layer_wmts, layer_wmts_2] layer_group_2 = LayerGroup(name="__test_layer_group_2") layer_group_2.children = [layer_wms_1, layer_wms_2] layer_group_3 = LayerGroup(name="__test_layer_group_3") layer_group_3.children = [layer_wms_1, layer_wms_3] layer_group_4 = LayerGroup(name="__test_layer_group_4") layer_group_4.children = [layer_wms_1, layer_wms_4] layer_group_5 = LayerGroup(name="__test_layer_group_5") layer_group_5.children = [layer_wms_1, layer_wms_5, layer_wms_6] layer_group_6 = LayerGroup(name="__test_layer_group_6") layer_group_6.children = [layer_wms_3] theme = Theme(name="__test_theme") theme.interfaces = [main] theme.children = [ layer_group_1, layer_group_2, layer_group_3, layer_group_4, layer_group_5, layer_group_6, ] DBSession.add(theme) transaction.commit()