Merge pull request #5892 from ynput/feature/OP-7238_Use-folder-path-as-identifier-Resolve-editorial

AYON | Resolve: support for folder path
This commit is contained in:
Jakub Trllo 2023-11-20 18:28:44 +01:00 committed by GitHub
commit d7c1abaf7d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 42 additions and 31 deletions

View file

@ -19,7 +19,7 @@ from .menu import load_stylesheet
class CreatorWidget(QtWidgets.QDialog): class CreatorWidget(QtWidgets.QDialog):
# output items # output items
items = dict() items = {}
def __init__(self, name, info, ui_inputs, parent=None): def __init__(self, name, info, ui_inputs, parent=None):
super(CreatorWidget, self).__init__(parent) super(CreatorWidget, self).__init__(parent)
@ -101,7 +101,7 @@ class CreatorWidget(QtWidgets.QDialog):
self.close() self.close()
def value(self, data, new_data=None): def value(self, data, new_data=None):
new_data = new_data or dict() new_data = new_data or {}
for k, v in data.items(): for k, v in data.items():
new_data[k] = { new_data[k] = {
"target": None, "target": None,
@ -290,7 +290,7 @@ class Spacer(QtWidgets.QWidget):
class ClipLoader: class ClipLoader:
active_bin = None active_bin = None
data = dict() data = {}
def __init__(self, loader_obj, context, **options): def __init__(self, loader_obj, context, **options):
""" Initialize object """ Initialize object
@ -588,8 +588,8 @@ class PublishClip:
Returns: Returns:
hiero.core.TrackItem: hiero track item object with openpype tag hiero.core.TrackItem: hiero track item object with openpype tag
""" """
vertical_clip_match = dict() vertical_clip_match = {}
tag_data = dict() tag_data = {}
types = { types = {
"shot": "shot", "shot": "shot",
"folder": "folder", "folder": "folder",
@ -665,15 +665,23 @@ class PublishClip:
new_name = self.tag_data.pop("newClipName") new_name = self.tag_data.pop("newClipName")
if self.rename: if self.rename:
self.tag_data["asset"] = new_name self.tag_data["asset_name"] = new_name
else: else:
self.tag_data["asset"] = self.ti_name self.tag_data["asset_name"] = self.ti_name
# AYON unique identifier
folder_path = "/{}/{}".format(
self.tag_data["hierarchy"],
self.tag_data["asset_name"]
)
self.tag_data["folder_path"] = folder_path
# create new name for track item
if not lib.pype_marker_workflow: if not lib.pype_marker_workflow:
# create compound clip workflow # create compound clip workflow
lib.create_compound_clip( lib.create_compound_clip(
self.timeline_item_data, self.timeline_item_data,
self.tag_data["asset"], self.tag_data["asset_name"],
self.mp_folder self.mp_folder
) )
@ -765,7 +773,7 @@ class PublishClip:
# increasing steps by index of rename iteration # increasing steps by index of rename iteration
self.count_steps *= self.rename_index self.count_steps *= self.rename_index
hierarchy_formatting_data = dict() hierarchy_formatting_data = {}
_data = self.timeline_item_default_data.copy() _data = self.timeline_item_default_data.copy()
if self.ui_inputs: if self.ui_inputs:
# adding tag metadata from ui # adding tag metadata from ui
@ -854,8 +862,7 @@ class PublishClip:
"parents": self.parents, "parents": self.parents,
"hierarchyData": hierarchy_formatting_data, "hierarchyData": hierarchy_formatting_data,
"subset": self.subset, "subset": self.subset,
"family": self.subset_family, "family": self.subset_family
"families": ["clip"]
} }
def _convert_to_entity(self, key): def _convert_to_entity(self, key):

View file

@ -26,6 +26,7 @@ class ExtractWorkfile(publish.Extractor):
resolve_workfile_ext = ".drp" resolve_workfile_ext = ".drp"
drp_file_name = name + resolve_workfile_ext drp_file_name = name + resolve_workfile_ext
drp_file_path = os.path.normpath( drp_file_path = os.path.normpath(
os.path.join(staging_dir, drp_file_name)) os.path.join(staging_dir, drp_file_name))

View file

@ -9,6 +9,7 @@ from openpype.hosts.resolve.api.lib import (
get_publish_attribute, get_publish_attribute,
get_otio_clip_instance_data, get_otio_clip_instance_data,
) )
from openpype import AYON_SERVER_ENABLED
class PrecollectInstances(pyblish.api.ContextPlugin): class PrecollectInstances(pyblish.api.ContextPlugin):
@ -29,7 +30,7 @@ class PrecollectInstances(pyblish.api.ContextPlugin):
for timeline_item_data in selected_timeline_items: for timeline_item_data in selected_timeline_items:
data = dict() data = {}
timeline_item = timeline_item_data["clip"]["item"] timeline_item = timeline_item_data["clip"]["item"]
# get pype tag data # get pype tag data
@ -60,24 +61,25 @@ class PrecollectInstances(pyblish.api.ContextPlugin):
if k not in ("id", "applieswhole", "label") if k not in ("id", "applieswhole", "label")
}) })
asset = tag_data["asset"] if AYON_SERVER_ENABLED:
asset = tag_data["folder_path"]
else:
asset = tag_data["asset_name"]
subset = tag_data["subset"] subset = tag_data["subset"]
# insert family into families
family = tag_data["family"]
families = [str(f) for f in tag_data["families"]]
families.insert(0, str(family))
data.update({ data.update({
"name": "{} {} {}".format(asset, subset, families), "name": "{}_{}".format(asset, subset),
"label": "{} {}".format(asset, subset),
"asset": asset, "asset": asset,
"item": timeline_item, "item": timeline_item,
"families": families,
"publish": get_publish_attribute(timeline_item), "publish": get_publish_attribute(timeline_item),
"fps": context.data["fps"], "fps": context.data["fps"],
"handleStart": handle_start, "handleStart": handle_start,
"handleEnd": handle_end, "handleEnd": handle_end,
"newAssetPublishing": True "newAssetPublishing": True,
"families": ["clip"],
"isEditorial": True
}) })
# otio clip data # otio clip data
@ -135,7 +137,8 @@ class PrecollectInstances(pyblish.api.ContextPlugin):
family = "shot" family = "shot"
data.update({ data.update({
"name": "{} {} {}".format(asset, subset, family), "name": "{}_{}".format(asset, subset),
"label": "{} {}".format(asset, subset),
"subset": subset, "subset": subset,
"asset": asset, "asset": asset,
"family": family, "family": family,

View file

@ -3,6 +3,7 @@ from pprint import pformat
from openpype import AYON_SERVER_ENABLED from openpype import AYON_SERVER_ENABLED
from openpype.pipeline import get_current_asset_name from openpype.pipeline import get_current_asset_name
from openpype.hosts.resolve import api as rapi from openpype.hosts.resolve import api as rapi
from openpype.hosts.resolve.otio import davinci_export from openpype.hosts.resolve.otio import davinci_export
@ -14,14 +15,12 @@ class PrecollectWorkfile(pyblish.api.ContextPlugin):
order = pyblish.api.CollectorOrder - 0.5 order = pyblish.api.CollectorOrder - 0.5
def process(self, context): def process(self, context):
current_asset = get_current_asset_name() current_asset_name = asset_name = get_current_asset_name()
if AYON_SERVER_ENABLED:
# AYON compatibility split name and use last piece
asset_name = current_asset.split("/")[-1]
else:
asset_name = current_asset
subset = "workfile" if AYON_SERVER_ENABLED:
asset_name = current_asset_name.split("/")[-1]
subset = "workfileMain"
project = rapi.get_current_project() project = rapi.get_current_project()
fps = project.GetSetting("timelineFrameRate") fps = project.GetSetting("timelineFrameRate")
video_tracks = rapi.get_video_track_names() video_tracks = rapi.get_video_track_names()
@ -31,8 +30,9 @@ class PrecollectWorkfile(pyblish.api.ContextPlugin):
instance_data = { instance_data = {
"name": "{}_{}".format(asset_name, subset), "name": "{}_{}".format(asset_name, subset),
"asset": current_asset, "label": "{} {}".format(current_asset_name, subset),
"subset": "{}{}".format(asset_name, subset.capitalize()), "asset": current_asset_name,
"subset": subset,
"item": project, "item": project,
"family": "workfile", "family": "workfile",
"families": [] "families": []