diff --git a/openpype/settings/handlers.py b/openpype/settings/handlers.py index 6274273b13..c3ca868d73 100644 --- a/openpype/settings/handlers.py +++ b/openpype/settings/handlers.py @@ -248,6 +248,77 @@ class MongoSettingsHandler(SettingsHandler): general_data[M_OVERRIDEN_KEY].remove(key) return output + def _apply_global_settings( + self, system_settings_document, globals_document + ): + """Apply global settings data to system settings. + + Applification is skipped if document with global settings is not + available or does not have set data in. + + System settings document is "faked" like it exists if global document + has set values. + + Args: + system_settings_document (dict): System settings document from + MongoDB. + globals_document (dict): Global settings document from MongoDB. + + Returns: + Merged document which has applied global settings data. + """ + # Skip if globals document is not available + if ( + not globals_document + or "data" not in globals_document + or not globals_document["data"] + ): + return system_settings_document + + globals_data = globals_document["data"] + # Check if data contain any key from predefined keys + any_key_found = False + if globals_data: + for key in self.global_general_keys: + if key in globals_data: + any_key_found = True + break + + # Skip if any key from predefined key was not found in globals + if not any_key_found: + return system_settings_document + + # "Fake" system settings document if document does not exist + # - global settings document may exist but system settings not yet + if not system_settings_document: + system_settings_document = {} + + if "data" in system_settings_document: + system_settings_data = system_settings_document["data"] + else: + system_settings_data = {} + system_settings_document["data"] = system_settings_data + + if "general" in system_settings_data: + system_general = system_settings_data["general"] + else: + system_general = {} + system_settings_data["general"] = system_general + + overriden_keys = system_general.get(M_OVERRIDEN_KEY) or [] + for key in self.global_general_keys: + if key not in globals_data: + continue + + system_general[key] = globals_data[key] + if key not in overriden_keys: + overriden_keys.append(key) + + if overriden_keys: + system_general[M_OVERRIDEN_KEY] = overriden_keys + + return system_settings_document + def save_studio_settings(self, data): """Save studio overrides of system settings.