fix(ftrack, global): moving asset filter to avalon hierarchy integrator

This commit is contained in:
Jakub Jezek 2020-09-23 12:55:02 +02:00
parent 8835617fe4
commit 7cc52fe28a
No known key found for this signature in database
GPG key ID: C4B96E101D2A47F3
2 changed files with 62 additions and 60 deletions

View file

@ -40,70 +40,11 @@ class IntegrateHierarchyToFtrack(pyblish.api.ContextPlugin):
optional = False
def process(self, context):
# additional inner methods
def _get_assets(input_dict):
""" Returns only asset dictionary.
Usually the last part of deep dictionary which
is not having any children
"""
for key in input_dict.keys():
# check if child key is available
if input_dict[key].get("childs"):
# loop deeper
return _get_assets(input_dict[key]["childs"])
else:
# give the dictionary with assets
return input_dict
def _set_assets(input_dict, new_assets=None):
""" Modify the hierarchy context dictionary.
It will replace the asset dictionary with only the filtred one.
"""
for key in input_dict.keys():
# check if child key is available
if input_dict[key].get("childs"):
# return if this is just for testing purpose and no
# new_assets property is avalable
if not new_assets:
return True
# test for deeper inner children availabelity
if _set_assets(input_dict[key]["childs"]):
# if one level deeper is still children available
# then process farther
_set_assets(input_dict[key]["childs"], new_assets)
else:
# or just assign the filtred asset ditionary
input_dict[key]["childs"] = new_assets
else:
# test didnt find more childs in input dictionary
return None
# processing starts here
active_assets = []
self.context = context
if "hierarchyContext" not in self.context.data:
return
hierarchy_context = self.context.data["hierarchyContext"]
hierarchy_assets = _get_assets(hierarchy_context)
# filter only the active publishing insatnces
for instance in self.context:
if instance.data.get("publish") is False:
continue
if not instance.data.get("asset"):
continue
active_assets.append(instance.data["asset"])
# filter out only assets which are activated as isntances
new_hierarchy_assets = {k: v for k, v in hierarchy_assets.items()
if k in active_assets}
# modify the hierarchy context so there are only fitred assets
_set_assets(hierarchy_context, new_hierarchy_assets)
self.log.debug(
f"__ hierarchy_context: `{pformat(hierarchy_context)}`")