From 76bf19a2351371389e2702c998f5a1c012850788 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Mon, 7 Feb 2022 11:52:15 +0100 Subject: [PATCH] added additional applications to system settings --- openpype/lib/applications.py | 42 ++++++++++++++++-- .../system_settings/applications.json | 3 +- openpype/settings/entities/enum_entity.py | 20 ++++++++- .../system_schema/schema_applications.json | 43 +++++++++++++++++++ openpype/settings/lib.py | 19 +++++++- .../settings/local_settings/apps_widget.py | 9 ++++ 6 files changed, 128 insertions(+), 8 deletions(-) diff --git a/openpype/lib/applications.py b/openpype/lib/applications.py index aa37abfdd3..afa0a31af1 100644 --- a/openpype/lib/applications.py +++ b/openpype/lib/applications.py @@ -14,8 +14,7 @@ import six from openpype.settings import ( get_system_settings, - get_project_settings, - get_environments + get_project_settings ) from openpype.settings.constants import ( METADATA_KEYS, @@ -29,8 +28,7 @@ from .profiles_filtering import filter_profiles from .local_settings import get_openpype_username from .avalon_context import ( get_workdir_data, - get_workdir_with_workdir_data, - get_workfile_template_key + get_workdir_with_workdir_data ) from .python_module_tools import ( @@ -408,11 +406,47 @@ class ApplicationManager: clear_metadata=False, exclude_locals=False ) + all_app_defs = {} + # Prepare known applications app_defs = settings["applications"] + additional_apps = {} for group_name, variant_defs in app_defs.items(): if group_name in METADATA_KEYS: continue + if group_name == "additional_apps": + additional_apps = variant_defs + else: + all_app_defs[group_name] = variant_defs + + # Prepare additional applications + # - First find dynamic keys that can be used as labels of group + dynamic_keys = {} + for group_name, variant_defs in additional_apps.items(): + if group_name == M_DYNAMIC_KEY_LABEL: + dynamic_keys = variant_defs + break + + # Add additional apps to known applications + for group_name, variant_defs in additional_apps.items(): + if group_name in METADATA_KEYS: + continue + + # Determine group label + label = variant_defs.get("label") + if not label: + # Look for label set in dynamic labels + label = dynamic_keys.get(group_name) + if not label: + label = group_name + variant_defs["label"] = label + + all_app_defs[group_name] = variant_defs + + for group_name, variant_defs in all_app_defs.items(): + if group_name in METADATA_KEYS: + continue + group = ApplicationGroup(group_name, variant_defs, self) self.app_groups[group_name] = group for app in group: diff --git a/openpype/settings/defaults/system_settings/applications.json b/openpype/settings/defaults/system_settings/applications.json index b1f84944c5..e6b9ccdc67 100644 --- a/openpype/settings/defaults/system_settings/applications.json +++ b/openpype/settings/defaults/system_settings/applications.json @@ -1196,5 +1196,6 @@ "1-1": "1.1" } } - } + }, + "additional_apps": {} } \ No newline at end of file diff --git a/openpype/settings/entities/enum_entity.py b/openpype/settings/entities/enum_entity.py index 010377426a..92a397afba 100644 --- a/openpype/settings/entities/enum_entity.py +++ b/openpype/settings/entities/enum_entity.py @@ -280,12 +280,30 @@ class AppsEnumEntity(BaseEnumEntity): valid_keys = set() enum_items_list = [] applications_entity = system_settings_entity["applications"] + app_entities = {} + additional_app_names = set() + additional_apps_entity = None for group_name, app_group in applications_entity.items(): + if group_name != "additional_apps": + app_entities[group_name] = app_group + continue + + additional_apps_entity = app_group + for _group_name, _group in app_group.items(): + additional_app_names.add(_group_name) + app_entities[_group_name] = _group + + for group_name, app_group in app_entities.items(): enabled_entity = app_group.get("enabled") if enabled_entity and not enabled_entity.value: continue - group_label = app_group["label"].value + if group_name in additional_app_names: + group_label = additional_apps_entity.get_key_label(group_name) + if not group_label: + group_label = group_name + else: + group_label = app_group["label"].value variants_entity = app_group["variants"] for variant_name, variant_entity in variants_entity.items(): enabled_entity = variant_entity.get("enabled") diff --git a/openpype/settings/entities/schemas/system_schema/schema_applications.json b/openpype/settings/entities/schemas/system_schema/schema_applications.json index dcca9a186f..20be33320d 100644 --- a/openpype/settings/entities/schemas/system_schema/schema_applications.json +++ b/openpype/settings/entities/schemas/system_schema/schema_applications.json @@ -88,6 +88,49 @@ { "type": "schema", "name": "schema_djv" + }, + { + "type": "dict-modifiable", + "key": "additional_apps", + "label": "Additional", + "collapsible": true, + "collapsible_key": true, + "object_type": { + "type": "dict", + "children": [ + { + "type": "boolean", + "key": "enabled", + "label": "Enabled" + }, + { + "type": "schema_template", + "name": "template_host_unchangables", + "skip_paths": ["host_name", "label"] + }, + { + "key": "environment", + "label": "Environment", + "type": "raw-json" + }, + { + "type": "dict-modifiable", + "key": "variants", + "collapsible_key": true, + "use_label_wrap": false, + "object_type": { + "type": "dict", + "collapsible": true, + "children": [ + { + "type": "schema_template", + "name": "template_host_variant_items" + } + ] + } + } + ] + } } ] } diff --git a/openpype/settings/lib.py b/openpype/settings/lib.py index 1b5682536a..596c6628e0 100644 --- a/openpype/settings/lib.py +++ b/openpype/settings/lib.py @@ -580,11 +580,26 @@ def apply_local_settings_on_system_settings(system_settings, local_settings): return current_platform = platform.system().lower() + apps_settings = system_settings["applications"] + additional_apps = apps_settings["additional_apps"] for app_group_name, value in local_settings["applications"].items(): - if not value or app_group_name not in system_settings["applications"]: + if not value: continue - variants = system_settings["applications"][app_group_name]["variants"] + if ( + app_group_name not in apps_settings + and app_group_name not in additional_apps + ): + continue + + if app_group_name in apps_settings: + variants = apps_settings[app_group_name]["variants"] + + else: + variants = ( + apps_settings["additional_apps"][app_group_name]["variants"] + ) + for app_name, app_value in value.items(): if ( not app_value diff --git a/openpype/tools/settings/local_settings/apps_widget.py b/openpype/tools/settings/local_settings/apps_widget.py index 28bc726300..344979218a 100644 --- a/openpype/tools/settings/local_settings/apps_widget.py +++ b/openpype/tools/settings/local_settings/apps_widget.py @@ -180,7 +180,16 @@ class LocalApplicationsWidgets(QtWidgets.QWidget): self.content_layout.removeItem(item) self.widgets_by_group_name.clear() + app_items = {} for key, entity in self.system_settings_entity["applications"].items(): + if key != "additional_apps": + app_items[key] = entity + continue + + for _key, _entity in entity.items(): + app_items[_key] = _entity + + for key, entity in app_items.items(): # Filter not enabled app groups if not entity["enabled"].value: continue