Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DO NOT MERGE: recreate metadata records #1069

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/layman/upgrade/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
]),
((1, 23, 0), [
upgrade_v1_23.delete_user_roles,
upgrade_v1_23.ensure_metadata_records,
]),
],
}
Expand Down
66 changes: 66 additions & 0 deletions src/layman/upgrade/upgrade_v1_23.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
import traceback
from urllib.parse import urljoin
import logging
import requests
import requests.exceptions

from geoserver import util as gs_util, GS_REST, GS_REST_TIMEOUT
from db import util as db_util
from layman import settings
from layman.authz import is_user
from layman.common.prime_db_schema import users
from layman.layer import LAYER_TYPE
from layman.layer.micka import soap
from layman.map import MAP_TYPE
from layman.map.micka import soap as map_soap
from layman.util import get_publication_info

logger = logging.getLogger(__name__)
DB_SCHEMA = settings.LAYMAN_PRIME_SCHEMA
Expand Down Expand Up @@ -201,3 +209,61 @@ def remove_right_types_table():

drop_table_statement = f"""drop table {settings.LAYMAN_PRIME_SCHEMA}.right_types"""
db_util.run_statement(drop_table_statement)


def ensure_metadata_records():
logger.info(f' Ensure metadata records')

query = f'''select w.name, p.name
from {DB_SCHEMA}.publications p inner join
{DB_SCHEMA}.workspaces w on w.id = p.id_workspace
where p.type = %s
order by w.name, p.name
;'''
maps = db_util.run_query(query, (MAP_TYPE,))
for workspace, mapname in maps:
publ_info = get_publication_info(workspace, MAP_TYPE, mapname,
context={'keys':['access_rights', 'metadata', 'native_crs']})
if not publ_info.get('native_crs'):
logger.info(f' Map {workspace}.{mapname} has no native CRS, skipping.')
continue

if not publ_info.get('metadata'):
logger.info(f' Recreate map {workspace}.{mapname}')
else:
logger.info(f' Map {workspace}.{mapname} already has metadata record.')
continue

try:
actor_name = next((user_or_role for user_or_role in publ_info['access_rights']['write']
if is_user(user_or_role)), settings.ANONYM_USER)
map_soap.soap_insert(workspace, mapname, access_rights=publ_info['access_rights'], actor_name=actor_name)
except requests.exceptions.ConnectionError:
print(traceback.format_exc())


logger.info(f' Recreate map {workspace}.{mapname} DONE!')

query = f'''select w.name, p.name
from {DB_SCHEMA}.publications p inner join
{DB_SCHEMA}.workspaces w on w.id = p.id_workspace
where p.type = %s and p.wfs_wms_status = %s and p.geodata_type != 'unknown'
order by w.name, p.name
;'''
layers = db_util.run_query(query, (LAYER_TYPE, settings.EnumWfsWmsStatus.AVAILABLE.value, ))
for workspace, layername in layers:
publ_info = get_publication_info(workspace, LAYER_TYPE, layername,
context={'keys':['access_rights', 'metadata']})

if not publ_info.get('metadata'):
logger.info(f' Recreate layer {workspace}.{layername}')
else:
logger.info(f' Layer {workspace}.{layername} already has metadata record.')
continue

try:
soap.soap_insert(workspace, layername, access_rights=publ_info['access_rights'])
except requests.exceptions.ConnectionError:
print(traceback.format_exc())

logger.info(f' Recreate layer {workspace}.{layername} DONE!')
Loading