Skip to content

Commit 34e98c1

Browse files
committed
Filter internal print layers from visibility preset, honour lockedVisibilityPreset config setting
1 parent 1852cae commit 34e98c1

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

src/config_generator/map_viewer_config.py

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def __init__(self, tenant_path, generator_config, themes_reader,
7777
7878
:param str tenant_path: Path to config files of tenant
7979
:param obj generator_config: ConfigGenerator config
80-
:param CapabilitiesReader themes_reader: ThemesReader
80+
:param ThemeReader themes_reader: ThemesReader
8181
:param ConfigModels config_models: Helper for ORM models
8282
:param str schema_url: JSON schema URL for service config
8383
:param obj service_config: Additional service config
@@ -453,20 +453,27 @@ def theme_item(self, cfg_item, themes_config, assets_dir, autogenExternalLayers,
453453
else:
454454
item['initialBbox'] = item['bbox']
455455

456+
# Visibility presets
457+
internal_print_layers = cap.get('internal_print_layers', [])
456458
visibilityPresets = self.themes_reader.visibility_presets(service_name)
457-
item['visibilityPresets'] = {}
458-
visibilityPresetsBlacklist = [
459-
re.compile(
460-
'^' + '.*'.join(re.escape(part) for part in re.split(r'\*+', pattern)) + '$'
461-
)
462-
for pattern in cfg_item.get('visibilityPresetsBlacklist', [])
463-
]
464-
for key in visibilityPresets:
465-
for pattern in visibilityPresetsBlacklist:
466-
if pattern.match(key):
467-
break
468-
else:
469-
item['visibilityPresets'][key] = visibilityPresets[key]
459+
lockedPreset = visibilityPresets.get(cfg_item.get('lockedVisibilityPreset'))
460+
if not lockedPreset:
461+
item['visibilityPresets'] = {}
462+
visibilityPresetsBlacklist = [
463+
re.compile(
464+
'^' + '.*'.join(re.escape(part) for part in re.split(r'\*+', pattern)) + '$'
465+
)
466+
for pattern in cfg_item.get('visibilityPresetsBlacklist', [])
467+
]
468+
for key in visibilityPresets:
469+
for pattern in visibilityPresetsBlacklist:
470+
if pattern.match(key):
471+
break
472+
else:
473+
item['visibilityPresets'][key] = dict(
474+
filter(lambda kv: kv[0] not in internal_print_layers, visibilityPresets[key].items())
475+
)
476+
470477

471478
# get search layers from searchProviders
472479
search_providers = cfg_item.get('searchProviders', themes_config.get('defaultSearchProviders', []))
@@ -491,7 +498,7 @@ def theme_item(self, cfg_item, themes_config, assets_dir, autogenExternalLayers,
491498
newExternalLayers = []
492499
for layer in root_layer.get('layers', []):
493500
layers.append(self.collect_layers(
494-
layer, search_layers, 1, collapseLayerGroupsBelowLevel, newExternalLayers, service_name, featureReports))
501+
layer, search_layers, 1, collapseLayerGroupsBelowLevel, newExternalLayers, service_name, featureReports, lockedPreset))
495502

496503
# Inject crs in wmts resource string
497504
for entry in newExternalLayers:
@@ -727,7 +734,7 @@ def set_optional_config(self, cfg_item, field, item):
727734
if field in cfg_item:
728735
item[field] = cfg_item.get(field)
729736

730-
def collect_layers(self, layer, search_layers, level, collapseBelowLevel, externalLayers, service_name, featureReports):
737+
def collect_layers(self, layer, search_layers, level, collapseBelowLevel, externalLayers, service_name, featureReports, lockedPreset):
731738
"""Recursively collect layer tree from capabilities.
732739
733740
:param obj layer: Layer or group layer
@@ -746,7 +753,7 @@ def collect_layers(self, layer, search_layers, level, collapseBelowLevel, extern
746753
for sublayer in layer['layers']:
747754
# recursively collect sub layer
748755
sublayers.append(self.collect_layers(
749-
sublayer, search_layers, level + 1, collapseBelowLevel, externalLayers, service_name, featureReports))
756+
sublayer, search_layers, level + 1, collapseBelowLevel, externalLayers, service_name, featureReports, lockedPreset))
750757

751758
# abstract
752759
if 'abstract' in layer:
@@ -781,6 +788,11 @@ def collect_layers(self, layer, search_layers, level, collapseBelowLevel, extern
781788
item_layer['style'] = list(item_layer['styles'])[0]
782789
else:
783790
item_layer['style'] = ''
791+
792+
if lockedPreset and layer['name'] in lockedPreset:
793+
item_layer['styles'] = [lockedPreset[layer['name']]]
794+
item_layer['style'] = lockedPreset[layer['name']]
795+
784796
if 'display_field' in layer:
785797
item_layer['displayField'] = layer.get('display_field')
786798
item_layer['opacity'] = layer['opacity']

0 commit comments

Comments
 (0)