global plugins are using query functions

This commit is contained in:
Jakub Trllo 2022-07-01 11:47:01 +02:00
parent 12d23347fc
commit f0f0a87c5d
5 changed files with 53 additions and 39 deletions

View file

@ -10,6 +10,7 @@ Provides:
import pyblish.api
from openpype.client import get_project, get_asset_by_name
from openpype.pipeline import legacy_io
@ -25,10 +26,7 @@ class CollectAvalonEntities(pyblish.api.ContextPlugin):
asset_name = legacy_io.Session["AVALON_ASSET"]
task_name = legacy_io.Session["AVALON_TASK"]
project_entity = legacy_io.find_one({
"type": "project",
"name": project_name
})
project_entity = get_project(project_name)
assert project_entity, (
"Project '{0}' was not found."
).format(project_name)
@ -39,11 +37,8 @@ class CollectAvalonEntities(pyblish.api.ContextPlugin):
if not asset_name:
self.log.info("Context is not set. Can't collect global data.")
return
asset_entity = legacy_io.find_one({
"type": "asset",
"name": asset_name,
"parent": project_entity["_id"]
})
asset_entity = get_asset_by_name(project_name, asset_name)
assert asset_entity, (
"No asset found by the name '{0}' in project '{1}'"
).format(asset_name, project_name)

View file

