Skip to content

Commit

Permalink
Merge pull request #3355 from pypeclub/bugfix/stpublisher-editorial-h…
Browse files Browse the repository at this point in the history
…ierarchy

Standalone: settings improvements
  • Loading branch information
iLLiCiTiT committed Jun 23, 2022
2 parents 2074e65 + 2b19e6c commit c2fcd5d
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 38 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
from pprint import pformat
import re
from copy import deepcopy
import pyblish.api
Expand All @@ -21,6 +22,7 @@ class CollectHierarchyInstance(pyblish.api.ContextPlugin):
families = ["shot"]

# presets
shot_rename = True
shot_rename_template = None
shot_rename_search_patterns = None
shot_add_hierarchy = None
Expand All @@ -46,7 +48,7 @@ def rename_with_hierarchy(self, instance):
parent_name = instance.context.data["assetEntity"]["name"]
clip = instance.data["item"]
clip_name = os.path.splitext(clip.name)[0].lower()
if self.shot_rename_search_patterns:
if self.shot_rename_search_patterns and self.shot_rename:
search_text += parent_name + clip_name
instance.data["anatomyData"].update({"clip_name": clip_name})
for type, pattern in self.shot_rename_search_patterns.items():
Expand All @@ -56,9 +58,9 @@ def rename_with_hierarchy(self, instance):
continue
instance.data["anatomyData"][type] = match[-1]

# format to new shot name
instance.data["asset"] = self.shot_rename_template.format(
**instance.data["anatomyData"])
# format to new shot name
instance.data["asset"] = self.shot_rename_template.format(
**instance.data["anatomyData"])

def create_hierarchy(self, instance):
asset_doc = instance.context.data["assetEntity"]
Expand Down Expand Up @@ -87,7 +89,7 @@ def create_hierarchy(self, instance):
})

hierarchy = list()
if self.shot_add_hierarchy:
if self.shot_add_hierarchy.get("enabled"):
parent_template_patern = re.compile(r"\{([a-z]*?)\}")
# fill the parents parts from presets
shot_add_hierarchy = self.shot_add_hierarchy.copy()
Expand Down Expand Up @@ -131,8 +133,8 @@ def create_hierarchy(self, instance):
instance.data["parents"] = parents

# print
self.log.debug(f"Hierarchy: {hierarchy}")
self.log.debug(f"parents: {parents}")
self.log.warning(f"Hierarchy: {hierarchy}")
self.log.info(f"parents: {parents}")

tasks_to_add = dict()
if self.shot_add_tasks:
Expand Down Expand Up @@ -163,6 +165,9 @@ def create_hierarchy(self, instance):
})

def process(self, context):
self.log.info("self.shot_add_hierarchy: {}".format(
pformat(self.shot_add_hierarchy)
))
for instance in context:
if instance.data["family"] in self.families:
self.processing_instance(instance)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,14 @@ def process(self, instance):
# Generate mov file.
fps = instance.data["fps"]
video_file_path = instance.data["editorialSourcePath"]
extensions = instance.data.get("extensions", [".mov"])
extensions = instance.data.get("extensions", ["mov"])

for ext in extensions:
self.log.info("Processing ext: `{}`".format(ext))

if not ext.startswith("."):
ext = "." + ext

clip_trimed_path = os.path.join(
staging_dir, instance.data["name"] + ext)
# # check video file metadata
Expand Down
71 changes: 45 additions & 26 deletions openpype/plugins/publish/integrate_new.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,9 +145,43 @@ def process(self, instance):
if instance.data.get("farm"):
return

# Prepare repsentations that should be integrated
repres = instance.data.get("representations")
# Raise error if instance don't have any representations
if not repres:
raise ValueError(
"Instance {} has no files to transfer".format(
instance.data["family"]
)
)

# Validate type of stored representations
if not isinstance(repres, (list, tuple)):
raise TypeError(
"Instance 'files' must be a list, got: {0} {1}".format(
str(type(repres)), str(repres)
)
)

# Filter representations
filtered_repres = []
for repre in repres:
if "delete" in repre.get("tags", []):
continue
filtered_repres.append(repre)

