@@ -78,7 +78,7 @@ class Configuration:
7878
7979 def __init__ (self , yaml_dict : dict ):
8080 self ._activated : typing .List [str ] = []
81- self ._environments : typing .Dict [str , typing .List [str ]] = yaml_dict .get (
81+ self ._environments : typing .Dict [str , str | typing .List [str ]] = yaml_dict .get (
8282 "environments" , {}
8383 )
8484 self ._plugin_configurations : typing .Dict [
@@ -127,8 +127,6 @@ def _resolve(self, plugin_configuration: str):
127127
128128 def activate_environment (self , name : str ):
129129 """Load all plugins for a given environment."""
130- if name not in self ._environments :
131- raise ValueError (f"Environment '{ name } ' is not defined" )
132130 for config_name in self ._environments [name ]:
133131 logger .debug ("Loading plugin configuration %s" , config_name )
134132 if isinstance (self ._plugin_configurations [config_name ], pathlib .Path ):
@@ -169,9 +167,19 @@ def activate(
169167 envs = zocalo .configuration .argparse .get_specified_environments (
170168 arguments = self .environment_cmd_args
171169 )
172- if default and not envs and "default" in self . _environments :
170+ if default and not envs :
173171 envs = ["default" ]
174172 for environment in envs :
173+ if environment not in self ._environments :
174+ raise ValueError (f"Environment '{ environment } ' is not defined" )
175+ env_dict_or_alias = self ._environments [environment ]
176+ if isinstance (env_dict_or_alias , str ) and env_dict_or_alias not in envs :
177+ # Environment is an alias to another environment)
178+ if isinstance (self ._environments [env_dict_or_alias ], str ):
179+ raise ConfigurationError (
180+ f"Invalid YAML configuration: Aliased environment aliases another environment, which is not supported"
181+ )
182+ environment = env_dict_or_alias
175183 self .activate_environment (environment )
176184 return tuple (envs )
177185
@@ -288,27 +296,6 @@ def _read_configuration_yaml(configuration: str) -> dict:
288296 raise ConfigurationError (
289297 f"Invalid YAML configuration: Environment { environment } contains group { group } which is not a string or a list"
290298 )
291- # Resolve environment aliases
292- environment_aliases = {
293- environment
294- for environment in yaml_dict ["environments" ]
295- if isinstance (yaml_dict ["environments" ][environment ], str )
296- }
297- while environment_aliases :
298- for environment in environment_aliases :
299- aliased_env = yaml_dict ["environments" ][environment ]
300- if isinstance (yaml_dict ["environments" ][aliased_env ], str ):
301- # This environment links to an alias. Skip for now.
302- continue
303- yaml_dict ["environments" ][environment ] = yaml_dict ["environments" ][
304- aliased_env
305- ]
306- environment_aliases .remove (environment )
307- break
308- else :
309- raise ConfigurationError (
310- f"Invalid YAML configuration: circular environment definitions for { environment_aliases } "
311- )
312299
313300 plugin_fields : dict [str , mm .fields .Field ] = {}
314301 for key in yaml_dict :
0 commit comments