trayp: editorial wip

This commit is contained in:
Jakub Jezek 2022-07-07 11:52:11 +02:00
parent 49fd9e6308
commit 7444c26530
No known key found for this signature in database
GPG key ID: 730D7C02726179A7
4 changed files with 98 additions and 22 deletions

View file

@ -0,0 +1,41 @@
import os
import opentimelineio as otio
from openpype import lib as plib
from openpype.pipeline import (
Creator,
CreatedInstance
)
from .pipeline import (
list_instances,
update_instances,
remove_instances,
HostContext,
)
class CreateEditorialInstance:
"""Create Editorial OTIO timeline"""
def __init__(self, file_path, extension=None, resources_dir=None):
self.file_path = file_path
self.video_extension = extension or ".mov"
self.resources_dir = resources_dir
def create(self):
# get editorial sequence file into otio timeline object
extension = os.path.splitext(self.file_path)[1]
kwargs = {}
if extension == ".edl":
# EDL has no frame rate embedded so needs explicit
# frame rate else 24 is asssumed.
kwargs["rate"] = plib.get_asset()["data"]["fps"]
instance.data["otio_timeline"] = otio.adapters.read_from_file(
file_path, **kwargs)
self.log.info(f"Added OTIO timeline from: `{file_path}`")

View file

@ -41,7 +41,7 @@ class TrayPublishCreator(Creator):
self._remove_instance_from_context(instance)
def get_pre_create_attr_defs(self):
# Use same attributes as for instance attrobites
# Use same attributes as for instance attributes
return self.get_instance_attr_defs()
@ -50,15 +50,6 @@ class SettingsCreator(TrayPublishCreator):
extensions = []
def collect_instances(self):
for instance_data in list_instances():
creator_id = instance_data.get("creator_identifier")
if creator_id == self.identifier:
instance = CreatedInstance.from_existing(
instance_data, self
)
self._add_instance_to_context(instance)
def create(self, subset_name, data, pre_create_data):
# Pass precreate data to creator attributes
data["creator_attributes"] = pre_create_data
@ -109,19 +100,13 @@ class EditorialCreator(TrayPublishCreator):
extensions = []
def collect_instances(self):
for instance_data in list_instances():
creator_id = instance_data.get("creator_identifier")
if creator_id == self.identifier:
instance = CreatedInstance.from_existing(
instance_data, self
)
self._add_instance_to_context(instance)
def create(self, subset_name, data, pre_create_data):
# TODO: create otio instance
# TODO: create clip instances
# Pass precreate data to creator attributes
data["creator_attributes"] = pre_create_data
data["settings_creator"] = True
data["editorial_creator"] = True
# Create new instance
new_instance = CreatedInstance(self.family, subset_name, data, self)
# Host implementation of storing metadata about instance

View file

@ -11,10 +11,10 @@ def CreateEditorial():
project_name = os.environ["AVALON_PROJECT"]
project_settings = get_project_settings(project_name)
simple_creators = project_settings["traypublisher"]["editorial_creators"]
editorial_creators = project_settings["traypublisher"]["editorial_creators"]
global_variables = globals()
for item in simple_creators:
for item in editorial_creators:
log.debug(pformat(item))

View file

@ -0,0 +1,50 @@
import os
import pyblish.api
class CollectSettingsSimpleInstances(pyblish.api.InstancePlugin):
"""Collect data for instances created by settings creators."""
label = "Collect Settings Simple Instances"
order = pyblish.api.CollectorOrder - 0.49
hosts = ["traypublisher"]
def process(self, instance):
if not instance.data.get("ediorial_creator"):
return
if "families" not in instance.data:
instance.data["families"] = []
if "representations" not in instance.data:
instance.data["representations"] = []
repres = instance.data["representations"]
creator_attributes = instance.data["creator_attributes"]
filepath_item = creator_attributes["filepath"]
self.log.info(filepath_item)
filepaths = [
os.path.join(filepath_item["directory"], filename)
for filename in filepath_item["filenames"]
]
instance.data["sourceFilepaths"] = filepaths
instance.data["stagingDir"] = filepath_item["directory"]
filenames = filepath_item["filenames"]
_, ext = os.path.splitext(filenames[0])
ext = ext[1:]
if len(filenames) == 1:
filenames = filenames[0]
repres.append({
"ext": ext,
"name": ext,
"stagingDir": filepath_item["directory"],
"files": filenames
})
self.log.debug("Created Simple Settings instance {}".format(
instance.data
))