# Skip instance if there are not representations to integrate
# all representations should not be integrated
if not filtered_repres:
self.log.warning((
"Skipping, there are no representations"
" to integrate for instance {}"
).format(instance.data["family"]))
return

self.integrated_file_sizes = {}
try:
self.register(instance)
self.register(instance, filtered_repres)
self.log.info("Integrated Asset in to the database ...")
self.log.info("instance.data: {}".format(instance.data))
self.handle_destination_files(self.integrated_file_sizes,
Expand All @@ -158,7 +192,7 @@ def process(self, instance):
self.handle_destination_files(self.integrated_file_sizes, 'remove')
six.reraise(*sys.exc_info())

def register(self, instance):
def register(self, instance, repres):
# Required environment variables
anatomy_data = instance.data["anatomyData"]

Expand Down Expand Up @@ -236,18 +270,6 @@ def register(self, instance):
"Establishing staging directory @ {0}".format(stagingdir)
)

# Ensure at least one file is set up for transfer in staging dir.
repres = instance.data.get("representations")
repres = instance.data.get("representations")
msg = "Instance {} has no files to transfer".format(
instance.data["family"])
assert repres, msg
assert isinstance(repres, (list, tuple)), (
"Instance 'files' must be a list, got: {0} {1}".format(
str(type(repres)), str(repres)
)
)

subset = self.get_subset(asset_entity, instance)
instance.data["subsetEntity"] = subset

Expand All @@ -270,7 +292,10 @@ def register(self, instance):

self.log.debug("Creating version ...")

new_repre_names_low = [_repre["name"].lower() for _repre in repres]
new_repre_names_low = [
_repre["name"].lower()
for _repre in repres
]

existing_version = legacy_io.find_one({
'type': 'version',
Expand Down Expand Up @@ -373,18 +398,8 @@ def register(self, instance):
if profile:
template_name = profile["template_name"]



published_representations = {}
for idx, repre in enumerate(instance.data["representations"]):
# reset transfers for next representation
# instance.data['transfers'] is used as a global variable
# in current codebase
instance.data['transfers'] = list(orig_transfers)

if "delete" in repre.get("tags", []):
continue

for idx, repre in enumerate(repres):
published_files = []

# create template data for Anatomy
Expand Down Expand Up @@ -662,6 +677,10 @@ def register(self, instance):
"published_files": published_files
}
self.log.debug("__ representations: {}".format(representations))
# reset transfers for next representation
# instance.data['transfers'] is used as a global variable
# in current codebase
instance.data['transfers'] = list(orig_transfers)

# Remove old representations if there are any (before insertion of new)
if existing_repres:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,12 +257,14 @@
]
},
"CollectHierarchyInstance": {
"shot_rename": true,
"shot_rename_template": "{project[code]}_{_sequence_}_{_shot_}",
"shot_rename_search_patterns": {
"_sequence_": "(\\d{4})(?=_\\d{4})",
"_shot_": "(\\d{4})(?!_\\d{4})"
"_sequence_": "(sc\\d{3})",
"_shot_": "(sh\\d{3})"
},
"shot_add_hierarchy": {
"enabled": true,
"parents_path": "{project}/{folder}/{sequence}",
"parents": {
"project": "{project[name]}",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,11 @@
"label": "Collect Instance Hierarchy",
"is_group": true,
"children": [
{
"type": "boolean",
"key": "shot_rename",
"label": "Shot Rename"
},
{
"type": "text",
"key": "shot_rename_template",
Expand All @@ -289,7 +294,13 @@
"type": "dict",
"key": "shot_add_hierarchy",
"label": "Shot hierarchy",
"checkbox_key": "enabled",
"children": [
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
},
{
"type": "text",
"key": "parents_path",
Expand Down Expand Up @@ -343,8 +354,8 @@
"type": "number",
"key": "timeline_frame_start",
"label": "Timeline start frame",
"default": 900000,
"minimum": 1,
"default": 90000,
"minimum": 0,
"maximum": 10000000
},
{
Expand Down

0 comments on commit c2fcd5d

Please sign in to comment.