From 5ccc34abb4b79575f40ca1190af7940748419194 Mon Sep 17 00:00:00 2001 From: Jana Mizikova Date: Fri, 18 Oct 2019 15:09:47 +0200 Subject: [PATCH 1/9] validate unicode strings checking for unicode strings in environment variables that block extracting review --- .../maya/publish/validate_unicode_strings.py | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 pype/plugins/maya/publish/validate_unicode_strings.py diff --git a/pype/plugins/maya/publish/validate_unicode_strings.py b/pype/plugins/maya/publish/validate_unicode_strings.py new file mode 100644 index 0000000000..9f229db062 --- /dev/null +++ b/pype/plugins/maya/publish/validate_unicode_strings.py @@ -0,0 +1,40 @@ +import os +from maya import cmds + +import pyblish.api +import pype.api +import pype.maya.action + + +class ValidateUnicodeStrings(pyblish.api.Validator): + """Validate all environment variables are string type. + + """ + + order = pype.api.ValidateContentsOrder + hosts = ['maya'] + families = ['review'] + label = 'Unicode Strings' + actions = [pype.api.RepairAction] + + def process(self, instance): + invalid = self.get_invalid(instance) + if invalid: + raise RuntimeError("Found unicode strings in environment variables.") + + @classmethod + def get_invalid(cls, instance): + invalid = [] + for key, value in os.environ.items(): + if type(value) is type(u't'): + invalid.append((key, value)) + + return invalid + + @classmethod + def repair(cls, instance): + """Retype all unicodes to strings.""" + + for key, value in os.environ.items(): + if type(value) is type(u't'): + os.environ[key] = str(value) From b3c693fc5a299ed5602490eb0d857c80f61e0b02 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 29 Oct 2019 10:47:02 +0100 Subject: [PATCH 2/9] removed delete tag from plates when collecting --- pype/plugins/standalonepublisher/publish/collect_context.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pype/plugins/standalonepublisher/publish/collect_context.py b/pype/plugins/standalonepublisher/publish/collect_context.py index 0a41962748..43e2350be4 100644 --- a/pype/plugins/standalonepublisher/publish/collect_context.py +++ b/pype/plugins/standalonepublisher/publish/collect_context.py @@ -109,7 +109,7 @@ class CollectContextDataSAPublish(pyblish.api.ContextPlugin): if component["preview"]: instance.data["families"].append("review") instance.data["repreProfiles"] = ["h264"] - component["tags"] = ["review", "delete"] + component["tags"] = ["review"] self.log.debug("Adding review family") instance.data["representations"].append(component) From dede49f2c62162a087ba28e55446043b6c306157 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 29 Oct 2019 10:47:28 +0100 Subject: [PATCH 3/9] extract review creates mov in temp instead of stagigng dir --- pype/plugins/standalonepublisher/publish/extract_review.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pype/plugins/standalonepublisher/publish/extract_review.py b/pype/plugins/standalonepublisher/publish/extract_review.py index 4f27c119d9..1b8573d6b1 100644 --- a/pype/plugins/standalonepublisher/publish/extract_review.py +++ b/pype/plugins/standalonepublisher/publish/extract_review.py @@ -1,4 +1,5 @@ import os +import tempfile import pyblish.api from pype.vendor import clique @@ -82,9 +83,10 @@ class ExtractReviewSP(pyblish.api.InstancePlugin): full_input_path = os.path.join(staging_dir, repre["files"]) filename = repre["files"].split(".")[0] + # prepare output file repr_file = filename + "_{0}.{1}".format(name, ext) - - full_output_path = os.path.join(staging_dir, repr_file) + out_stagigng_dir = tempfile.mkdtemp(prefix="extract_review_") + full_output_path = os.path.join(out_stagigng_dir, repr_file) self.log.info("input {}".format(full_input_path)) self.log.info("output {}".format(full_output_path)) @@ -169,6 +171,7 @@ class ExtractReviewSP(pyblish.api.InstancePlugin): "name": name, "ext": ext, "files": repr_file, + "stagingDir": out_stagigng_dir, "tags": new_tags, "outputName": name, "startFrameReview": 1, From 918d23c9ab675dc702f4666128b47907d6de7109 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 29 Oct 2019 10:56:06 +0100 Subject: [PATCH 4/9] fixed role variable naming and way of getting asset --- pype/standalonepublish/widgets/model_tree.py | 4 ++-- pype/standalonepublish/widgets/widget_asset.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pype/standalonepublish/widgets/model_tree.py b/pype/standalonepublish/widgets/model_tree.py index e4f1aa5eb7..f37b7a00b2 100644 --- a/pype/standalonepublish/widgets/model_tree.py +++ b/pype/standalonepublish/widgets/model_tree.py @@ -5,7 +5,7 @@ from . import Node class TreeModel(QtCore.QAbstractItemModel): COLUMNS = list() - NodeRole = QtCore.Qt.UserRole + 1 + ItemRole = QtCore.Qt.UserRole + 1 def __init__(self, parent=None): super(TreeModel, self).__init__(parent) @@ -35,7 +35,7 @@ class TreeModel(QtCore.QAbstractItemModel): key = self.COLUMNS[column] return node.get(key, None) - if role == self.NodeRole: + if role == self.ItemRole: return index.internalPointer() def setData(self, index, value, role=QtCore.Qt.EditRole): diff --git a/pype/standalonepublish/widgets/widget_asset.py b/pype/standalonepublish/widgets/widget_asset.py index 1e3b2068bd..0bd7e67051 100644 --- a/pype/standalonepublish/widgets/widget_asset.py +++ b/pype/standalonepublish/widgets/widget_asset.py @@ -201,7 +201,7 @@ class AssetWidget(QtWidgets.QWidget): def collect_data(self): project = self.dbcon.find_one({'type': 'project'}) - asset = self.dbcon.find_one({'_id': self.get_active_asset()}) + asset = self.get_active_asset() try: index = self.task_view.selectedIndexes()[0] From 1b27cc59f8e03994b38d7d4bd8127e366c26d547 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 29 Oct 2019 11:05:31 +0100 Subject: [PATCH 5/9] get_parents get parents from entity instead of getting through all parents if possible --- pype/standalonepublish/widgets/widget_asset.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pype/standalonepublish/widgets/widget_asset.py b/pype/standalonepublish/widgets/widget_asset.py index 0bd7e67051..d9241bd91f 100644 --- a/pype/standalonepublish/widgets/widget_asset.py +++ b/pype/standalonepublish/widgets/widget_asset.py @@ -219,6 +219,10 @@ class AssetWidget(QtWidgets.QWidget): return data def get_parents(self, entity): + ent_parents = entity.get("data", {}).get("parents") + if ent_parents is not None and isinstance(ent_parents, list): + return ent_parents + output = [] if entity.get('data', {}).get('visualParent', None) is None: return output From e52e6241fb4cf29dffadb382033d7aeba7d2c055 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 29 Oct 2019 11:05:41 +0100 Subject: [PATCH 6/9] version is refreshed on pyblish close --- pype/standalonepublish/app.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pype/standalonepublish/app.py b/pype/standalonepublish/app.py index 37d4b1cd27..60274f6b0a 100644 --- a/pype/standalonepublish/app.py +++ b/pype/standalonepublish/app.py @@ -167,6 +167,8 @@ class Window(QtWidgets.QDialog): ''' if self.shadow_widget.isVisible(): self.shadow_widget.setVisible(False) + # Refresh version + self.widget_family.on_version_refresh() def set_valid_family(self, valid): ''' Sets `valid_family` attribute for validation From e35e4f1899e364e050986cc49696908b6b73be45 Mon Sep 17 00:00:00 2001 From: Milan Kolar Date: Tue, 29 Oct 2019 14:42:45 +0100 Subject: [PATCH 7/9] fix families in subset publishing --- pype/plugins/global/publish/integrate_new.py | 7 +++++-- pype/plugins/maya/publish/collect_instances.py | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/pype/plugins/global/publish/integrate_new.py b/pype/plugins/global/publish/integrate_new.py index 196990fc82..ad7be306ca 100644 --- a/pype/plugins/global/publish/integrate_new.py +++ b/pype/plugins/global/publish/integrate_new.py @@ -485,13 +485,16 @@ class IntegrateAssetNew(pyblish.api.InstancePlugin): if subset is None: subset_name = instance.data["subset"] self.log.info("Subset '%s' not found, creating.." % subset_name) + self.log.debug("families. %s" % instance.data.get('families')) + self.log.debug("families. %s" % type(instance.data.get('families'))) _id = io.insert_one({ "schema": "pype:subset-3.0", "type": "subset", "name": subset_name, - "families": instance.data.get('families'), - "data": {}, + "data": { + "families": instance.data.get('families') + }, "parent": asset["_id"] }).inserted_id diff --git a/pype/plugins/maya/publish/collect_instances.py b/pype/plugins/maya/publish/collect_instances.py index f17072a505..39d7bcd86d 100644 --- a/pype/plugins/maya/publish/collect_instances.py +++ b/pype/plugins/maya/publish/collect_instances.py @@ -93,6 +93,9 @@ class CollectInstances(pyblish.api.ContextPlugin): parents = self.get_all_parents(members) members_hierarchy = list(set(members + children + parents)) + if 'families' not in data: + data['families'] = [data.get('family')] + # Create the instance instance = context.create_instance(objset) instance[:] = members_hierarchy @@ -100,6 +103,7 @@ class CollectInstances(pyblish.api.ContextPlugin): # Store the exact members of the object set instance.data["setMembers"] = members + # Define nice label name = cmds.ls(objset, long=False)[0] # use short name label = "{0} ({1})".format(name, @@ -117,6 +121,8 @@ class CollectInstances(pyblish.api.ContextPlugin): # Produce diagnostic message for any graphical # user interface interested in visualising it. self.log.info("Found: \"%s\" " % instance.data["name"]) + self.log.debug("DATA: \"%s\" " % instance.data) + def sort_by_family(instance): """Sort by family""" From b3dca2d0ce29baf6aa66515a5fad46bdccd3bbbd Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 29 Oct 2019 15:12:37 +0100 Subject: [PATCH 8/9] fixed ftrack integration --- .../standalonepublisher/publish/extract_review.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pype/plugins/standalonepublisher/publish/extract_review.py b/pype/plugins/standalonepublisher/publish/extract_review.py index 1b8573d6b1..fbc14785a4 100644 --- a/pype/plugins/standalonepublisher/publish/extract_review.py +++ b/pype/plugins/standalonepublisher/publish/extract_review.py @@ -177,13 +177,19 @@ class ExtractReviewSP(pyblish.api.InstancePlugin): "startFrameReview": 1, "endFrameReview": video_len }) - if repre_new.get("preview"): - repre_new.pop("preview") + # cleanup thumbnail from new repre if repre_new.get("thumbnail"): repre_new.pop("thumbnail") + if "thumbnail" in repre_new["tags"]: + repre_new["tags"].remove("thumbnail") # adding representation self.log.debug("Adding: {}".format(repre_new)) + # cleanup repre from preview + if "preview" in repre: + repre.pop("preview") + if "preview" in repre["tags"]: + repre["tags"].remove("preview") new_repres.append(repre_new) for repre in instance.data["representations"]: From ed48b85233df26474f96c58bf49b591b4fe7b3fa Mon Sep 17 00:00:00 2001 From: Milan Kolar Date: Tue, 29 Oct 2019 15:50:22 +0100 Subject: [PATCH 9/9] missing families --- pype/plugins/maya/publish/collect_scene.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pype/plugins/maya/publish/collect_scene.py b/pype/plugins/maya/publish/collect_scene.py index c1e3c75021..f2fbb4d623 100644 --- a/pype/plugins/maya/publish/collect_scene.py +++ b/pype/plugins/maya/publish/collect_scene.py @@ -37,6 +37,7 @@ class CollectMayaScene(pyblish.api.ContextPlugin): "label": subset, "publish": False, "family": 'workfile', + "families": ['workfile'], "setMembers": [current_file] })