c2cgeoportal-admin 2.6.0__py3-none-any.whl → 2.9rc45__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- c2cgeoportal_admin/__init__.py +42 -12
- c2cgeoportal_admin/lib/lingva_extractor.py +77 -0
- c2cgeoportal_admin/lib/ogcserver_synchronizer.py +170 -57
- c2cgeoportal_admin/py.typed +0 -0
- c2cgeoportal_admin/routes.py +18 -6
- c2cgeoportal_admin/schemas/dimensions.py +16 -10
- c2cgeoportal_admin/schemas/functionalities.py +59 -21
- c2cgeoportal_admin/schemas/interfaces.py +26 -18
- c2cgeoportal_admin/schemas/metadata.py +101 -48
- c2cgeoportal_admin/schemas/restriction_areas.py +25 -19
- c2cgeoportal_admin/schemas/roles.py +12 -6
- c2cgeoportal_admin/schemas/treegroup.py +46 -21
- c2cgeoportal_admin/schemas/treeitem.py +3 -4
- c2cgeoportal_admin/static/layertree.css +3 -4
- c2cgeoportal_admin/static/navbar.css +36 -35
- c2cgeoportal_admin/static/theme.css +19 -9
- c2cgeoportal_admin/subscribers.py +3 -3
- c2cgeoportal_admin/templates/404.jinja2 +18 -2
- c2cgeoportal_admin/templates/layertree.jinja2 +31 -9
- c2cgeoportal_admin/templates/navigation_navbar.jinja2 +33 -0
- c2cgeoportal_admin/templates/ogcserver_synchronize.jinja2 +12 -0
- c2cgeoportal_admin/templates/widgets/functionality_fields.pt +51 -0
- c2cgeoportal_admin/templates/widgets/metadata.pt +7 -1
- c2cgeoportal_admin/views/__init__.py +29 -0
- c2cgeoportal_admin/views/dimension_layers.py +14 -9
- c2cgeoportal_admin/views/functionalities.py +52 -18
- c2cgeoportal_admin/views/home.py +5 -5
- c2cgeoportal_admin/views/interfaces.py +26 -20
- c2cgeoportal_admin/views/layer_groups.py +36 -25
- c2cgeoportal_admin/views/layers.py +17 -13
- c2cgeoportal_admin/views/layers_cog.py +135 -0
- c2cgeoportal_admin/views/layers_vectortiles.py +62 -27
- c2cgeoportal_admin/views/layers_wms.py +55 -34
- c2cgeoportal_admin/views/layers_wmts.py +54 -34
- c2cgeoportal_admin/views/layertree.py +38 -29
- c2cgeoportal_admin/views/logged_views.py +83 -0
- c2cgeoportal_admin/views/logs.py +91 -0
- c2cgeoportal_admin/views/oauth2_clients.py +30 -18
- c2cgeoportal_admin/views/ogc_servers.py +132 -36
- c2cgeoportal_admin/views/restriction_areas.py +39 -27
- c2cgeoportal_admin/views/roles.py +42 -28
- c2cgeoportal_admin/views/themes.py +47 -35
- c2cgeoportal_admin/views/themes_ordering.py +19 -14
- c2cgeoportal_admin/views/treeitems.py +21 -17
- c2cgeoportal_admin/views/users.py +46 -26
- c2cgeoportal_admin/widgets.py +17 -14
- {c2cgeoportal_admin-2.6.0.dist-info → c2cgeoportal_admin-2.9rc45.dist-info}/METADATA +12 -12
- c2cgeoportal_admin-2.9rc45.dist-info/RECORD +97 -0
- {c2cgeoportal_admin-2.6.0.dist-info → c2cgeoportal_admin-2.9rc45.dist-info}/WHEEL +1 -1
- c2cgeoportal_admin-2.9rc45.dist-info/entry_points.txt +5 -0
- tests/__init__.py +24 -20
- tests/conftest.py +22 -11
- tests/test_edit_url.py +11 -14
- tests/test_functionalities.py +52 -14
- tests/test_home.py +0 -1
- tests/test_interface.py +34 -11
- tests/test_layer_groups.py +57 -27
- tests/test_layers_cog.py +243 -0
- tests/test_layers_vectortiles.py +43 -25
- tests/test_layers_wms.py +67 -45
- tests/test_layers_wmts.py +47 -26
- tests/test_layertree.py +99 -16
- tests/test_left_menu.py +0 -1
- tests/test_lingva_extractor_config.py +64 -0
- tests/test_logs.py +102 -0
- tests/test_main.py +3 -1
- tests/test_metadatas.py +34 -21
- tests/test_oauth2_clients.py +40 -11
- tests/test_ogc_servers.py +84 -35
- tests/test_restriction_areas.py +38 -15
- tests/test_role.py +71 -43
- tests/test_themes.py +71 -37
- tests/test_themes_ordering.py +1 -2
- tests/test_treegroup.py +2 -2
- tests/test_user.py +56 -19
- tests/themes_ordering.py +1 -2
- c2cgeoportal_admin/templates/navigation_vertical.jinja2 +0 -33
- c2cgeoportal_admin-2.6.0.dist-info/RECORD +0 -89
- c2cgeoportal_admin-2.6.0.dist-info/entry_points.txt +0 -3
- {c2cgeoportal_admin-2.6.0.dist-info → c2cgeoportal_admin-2.9rc45.dist-info}/top_level.txt +0 -0
tests/test_layers_vectortiles.py
CHANGED
@@ -12,15 +12,10 @@ from . import AbstractViewsTests, factory_build_layers, get_test_default_layers
|
|
12
12
|
def layer_vectortiles_test_data(dbsession, transact):
|
13
13
|
del transact
|
14
14
|
|
15
|
-
from c2cgeoportal_commons.models.main import LayerVectorTiles
|
16
|
-
|
17
|
-
servers = [OGCServer(name="server_{}".format(i)) for i in range(0, 4)]
|
18
|
-
for i, server in enumerate(servers):
|
19
|
-
server.url = "http://wms.geo.admin.ch_{}".format(i)
|
20
|
-
server.image_type = "image/jpeg" if i % 2 == 0 else "image/png"
|
15
|
+
from c2cgeoportal_commons.models.main import LayerVectorTiles
|
21
16
|
|
22
17
|
def layer_builder(i):
|
23
|
-
name = "layer_vectortiles_{}"
|
18
|
+
name = f"layer_vectortiles_{i}"
|
24
19
|
layer = LayerVectorTiles(name=name)
|
25
20
|
layer.layer = name
|
26
21
|
layer.public = 1 == i % 2
|
@@ -29,7 +24,7 @@ def layer_vectortiles_test_data(dbsession, transact):
|
|
29
24
|
return layer
|
30
25
|
|
31
26
|
data = factory_build_layers(layer_builder, dbsession)
|
32
|
-
data["default"] = get_test_default_layers(dbsession,
|
27
|
+
data["default"] = get_test_default_layers(dbsession, None)
|
33
28
|
|
34
29
|
dbsession.flush()
|
35
30
|
|
@@ -38,7 +33,6 @@ def layer_vectortiles_test_data(dbsession, transact):
|
|
38
33
|
|
39
34
|
@pytest.mark.usefixtures("layer_vectortiles_test_data", "test_app")
|
40
35
|
class TestLayerVectortiles(AbstractViewsTests):
|
41
|
-
|
42
36
|
_prefix = "/admin/layers_vectortiles"
|
43
37
|
|
44
38
|
def test_index_rendering(self, test_app):
|
@@ -106,6 +100,8 @@ class TestLayerVectortiles(AbstractViewsTests):
|
|
106
100
|
assert form["public"].checked
|
107
101
|
|
108
102
|
def test_edit(self, test_app, layer_vectortiles_test_data, dbsession):
|
103
|
+
from c2cgeoportal_commons.models.main import Log, LogAction
|
104
|
+
|
109
105
|
layer = layer_vectortiles_test_data["layers"][0]
|
110
106
|
|
111
107
|
form = self.get_item(test_app, layer.id).form
|
@@ -122,11 +118,11 @@ class TestLayerVectortiles(AbstractViewsTests):
|
|
122
118
|
assert str(layer.xyz or "") == form["xyz"].value
|
123
119
|
|
124
120
|
interfaces = layer_vectortiles_test_data["interfaces"]
|
125
|
-
assert
|
121
|
+
assert {interfaces[0].id, interfaces[2].id} == {i.id for i in layer.interfaces}
|
126
122
|
self._check_interfaces(form, interfaces, layer)
|
127
123
|
|
128
124
|
ras = layer_vectortiles_test_data["restrictionareas"]
|
129
|
-
assert
|
125
|
+
assert {ras[0].id, ras[2].id} == {i.id for i in layer.restrictionareas}
|
130
126
|
self._check_restrictionsareas(form, ras, layer)
|
131
127
|
|
132
128
|
new_values = {
|
@@ -146,7 +142,7 @@ class TestLayerVectortiles(AbstractViewsTests):
|
|
146
142
|
|
147
143
|
resp = form.submit("submit")
|
148
144
|
assert str(layer.id) == re.match(
|
149
|
-
|
145
|
+
rf"http://localhost{self._prefix}/(.*)\?msg_col=submit_ok", resp.location
|
150
146
|
).group(1)
|
151
147
|
|
152
148
|
dbsession.expire(layer)
|
@@ -155,13 +151,19 @@ class TestLayerVectortiles(AbstractViewsTests):
|
|
155
151
|
assert value == getattr(layer, key)
|
156
152
|
else:
|
157
153
|
assert str(value or "") == str(getattr(layer, key) or "")
|
158
|
-
assert
|
159
|
-
|
160
|
-
|
161
|
-
|
154
|
+
assert {interfaces[1].id, interfaces[3].id} == {interface.id for interface in layer.interfaces}
|
155
|
+
assert {ras[1].id, ras[3].id} == {ra.id for ra in layer.restrictionareas}
|
156
|
+
|
157
|
+
log = dbsession.query(Log).one()
|
158
|
+
assert log.date != None
|
159
|
+
assert log.action == LogAction.UPDATE
|
160
|
+
assert log.element_type == "layer_vectortiles"
|
161
|
+
assert log.element_id == layer.id
|
162
|
+
assert log.element_name == layer.name
|
163
|
+
assert log.username == "test_user"
|
162
164
|
|
163
165
|
def test_submit_new(self, dbsession, test_app, layer_vectortiles_test_data):
|
164
|
-
from c2cgeoportal_commons.models.main import LayerVectorTiles
|
166
|
+
from c2cgeoportal_commons.models.main import LayerVectorTiles, Log, LogAction
|
165
167
|
|
166
168
|
resp = test_app.post(
|
167
169
|
"/admin/layers_vectortiles/new",
|
@@ -180,12 +182,20 @@ class TestLayerVectortiles(AbstractViewsTests):
|
|
180
182
|
r"http://localhost/admin/layers_vectortiles/(.*)\?msg_col=submit_ok", resp.location
|
181
183
|
).group(1)
|
182
184
|
|
185
|
+
log = dbsession.query(Log).one()
|
186
|
+
assert log.date != None
|
187
|
+
assert log.action == LogAction.INSERT
|
188
|
+
assert log.element_type == "layer_vectortiles"
|
189
|
+
assert log.element_id == layer.id
|
190
|
+
assert log.element_name == layer.name
|
191
|
+
assert log.username == "test_user"
|
192
|
+
|
183
193
|
def test_duplicate(self, layer_vectortiles_test_data, test_app, dbsession):
|
184
194
|
from c2cgeoportal_commons.models.main import LayerVectorTiles
|
185
195
|
|
186
196
|
layer = layer_vectortiles_test_data["layers"][3]
|
187
197
|
|
188
|
-
resp = test_app.get("/admin/layers_vectortiles/{}/duplicate"
|
198
|
+
resp = test_app.get(f"/admin/layers_vectortiles/{layer.id}/duplicate", status=200)
|
189
199
|
form = resp.form
|
190
200
|
|
191
201
|
assert "" == self.get_first_field_named(form, "id").value
|
@@ -198,7 +208,7 @@ class TestLayerVectortiles(AbstractViewsTests):
|
|
198
208
|
assert str(layer.style or "") == form["style"].value
|
199
209
|
assert str(layer.xyz or "") == form["xyz"].value
|
200
210
|
interfaces = layer_vectortiles_test_data["interfaces"]
|
201
|
-
assert
|
211
|
+
assert {interfaces[3].id, interfaces[1].id} == {i.id for i in layer.interfaces}
|
202
212
|
self._check_interfaces(form, interfaces, layer)
|
203
213
|
|
204
214
|
self.set_first_field_named(form, "name", "clone")
|
@@ -214,12 +224,20 @@ class TestLayerVectortiles(AbstractViewsTests):
|
|
214
224
|
assert layer_vectortiles_test_data["layers"][3].metadatas[1].name == layer.metadatas[1].name
|
215
225
|
|
216
226
|
def test_delete(self, test_app, dbsession):
|
217
|
-
from c2cgeoportal_commons.models.main import Layer, LayerVectorTiles, TreeItem
|
227
|
+
from c2cgeoportal_commons.models.main import Layer, LayerVectorTiles, Log, LogAction, TreeItem
|
228
|
+
|
229
|
+
layer = dbsession.query(LayerVectorTiles).first()
|
218
230
|
|
219
|
-
|
231
|
+
test_app.delete(f"/admin/layers_vectortiles/{layer.id}", status=200)
|
220
232
|
|
221
|
-
|
233
|
+
assert dbsession.query(LayerVectorTiles).get(layer.id) is None
|
234
|
+
assert dbsession.query(Layer).get(layer.id) is None
|
235
|
+
assert dbsession.query(TreeItem).get(layer.id) is None
|
222
236
|
|
223
|
-
|
224
|
-
assert
|
225
|
-
assert
|
237
|
+
log = dbsession.query(Log).one()
|
238
|
+
assert log.date != None
|
239
|
+
assert log.action == LogAction.DELETE
|
240
|
+
assert log.element_type == "layer_vectortiles"
|
241
|
+
assert log.element_id == layer.id
|
242
|
+
assert log.element_name == layer.name
|
243
|
+
assert log.username == "test_user"
|
tests/test_layers_wms.py
CHANGED
@@ -14,16 +14,16 @@ def layer_wms_test_data(dbsession, transact):
|
|
14
14
|
|
15
15
|
from c2cgeoportal_commons.models.main import LayerWMS, OGCServer
|
16
16
|
|
17
|
-
servers = [OGCServer(name="server_{}"
|
17
|
+
servers = [OGCServer(name=f"server_{i}") for i in range(0, 4)]
|
18
18
|
for i, server in enumerate(servers):
|
19
|
-
server.url = "http://wms.geo.admin.ch_{}"
|
19
|
+
server.url = f"http://wms.geo.admin.ch_{i}"
|
20
20
|
server.image_type = "image/jpeg" if i % 2 == 0 else "image/png"
|
21
21
|
|
22
22
|
def layer_builder(i):
|
23
|
-
layer = LayerWMS(name="layer_wms_{}"
|
24
|
-
layer.layer = "layer_{}"
|
23
|
+
layer = LayerWMS(name=f"layer_wms_{i}")
|
24
|
+
layer.layer = f"layer_{i}"
|
25
25
|
layer.public = 1 == i % 2
|
26
|
-
layer.geo_table = "geotable_{}"
|
26
|
+
layer.geo_table = f"geotable_{i}"
|
27
27
|
layer.ogc_server = servers[i % 4]
|
28
28
|
layer.style = "décontrasté"
|
29
29
|
return layer
|
@@ -39,7 +39,6 @@ def layer_wms_test_data(dbsession, transact):
|
|
39
39
|
|
40
40
|
@pytest.mark.usefixtures("layer_wms_test_data", "test_app")
|
41
41
|
class TestLayerWMSViews(AbstractViewsTests):
|
42
|
-
|
43
42
|
_prefix = "/admin/layers_wms"
|
44
43
|
|
45
44
|
def test_index_rendering(self, test_app):
|
@@ -154,6 +153,8 @@ class TestLayerWMSViews(AbstractViewsTests):
|
|
154
153
|
assert form["public"].checked
|
155
154
|
|
156
155
|
def test_edit(self, test_app, layer_wms_test_data, dbsession):
|
156
|
+
from c2cgeoportal_commons.models.main import Log, LogAction
|
157
|
+
|
157
158
|
layer = layer_wms_test_data["layers"][0]
|
158
159
|
|
159
160
|
form = self.get_item(test_app, layer.id).form
|
@@ -173,11 +174,11 @@ class TestLayerWMSViews(AbstractViewsTests):
|
|
173
174
|
assert str(layer.time_widget) == form["time_widget"].value
|
174
175
|
|
175
176
|
interfaces = layer_wms_test_data["interfaces"]
|
176
|
-
assert
|
177
|
+
assert {interfaces[0].id, interfaces[2].id} == {i.id for i in layer.interfaces}
|
177
178
|
self._check_interfaces(form, interfaces, layer)
|
178
179
|
|
179
180
|
ras = layer_wms_test_data["restrictionareas"]
|
180
|
-
assert
|
181
|
+
assert {ras[0].id, ras[2].id} == {i.id for i in layer.restrictionareas}
|
181
182
|
self._check_restrictionsareas(form, ras, layer)
|
182
183
|
|
183
184
|
new_values = {
|
@@ -200,7 +201,7 @@ class TestLayerWMSViews(AbstractViewsTests):
|
|
200
201
|
|
201
202
|
resp = form.submit("submit")
|
202
203
|
assert str(layer.id) == re.match(
|
203
|
-
|
204
|
+
rf"http://localhost{self._prefix}/(.*)\?msg_col=submit_ok", resp.location
|
204
205
|
).group(1)
|
205
206
|
|
206
207
|
dbsession.expire(layer)
|
@@ -209,13 +210,19 @@ class TestLayerWMSViews(AbstractViewsTests):
|
|
209
210
|
assert value == getattr(layer, key)
|
210
211
|
else:
|
211
212
|
assert str(value or "") == str(getattr(layer, key) or "")
|
212
|
-
assert
|
213
|
-
|
214
|
-
|
215
|
-
|
213
|
+
assert {interfaces[1].id, interfaces[3].id} == {interface.id for interface in layer.interfaces}
|
214
|
+
assert {ras[1].id, ras[3].id} == {ra.id for ra in layer.restrictionareas}
|
215
|
+
|
216
|
+
log = dbsession.query(Log).one()
|
217
|
+
assert log.date != None
|
218
|
+
assert log.action == LogAction.UPDATE
|
219
|
+
assert log.element_type == "layer_wms"
|
220
|
+
assert log.element_id == layer.id
|
221
|
+
assert log.element_name == layer.name
|
222
|
+
assert log.username == "test_user"
|
216
223
|
|
217
224
|
def test_submit_new(self, dbsession, test_app, layer_wms_test_data):
|
218
|
-
from c2cgeoportal_commons.models.main import LayerWMS
|
225
|
+
from c2cgeoportal_commons.models.main import LayerWMS, Log, LogAction
|
219
226
|
|
220
227
|
resp = test_app.post(
|
221
228
|
"/admin/layers_wms/new",
|
@@ -239,12 +246,20 @@ class TestLayerWMSViews(AbstractViewsTests):
|
|
239
246
|
r"http://localhost/admin/layers_wms/(.*)\?msg_col=submit_ok", resp.location
|
240
247
|
).group(1)
|
241
248
|
|
249
|
+
log = dbsession.query(Log).one()
|
250
|
+
assert log.date != None
|
251
|
+
assert log.action == LogAction.INSERT
|
252
|
+
assert log.element_type == "layer_wms"
|
253
|
+
assert log.element_id == layer.id
|
254
|
+
assert log.element_name == layer.name
|
255
|
+
assert log.username == "test_user"
|
256
|
+
|
242
257
|
def test_duplicate(self, layer_wms_test_data, test_app, dbsession):
|
243
258
|
from c2cgeoportal_commons.models.main import LayerWMS
|
244
259
|
|
245
260
|
layer = layer_wms_test_data["layers"][3]
|
246
261
|
|
247
|
-
resp = test_app.get("/admin/layers_wms/{}/duplicate"
|
262
|
+
resp = test_app.get(f"/admin/layers_wms/{layer.id}/duplicate", status=200)
|
248
263
|
form = resp.form
|
249
264
|
|
250
265
|
assert "" == self.get_first_field_named(form, "id").value
|
@@ -260,11 +275,11 @@ class TestLayerWMSViews(AbstractViewsTests):
|
|
260
275
|
assert str(layer.time_mode) == form["time_mode"].value
|
261
276
|
assert str(layer.time_widget) == form["time_widget"].value
|
262
277
|
interfaces = layer_wms_test_data["interfaces"]
|
263
|
-
assert
|
278
|
+
assert {interfaces[3].id, interfaces[1].id} == {i.id for i in layer.interfaces}
|
264
279
|
self._check_interfaces(form, interfaces, layer)
|
265
280
|
|
266
281
|
ras = layer_wms_test_data["restrictionareas"]
|
267
|
-
assert
|
282
|
+
assert {ras[3].id, ras[0].id} == {i.id for i in layer.restrictionareas}
|
268
283
|
self._check_restrictionsareas(form, ras, layer)
|
269
284
|
|
270
285
|
self._check_dimensions(resp.html, layer.dimensions, duplicated=True)
|
@@ -289,12 +304,9 @@ class TestLayerWMSViews(AbstractViewsTests):
|
|
289
304
|
assert 0 == dbsession.query(LayerWMTS).filter(LayerWMTS.name == layer.name).count()
|
290
305
|
assert 1 == dbsession.query(LayerWMS).filter(LayerWMS.name == layer.name).count()
|
291
306
|
|
292
|
-
resp = test_app.post("/admin/layers_wms/{}/convert_to_wmts"
|
307
|
+
resp = test_app.post(f"/admin/layers_wms/{layer.id}/convert_to_wmts", status=200)
|
293
308
|
assert resp.json["success"]
|
294
|
-
assert
|
295
|
-
"http://localhost/admin/layers_wmts/{}?msg_col=submit_ok".format(layer.id)
|
296
|
-
== resp.json["redirect"]
|
297
|
-
)
|
309
|
+
assert f"http://localhost/admin/layers_wmts/{layer.id}?msg_col=submit_ok" == resp.json["redirect"]
|
298
310
|
|
299
311
|
assert 1 == dbsession.query(LayerWMTS).filter(LayerWMTS.name == layer.name).count()
|
300
312
|
assert 0 == dbsession.query(LayerWMS).filter(LayerWMS.name == layer.name).count()
|
@@ -328,41 +340,43 @@ class TestLayerWMSViews(AbstractViewsTests):
|
|
328
340
|
def test_convert_image_type_from_ogcserver(self, layer_wms_test_data, test_app):
|
329
341
|
layer = layer_wms_test_data["layers"][3]
|
330
342
|
|
331
|
-
resp = test_app.post("/admin/layers_wms/{}/convert_to_wmts"
|
343
|
+
resp = test_app.post(f"/admin/layers_wms/{layer.id}/convert_to_wmts", status=200)
|
332
344
|
assert resp.json["success"]
|
333
|
-
assert
|
334
|
-
"http://localhost/admin/layers_wmts/{}?msg_col=submit_ok".format(layer.id)
|
335
|
-
== resp.json["redirect"]
|
336
|
-
)
|
345
|
+
assert f"http://localhost/admin/layers_wmts/{layer.id}?msg_col=submit_ok" == resp.json["redirect"]
|
337
346
|
|
338
347
|
resp = test_app.get(resp.json["redirect"], status=200)
|
339
348
|
assert "image/png" == resp.form["image_type"].value
|
340
349
|
|
341
350
|
layer = layer_wms_test_data["layers"][2]
|
342
|
-
resp = test_app.post("/admin/layers_wms/{}/convert_to_wmts"
|
351
|
+
resp = test_app.post(f"/admin/layers_wms/{layer.id}/convert_to_wmts", status=200)
|
343
352
|
assert resp.json["success"]
|
344
|
-
assert
|
345
|
-
"http://localhost/admin/layers_wmts/{}?msg_col=submit_ok".format(layer.id)
|
346
|
-
== resp.json["redirect"]
|
347
|
-
)
|
353
|
+
assert f"http://localhost/admin/layers_wmts/{layer.id}?msg_col=submit_ok" == resp.json["redirect"]
|
348
354
|
|
349
355
|
resp = test_app.get(resp.json["redirect"], status=200)
|
350
356
|
assert "image/jpeg" == resp.form["image_type"].value
|
351
357
|
|
352
358
|
def test_convert_without_wmts_defaults(self, test_app, layer_wms_test_data, dbsession):
|
353
|
-
from c2cgeoportal_commons.models.main import LayerWMTS
|
359
|
+
from c2cgeoportal_commons.models.main import LayerWMTS, Log, LogAction
|
354
360
|
|
355
361
|
dbsession.delete(LayerWMTS.get_default(dbsession))
|
356
362
|
layer = layer_wms_test_data["layers"][3]
|
357
|
-
test_app.post("/admin/layers_wms/{}/convert_to_wmts"
|
363
|
+
test_app.post(f"/admin/layers_wms/{layer.id}/convert_to_wmts", status=200)
|
364
|
+
|
365
|
+
log = dbsession.query(Log).one()
|
366
|
+
assert log.date != None
|
367
|
+
assert log.action == LogAction.CONVERT_TO_WMTS
|
368
|
+
assert log.element_type == "layer_wms"
|
369
|
+
assert log.element_id == layer.id
|
370
|
+
assert log.element_name == layer.name
|
371
|
+
assert log.username == "test_user"
|
358
372
|
|
359
373
|
def test_unicity_validator(self, layer_wms_test_data, test_app):
|
360
374
|
layer = layer_wms_test_data["layers"][2]
|
361
|
-
resp = test_app.get("/admin/layers_wms/{}/duplicate"
|
375
|
+
resp = test_app.get(f"/admin/layers_wms/{layer.id}/duplicate", status=200)
|
362
376
|
|
363
377
|
resp = resp.form.submit("submit")
|
364
378
|
|
365
|
-
self._check_submission_problem(resp, "{} is already used."
|
379
|
+
self._check_submission_problem(resp, f"{layer.name} is already used.")
|
366
380
|
|
367
381
|
def test_unicity_validator_does_not_matter_amongst_cousin(self, layer_wms_test_data, test_app, dbsession):
|
368
382
|
from c2cgeoportal_commons.models.main import LayerGroup, LayerWMS
|
@@ -372,7 +386,7 @@ class TestLayerWMSViews(AbstractViewsTests):
|
|
372
386
|
assert dbsession.query(LayerWMS).filter(LayerWMS.name == "layer_group_0").one_or_none() is None
|
373
387
|
|
374
388
|
layer = layer_wms_test_data["layers"][2]
|
375
|
-
resp = test_app.get("/admin/layers_wms/{}/duplicate"
|
389
|
+
resp = test_app.get(f"/admin/layers_wms/{layer.id}/duplicate", status=200)
|
376
390
|
self.set_first_field_named(resp.form, "name", "layer_group_0")
|
377
391
|
resp = resp.form.submit("submit")
|
378
392
|
|
@@ -382,17 +396,25 @@ class TestLayerWMSViews(AbstractViewsTests):
|
|
382
396
|
# assert str(layer.id) == re.match('http://localhost/admin/layers_wms/(.*)', resp.location).group(1)
|
383
397
|
|
384
398
|
def test_delete(self, test_app, dbsession):
|
385
|
-
from c2cgeoportal_commons.models.main import Layer, LayerWMS, TreeItem
|
399
|
+
from c2cgeoportal_commons.models.main import Layer, LayerWMS, Log, LogAction, TreeItem
|
400
|
+
|
401
|
+
layer = dbsession.query(LayerWMS).first()
|
386
402
|
|
387
|
-
|
403
|
+
test_app.delete(f"/admin/layers_wms/{layer.id}", status=200)
|
388
404
|
|
389
|
-
|
405
|
+
assert dbsession.query(LayerWMS).get(layer.id) is None
|
406
|
+
assert dbsession.query(Layer).get(layer.id) is None
|
407
|
+
assert dbsession.query(TreeItem).get(layer.id) is None
|
390
408
|
|
391
|
-
|
392
|
-
assert
|
393
|
-
assert
|
409
|
+
log = dbsession.query(Log).one()
|
410
|
+
assert log.date != None
|
411
|
+
assert log.action == LogAction.DELETE
|
412
|
+
assert log.element_type == "layer_wms"
|
413
|
+
assert log.element_id == layer.id
|
414
|
+
assert log.element_name == layer.name
|
415
|
+
assert log.username == "test_user"
|
394
416
|
|
395
|
-
def test_submit_new_no_layer_name(self, test_app, layer_wms_test_data):
|
417
|
+
def test_submit_new_no_layer_name(self, test_app, layer_wms_test_data, dbsession):
|
396
418
|
resp = test_app.post(
|
397
419
|
"/admin/layers_wms/new",
|
398
420
|
{
|
@@ -417,5 +439,5 @@ class TestLayerWMSViews(AbstractViewsTests):
|
|
417
439
|
"Errors have been highlighted below" == resp.html.select_one('div[class="error-msg-detail"]').text
|
418
440
|
)
|
419
441
|
assert ["WMS layer name"] == sorted(
|
420
|
-
|
442
|
+
(x.select_one("label").text.strip()) for x in resp.html.select("[class~='has-error']")
|
421
443
|
)
|
tests/test_layers_wmts.py
CHANGED
@@ -19,12 +19,12 @@ def layer_wmts_test_data(dbsession, transact):
|
|
19
19
|
server.image_type = "image/png"
|
20
20
|
|
21
21
|
def layer_builder(i):
|
22
|
-
name = "layer_wmts_{}"
|
22
|
+
name = f"layer_wmts_{i}"
|
23
23
|
layer = LayerWMTS(name=name)
|
24
24
|
layer.layer = name
|
25
|
-
layer.url = "https:///wms.geo.admin.ch_{}.org?service=wms&request=GetCapabilities"
|
25
|
+
layer.url = f"https:///wms.geo.admin.ch_{i}.org?service=wms&request=GetCapabilities"
|
26
26
|
layer.public = 1 == i % 2
|
27
|
-
layer.geo_table = "geotable_{}"
|
27
|
+
layer.geo_table = f"geotable_{i}"
|
28
28
|
layer.image_type = "image/jpeg"
|
29
29
|
layer.style = "décontrasté"
|
30
30
|
return layer
|
@@ -39,7 +39,6 @@ def layer_wmts_test_data(dbsession, transact):
|
|
39
39
|
|
40
40
|
@pytest.mark.usefixtures("layer_wmts_test_data", "test_app")
|
41
41
|
class TestLayerWMTS(AbstractViewsTests):
|
42
|
-
|
43
42
|
_prefix = "/admin/layers_wmts"
|
44
43
|
|
45
44
|
def test_index_rendering(self, test_app):
|
@@ -102,6 +101,8 @@ class TestLayerWMTS(AbstractViewsTests):
|
|
102
101
|
assert default_wmts.matrix_set == self.get_first_field_named(form, "matrix_set").value
|
103
102
|
|
104
103
|
def test_edit(self, test_app, layer_wmts_test_data, dbsession):
|
104
|
+
from c2cgeoportal_commons.models.main import Log, LogAction
|
105
|
+
|
105
106
|
layer = layer_wmts_test_data["layers"][0]
|
106
107
|
|
107
108
|
form = self.get_item(test_app, layer.id).form
|
@@ -121,11 +122,11 @@ class TestLayerWMTS(AbstractViewsTests):
|
|
121
122
|
assert str(layer.image_type or "") == form["image_type"].value
|
122
123
|
|
123
124
|
interfaces = layer_wmts_test_data["interfaces"]
|
124
|
-
assert
|
125
|
+
assert {interfaces[0].id, interfaces[2].id} == {i.id for i in layer.interfaces}
|
125
126
|
self._check_interfaces(form, interfaces, layer)
|
126
127
|
|
127
128
|
ras = layer_wmts_test_data["restrictionareas"]
|
128
|
-
assert
|
129
|
+
assert {ras[0].id, ras[2].id} == {i.id for i in layer.restrictionareas}
|
129
130
|
self._check_restrictionsareas(form, ras, layer)
|
130
131
|
|
131
132
|
new_values = {
|
@@ -148,7 +149,7 @@ class TestLayerWMTS(AbstractViewsTests):
|
|
148
149
|
|
149
150
|
resp = form.submit("submit")
|
150
151
|
assert str(layer.id) == re.match(
|
151
|
-
|
152
|
+
rf"http://localhost{self._prefix}/(.*)\?msg_col=submit_ok", resp.location
|
152
153
|
).group(1)
|
153
154
|
|
154
155
|
dbsession.expire(layer)
|
@@ -157,17 +158,23 @@ class TestLayerWMTS(AbstractViewsTests):
|
|
157
158
|
assert value == getattr(layer, key)
|
158
159
|
else:
|
159
160
|
assert str(value or "") == str(getattr(layer, key) or "")
|
160
|
-
assert
|
161
|
-
|
162
|
-
|
163
|
-
|
161
|
+
assert {interfaces[1].id, interfaces[3].id} == {interface.id for interface in layer.interfaces}
|
162
|
+
assert {ras[1].id, ras[3].id} == {ra.id for ra in layer.restrictionareas}
|
163
|
+
|
164
|
+
log = dbsession.query(Log).one()
|
165
|
+
assert log.date != None
|
166
|
+
assert log.action == LogAction.UPDATE
|
167
|
+
assert log.element_type == "layer_wmts"
|
168
|
+
assert log.element_id == layer.id
|
169
|
+
assert log.element_name == layer.name
|
170
|
+
assert log.username == "test_user"
|
164
171
|
|
165
172
|
def test_duplicate(self, layer_wmts_test_data, test_app, dbsession):
|
166
173
|
from c2cgeoportal_commons.models.main import LayerWMTS
|
167
174
|
|
168
175
|
layer = layer_wmts_test_data["layers"][3]
|
169
176
|
|
170
|
-
resp = test_app.get("/admin/layers_wmts/{}/duplicate"
|
177
|
+
resp = test_app.get(f"/admin/layers_wmts/{layer.id}/duplicate", status=200)
|
171
178
|
form = resp.form
|
172
179
|
|
173
180
|
assert "" == self.get_first_field_named(form, "id").value
|
@@ -192,23 +199,31 @@ class TestLayerWMTS(AbstractViewsTests):
|
|
192
199
|
).group(1)
|
193
200
|
|
194
201
|
def test_delete(self, test_app, dbsession):
|
195
|
-
from c2cgeoportal_commons.models.main import Layer, LayerWMTS, TreeItem
|
202
|
+
from c2cgeoportal_commons.models.main import Layer, LayerWMTS, Log, LogAction, TreeItem
|
196
203
|
|
197
|
-
|
204
|
+
layer = dbsession.query(LayerWMTS).first()
|
198
205
|
|
199
|
-
test_app.delete("/admin/layers_wmts/{}"
|
206
|
+
test_app.delete(f"/admin/layers_wmts/{layer.id}", status=200)
|
200
207
|
|
201
|
-
assert dbsession.query(LayerWMTS).get(
|
202
|
-
assert dbsession.query(Layer).get(
|
203
|
-
assert dbsession.query(TreeItem).get(
|
208
|
+
assert dbsession.query(LayerWMTS).get(layer.id) is None
|
209
|
+
assert dbsession.query(Layer).get(layer.id) is None
|
210
|
+
assert dbsession.query(TreeItem).get(layer.id) is None
|
211
|
+
|
212
|
+
log = dbsession.query(Log).one()
|
213
|
+
assert log.date != None
|
214
|
+
assert log.action == LogAction.DELETE
|
215
|
+
assert log.element_type == "layer_wmts"
|
216
|
+
assert log.element_id == layer.id
|
217
|
+
assert log.element_name == layer.name
|
218
|
+
assert log.username == "test_user"
|
204
219
|
|
205
220
|
def test_unicity_validator(self, layer_wmts_test_data, test_app):
|
206
221
|
layer = layer_wmts_test_data["layers"][2]
|
207
|
-
resp = test_app.get("/admin/layers_wmts/{}/duplicate"
|
222
|
+
resp = test_app.get(f"/admin/layers_wmts/{layer.id}/duplicate", status=200)
|
208
223
|
|
209
224
|
resp = resp.form.submit("submit")
|
210
225
|
|
211
|
-
self._check_submission_problem(resp, "{} is already used."
|
226
|
+
self._check_submission_problem(resp, f"{layer.name} is already used.")
|
212
227
|
|
213
228
|
def test_convert_common_fields_copied(self, layer_wmts_test_data, test_app, dbsession):
|
214
229
|
from c2cgeoportal_commons.models.main import LayerWMS, LayerWMTS
|
@@ -218,10 +233,8 @@ class TestLayerWMTS(AbstractViewsTests):
|
|
218
233
|
assert 0 == dbsession.query(LayerWMS).filter(LayerWMS.name == layer.name).count()
|
219
234
|
assert 1 == dbsession.query(LayerWMTS).filter(LayerWMTS.name == layer.name).count()
|
220
235
|
|
221
|
-
resp = test_app.post("/admin/layers_wmts/{}/convert_to_wms"
|
222
|
-
assert
|
223
|
-
"http://localhost/admin/layers_wms/{}?msg_col=submit_ok".format(layer.id) == resp.json["redirect"]
|
224
|
-
)
|
236
|
+
resp = test_app.post(f"/admin/layers_wmts/{layer.id}/convert_to_wms", status=200)
|
237
|
+
assert f"http://localhost/admin/layers_wms/{layer.id}?msg_col=submit_ok" == resp.json["redirect"]
|
225
238
|
|
226
239
|
assert 1 == dbsession.query(LayerWMS).filter(LayerWMS.name == layer.name).count()
|
227
240
|
assert 0 == dbsession.query(LayerWMTS).filter(LayerWMTS.name == layer.name).count()
|
@@ -252,8 +265,16 @@ class TestLayerWMTS(AbstractViewsTests):
|
|
252
265
|
)
|
253
266
|
|
254
267
|
def test_convert_without_wms_defaults(self, test_app, layer_wmts_test_data, dbsession):
|
255
|
-
from c2cgeoportal_commons.models.main import LayerWMS
|
268
|
+
from c2cgeoportal_commons.models.main import LayerWMS, Log, LogAction
|
256
269
|
|
257
270
|
dbsession.delete(LayerWMS.get_default(dbsession))
|
258
271
|
layer = layer_wmts_test_data["layers"][3]
|
259
|
-
test_app.post("/admin/layers_wmts/{}/convert_to_wms"
|
272
|
+
test_app.post(f"/admin/layers_wmts/{layer.id}/convert_to_wms", status=200)
|
273
|
+
|
274
|
+
log = dbsession.query(Log).one()
|
275
|
+
assert log.date != None
|
276
|
+
assert log.action == LogAction.CONVERT_TO_WMS
|
277
|
+
assert log.element_type == "layer_wmts"
|
278
|
+
assert log.element_id == layer.id
|
279
|
+
assert log.element_name == layer.name
|
280
|
+
assert log.username == "test_user"
|