Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Commit

Permalink
Merge pull request #3393 from pypeclub/feature/OP-3375_Use-query-func…
Browse files Browse the repository at this point in the history
…tions-in-Hiero

Hiero: Use client query functions
  • Loading branch information
iLLiCiTiT authored Jun 22, 2022
2 parents cfc5df1 + 52179d4 commit 2074e65
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 51 deletions.
89 changes: 61 additions & 28 deletions openpype/hosts/hiero/api/lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,13 @@
import hiero

from Qt import QtWidgets
from bson.objectid import ObjectId

from openpype.client import (
get_project,
get_versions,
get_last_versions,
get_representations,
)
from openpype.pipeline import legacy_io
from openpype.api import (Logger, Anatomy, get_anatomy_settings)
from . import tags
Expand Down Expand Up @@ -477,7 +482,7 @@ def sync_avalon_data_to_workfile():
project.setProjectRoot(active_project_root)

# get project data from avalon db
project_doc = legacy_io.find_one({"type": "project"})
project_doc = get_project(project_name)
project_data = project_doc["data"]

log.debug("project_data: {}".format(project_data))
Expand Down Expand Up @@ -1065,35 +1070,63 @@ def check_inventory_versions(track_items=None):
clip_color_last = "green"
clip_color = "red"

# get all track items from current timeline
item_with_repre_id = []
repre_ids = set()
# Find all containers and collect it's node and representation ids
for track_item in track_item:
container = parse_container(track_item)
if container:
# get representation from io
representation = legacy_io.find_one({
"type": "representation",
"_id": ObjectId(container["representation"])
})

# Get start frame from version data
version = legacy_io.find_one({
"type": "version",
"_id": representation["parent"]
})

# get all versions in list
versions = legacy_io.find({
"type": "version",
"parent": version["parent"]
}).distinct('name')

max_version = max(versions)

# set clip colour
if version.get("name") == max_version:
track_item.source().binItem().setColor(clip_color_last)
else:
track_item.source().binItem().setColor(clip_color)
repre_id = container["representation"]
repre_ids.add(repre_id)
item_with_repre_id.append((track_item, repre_id))

# Skip if nothing was found
if not repre_ids:
return

project_name = legacy_io.active_project()
# Find representations based on found containers
repre_docs = get_representations(
project_name,
repre_ids=repre_ids,
fields=["_id", "parent"]
)
# Store representations by id and collect version ids
repre_docs_by_id = {}
version_ids = set()
for repre_doc in repre_docs:
# Use stringed representation id to match value in containers
repre_id = str(repre_doc["_id"])
repre_docs_by_id[repre_id] = repre_doc
version_ids.add(repre_doc["parent"])

version_docs = get_versions(
project_name, version_ids, fields=["_id", "name", "parent"]
)
# Store versions by id and collect subset ids
version_docs_by_id = {}
subset_ids = set()
for version_doc in version_docs:
version_docs_by_id[version_doc["_id"]] = version_doc
subset_ids.add(version_doc["parent"])

# Query last versions based on subset ids
last_versions_by_subset_id = get_last_versions(
project_name, subset_ids=subset_ids, fields=["_id", "parent"]
)

for item in item_with_repre_id:
# Some python versions of nuke can't unfold tuple in for loop
track_item, repre_id = item

repre_doc = repre_docs_by_id[repre_id]
version_doc = version_docs_by_id[repre_doc["parent"]]
last_version_doc = last_versions_by_subset_id[version_doc["parent"]]
# Check if last version is same as current version
if version_doc["_id"] == last_version_doc["_id"]:
track_item.source().binItem().setColor(clip_color_last)
else:
track_item.source().binItem().setColor(clip_color)


def selection_changed_timeline(event):
Expand Down
9 changes: 7 additions & 2 deletions openpype/hosts/hiero/api/tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import os
import hiero

from openpype.client import get_project, get_assets
from openpype.api import Logger
from openpype.pipeline import legacy_io

Expand Down Expand Up @@ -141,7 +142,9 @@ def add_tag_to_bin(root_bin, name, data):
nks_pres_tags = tag_data()

# Get project task types.
tasks = legacy_io.find_one({"type": "project"})["config"]["tasks"]
project_name = legacy_io.active_project()
project_doc = get_project(project_name)
tasks = project_doc["config"]["tasks"]
nks_pres_tags["[Tasks]"] = {}
log.debug("__ tasks: {}".format(tasks))
for task_type in tasks.keys():
Expand All @@ -159,7 +162,9 @@ def add_tag_to_bin(root_bin, name, data):
# asset builds and shots.
if int(os.getenv("TAG_ASSETBUILD_STARTUP", 0)) == 1:
nks_pres_tags["[AssetBuilds]"] = {}
for asset in legacy_io.find({"type": "asset"}):
for asset in get_assets(
project_name, fields=["name", "data.entityType"]
):
if asset["data"]["entityType"] == "AssetBuild":
nks_pres_tags["[AssetBuilds]"][asset["name"]] = {
"editable": "1",
Expand Down
37 changes: 17 additions & 20 deletions openpype/hosts/hiero/plugins/load/load_clip.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
from openpype.client import (
get_version_by_id,
get_last_version_by_subset_id
)
from openpype.pipeline import (
legacy_io,
get_representation_path,
Expand Down Expand Up @@ -103,12 +107,12 @@ def update(self, container, representation):
namespace = container['namespace']
track_item = phiero.get_track_items(
track_item_name=namespace).pop()
version = legacy_io.find_one({
"type": "version",
"_id": representation["parent"]
})
version_data = version.get("data", {})
version_name = version.get("name", None)

project_name = legacy_io.active_project()
version_doc = get_version_by_id(project_name, representation["parent"])

version_data = version_doc.get("data", {})
version_name = version_doc.get("name", None)
colorspace = version_data.get("colorspace", None)
object_name = "{}_{}".format(name, namespace)
file = get_representation_path(representation).replace("\\", "/")
Expand Down Expand Up @@ -143,7 +147,7 @@ def update(self, container, representation):
})

# update color of clip regarding the version order
self.set_item_color(track_item, version)
self.set_item_color(track_item, version_doc)

return phiero.update_container(track_item, data_imprint)

Expand All @@ -166,21 +170,14 @@ def multiselection(cls, track_item):
cls.sequence = cls.track.parent()

@classmethod
def set_item_color(cls, track_item, version):

def set_item_color(cls, track_item, version_doc):
project_name = legacy_io.active_project()
last_version_doc = get_last_version_by_subset_id(
project_name, version_doc["parent"], fields=["_id"]
)
clip = track_item.source()
# define version name
version_name = version.get("name", None)
# get all versions in list
versions = legacy_io.find({
"type": "version",
"parent": version["parent"]
}).distinct('name')

max_version = max(versions)

# set clip colour
if version_name == max_version:
if version_doc["_id"] == last_version_doc["_id"]:
clip.binItem().setColor(cls.clip_color_last)
else:
clip.binItem().setColor(cls.clip_color)
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from pyblish import api
from openpype.client import get_assets
from openpype.pipeline import legacy_io


Expand All @@ -17,8 +18,9 @@ class CollectAssetBuilds(api.ContextPlugin):
hosts = ["hiero"]

def process(self, context):
project_name = legacy_io.active_project()
asset_builds = {}
for asset in legacy_io.find({"type": "asset"}):
for asset in get_assets(project_name):
if asset["data"]["entityType"] == "AssetBuild":
self.log.debug("Found \"{}\" in database.".format(asset))
asset_builds[asset["name"]] = asset
Expand Down

0 comments on commit 2074e65

Please sign in to comment.