From df78b060149dff6db27440aca8cee402be94cb0b Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Wed, 2 Aug 2023 17:32:50 +0200 Subject: [PATCH] Nuke: improve ordering publishing instances --- openpype/hosts/nuke/api/pipeline.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/openpype/hosts/nuke/api/pipeline.py b/openpype/hosts/nuke/api/pipeline.py index 2871f8afbc..045f7ec85d 100644 --- a/openpype/hosts/nuke/api/pipeline.py +++ b/openpype/hosts/nuke/api/pipeline.py @@ -539,6 +539,8 @@ def list_instances(creator_id=None): """ instances_by_order = defaultdict(list) subset_instances = [] + instance_ids = set() + for node in nuke.allNodes(recurseGroups=True): if node.Class() in ["Viewer", "Dot"]: @@ -564,6 +566,11 @@ def list_instances(creator_id=None): if creator_id and instance_data["creator_identifier"] != creator_id: continue + if instance_data["instance_id"] in instance_ids: + instance_data.pop("instance_id") + else: + instance_ids.add(instance_data["instance_id"]) + # node name could change, so update subset name data _update_subset_name_data(instance_data, node) @@ -575,19 +582,20 @@ def list_instances(creator_id=None): instances_by_order[order].append((node, instance_data)) # Sort instances based on order attribute or subset name. + # TODO: remove in future Publisher enhanced with sorting ordered_instances = [] for key in sorted(instances_by_order.keys()): - instances_by_subset = {} - for node, data in instances_by_order[key]: - instances_by_subset[data["subset"]] = (node, data) + instances_by_subset = defaultdict(list) + for node, data_ in instances_by_order[key]: + instances_by_subset[data_["subset"]].append((node, data_)) for subkey in sorted(instances_by_subset.keys()): - ordered_instances.append(instances_by_subset[subkey]) + ordered_instances.extend(instances_by_subset[subkey]) - instances_by_subset = {} - for node, data in subset_instances: - instances_by_subset[data["subset"]] = (node, data) + instances_by_subset = defaultdict(list) + for node, data_ in subset_instances: + instances_by_subset[data_["subset"]].append((node, data_)) for key in sorted(instances_by_subset.keys()): - ordered_instances.append(instances_by_subset[key]) + ordered_instances.extend(instances_by_subset[key]) return ordered_instances