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 layer_v1tov2(session, layer): from c2cgeoportal_commons.models.main import OGCServer, LayerWMS, LayerWMTS, \ LayergroupTreeitem, Dimension if layer.layer_type in ["internal WMS", "external WMS"]: # use the first one new_layer = LayerWMS() is_single_tile = layer.is_single_tile if is_single_tile is None: is_single_tile = False image_type = "image/png" if layer.layer_type == "internal WMS": url = "config://internal/mapserv" else: if layer.image_type is not None: image_type = layer.image_type url = layer.url ogc_server = session.query(OGCServer).filter( OGCServer.url == url, OGCServer.image_type == image_type, OGCServer.is_single_tile == is_single_tile ).one() new_layer.ogc_server = ogc_server new_layer.layer = layer.layer new_layer.style = layer.style new_layer.time_mode = layer.time_mode new_layer.time_widget = layer.time_widget elif layer.layer_type == "WMTS": new_layer = LayerWMTS() new_layer.url = layer.url new_layer.layer = layer.layer new_layer.style = layer.style new_layer.matrix_set = layer.matrix_set new_layer.image_type = layer.image_type or "image/png" if layer.dimensions is not None: dimensions = loads(layer.dimensions) for name, value in list(dimensions.items()): session.add(Dimension(name, value, new_layer)) new_layer.name = layer.name new_layer.public = layer.public new_layer.geo_table = layer.geo_table new_layer.interfaces = layer.interfaces new_layer.restrictionareas = layer.restrictionareas for link in layer.parents_relation: new_link = LayergroupTreeitem() new_link.ordering = link.ordering new_link.description = link.description new_link.treegroup = link.treegroup new_link.treeitem = new_layer layer_add_metadata(layer, new_layer, session) session.add(new_layer)
def layer_builder(i): layer = LayerWMS(name="layer_wms_{}".format(i)) layer.layer = "layer_{}".format(i) layer.public = 1 == i % 2 layer.geo_table = "geotable_{}".format(i) layer.ogc_server = servers[i % 4] layer.style = "décontrasté" return layer
def layer_v1tov2(session, layer): from c2cgeoportal_commons.models.main import OGCServer, LayerWMS, LayerWMTS, \ LayergroupTreeitem, Dimension if layer.layer_type in ["internal WMS", "external WMS"]: # use the first one new_layer = LayerWMS() is_single_tile = layer.is_single_tile if is_single_tile is None: is_single_tile = False image_type = "image/png" if layer.layer_type == "internal WMS": url = "config://internal/mapserv" else: if layer.image_type is not None: image_type = layer.image_type url = layer.url ogc_server = session.query(OGCServer).filter( OGCServer.url == url, OGCServer.image_type == image_type, OGCServer.is_single_tile == is_single_tile).one() new_layer.ogc_server = ogc_server new_layer.layer = layer.layer new_layer.style = layer.style new_layer.time_mode = layer.time_mode new_layer.time_widget = layer.time_widget elif layer.layer_type == "WMTS": new_layer = LayerWMTS() new_layer.url = layer.url new_layer.layer = layer.layer new_layer.style = layer.style new_layer.matrix_set = layer.matrix_set new_layer.image_type = layer.image_type or "image/png" if layer.dimensions is not None: dimensions = loads(layer.dimensions) for name, value in list(dimensions.items()): session.add(Dimension(name, value, new_layer)) new_layer.name = layer.name new_layer.public = layer.public new_layer.geo_table = layer.geo_table new_layer.interfaces = layer.interfaces new_layer.restrictionareas = layer.restrictionareas for link in layer.parents_relation: new_link = LayergroupTreeitem() new_link.ordering = link.ordering new_link.description = link.description new_link.treegroup = link.treegroup new_link.treeitem = new_layer layer_add_metadata(layer, new_layer, session) session.add(new_layer)
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 interface_test_data(dbsession): from c2cgeoportal_commons.models.main import Interface, Theme, OGCServer, LayerWMS dbsession.begin_nested() themes = [] for i in range(0, 5): theme = Theme(name='theme_{}'.format(i), ordering=1) themes.append(theme) servers = [OGCServer(name='server_{}'.format(i)) for i in range(0, 4)] layers = [] for i in range(0, 15): layer = LayerWMS(name='layer_wms_{}'.format(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='interface_{}'.format(i), description='description_{}'.format(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) yield { 'interfaces': interfaces } dbsession.rollback()
def _create_layer( self, public=False, none_area=False, attr_list=False, exclude_properties=False, metadatas=None, geom_type=False, ): """This function is central for this test class. It creates a layer with two features, and associates a restriction area to it.""" import transaction from geoalchemy2 import Geometry, WKTElement from sqlalchemy import CheckConstraint, Column, ForeignKey, Table, types from sqlalchemy.ext.declarative import declarative_base from c2cgeoportal_commons.models import DBSession from c2cgeoportal_commons.models.main import LayerWMS, OGCServer, RestrictionArea if self._tables is None: self._tables = [] self.__class__._table_index += 1 id = self.__class__._table_index engine = DBSession.c2c_rw_bind connection = engine.connect() if not self.metadata: self.metadata = declarative_base(bind=engine).metadata tablename = "table_{0:d}".format(id) table1 = Table( "{0!s}_child".format(tablename), self.metadata, Column("id", types.Integer, primary_key=True), Column("name", types.Unicode), schema="public", ) if geom_type: table1.append_column(Column("geom", Geometry("POINT", srid=21781))) else: table1.append_column(Column("geom", Geometry(srid=21781))) self._tables.append(table1) table2 = Table( tablename, self.metadata, Column("id", types.Integer, primary_key=True), Column("child_id", types.Integer, ForeignKey("public.{0!s}_child.id".format(tablename))), Column("name", types.Unicode), Column( "email", types.Unicode, CheckConstraint( """email ~* '^[A-Za-z0-9._%%-] +@[A-Za-z0-9.-]+[.][A-Za-z]+$'""", name="proper_email", ), ), Column("last_update_user", types.Unicode), Column("last_update_date", types.DateTime), schema="public", ) if geom_type: table2.append_column(Column("geom", Geometry("POINT", srid=21781))) else: table2.append_column(Column("geom", Geometry(srid=21781))) self._tables.append(table2) table1.drop(checkfirst=True) table2.drop(checkfirst=True) table1.create() table2.create() ins = table1.insert().values(name="c1é") c1_id = connection.execute(ins).inserted_primary_key[0] ins = table1.insert().values(name="c2é") c2_id = connection.execute(ins).inserted_primary_key[0] ins = table2.insert().values(child_id=c1_id, name="foo", geom=WKTElement("POINT(5 45)", 21781)) connection.execute(ins) ins = table2.insert().values(child_id=c2_id, name="bar", geom=WKTElement("POINT(6 46)", 21781)) connection.execute(ins) if attr_list: ins = table2.insert().values(child_id=c2_id, name="aaa,bbb,foo", geom=WKTElement("POINT(6 46)", 21781)) connection.execute(ins) ogc_server = DBSession.query(OGCServer).filter( OGCServer.name == "__test_ogc_server").one() layer = LayerWMS() layer.id = id layer.name = str(id) layer.ogc_server = ogc_server layer.geo_table = tablename layer.public = public layer.interface = [self.main] if exclude_properties: layer.exclude_properties = "name" if metadatas: layer.metadatas = metadatas DBSession.add(layer) if not public: ra = RestrictionArea() ra.name = "__test_ra" ra.layers = [layer] ra.roles = [self.role] ra.readwrite = True if not none_area: poly = "POLYGON((4 44, 4 46, 6 46, 6 44, 4 44))" ra.area = WKTElement(poly, srid=21781) DBSession.add(ra) transaction.commit() self.layer_ids.append(id) return id
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 layer_wms_test_data(dbsession): from c2cgeoportal_commons.models.main import \ LayerWMS, OGCServer, RestrictionArea, LayergroupTreeitem, \ Interface, Dimension, Metadata, LayerGroup dbsession.begin_nested() servers = [OGCServer(name='server_{}'.format(i)) for i in range(0, 4)] for i, server in enumerate(servers): server.image_type = 'image/jpeg' if i % 2 == 0 else 'image/png' 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 = LayerWMS(name='layer_wms_{}'.format(i)) layer.layer = 'layer_{}'.format(i) layer.public = 1 == i % 2 layer.ogc_server = servers[i % 4] layer.restrictionareas = [restrictionareas[i % 5], restrictionareas[(i + 2) % 5]] if i % 10 != 1: layer.interfaces = [interfaces[i % 4], interfaces[(i + 2) % 4]] 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 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) dbsession.flush() yield { 'servers': servers, 'restrictionareas': restrictionareas, 'layers': layers, 'interfaces': interfaces } dbsession.rollback()