diff --git a/pype/hosts/maya/plugins/publish/validate_joints_hidden.py b/pype/hosts/maya/plugins/publish/validate_rig_joints_hidden.py
similarity index 93%
rename from pype/hosts/maya/plugins/publish/validate_joints_hidden.py
rename to pype/hosts/maya/plugins/publish/validate_rig_joints_hidden.py
index 61dfcd563d..a102df50de 100644
--- a/pype/hosts/maya/plugins/publish/validate_joints_hidden.py
+++ b/pype/hosts/maya/plugins/publish/validate_rig_joints_hidden.py
@@ -6,7 +6,7 @@ import pype.hosts.maya.api.action
from pype.hosts.maya.api import lib
-class ValidateJointsHidden(pyblish.api.InstancePlugin):
+class ValidateRigJointsHidden(pyblish.api.InstancePlugin):
"""Validate all joints are hidden visually.
This includes being hidden:
@@ -20,7 +20,6 @@ class ValidateJointsHidden(pyblish.api.InstancePlugin):
order = pype.api.ValidateContentsOrder
hosts = ['maya']
families = ['rig']
- category = 'rig'
version = (0, 1, 0)
label = "Joints Hidden"
actions = [pype.hosts.maya.api.action.SelectInvalidAction,
diff --git a/pype/settings/entities/dict_immutable_keys_entity.py b/pype/settings/entities/dict_immutable_keys_entity.py
index 854c904f3c..0e6a98bdde 100644
--- a/pype/settings/entities/dict_immutable_keys_entity.py
+++ b/pype/settings/entities/dict_immutable_keys_entity.py
@@ -130,7 +130,7 @@ class DictImmutableKeysEntity(ItemEntity):
continue
if child_obj.key in self.non_gui_children:
- raise SchemaDuplicatedKeys(self.path, child_obj.key)
+ raise SchemaDuplicatedKeys("", child_obj.key)
self.non_gui_children[child_obj.key] = child_obj
if not first:
diff --git a/pype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json b/pype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json
index 0d705d3d02..6aeba9b8b2 100644
--- a/pype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json
+++ b/pype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json
@@ -21,135 +21,219 @@
}
]
},
+
{
- "type": "splitter"
- },
- {
- "type": "label",
- "label": "Collectors"
- },
- {
- "type": "dict",
- "collapsible": true,
- "key": "ValidateCameraAttributes",
- "label": "Validate Camera Attributes",
- "checkbox_key": "enabled",
+ "type": "collapsible-wrap",
+ "label": "Validators",
"children": [
{
- "type": "boolean",
- "key": "enabled",
- "label": "Enabled"
+ "type": "dict",
+ "collapsible": true,
+ "key": "ValidateShaderName",
+ "label": "ValidateShaderName",
+ "checkbox_key": "enabled",
+ "children": [
+ {
+ "type": "boolean",
+ "key": "enabled",
+ "label": "Enabled"
+ },
+ {
+ "type": "label",
+ "label": "Shader name regex can use named capture group asset to validate against current asset name.
Example:
^.*(?P=<asset>.+)_SHD
"
+ },
+ {
+ "type": "text",
+ "key": "regex",
+ "label": "Validation regex"
+ }
+ ]
+ },
+
+ {
+ "type": "dict",
+ "collapsible": true,
+ "key": "ValidateAttributes",
+ "label": "ValidateAttributes",
+ "checkbox_key": "enabled",
+ "children": [
+ {
+ "type": "boolean",
+ "key": "enabled",
+ "label": "Enabled"
+ },
+ {
+ "type": "raw-json",
+ "key": "attributes",
+ "label": "Attributes"
+ }
+ ]
},
{
- "type": "boolean",
- "key": "optional",
- "label": "Optional"
+ "type": "collapsible-wrap",
+ "label": "Model",
+ "children": [
+ {
+ "type": "dict",
+ "collapsible": true,
+ "key": "ValidateModelName",
+ "label": "Validate Model Name",
+ "checkbox_key": "enabled",
+ "children": [
+ {
+ "type": "boolean",
+ "key": "enabled",
+ "label": "Enabled"
+ },
+ {
+ "type": "label",
+ "label": "Path to material file defining list of material names to check. This is material name per line simple text file.
It will be checked against named group shader in your Validation regex.For example:
^.*(?P=<shader>.+)_GEO
"
+ },
+ {
+ "type": "path-widget",
+ "key": "material_file",
+ "label": "Material File",
+ "multiplatform": true,
+ "multipath": false
+ },
+ {
+ "type": "text",
+ "key": "regex",
+ "label": "Validation regex"
+ }
+ ]
+ },
+ {
+ "type": "dict",
+ "collapsible": true,
+ "key": "ValidateTransformNamingSuffix",
+ "label": "ValidateTransformNamingSuffix",
+ "checkbox_key": "enabled",
+ "children": [
+ {
+ "type": "boolean",
+ "key": "enabled",
+ "label": "Enabled"
+ },
+ {
+ "type": "label",
+ "label": "Validates transform suffix based on the type of its children shapes."
+ },
+ {
+ "type": "raw-json",
+ "key": "SUFFIX_NAMING_TABLE",
+ "label": "Suffix Naming Table"
+ },
+ {
+ "type": "boolean",
+ "key": "ALLOW_IF_NOT_IN_SUFFIX_TABLE",
+ "label": "Allow if suffix not in table"
+ }
+ ]
+ },
+ {
+ "type": "schema_template",
+ "name": "template_simple_plugin",
+ "template_data": [
+ {
+ "key": "ValidateColorSets",
+ "label": "ValidateColorSets"
+ },
+ {
+ "key": "ValidateMeshHasOverlappingUVs",
+ "label": "ValidateMeshHasOverlappingUVs"
+ },
+ {
+ "key": "ValidateMeshArnoldAttributes",
+ "label": "ValidateMeshArnoldAttributes"
+ },
+ {
+ "key": "ValidateMeshShaderConnections",
+ "label": "ValidateMeshShaderConnections"
+ },
+ {
+ "key": "ValidateMeshSingleUVSet",
+ "label": "ValidateMeshSingleUVSet"
+ },
+ {
+ "key": "ValidateMeshHasUVs",
+ "label": "ValidateMeshHasUVs"
+ },
+ {
+ "key": "ValidateMeshLaminaFaces",
+ "label": "ValidateMeshLaminaFaces"
+ },
+ {
+ "key": "ValidateMeshNonManifold",
+ "label": "ValidateMeshNonManifold"
+ },
+ {
+ "key": "ValidateMeshUVSetMap1",
+ "label": "ValidateMeshUVSetMap1",
+ "docstring": "Validate model's default uv set exists and is named 'map1'.
In Maya meshes by default have a uv set named 'map1' that cannot be deleted. It can be renamed, however,
introducing some issues with some renderers. As such we ensure the first (default) UV set index is named 'map1'."
+ },
+ {
+ "key": "ValidateMeshVerticesHaveEdges",
+ "label": "ValidateMeshVerticesHaveEdges"
+ },
+ {
+ "key": "ValidateNoAnimation",
+ "label": "ValidateNoAnimation",
+ "docstring": "Ensure no keyframes on nodes in the Instance.
Even though a Model would extract without animCurves correctly this avoids getting different
output from a model when extracted from a different frame than the first frame. (Might be overly restrictive though)."
+ },
+ {
+ "key": "ValidateNoNamespace",
+ "label": "ValidateNoNamespace"
+ },
+ {
+ "key": "ValidateNoNullTransforms",
+ "label": "ValidateNoNullTransforms"
+ },
+ {
+ "key": "ValidateNoUnknownNodes",
+ "label": "ValidateNoUnknownNodes"
+ },
+ {
+ "key": "ValidateNodeNoGhosting",
+ "label": "ValidateNodeNoGhosting"
+ },
+ {
+ "key": "ValidateShapeDefaultNames",
+ "label": "ValidateShapeDefaultNames"
+ },
+ {
+ "key": "ValidateShapeRenderStats",
+ "label": "ValidateShapeRenderStats"
+ },
+ {
+ "key": "ValidateTransformZero",
+ "label": "ValidateTransformZero"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "type": "schema_template",
+ "name": "template_simple_plugin",
+ "template_data": [
+ {
+ "key": "ValidateCameraAttributes",
+ "label": "Validate Camera Attributes",
+ "docstring": ""
+ },
+ {
+ "key": "ValidateAssemblyName",
+ "label": "Validate Assembly Name"
+ },
+ {
+ "key": "ValidateAssRelativePaths",
+ "label": "ValidateAssRelativePaths"
+ }
+ ]
}
]
},
- {
- "type": "dict",
- "collapsible": true,
- "key": "ValidateModelName",
- "label": "Validate Model Name",
- "checkbox_key": "enabled",
- "children": [
- {
- "type": "boolean",
- "key": "enabled",
- "label": "Enabled"
- },
- {
- "type": "label",
- "label": "Path to material file defining list of material names to check. This is material name per line simple text file.
It will be checked against named group shader in your Validation regex.For example:
^.*(?P=<shader>.+)_GEO
"
- },
- {
- "type": "path-widget",
- "key": "material_file",
- "label": "Material File",
- "multiplatform": true,
- "multipath": false
- },
- {
- "type": "text",
- "key": "regex",
- "label": "Validation regex"
- }
- ]
- },
- {
- "type": "dict",
- "collapsible": true,
- "key": "ValidateAssemblyName",
- "label": "Validate Assembly Name",
- "checkbox_key": "enabled",
- "children": [
- {
- "type": "boolean",
- "key": "enabled",
- "label": "Enabled"
- }
- ]
- },
- {
- "type": "dict",
- "collapsible": true,
- "key": "ValidateShaderName",
- "label": "ValidateShaderName",
- "checkbox_key": "enabled",
- "children": [
- {
- "type": "boolean",
- "key": "enabled",
- "label": "Enabled"
- },
- {
- "type": "label",
- "label": "Shader name regex can use named capture group asset to validate against current asset name.Example:
^.*(?P=<asset>.+)_SHD
"
- },
- {
- "type": "text",
- "key": "regex",
- "label": "Validation regex"
- }
- ]
- },
- {
- "type": "dict",
- "collapsible": true,
- "key": "ValidateMeshHasOverlappingUVs",
- "label": "ValidateMeshHasOverlappingUVs",
- "checkbox_key": "enabled",
- "children": [
- {
- "type": "boolean",
- "key": "enabled",
- "label": "Enabled"
- }
- ]
- },
- {
- "type": "dict",
- "collapsible": true,
- "key": "ValidateAttributes",
- "label": "ValidateAttributes",
- "checkbox_key": "enabled",
- "children": [
- {
- "type": "boolean",
- "key": "enabled",
- "label": "Enabled"
- },
- {
- "type": "raw-json",
- "key": "attributes",
- "label": "Attributes"
- }
- ]
- },
- {
- "type": "splitter"
- },
{
"type": "label",
"label": "Extractors"
diff --git a/pype/settings/entities/schemas/projects_schema/schemas/template_simple_plugin.json b/pype/settings/entities/schemas/projects_schema/schemas/template_simple_plugin.json
new file mode 100644
index 0000000000..88151f7534
--- /dev/null
+++ b/pype/settings/entities/schemas/projects_schema/schemas/template_simple_plugin.json
@@ -0,0 +1,30 @@
+[
+ {
+ "__default_values__": {
+ "docstring": ""
+ }
+ },
+ {
+ "type": "dict",
+ "collapsible": true,
+ "key": "{key}",
+ "label": "{label}",
+ "checkbox_key": "enabled",
+ "children": [
+ {
+ "type": "boolean",
+ "key": "enabled",
+ "label": "Enabled"
+ },
+ {
+ "type": "boolean",
+ "key": "optional",
+ "label": "Optional"
+ },
+ {
+ "type": "label",
+ "label": "{docstring}"
+ }
+ ]
+ }
+]
\ No newline at end of file