From c6fbd4797945d0458673484b9ad20007790138f6 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 11 Dec 2020 17:28:32 +0100 Subject: [PATCH] moved back settings lib functions and _SETTINGS_HANDLER is set with wrapper --- pype/settings/lib.py | 71 ++++++++++++++++++-- pype/tools/settings/settings/widgets/base.py | 50 +++++++------- pype/tools/settings/settings/widgets/lib.py | 2 +- 3 files changed, 89 insertions(+), 34 deletions(-) diff --git a/pype/settings/lib.py b/pype/settings/lib.py index 009d855e02..d1d050cdaf 100644 --- a/pype/settings/lib.py +++ b/pype/settings/lib.py @@ -1,5 +1,6 @@ import os import json +import functools import logging import copy from .constants import ( @@ -14,7 +15,8 @@ from .constants import ( PROJECT_ANATOMY_KEY ) from .handlers import ( - SettingsFileHandler + SettingsFileHandler, + MongoSettingsHandler ) log = logging.getLogger(__name__) @@ -33,7 +35,62 @@ DEFAULTS_DIR = os.path.join( _DEFAULT_SETTINGS = None # Handler of studio overrides -SETTINGS_HANDLER = SettingsFileHandler() +_SETTINGS_HANDLER = None + + +def require_handler(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + global _SETTINGS_HANDLER + if _SETTINGS_HANDLER is None: + _SETTINGS_HANDLER = create_settings_handler() + return func(*args, **kwargs) + return wrapper + + +def create_settings_handler(): + # This may be logic which handler is used (in future) + return MongoSettingsHandler() + + +@require_handler +def save_studio_settings(data): + _SETTINGS_HANDLER.save_studio_settings(data) + + +@require_handler +def save_project_settings(project_name, overrides): + _SETTINGS_HANDLER.save_project_settings(project_name, overrides) + + +@require_handler +def save_project_anatomy(project_name, anatomy_data): + _SETTINGS_HANDLER.save_project_anatomy(project_name, anatomy_data) + + +@require_handler +def get_studio_system_settings_overrides(): + _SETTINGS_HANDLER.get_studio_system_settings_overrides() + + +@require_handler +def get_studio_project_settings_overrides(): + _SETTINGS_HANDLER.get_studio_project_settings_overrides() + + +@require_handler +def get_studio_project_anatomy_overrides(): + _SETTINGS_HANDLER.get_studio_project_anatomy_overrides() + + +@require_handler +def get_project_settings_overrides(project_name): + _SETTINGS_HANDLER.get_project_settings_overrides(project_name) + + +@require_handler +def get_project_anatomy_overrides(project_name): + _SETTINGS_HANDLER.get_project_anatomy_overrides(project_name) class DuplicatedEnvGroups(Exception): @@ -259,7 +316,7 @@ def apply_overrides(source_data, override_data): def get_system_settings(clear_metadata=True): """System settings with applied studio overrides.""" default_values = get_default_settings()[SYSTEM_SETTINGS_KEY] - studio_values = SETTINGS_HANDLER.get_studio_system_settings_overrides() + studio_values = get_studio_system_settings_overrides() result = apply_overrides(default_values, studio_values) if clear_metadata: clear_metadata_from_settings(result) @@ -269,7 +326,7 @@ def get_system_settings(clear_metadata=True): def get_default_project_settings(clear_metadata=True): """Project settings with applied studio's default project overrides.""" default_values = get_default_settings()[PROJECT_SETTINGS_KEY] - studio_values = SETTINGS_HANDLER.get_studio_project_settings_overrides() + studio_values = get_studio_project_settings_overrides() result = apply_overrides(default_values, studio_values) if clear_metadata: clear_metadata_from_settings(result) @@ -279,7 +336,7 @@ def get_default_project_settings(clear_metadata=True): def get_default_anatomy_settings(clear_metadata=True): """Project anatomy data with applied studio's default project overrides.""" default_values = get_default_settings()[PROJECT_ANATOMY_KEY] - studio_values = SETTINGS_HANDLER.get_studio_project_anatomy_overrides() + studio_values = get_studio_project_anatomy_overrides() result = apply_overrides(default_values, studio_values) if clear_metadata: clear_metadata_from_settings(result) @@ -295,7 +352,7 @@ def get_anatomy_settings(project_name, clear_metadata=True): ) studio_overrides = get_default_anatomy_settings(False) - project_overrides = SETTINGS_HANDLER.get_project_anatomy_overrides( + project_overrides = get_project_anatomy_overrides( project_name ) @@ -314,7 +371,7 @@ def get_project_settings(project_name, clear_metadata=True): ) studio_overrides = get_default_project_settings(False) - project_overrides = SETTINGS_HANDLER.get_project_settings_overrides( + project_overrides = get_project_settings_overrides( project_name ) diff --git a/pype/tools/settings/settings/widgets/base.py b/pype/tools/settings/settings/widgets/base.py index 7c09abad73..8e16c3614c 100644 --- a/pype/tools/settings/settings/widgets/base.py +++ b/pype/tools/settings/settings/widgets/base.py @@ -7,13 +7,24 @@ from pype.settings.constants import ( PROJECT_SETTINGS_KEY, PROJECT_ANATOMY_KEY ) + from pype.settings.lib import ( DEFAULTS_DIR, - SETTINGS_HANDLER, reset_default_settings, get_default_settings, + get_studio_system_settings_overrides, + get_studio_project_settings_overrides, + get_studio_project_anatomy_overrides, + + get_project_settings_overrides, + get_project_anatomy_overrides, + + save_studio_settings, + save_project_settings, + save_project_anatomy, + apply_overrides, find_environments, DuplicatedEnvGroups @@ -360,7 +371,7 @@ class SystemWidget(SettingsCategoryWidget): if not self.duplicated_env_group_validation(overrides=values): return - SETTINGS_HANDLER.save_studio_settings(values) + save_studio_settings(values) def update_values(self): default_values = lib.convert_data_to_gui_data({ @@ -372,11 +383,8 @@ class SystemWidget(SettingsCategoryWidget): if self._hide_studio_overrides: system_values = lib.NOT_SET else: - studio_system_overrides = ( - SETTINGS_HANDLER.get_studio_system_settings_overrides() - ) system_values = lib.convert_overrides_to_gui_data( - {self.main_schema_key: studio_system_overrides} + {self.main_schema_key: get_studio_system_settings_overrides()} ) for input_field in self.input_fields: @@ -540,12 +548,8 @@ class ProjectWidget(SettingsCategoryWidget): _project_anatomy = lib.NOT_SET self.is_overidable = False else: - _project_overrides = ( - SETTINGS_HANDLER.get_project_settings_overrides(project_name) - ) - _project_anatomy = ( - SETTINGS_HANDLER.get_project_anatomy_overrides(project_name) - ) + _project_overrides = get_project_settings_overrides(project_name) + _project_anatomy = get_project_anatomy_overrides(project_name) self.is_overidable = True overrides = {self.main_schema_key: { @@ -579,15 +583,11 @@ class ProjectWidget(SettingsCategoryWidget): # Saving overrides data project_overrides_data = output_data.get(PROJECT_SETTINGS_KEY, {}) - SETTINGS_HANDLER.save_project_settings( - self.project_name, project_overrides_data - ) + save_project_settings(self.project_name, project_overrides_data) # Saving anatomy data project_anatomy_data = output_data.get(PROJECT_ANATOMY_KEY, {}) - SETTINGS_HANDLER.save_project_anatomy( - self.project_name, project_anatomy_data - ) + save_project_anatomy(self.project_name, project_anatomy_data) def update_values(self): if self.project_name is not None: @@ -603,16 +603,14 @@ class ProjectWidget(SettingsCategoryWidget): if self._hide_studio_overrides: studio_values = lib.NOT_SET else: - project_settings_value = ( - SETTINGS_HANDLER.get_studio_project_settings_overrides() - ) - project_anatomy_value = ( - SETTINGS_HANDLER.get_studio_project_anatomy_overrides() - ) studio_values = lib.convert_overrides_to_gui_data({ self.main_schema_key: { - PROJECT_SETTINGS_KEY: project_settings_value, - PROJECT_ANATOMY_KEY: project_anatomy_value + PROJECT_SETTINGS_KEY: ( + get_studio_project_settings_overrides() + ), + PROJECT_ANATOMY_KEY: ( + get_studio_project_anatomy_overrides() + ) } }) diff --git a/pype/tools/settings/settings/widgets/lib.py b/pype/tools/settings/settings/widgets/lib.py index 9a6331009b..9c56f51726 100644 --- a/pype/tools/settings/settings/widgets/lib.py +++ b/pype/tools/settings/settings/widgets/lib.py @@ -2,7 +2,7 @@ import os import re import json import copy -from pype.settings.lib import ( +from pype.settings.constants import ( M_OVERRIDEN_KEY, M_ENVIRONMENT_KEY, M_DYNAMIC_KEY_LABEL