@ -1,7 +1,6 @@
from bson.objectid import ObjectId
import pyblish.api
from openpype.client import get_representations
from openpype.pipeline import (
registered_host,
legacy_io,
@ -39,23 +38,29 @@ class CollectSceneLoadedVersions(pyblish.api.ContextPlugin):
return
loaded_versions = []
_containers = list(host.ls())
_repr_ids = [ObjectId(c["representation"]) for c in _containers]
repre_docs = legacy_io.find(
{"_id": {"$in": _repr_ids}},
projection={"_id": 1, "parent": 1}
containers = list(host.ls())
repre_ids = {
container["representation"]
for container in containers
}
project_name = legacy_io.active_project()
repre_docs = get_representations(
project_name,
representation_ids=repre_ids,
fields=["_id", "parent"]
)
version_by_repr = {
str(doc["_id"]): doc["parent"]
repre_doc_by_str_id = {
str(doc["_id"]): doc
for doc in repre_docs
}
# QUESTION should we add same representation id when loaded multiple
# times?
for con in _containers:
for con in containers:
repre_id = con["representation"]
version_id = version_by_repr.get(repre_id)
if version_id is None:
repre_doc = repre_doc_by_str_id.get(repre_id)
if repre_doc is None:
self.log.warning((
"Skipping container,"
" did not find representation document. {}"
@ -66,8 +71,8 @@ class CollectSceneLoadedVersions(pyblish.api.ContextPlugin):
# may have more then one representation that are same version
version = {
"subsetName": con["name"],
"representation": ObjectId(repre_id),
"version": version_id,
"representation": repre_doc["_id"],
"version": repre_doc["parent"],
}
loaded_versions.append(version)

View file

@ -1,5 +1,11 @@
from copy import deepcopy
import pyblish.api
from openpype.client import (
get_project,
get_asset_by_id,
get_asset_by_name,
get_archived_assets
)
from openpype.pipeline import legacy_io
@ -19,14 +25,14 @@ class ExtractHierarchyToAvalon(pyblish.api.ContextPlugin):
if not legacy_io.Session:
legacy_io.install()
project_name = legacy_io.active_project()
hierarchy_context = self._get_active_assets(context)
self.log.debug("__ hierarchy_context: {}".format(hierarchy_context))
self.project = None
self.import_to_avalon(hierarchy_context)
self.import_to_avalon(project_name, hierarchy_context)
def import_to_avalon(self, input_data, parent=None):
def import_to_avalon(self, project_name, input_data, parent=None):
for name in input_data:
self.log.info("input_data[name]: {}".format(input_data[name]))
entity_data = input_data[name]
@ -62,7 +68,7 @@ class ExtractHierarchyToAvalon(pyblish.api.ContextPlugin):
update_data = True
# Process project
if entity_type.lower() == "project":
entity = legacy_io.find_one({"type": "project"})
entity = get_project(project_name)
# TODO: should be in validator?
assert (entity is not None), "Did not find project in DB"
@ -79,7 +85,7 @@ class ExtractHierarchyToAvalon(pyblish.api.ContextPlugin):
)
# Else process assset
else:
entity = legacy_io.find_one({"type": "asset", "name": name})
entity = get_asset_by_name(project_name, name)
if entity:
# Do not override data, only update
cur_entity_data = entity.get("data") or {}
@ -103,10 +109,10 @@ class ExtractHierarchyToAvalon(pyblish.api.ContextPlugin):
# Skip updating data
update_data = False
archived_entities = legacy_io.find({
"type": "archived_asset",
"name": name
})
archived_entities = get_archived_assets(
project_name,
asset_names=[name]
)
unarchive_entity = None
for archived_entity in archived_entities:
archived_parents = (
@ -120,7 +126,9 @@ class ExtractHierarchyToAvalon(pyblish.api.ContextPlugin):
if unarchive_entity is None:
# Create entity if doesn"t exist
entity = self.create_avalon_asset(name, data)
entity = self.create_avalon_asset(
project_name, name, data
)
else:
# Unarchive if entity was archived
entity = self.unarchive_entity(unarchive_entity, data)
@ -133,7 +141,9 @@ class ExtractHierarchyToAvalon(pyblish.api.ContextPlugin):
)
if "childs" in entity_data:
self.import_to_avalon(entity_data["childs"], entity)
self.import_to_avalon(
project_name, entity_data["childs"], entity
)
def unarchive_entity(self, entity, data):
# Unarchived asset should not use same data
@ -151,7 +161,7 @@ class ExtractHierarchyToAvalon(pyblish.api.ContextPlugin):
)
return new_entity
def create_avalon_asset(self, name, data):
def create_avalon_asset(self, project_name, name, data):
item = {
"schema": "openpype:asset-3.0",
"name": name,
@ -162,7 +172,7 @@ class ExtractHierarchyToAvalon(pyblish.api.ContextPlugin):
self.log.debug("Creating asset: {}".format(item))
entity_id = legacy_io.insert_one(item).inserted_id
return legacy_io.find_one({"_id": entity_id})
return get_asset_by_id(project_name, entity_id)
def _get_active_assets(self, context):
""" Returns only asset dictionary.

View file

@ -8,6 +8,7 @@ import six
import pyblish.api
from bson.objectid import ObjectId
from openpype.client import get_version_by_id
from openpype.pipeline import legacy_io
@ -70,7 +71,7 @@ class IntegrateThumbnails(pyblish.api.InstancePlugin):
thumbnail_template = anatomy.templates["publish"]["thumbnail"]
version = legacy_io.find_one({"_id": thumb_repre["parent"]})
version = get_version_by_id(project_name, thumb_repre["parent"])
if not version:
raise AssertionError(
"There does not exist version with id {}".format(

View file

@ -3,6 +3,7 @@ from pprint import pformat
import pyblish.api
from openpype.pipeline import legacy_io
from openpype.client import get_assets
class ValidateEditorialAssetName(pyblish.api.ContextPlugin):
@ -29,8 +30,10 @@ class ValidateEditorialAssetName(pyblish.api.ContextPlugin):
if not legacy_io.Session:
legacy_io.install()
db_assets = list(legacy_io.find(
{"type": "asset"}, {"name": 1, "data.parents": 1}))
project_name = legacy_io.active_project()
db_assets = list(get_assets(
project_name, fields=["name", "data.parents"]
))
self.log.debug("__ db_assets: {}".format(db_assets))
asset_db_docs = {