From bd55312fbc4296f6464b6cc2d2f381bf4ece2c7e Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Wed, 17 Feb 2021 18:55:04 +0100 Subject: [PATCH] anatomy templates and roots see each other's overrides --- pype/settings/entities/__init__.py | 6 +- pype/settings/entities/anatomy_entities.py | 92 +++++++++++++++++++ .../schemas/schema_anatomy_templates.json | 2 +- 3 files changed, 97 insertions(+), 3 deletions(-) diff --git a/pype/settings/entities/__init__.py b/pype/settings/entities/__init__.py index a3cf7c7a54..f67286832c 100644 --- a/pype/settings/entities/__init__.py +++ b/pype/settings/entities/__init__.py @@ -102,7 +102,8 @@ from .dict_mutable_keys_entity import DictMutableKeysEntity from .anatomy_entities import ( AnatomyEntity, - AnatomyRootsEntity + AnatomyRootsEntity, + AnatomyTemplatesEntity ) @@ -147,5 +148,6 @@ __all__ = ( "DictMutableKeysEntity", "AnatomyEntity", - "AnatomyRootsEntity" + "AnatomyRootsEntity", + "AnatomyTemplatesEntity" ) diff --git a/pype/settings/entities/anatomy_entities.py b/pype/settings/entities/anatomy_entities.py index f89318e213..1b98bda4dd 100644 --- a/pype/settings/entities/anatomy_entities.py +++ b/pype/settings/entities/anatomy_entities.py @@ -5,6 +5,98 @@ from .dict_mutable_keys_entity import DictMutableKeysEntity class AnatomyEntity(DictImmutableKeysEntity): schema_types = ["anatomy"] + def _item_initalization(self): + self._roots_entity = None + self._templates_entity = None + + super(AnatomyEntity, self)._item_initalization() + + @property + def roots_entity(self): + if self._roots_entity is None: + _roots_entity = None + for child_entity in self.non_gui_children.values(): + if isinstance(child_entity, AnatomyRootsEntity): + _roots_entity = child_entity + break + + if _roots_entity is None: + raise KeyError( + "AnatomyEntity does not contain AnatomyRootsEntity" + ) + + self._roots_entity = _roots_entity + return self._roots_entity + + @property + def templates_entity(self): + if self._templates_entity is None: + _templates_entity = None + for child_entity in self.non_gui_children.values(): + if isinstance(child_entity, AnatomyTemplatesEntity): + _templates_entity = child_entity + break + + if _templates_entity is None: + raise KeyError( + "AnatomyEntity does not contain AnatomyRootsEntity" + ) + + self._templates_entity = _templates_entity + return self._templates_entity + class AnatomyRootsEntity(DictMutableKeysEntity): schema_types = ["anatomy_roots"] + + def schema_validations(self): + if not isinstance(self.parent, AnatomyEntity): + raise TypeError("Parent of {} is not AnatomyEntity object".format( + self.__class__.__name__ + )) + super(AnatomyRootsEntity, self).schema_validations() + + @property + def has_studio_override(self): + output = super(AnatomyRootsEntity, self).has_studio_override + if not output: + output = self.parent.templates_entity._child_has_studio_override + return output + + @property + def has_project_override(self): + output = super(AnatomyRootsEntity, self).has_project_override + if not output: + output = self.parent.templates_entity._child_has_project_override + return output + + +class AnatomyTemplatesEntity(DictImmutableKeysEntity): + schema_types = ["anatomy_templates"] + + def schema_validations(self): + if not isinstance(self.parent, AnatomyEntity): + raise TypeError("Parent of {} is not AnatomyEntity object".format( + self.__class__.__name__ + )) + super(AnatomyTemplatesEntity, self).schema_validations() + + @property + def has_studio_override(self): + output = super(AnatomyTemplatesEntity, self).has_studio_override + if not output: + output = ( + self.parent.roots_entity._has_studio_override + or self.parent.roots_entity._child_has_studio_override + ) + return output + + @property + def has_project_override(self): + output = super(AnatomyTemplatesEntity, self).has_project_override + if not output: + output = ( + self.parent.roots_entity._has_project_override + or self.parent.roots_entity._child_has_project_override + ) + return output diff --git a/pype/settings/entities/schemas/projects_schema/schemas/schema_anatomy_templates.json b/pype/settings/entities/schemas/projects_schema/schemas/schema_anatomy_templates.json index cffb760374..076250961e 100644 --- a/pype/settings/entities/schemas/projects_schema/schemas/schema_anatomy_templates.json +++ b/pype/settings/entities/schemas/projects_schema/schemas/schema_anatomy_templates.json @@ -1,5 +1,5 @@ { - "type": "dict", + "type": "anatomy_templates", "key": "templates", "label": "Templates", "collapsable": true,