Merge branch 'develop' into feature/host_settings

This commit is contained in:
Milan Kolar 2020-10-02 15:26:31 +02:00
commit cf827a3a72
8 changed files with 599 additions and 92 deletions

View file

@ -6,9 +6,11 @@ import copy
log = logging.getLogger(__name__)
# Metadata keys for work with studio and project overrides
OVERRIDEN_KEY = "__overriden_keys__"
M_OVERRIDEN_KEY = "__overriden_keys__"
# Metadata key for storing information about environments
M_ENVIRONMENT_KEY = "__environment_keys__"
# NOTE key popping not implemented yet
POP_KEY = "__pop_key__"
M_POP_KEY = "__pop_key__"
# Folder where studio overrides are stored
STUDIO_OVERRIDES_PATH = os.environ["PYPE_PROJECT_CONFIGS"]
@ -111,6 +113,32 @@ def load_json(fpath):
return {}
def find_environments(data):
if not data or not isinstance(data, dict):
return
output = {}
if M_ENVIRONMENT_KEY in data:
metadata = data.pop(M_ENVIRONMENT_KEY)
for env_group_key, env_keys in metadata.items():
output[env_group_key] = {}
for key in env_keys:
output[env_group_key][key] = data[key]
for value in data.values():
result = find_environments(value)
if not result:
continue
for env_group_key, env_values in result.items():
if env_group_key not in output:
output[env_group_key] = {}
for env_key, env_value in env_values.items():
output[env_group_key][env_key] = env_value
return output
def subkey_merge(_dict, value, keys):
key = keys.pop(0)
if not keys:
@ -223,13 +251,13 @@ def project_anatomy_overrides(project_name):
def merge_overrides(global_dict, override_dict):
if OVERRIDEN_KEY in override_dict:
overriden_keys = set(override_dict.pop(OVERRIDEN_KEY))
if M_OVERRIDEN_KEY in override_dict:
overriden_keys = set(override_dict.pop(M_OVERRIDEN_KEY))
else:
overriden_keys = set()
for key, value in override_dict.items():
if value == POP_KEY:
if value == M_POP_KEY:
global_dict.pop(key)
elif (
@ -271,6 +299,8 @@ def project_settings(project_name):
def environments():
default_values = default_settings()[ENVIRONMENTS_KEY]
studio_values = studio_system_settings()
return apply_overrides(default_values, studio_values)
envs = copy.deepcopy(default_settings()[ENVIRONMENTS_KEY])
envs_from_system_settings = find_environments(system_settings())
for env_group_key, values in envs_from_system_settings.items():
envs[env_group_key] = values
return envs