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) 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) diff --git a/pype/plugins/standalonepublisher/publish/extract_review.py b/pype/plugins/standalonepublisher/publish/extract_review.py index 4f27c119d9..fbc14785a4 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,18 +171,25 @@ class ExtractReviewSP(pyblish.api.InstancePlugin): "name": name, "ext": ext, "files": repr_file, + "stagingDir": out_stagigng_dir, "tags": new_tags, "outputName": name, "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"]: 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 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..d9241bd91f 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] @@ -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