@@ -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