From 30897e3d508ff6beface2144f2c838703133ae98 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 26 Jan 2021 12:16:47 +0100 Subject: [PATCH] added is_file attribute for defaults --- pype/settings/entities/base_entity.py | 20 ++++++++++++++++++-- pype/settings/entities/item_entities.py | 21 ++++++++++++++++++--- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/pype/settings/entities/base_entity.py b/pype/settings/entities/base_entity.py index c6051351f5..da723353a1 100644 --- a/pype/settings/entities/base_entity.py +++ b/pype/settings/entities/base_entity.py @@ -132,7 +132,9 @@ class BaseEntity: self.value_on_not_set = getattr(self, "value_on_not_set", NOT_SET) self.is_group = False + self.is_file = False self.group_item = None + self.file_item = None self.root_item = None # NOTE was `as_widget` @@ -567,11 +569,25 @@ class RootEntity(BaseEntity): return output def settings_value(self): + if self.override_state is OverrideState.NOT_DEFINED: + return NOT_SET + output = {} for key, child_obj in self.non_gui_children.items(): value = child_obj.settings_value() - if value is not NOT_SET: - output[key] = value + if self.override_state is OverrideState.DEFAULTS: + if value is not NOT_SET: + raise TypeError(( + "Child returned NOT_SET on defaults settings. {}" + ).format(child_obj.path)) + + for _key, _value in value.items(): + new_key = "/".join([key, _key]) + output[new_key] = _value + + else: + if value is not NOT_SET: + output[key] = value return output @property diff --git a/pype/settings/entities/item_entities.py b/pype/settings/entities/item_entities.py index 3707b62ae0..a031cd2b69 100644 --- a/pype/settings/entities/item_entities.py +++ b/pype/settings/entities/item_entities.py @@ -93,22 +93,28 @@ class ItemEntity(BaseEntity): self.create_schema_object = self.parent.create_schema_object + self.is_file = schema_data.get("is_file", False) self.is_group = schema_data.get("is_group", False) self.is_in_dynamic_item = bool( not is_dynamic_item and (parent.is_dynamic_item or parent.is_in_dynamic_item) ) + # Root item reference self.root_item = self.parent.root_item + # File item reference + if self.parent.is_file: + self.file_item = self.parent + elif self.parent.file_item: + self.file_item = self.parent.file_item + + # Group item reference if self.parent.is_group: self.group_item = self.parent elif self.parent.group_item: self.group_item = self.parent.group_item - if self.is_group and self.group_item: - raise ValueError("Group item in group item") - # Dynamic item can't have key defined in it-self # - key is defined by it's parent if self.is_dynamic_item: @@ -148,6 +154,15 @@ class ItemEntity(BaseEntity): "Item is set as `is_group` but has empty `label`." ) + if self.is_group and self.group_item: + raise ValueError("Group item in group item") + + if not self.file_item and self.is_env_group: + raise ValueError(( + "Environment item is not inside file" + " item so can't store metadata for defaults." + )) + @abstractmethod def item_initalization(self): pass