Skip to content

Commit

Permalink
Update map_layer table in PATCH Workspace Map
Browse files Browse the repository at this point in the history
  • Loading branch information
index-git committed Sep 14, 2023
1 parent 328f54b commit 2467f44
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 6 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
- [#868](https://github.com/LayerManager/layman/issues/868) Fill table `map_layer` with relations between maps and [internal layers](doc/models.md#internal-map-layer) (layers published on this Layman instance). Relations to [external layers](doc/models.md#internal-map-layer) (layers of other servers) are not imported into the table.
### Changes
- [#868](https://github.com/LayerManager/layman/issues/868) Endpoints [GET Publications](doc/rest.md#get-publications), [GET Layers](doc/rest.md#get-layers), [GET Workspace Layers](doc/rest.md#get-workspace-layers), [GET Maps](doc/rest.md#get-maps), [GET Workspace Maps](doc/rest.md#get-workspace-maps), [GET Workspace Layer](doc/rest.md#get-workspace-layer), [GET Workspace Map](doc/rest.md#get-workspace-map), [POST Workspace Layers](doc/rest.md#post-workspace-layers), [DELETE Workspace Layer](doc/rest.md#delete-workspace-layer), [DELETE Workspace Layers](doc/rest.md#delete-workspace-layers), [DELETE Workspace Map](doc/rest.md#delete-workspace-map), [DELETE Workspace Maps](doc/rest.md#delete-workspace-maps), [POST Workspace Maps](doc/rest.md#post-workspace-maps), [PATCH Workspace Layer](doc/rest.md#patch-workspace-layer), [PATCH Workspace Map](doc/rest.md#patch-workspace-map) and [WMS/WFS endpoints](doc/endpoints.md) respects [HTTP header `X-Forwarded-Prefix`](doc/client-proxy.md#x-forwarded-prefix-http-header) of the request in the response.
- [#868](https://github.com/LayerManager/layman/issues/868) Relations between map and [internal layers](doc/models.md#internal-map-layer) are updated in `map_layer` table when calling [POST Workspace Maps](doc/rest.md#post-workspace-maps), [DELETE Workspace Map](doc/rest.md#delete-workspace-map), and [DELETE Workspace Maps](doc/rest.md#delete-workspace-maps).
- [#868](https://github.com/LayerManager/layman/issues/868) Relations between map and [internal layers](doc/models.md#internal-map-layer) are updated in `map_layer` table when calling [POST Workspace Maps](doc/rest.md#post-workspace-maps), [PATCH Workspace Layer](doc/rest.md#patch-workspace-layer), [DELETE Workspace Map](doc/rest.md#delete-workspace-map), and [DELETE Workspace Maps](doc/rest.md#delete-workspace-maps).
- [#880](https://github.com/LayerManager/layman/issues/880) Use Docker Compose v2 (`docker compose`) in Makefile without `compatibility` flag and remove `Makefile_docker-compose_v1` file. Docker containers are named according to Docker Compose v2 and may have different name after upgrade.
- [#765](https://github.com/LayerManager/layman/issues/765) Stop saving OAuth2 claims in filesystem, use prime DB schema only.
- [#893](https://github.com/LayerManager/layman/issues/893) It is possible to specify logging level by new environment variable [LAYMAN_LOGLEVEL](doc/env-settings.md#LAYMAN_LOGLEVEL). Default level is `INFO`.
Expand Down
4 changes: 2 additions & 2 deletions src/layman/map/prime_db_schema/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from layman import celery_app
from layman.celery import AbortedException
from layman.common import empty_method_returns_true
from .util import insert_internal_layers
from .util import ensure_internal_layers
from .. import util, MAP_TYPE
from ...common.prime_db_schema.publications import set_bbox

Expand Down Expand Up @@ -32,7 +32,7 @@ def refresh_file_data(
set_bbox(workspace, MAP_TYPE, mapname, native_bbox, crs, )

map_layers = util.get_layers_from_json(mapjson)
insert_internal_layers(workspace, mapname, map_layers)
ensure_internal_layers(workspace, mapname, map_layers)

if self.is_aborted():
raise AbortedException
24 changes: 22 additions & 2 deletions src/layman/map/prime_db_schema/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,34 @@
DB_SCHEMA = settings.LAYMAN_PRIME_SCHEMA


def insert_internal_layers(workspace, mapname, layers):
def ensure_internal_layers(workspace, mapname, layers):
map_id = get_publication_info(workspace, MAP_TYPE, mapname, context={'keys': ['id'], })['id']
for layer_workspace, layer_name, layer_index in layers:
select_query = f'''
select layer_workspace, layer_name, layer_index
from {DB_SCHEMA}.map_layer
where id_map = %s
'''
db_layers = db_util.run_query(select_query, (map_id, ))
to_insert = {layer for layer in layers if layer not in db_layers}
to_delete = {layer for layer in db_layers if layer not in layers}

for layer_workspace, layer_name, layer_index in to_insert:
insert_query = f'''
insert into {DB_SCHEMA}.map_layer(id_map, layer_workspace, layer_name, layer_index) values (%s, %s, %s, %s);
'''
db_util.run_statement(insert_query, (map_id, layer_workspace, layer_name, layer_index,))

for layer_workspace, layer_name, layer_index in to_delete:
delete_query = f'''
delete from {DB_SCHEMA}.map_layer
where id_map = %s
and layer_workspace = %s
and layer_name = %s
and layer_index = %s
;
'''
db_util.run_statement(delete_query, (map_id, layer_workspace, layer_name, layer_index,))


def delete_internal_layer_relations(workspace, mapname):
map_id = get_publication_info(workspace, MAP_TYPE, mapname, context={'keys': ['id'], })['id']
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,28 @@
'operates_on': [LAYER_HRANICE_PRIVATE],
},
},
'patch_map_without_internal_layer_after_post_with': {
'post_before_test_args': {
'file_paths': [os.path.join(DIRECTORY, 'internal_wms_and_wfs.json')],
},
'exp_before_rest_method': {
'map_layers': {
# layer, layer index, exists?
(LAYER_HRANICE, 1, True),
(LAYER_MISTA_NON_EXISTENT, 2, False),
(LAYER_HRANICE, 3, True),
},
'operates_on': [LAYER_HRANICE],
},
'rest_method': base_test_classes.RestMethodAll.PATCH,
'rest_args': {
'file_paths': ['sample/layman.map/small_map.json'],
},
'exp_after_rest_method': {
'map_layers': None,
'operates_on': None,
},
},
}


Expand Down Expand Up @@ -133,7 +155,7 @@ def assert_exp_map_layers(self, map, exp_map_layers, exp_operates_on, http_metho
publ_info = get_publication_info(map.workspace, map.type, map.name,
context={'keys': ['map_layers']})
if exp_map_layers is None:
assert not publ_info
assert not publ_info or publ_info['_map_layers'] == []
assert exp_operates_on is None
else:
found_map_layers = {
Expand Down

0 comments on commit 2467f44

Please sign in to comment.