From 649ddf19c9ca49b5d0838045626a47c41ac17767 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Mon, 25 Jul 2022 14:40:53 +0200 Subject: [PATCH 1/5] query representation using query function --- openpype/plugins/publish/integrate.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/openpype/plugins/publish/integrate.py b/openpype/plugins/publish/integrate.py index 8532691e61..597ed9844e 100644 --- a/openpype/plugins/publish/integrate.py +++ b/openpype/plugins/publish/integrate.py @@ -10,6 +10,9 @@ from pymongo import DeleteMany, ReplaceOne, InsertOne, UpdateOne import pyblish.api import openpype.api +from openpype.client import ( + get_representations, +) from openpype.lib.profiles_filtering import filter_profiles from openpype.lib.file_transaction import FileTransaction from openpype.pipeline import legacy_io @@ -274,6 +277,8 @@ class IntegrateAsset(pyblish.api.InstancePlugin): return filtered_repres def register(self, instance, file_transactions, filtered_repres): + project_name = legacy_io.active_project() + instance_stagingdir = instance.data.get("stagingDir") if not instance_stagingdir: self.log.info(( @@ -295,13 +300,11 @@ class IntegrateAsset(pyblish.api.InstancePlugin): # Get existing representations (if any) existing_repres_by_name = { - repres["name"].lower(): repres for repres in legacy_io.find( - { - "parent": version["_id"], - "type": "representation" - }, - # Only care about id and name of existing representations - projection={"_id": True, "name": True} + repre_doc["name"].lower(): repre_doc + for repre_doc in get_representations( + project_name, + version_ids=version["_id"], + fields=["_id", "name"] ) } From e7c937bdc086e214fc05a5344b516257ee11751a Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Mon, 25 Jul 2022 14:42:02 +0200 Subject: [PATCH 2/5] use query function to query subset document --- openpype/plugins/publish/integrate.py | 31 +++++++++++++-------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/openpype/plugins/publish/integrate.py b/openpype/plugins/publish/integrate.py index 597ed9844e..5ac5680cfa 100644 --- a/openpype/plugins/publish/integrate.py +++ b/openpype/plugins/publish/integrate.py @@ -12,6 +12,7 @@ import pyblish.api import openpype.api from openpype.client import ( get_representations, + get_subset_by_name, ) from openpype.lib.profiles_filtering import filter_profiles from openpype.lib.file_transaction import FileTransaction @@ -294,7 +295,7 @@ class IntegrateAsset(pyblish.api.InstancePlugin): template_name = self.get_template_name(instance) - subset, subset_writes = self.prepare_subset(instance) + subset, subset_writes = self.prepare_subset(instance, project_name) version, version_writes = self.prepare_version(instance, subset) instance.data["versionEntity"] = version @@ -429,17 +430,15 @@ class IntegrateAsset(pyblish.api.InstancePlugin): self.log.info("Registered {} representations" "".format(len(prepared_representations))) - def prepare_subset(self, instance): - asset = instance.data.get("assetEntity") + def prepare_subset(self, instance, project_name): + asset_doc = instance.data.get("assetEntity") subset_name = instance.data["subset"] self.log.debug("Subset: {}".format(subset_name)) # Get existing subset if it exists - subset = legacy_io.find_one({ - "type": "subset", - "parent": asset["_id"], - "name": subset_name - }) + subset_doc = get_subset_by_name( + project_name, subset_name, asset_doc["_id"] + ) # Define subset data data = { @@ -451,33 +450,33 @@ class IntegrateAsset(pyblish.api.InstancePlugin): data["subsetGroup"] = subset_group bulk_writes = [] - if subset is None: + if subset_doc is None: # Create a new subset self.log.info("Subset '%s' not found, creating ..." % subset_name) - subset = { + subset_doc = { "_id": ObjectId(), "schema": "openpype:subset-3.0", "type": "subset", "name": subset_name, "data": data, - "parent": asset["_id"] + "parent": asset_doc["_id"] } - bulk_writes.append(InsertOne(subset)) + bulk_writes.append(InsertOne(subset_doc)) else: # Update existing subset data with new data and set in database. # We also change the found subset in-place so we don't need to # re-query the subset afterwards - subset["data"].update(data) + subset_doc["data"].update(data) bulk_writes.append(UpdateOne( - {"type": "subset", "_id": subset["_id"]}, + {"type": "subset", "_id": subset_doc["_id"]}, {"$set": { - "data": subset["data"] + "data": subset_doc["data"] }} )) self.log.info("Prepared subset: {}".format(subset_name)) - return subset, bulk_writes + return subset_doc, bulk_writes def prepare_version(self, instance, subset): From 1a5258b2fe7d0dd2ec642b3648ba2e17707105b0 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Mon, 25 Jul 2022 14:43:08 +0200 Subject: [PATCH 3/5] use query function to get version document --- openpype/plugins/publish/integrate.py | 31 ++++++++++++++------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/openpype/plugins/publish/integrate.py b/openpype/plugins/publish/integrate.py index 5ac5680cfa..6236724228 100644 --- a/openpype/plugins/publish/integrate.py +++ b/openpype/plugins/publish/integrate.py @@ -13,6 +13,7 @@ import openpype.api from openpype.client import ( get_representations, get_subset_by_name, + get_version_by_name, ) from openpype.lib.profiles_filtering import filter_profiles from openpype.lib.file_transaction import FileTransaction @@ -478,40 +479,40 @@ class IntegrateAsset(pyblish.api.InstancePlugin): self.log.info("Prepared subset: {}".format(subset_name)) return subset_doc, bulk_writes - def prepare_version(self, instance, subset): - + def prepare_version(self, instance, subset_doc, project_name): version_number = instance.data["version"] - version = { + version_doc = { "schema": "openpype:version-3.0", "type": "version", - "parent": subset["_id"], + "parent": subset_doc["_id"], "name": version_number, "data": self.create_version_data(instance) } - existing_version = legacy_io.find_one({ - 'type': 'version', - 'parent': subset["_id"], - 'name': version_number - }, projection={"_id": True}) + existing_version = get_version_by_name( + project_name, + version_number, + subset_doc["_id"], + fields=["_id"] + ) if existing_version: self.log.debug("Updating existing version ...") - version["_id"] = existing_version["_id"] + version_doc["_id"] = existing_version["_id"] else: self.log.debug("Creating new version ...") - version["_id"] = ObjectId() + version_doc["_id"] = ObjectId() bulk_writes = [ReplaceOne( - filter={"_id": version["_id"]}, - replacement=version, + filter={"_id": version_doc["_id"]}, + replacement=version_doc, upsert=True )] - self.log.info("Prepared version: v{0:03d}".format(version["name"])) + self.log.info("Prepared version: v{0:03d}".format(version_doc["name"])) - return version, bulk_writes + return version_doc, bulk_writes def prepare_representation(self, repre, template_name, From ede691c3e90244fa46a388ad4280bf22b0c50d31 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Mon, 25 Jul 2022 18:20:57 +0200 Subject: [PATCH 4/5] fix missing arg --- openpype/plugins/publish/integrate.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openpype/plugins/publish/integrate.py b/openpype/plugins/publish/integrate.py index 6236724228..0193d136c2 100644 --- a/openpype/plugins/publish/integrate.py +++ b/openpype/plugins/publish/integrate.py @@ -297,7 +297,9 @@ class IntegrateAsset(pyblish.api.InstancePlugin): template_name = self.get_template_name(instance) subset, subset_writes = self.prepare_subset(instance, project_name) - version, version_writes = self.prepare_version(instance, subset) + version, version_writes = self.prepare_version( + instance, subset, project_name + ) instance.data["versionEntity"] = version # Get existing representations (if any) From 6ae84ca5e6dec80990d13950d4226a7e66a99e66 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Mon, 25 Jul 2022 18:23:41 +0200 Subject: [PATCH 5/5] fix passed argument to get_representations --- openpype/plugins/publish/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/plugins/publish/integrate.py b/openpype/plugins/publish/integrate.py index 0193d136c2..8048ce3ab9 100644 --- a/openpype/plugins/publish/integrate.py +++ b/openpype/plugins/publish/integrate.py @@ -307,7 +307,7 @@ class IntegrateAsset(pyblish.api.InstancePlugin): repre_doc["name"].lower(): repre_doc for repre_doc in get_representations( project_name, - version_ids=version["_id"], + version_ids=[version["_id"]], fields=["_id", "name"] ) }