diff --git a/pype/ftrack/events/event_sync_to_avalon.py b/pype/ftrack/events/event_sync_to_avalon.py index f6b2b48a1f..e647d9f940 100644 --- a/pype/ftrack/events/event_sync_to_avalon.py +++ b/pype/ftrack/events/event_sync_to_avalon.py @@ -16,7 +16,7 @@ class Sync_to_Avalon(BaseEvent): # If mongo_id textfield has changed: RETURN! # - infinite loop for ent in event['data']['entities']: - if 'keys' in ent: + if ent.get('keys') is not None: if ca_mongoid in ent['keys']: return diff --git a/pype/ftrack/lib/avalon_sync.py b/pype/ftrack/lib/avalon_sync.py index 4eaf28eae4..94de0172af 100644 --- a/pype/ftrack/lib/avalon_sync.py +++ b/pype/ftrack/lib/avalon_sync.py @@ -507,11 +507,17 @@ def get_project_apps(entity): apps = [] for app in entity['custom_attributes']['applications']: try: - app_config = {} - app_config['name'] = app - app_config['label'] = toml.load(avalon.lib.which_app(app))['label'] + toml_path = avalon.lib.which_app(app) + if not toml_path: + log.warning(( + 'Missing config file for application "{}"' + ).format(app)) + continue - apps.append(app_config) + apps.append({ + 'name': app, + 'label': toml.load(toml_path)['label'] + }) except Exception as e: log.warning('Error with application {0} - {1}'.format(app, e)) diff --git a/pype/plugins/global/publish/extract_review.py b/pype/plugins/global/publish/extract_review.py index 3a764b19c3..1b66b4e9d2 100644 --- a/pype/plugins/global/publish/extract_review.py +++ b/pype/plugins/global/publish/extract_review.py @@ -136,12 +136,21 @@ class ExtractReview(pyblish.api.InstancePlugin): # run subprocess self.log.debug("{}".format(subprcs_cmd)) - sub_proc = subprocess.Popen(subprcs_cmd) - sub_proc.wait() + sub_proc = subprocess.Popen( + subprcs_cmd, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + stdin=subprocess.PIPE, + cwd=os.path.dirname(output_args[-1]) + ) + + output = sub_proc.communicate()[0] if not os.path.isfile(full_output_path): - raise FileExistsError( - "Quicktime wasn't created succesfully") + raise ValueError( + "Quicktime wasn't created succesfully: " + "{}".format(output) + ) # create representation data repre_new.update({ diff --git a/pype/plugins/global/publish/integrate_new.py b/pype/plugins/global/publish/integrate_new.py index 2d04c3ec1a..0d077ca65e 100644 --- a/pype/plugins/global/publish/integrate_new.py +++ b/pype/plugins/global/publish/integrate_new.py @@ -276,9 +276,11 @@ class IntegrateAssetNew(pyblish.api.InstancePlugin): src_head = src_collection.format("{head}") src_tail = src_collection.format("{tail}") - # fix dst_padding - padd_len = len(files[0].replace(src_head, "").replace(src_tail, "")) + valid_files = [x for x in files if src_collection.match(x)] + padd_len = len( + valid_files[0].replace(src_head, "").replace(src_tail, "") + ) src_padding_exp = "%0{}d".format(padd_len) test_dest_files = list() diff --git a/pype/plugins/nuke/publish/submit_nuke_deadline.py b/pype/plugins/nuke/publish/submit_nuke_deadline.py index 3d854f66e9..fb5d0fea75 100644 --- a/pype/plugins/nuke/publish/submit_nuke_deadline.py +++ b/pype/plugins/nuke/publish/submit_nuke_deadline.py @@ -100,6 +100,9 @@ class NukeSubmitDeadline(pyblish.api.InstancePlugin): # Resolve relative references "ProjectPath": workspace, + + # Only the specific write node is rendered. + "WriteNode": instance[0].name() }, # Mandatory for Deadline, may be empty