From c49b83ac980ef4f8d9a1f55e361418dbcb34581e Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 16 Jun 2020 17:01:58 +0200 Subject: [PATCH 1/4] stop publishing in middle of instance loop --- pype/tools/pyblish_pype/control.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pype/tools/pyblish_pype/control.py b/pype/tools/pyblish_pype/control.py index c454e4c6fa..12c8944642 100644 --- a/pype/tools/pyblish_pype/control.py +++ b/pype/tools/pyblish_pype/control.py @@ -302,6 +302,11 @@ class Controller(QtCore.QObject): "%s was inactive, skipping.." % instance ) continue + # Stop if was stopped + if self.stopped: + self.stopped = False + yield IterationBreak("Stopped") + yield (plugin, instance) else: families = util.collect_families_from_instances( From 13144b18cf4f286c2b20b6c0b871fdfcbb3e5e84 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 17 Jun 2020 10:25:46 +0100 Subject: [PATCH 2/4] Optimize processing Ffmpeg validator is now a context plugin instead of instance. --- pype/plugins/global/publish/validate_ffmpeg_installed.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pype/plugins/global/publish/validate_ffmpeg_installed.py b/pype/plugins/global/publish/validate_ffmpeg_installed.py index f6738e6de1..61127ff96e 100644 --- a/pype/plugins/global/publish/validate_ffmpeg_installed.py +++ b/pype/plugins/global/publish/validate_ffmpeg_installed.py @@ -8,12 +8,11 @@ except ImportError: import errno -class ValidateFFmpegInstalled(pyblish.api.Validator): +class ValidateFFmpegInstalled(pyblish.api.ContextPlugin): """Validate availability of ffmpeg tool in PATH""" order = pyblish.api.ValidatorOrder label = 'Validate ffmpeg installation' - families = ['review'] optional = True def is_tool(self, name): @@ -27,7 +26,7 @@ class ValidateFFmpegInstalled(pyblish.api.Validator): return False return True - def process(self, instance): + def process(self, context): ffmpeg_path = pype.lib.get_ffmpeg_tool_path("ffmpeg") self.log.info("ffmpeg path: `{}`".format(ffmpeg_path)) if self.is_tool(ffmpeg_path) is False: From 8f722095b078b3baa53f802bb102187897f9a414 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 17 Jun 2020 10:28:27 +0100 Subject: [PATCH 3/4] Validate shots For duplicate shot names. --- .../publish/validate_shots.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 pype/plugins/standalonepublisher/publish/validate_shots.py diff --git a/pype/plugins/standalonepublisher/publish/validate_shots.py b/pype/plugins/standalonepublisher/publish/validate_shots.py new file mode 100644 index 0000000000..3267af7685 --- /dev/null +++ b/pype/plugins/standalonepublisher/publish/validate_shots.py @@ -0,0 +1,23 @@ +import pyblish.api +import pype.api + + +class ValidateShots(pyblish.api.ContextPlugin): + """Validate there is a "mov" next to the editorial file.""" + + label = "Validate Shots" + hosts = ["standalonepublisher"] + order = pype.api.ValidateContentsOrder + + def process(self, context): + shot_names = [] + duplicate_names = [] + for instance in context: + name = instance.data["name"] + if name in shot_names: + duplicate_names.append(name) + else: + shot_names.append(name) + + msg = "There are duplicate shot names:\n{}".format(duplicate_names) + assert not duplicate_names, msg From a88bae8b4b205c64018f46463f331fb9d787b3dd Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Wed, 17 Jun 2020 10:34:19 +0100 Subject: [PATCH 4/4] Collect shots Shot names are collected from the editorial file instead of sequencial numbering. --- .../standalonepublisher/publish/collect_shots.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/pype/plugins/standalonepublisher/publish/collect_shots.py b/pype/plugins/standalonepublisher/publish/collect_shots.py index 80ee875add..853ba4e8de 100644 --- a/pype/plugins/standalonepublisher/publish/collect_shots.py +++ b/pype/plugins/standalonepublisher/publish/collect_shots.py @@ -60,14 +60,8 @@ class CollectShots(pyblish.api.InstancePlugin): # options to be more flexible. asset_name = asset_name.split("_")[0] - shot_number = 10 + instances = [] for track in tracks: - self.log.info(track) - - if "audio" in track.name.lower(): - continue - - instances = [] for child in track.each_child(): # Transitions are ignored, because Clips have the full frame @@ -75,10 +69,13 @@ class CollectShots(pyblish.api.InstancePlugin): if isinstance(child, otio.schema.transition.Transition): continue + # Hardcoded to expect a shot name of "[name].[extension]" + child_name = os.path.splitext(child.name)[0].lower() + name = f"{asset_name}_{child_name}" + frame_start = child.range_in_parent().start_time.value frame_end = child.range_in_parent().end_time_inclusive().value - name = f"{asset_name}_sh{shot_number:04}" label = f"{name} (framerange: {frame_start}-{frame_end})" instances.append( instance.context.create_instance(**{ @@ -96,8 +93,6 @@ class CollectShots(pyblish.api.InstancePlugin): }) ) - shot_number += 10 - visual_hierarchy = [asset_entity] while True: visual_parent = io.find_one(