From 5dedd2655dd501d5ad6aa59161b54fba548768d4 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 22 Dec 2021 16:40:20 +0100 Subject: [PATCH] Revert "Photoshop: New style validations for New publisher" --- .../publish/help/validate_instance_asset.xml | 25 -------- .../plugins/publish/help/validate_naming.xml | 21 ------- .../publish/help/validate_unique_subsets.xml | 23 -------- .../publish/validate_instance_asset.py | 12 +--- .../plugins/publish/validate_naming.py | 22 +++---- .../publish/validate_unique_subsets.py | 23 ++------ openpype/pipeline/__init__.py | 2 - openpype/pipeline/publish/__init__.py | 10 +--- openpype/pipeline/publish/lib.py | 57 ------------------- openpype/pipeline/publish/publish_plugins.py | 26 +-------- 10 files changed, 18 insertions(+), 203 deletions(-) delete mode 100644 openpype/hosts/photoshop/plugins/publish/help/validate_instance_asset.xml delete mode 100644 openpype/hosts/photoshop/plugins/publish/help/validate_naming.xml delete mode 100644 openpype/hosts/photoshop/plugins/publish/help/validate_unique_subsets.xml diff --git a/openpype/hosts/photoshop/plugins/publish/help/validate_instance_asset.xml b/openpype/hosts/photoshop/plugins/publish/help/validate_instance_asset.xml deleted file mode 100644 index 3b040e8ea8..0000000000 --- a/openpype/hosts/photoshop/plugins/publish/help/validate_instance_asset.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - -Subset context - -## Invalid subset context - -Asset name found '{found}' in subsets, expected '{expected}'. - -### How to repair? - -You can fix this with `Repair` button on the right. This will use '{expected}' asset name and overwrite '{found}' asset name in scene metadata. - -After that restart `Publish` with a `Reload button`. - -If this is unwanted, close workfile and open again, that way different asset value would be used for context information. - - -### __Detailed Info__ (optional) - -This might happen if you are reuse old workfile and open it in different context. -(Eg. you created subset "renderCompositingDefault" from asset "Robot' in "your_project_Robot_compositing.aep", now you opened this workfile in a context "Sloth" but existing subset for "Robot" asset stayed in the workfile.) - - - \ No newline at end of file diff --git a/openpype/hosts/photoshop/plugins/publish/help/validate_naming.xml b/openpype/hosts/photoshop/plugins/publish/help/validate_naming.xml deleted file mode 100644 index 21a7370340..0000000000 --- a/openpype/hosts/photoshop/plugins/publish/help/validate_naming.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - -Invalid name - -## Invalid name of subset - -Name of subset is created from a layer name. Some characters (whitespace, '/' etc.) are not allowed because of publishing (files couldn't be saved on some OSes). - -### How to repair? - -You can fix this with `Repair` button on the right. This will remove invalid characters with safe character ('_' by default) in both subset names and matching group names. - -After that restart `Publish` with a `Reload button`. - -Or you use `Subset Manager` to delete existing subsets, remove created groups, rename layers that are used for their creation and use `Create` option in the Openpype menu to create them again. - -Invalid characters and 'safe character' could be configured in Settings. Ask your OpenPype admin to modify them if necessary. - - - \ No newline at end of file diff --git a/openpype/hosts/photoshop/plugins/publish/help/validate_unique_subsets.xml b/openpype/hosts/photoshop/plugins/publish/help/validate_unique_subsets.xml deleted file mode 100644 index fa7c76a2dd..0000000000 --- a/openpype/hosts/photoshop/plugins/publish/help/validate_unique_subsets.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - -Subsets duplicated - -## Some subsets are duplicated - -Created subsets must be unique. - -Subsets '{duplicates_str}' are duplicated. - -### How to repair? - -Use `Subset Manager` to delete duplicated subset to have only unique subset names and restart `Publish` with a `Reload button`. - - -### __Detailed Info__ (optional) - -Subset names are created from layer names. Layer names are filtered for characters that would break publishing process when files are created. -This replacement process might result in duplicate names of subsets. - - - \ No newline at end of file diff --git a/openpype/hosts/photoshop/plugins/publish/validate_instance_asset.py b/openpype/hosts/photoshop/plugins/publish/validate_instance_asset.py index 8f13cc6b33..4dc1972074 100644 --- a/openpype/hosts/photoshop/plugins/publish/validate_instance_asset.py +++ b/openpype/hosts/photoshop/plugins/publish/validate_instance_asset.py @@ -1,9 +1,7 @@ from avalon import api import pyblish.api -from avalon import photoshop - import openpype.api -from openpype.pipeline import PublishXmlValidationError +from avalon import photoshop class ValidateInstanceAssetRepair(pyblish.api.Action): @@ -58,10 +56,4 @@ class ValidateInstanceAsset(pyblish.api.InstancePlugin): f"If that's not correct value, close workfile and " f"reopen via Workfiles!" ) - formatting_data = { - "found": instance_asset, - "expected": current_asset - } - if instance_asset != current_asset: - raise PublishXmlValidationError(self, msg, - formatting_data=formatting_data) + assert instance_asset == current_asset, msg diff --git a/openpype/hosts/photoshop/plugins/publish/validate_naming.py b/openpype/hosts/photoshop/plugins/publish/validate_naming.py index d548992f09..1635096f4b 100644 --- a/openpype/hosts/photoshop/plugins/publish/validate_naming.py +++ b/openpype/hosts/photoshop/plugins/publish/validate_naming.py @@ -1,10 +1,8 @@ import re import pyblish.api -from avalon import photoshop - import openpype.api -from openpype.pipeline import PublishXmlValidationError +from avalon import photoshop class ValidateNamingRepair(pyblish.api.Action): @@ -71,18 +69,14 @@ class ValidateNaming(pyblish.api.InstancePlugin): replace_char = '' def process(self, instance): - msg = "Name \"{}\" is not allowed.".format(instance.data["name"]) + help_msg = ' Use Repair action (A) in Pyblish to fix it.' + msg = "Name \"{}\" is not allowed.{}".format(instance.data["name"], + help_msg) + assert not re.search(self.invalid_chars, instance.data["name"]), msg - formatting_data = {"error_msg": msg} - if re.search(self.invalid_chars, instance.data["name"]): - raise PublishXmlValidationError(self, msg, - formatting_data=formatting_data) - - msg = "Subset \"{}\" is not allowed.".format(instance.data["subset"]) - formatting_data = {"error_msg": msg} - if re.search(self.invalid_chars, instance.data["subset"]): - raise PublishXmlValidationError(self, msg, - formatting_data=formatting_data) + msg = "Subset \"{}\" is not allowed.{}".format(instance.data["subset"], + help_msg) + assert not re.search(self.invalid_chars, instance.data["subset"]), msg @classmethod def get_replace_chars(cls): diff --git a/openpype/hosts/photoshop/plugins/publish/validate_unique_subsets.py b/openpype/hosts/photoshop/plugins/publish/validate_unique_subsets.py index d41fefa971..15ae5fbcea 100644 --- a/openpype/hosts/photoshop/plugins/publish/validate_unique_subsets.py +++ b/openpype/hosts/photoshop/plugins/publish/validate_unique_subsets.py @@ -1,8 +1,5 @@ -import collections - import pyblish.api import openpype.api -from openpype.pipeline import PublishXmlValidationError class ValidateSubsetUniqueness(pyblish.api.ContextPlugin): @@ -22,18 +19,8 @@ class ValidateSubsetUniqueness(pyblish.api.ContextPlugin): if instance.data.get('publish'): subset_names.append(instance.data.get('subset')) - duplicates = [item - for item, count in - collections.Counter(subset_names).items() - if count > 1] - - if duplicates: - duplicates_str = ",".join(duplicates) - formatting_data = {"duplicates_str": duplicates_str} - msg = ( - "Instance subset names {} are not unique.".format( - duplicates_str) + - " Remove duplicates via SubsetManager." - ) - raise PublishXmlValidationError(self, msg, - formatting_data=formatting_data) + msg = ( + "Instance subset names are not unique. " + + "Remove duplicates via SubsetManager." + ) + assert len(subset_names) == len(set(subset_names)), msg diff --git a/openpype/pipeline/__init__.py b/openpype/pipeline/__init__.py index 79d6ce4d54..e968df4011 100644 --- a/openpype/pipeline/__init__.py +++ b/openpype/pipeline/__init__.py @@ -9,7 +9,6 @@ from .create import ( from .publish import ( PublishValidationError, - PublishXmlValidationError, KnownPublishError, OpenPypePyblishPluginMixin ) @@ -24,7 +23,6 @@ __all__ = ( "CreatedInstance", "PublishValidationError", - "PublishXmlValidationError", "KnownPublishError", "OpenPypePyblishPluginMixin" ) diff --git a/openpype/pipeline/publish/__init__.py b/openpype/pipeline/publish/__init__.py index 228c4d8dcb..ca958816fe 100644 --- a/openpype/pipeline/publish/__init__.py +++ b/openpype/pipeline/publish/__init__.py @@ -1,26 +1,20 @@ from .publish_plugins import ( PublishValidationError, - PublishXmlValidationError, KnownPublishError, OpenPypePyblishPluginMixin ) from .lib import ( DiscoverResult, - publish_plugins_discover, - load_help_content_from_plugin, - load_help_content_from_filepath + publish_plugins_discover ) __all__ = ( "PublishValidationError", - "PublishXmlValidationError", "KnownPublishError", "OpenPypePyblishPluginMixin", "DiscoverResult", - "publish_plugins_discover", - "load_help_content_from_plugin", - "load_help_content_from_filepath" + "publish_plugins_discover" ) diff --git a/openpype/pipeline/publish/lib.py b/openpype/pipeline/publish/lib.py index f38e73afe2..0fa712a301 100644 --- a/openpype/pipeline/publish/lib.py +++ b/openpype/pipeline/publish/lib.py @@ -1,8 +1,6 @@ import os import sys import types -import inspect -import xml.etree.ElementTree import six import pyblish.plugin @@ -30,61 +28,6 @@ class DiscoverResult: self.plugins[item] = value -class HelpContent: - def __init__(self, title, description, detail=None): - self.title = title - self.description = description - self.detail = detail - - -def load_help_content_from_filepath(filepath): - """Load help content from xml file. - - Xml file may containt errors and warnings. - """ - errors = {} - warnings = {} - output = { - "errors": errors, - "warnings": warnings - } - if not os.path.exists(filepath): - return output - tree = xml.etree.ElementTree.parse(filepath) - root = tree.getroot() - for child in root: - child_id = child.attrib.get("id") - if child_id is None: - continue - - # Make sure ID is string - child_id = str(child_id) - - title = child.find("title").text - description = child.find("description").text - detail_node = child.find("detail") - detail = None - if detail_node is not None: - detail = detail_node.text - if child.tag == "error": - errors[child_id] = HelpContent(title, description, detail) - elif child.tag == "warning": - warnings[child_id] = HelpContent(title, description, detail) - return output - - -def load_help_content_from_plugin(plugin): - cls = plugin - if not inspect.isclass(plugin): - cls = plugin.__class__ - plugin_filepath = inspect.getfile(cls) - plugin_dir = os.path.dirname(plugin_filepath) - basename = os.path.splitext(os.path.basename(plugin_filepath))[0] - filename = basename + ".xml" - filepath = os.path.join(plugin_dir, "help", filename) - return load_help_content_from_filepath(filepath) - - def publish_plugins_discover(paths=None): """Find and return available pyblish plug-ins diff --git a/openpype/pipeline/publish/publish_plugins.py b/openpype/pipeline/publish/publish_plugins.py index bce64ec709..b60b9f43a7 100644 --- a/openpype/pipeline/publish/publish_plugins.py +++ b/openpype/pipeline/publish/publish_plugins.py @@ -1,6 +1,3 @@ -from .lib import load_help_content_from_plugin - - class PublishValidationError(Exception): """Validation error happened during publishing. @@ -15,34 +12,13 @@ class PublishValidationError(Exception): description(str): Detailed description of an error. It is possible to use Markdown syntax. """ - def __init__(self, message, title=None, description=None, detail=None): + def __init__(self, message, title=None, description=None): self.message = message self.title = title or "< Missing title >" self.description = description or message - self.detail = detail super(PublishValidationError, self).__init__(message) -class PublishXmlValidationError(PublishValidationError): - def __init__( - self, plugin, message, key=None, formatting_data=None - ): - if key is None: - key = "main" - - if not formatting_data: - formatting_data = {} - result = load_help_content_from_plugin(plugin) - content_obj = result["errors"][key] - description = content_obj.description.format(**formatting_data) - detail = content_obj.detail - if detail: - detail = detail.format(**formatting_data) - super(PublishXmlValidationError, self).__init__( - message, content_obj.title, description, detail - ) - - class KnownPublishError(Exception): """Publishing crashed because of known error.