diff --git a/server_addon/houdini/client/ayon_houdini/api/plugin.py b/server_addon/houdini/client/ayon_houdini/api/plugin.py index bb29c534f3..9c6bba925a 100644 --- a/server_addon/houdini/client/ayon_houdini/api/plugin.py +++ b/server_addon/houdini/client/ayon_houdini/api/plugin.py @@ -7,6 +7,7 @@ from abc import ( import six import hou +import pyblish.api from ayon_core.pipeline import ( CreatorError, LegacyCreator, @@ -14,11 +15,17 @@ from ayon_core.pipeline import ( CreatedInstance, AYON_INSTANCE_ID, AVALON_INSTANCE_ID, + load, + publish ) from ayon_core.lib import BoolDef + from .lib import imprint, read, lsattr, add_self_publish_button +SETTINGS_CATEGORY = "houdini" + + class Creator(LegacyCreator): """Creator plugin to create instances in Houdini @@ -169,7 +176,7 @@ class HoudiniCreator(NewCreator, HoudiniCreatorBase): settings_name = None add_publish_button = False - settings_category = "houdini" + settings_category = SETTINGS_CATEGORY def create(self, product_name, instance_data, pre_create_data): try: @@ -349,3 +356,39 @@ class HoudiniCreator(NewCreator, HoudiniCreatorBase): for key, value in settings.items(): setattr(self, key, value) + + +class HoudiniLoader(load.LoaderPlugin): + """Base class for Houdini load plugins.""" + + hosts = ["houdini"] + settings_category = SETTINGS_CATEGORY + + +class HoudiniInstancePlugin(pyblish.api.InstancePlugin): + """Base class for Houdini instance publish plugins.""" + + hosts = ["houdini"] + settings_category = SETTINGS_CATEGORY + + +class HoudiniContextPlugin(pyblish.api.ContextPlugin): + """Base class for Houdini context publish plugins.""" + + hosts = ["houdini"] + settings_category = SETTINGS_CATEGORY + + +class HoudiniExtractorPlugin(publish.Extractor): + """Base class for Houdini extract plugins. + + Note: + The `HoudiniExtractorPlugin` is a subclass of `publish.Extractor`, + which in turn is a subclass of `pyblish.api.InstancePlugin`. + Should there be a requirement to create an extractor that operates + as a context plugin, it would be beneficial to incorporate + the functionalities present in `publish.Extractor`. + """ + + hosts = ["houdini"] + settings_category = SETTINGS_CATEGORY diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/actions.py b/server_addon/houdini/client/ayon_houdini/plugins/load/actions.py index 3e9cc35504..5fe545ced9 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/actions.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/actions.py @@ -2,10 +2,10 @@ """ -from ayon_core.pipeline import load +from ayon_houdini.api import plugin -class SetFrameRangeLoader(load.LoaderPlugin): +class SetFrameRangeLoader(plugin.HoudiniLoader): """Set frame range excluding pre- and post-handles""" product_types = { @@ -42,7 +42,7 @@ class SetFrameRangeLoader(load.LoaderPlugin): hou.playbar.setPlaybackRange(start, end) -class SetFrameRangeWithHandlesLoader(load.LoaderPlugin): +class SetFrameRangeWithHandlesLoader(plugin.HoudiniLoader): """Set frame range including pre- and post-handles""" product_types = { diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_alembic.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_alembic.py index 7a610ce8b3..7db2fe93ed 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_alembic.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_alembic.py @@ -1,12 +1,12 @@ import os -from ayon_core.pipeline import ( - load, - get_representation_path, +from ayon_core.pipeline import get_representation_path +from ayon_houdini.api import ( + pipeline, + plugin ) -from ayon_houdini.api import pipeline -class AbcLoader(load.LoaderPlugin): +class AbcLoader(plugin.HoudiniLoader): """Load Alembic""" product_types = {"model", "animation", "pointcache", "gpuCache"} diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_alembic_archive.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_alembic_archive.py index 672734879d..a34a43e48a 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_alembic_archive.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_alembic_archive.py @@ -1,13 +1,13 @@ import os -from ayon_core.pipeline import ( - load, - get_representation_path, +from ayon_core.pipeline import get_representation_path +from ayon_houdini.api import ( + pipeline, + plugin ) -from ayon_houdini.api import pipeline -class AbcArchiveLoader(load.LoaderPlugin): +class AbcArchiveLoader(plugin.HoudiniLoader): """Load Alembic as full geometry network hierarchy """ product_types = {"model", "animation", "pointcache", "gpuCache"} diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_ass.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_ass.py index a7e558feb4..5fd97bc2a6 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_ass.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_ass.py @@ -1,14 +1,14 @@ import os import re -from ayon_core.pipeline import ( - load, - get_representation_path, +from ayon_core.pipeline import get_representation_path +from ayon_houdini.api import ( + pipeline, + plugin ) -from ayon_houdini.api import pipeline -class AssLoader(load.LoaderPlugin): +class AssLoader(plugin.HoudiniLoader): """Load .ass with Arnold Procedural""" product_types = {"ass"} diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_bgeo.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_bgeo.py index b9f3b2b085..7119612cda 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_bgeo.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_bgeo.py @@ -2,14 +2,14 @@ import os import re -from ayon_core.pipeline import ( - load, - get_representation_path, +from ayon_core.pipeline import get_representation_path +from ayon_houdini.api import ( + pipeline, + plugin ) -from ayon_houdini.api import pipeline -class BgeoLoader(load.LoaderPlugin): +class BgeoLoader(plugin.HoudiniLoader): """Load bgeo files to Houdini.""" label = "Load bgeo" diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_camera.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_camera.py index 0f8c4936a3..b597519813 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_camera.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_camera.py @@ -1,16 +1,15 @@ -from ayon_core.pipeline import ( - load, - get_representation_path, -) -from ayon_houdini.api import pipeline +import hou +from ayon_core.pipeline import get_representation_path +from ayon_houdini.api import ( + pipeline, + plugin +) from ayon_houdini.api.lib import ( set_camera_resolution, get_camera_from_container ) -import hou - ARCHIVE_EXPRESSION = ('__import__("_alembic_hom_extensions")' '.alembicGetCameraDict') @@ -84,7 +83,7 @@ def transfer_non_default_values(src, dest, ignore=None): dest_parm.setFromParm(parm) -class CameraLoader(load.LoaderPlugin): +class CameraLoader(plugin.HoudiniLoader): """Load camera from an Alembic file""" product_types = {"camera"} diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_fbx.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_fbx.py index 33b0688435..273ca43bc4 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_fbx.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_fbx.py @@ -1,13 +1,13 @@ # -*- coding: utf-8 -*- """Fbx Loader for houdini. """ -from ayon_core.pipeline import ( - load, - get_representation_path, +from ayon_core.pipeline import get_representation_path +from ayon_houdini.api import ( + pipeline, + plugin ) -from ayon_houdini.api import pipeline -class FbxLoader(load.LoaderPlugin): +class FbxLoader(plugin.HoudiniLoader): """Load fbx files. """ label = "Load FBX" diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_filepath.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_filepath.py index 5c99f8bdb1..2ce9bd7ffb 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_filepath.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_filepath.py @@ -1,13 +1,14 @@ import os import re - -from ayon_core.pipeline import load -from ayon_houdini.api import pipeline - import hou +from ayon_houdini.api import ( + pipeline, + plugin +) -class FilePathLoader(load.LoaderPlugin): + +class FilePathLoader(plugin.HoudiniLoader): """Load a managed filepath to a null node. This is useful if for a particular workflow there is no existing loader diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_hda.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_hda.py index c0255614a5..b04e211aa4 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_hda.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_hda.py @@ -1,13 +1,13 @@ # -*- coding: utf-8 -*- import os -from ayon_core.pipeline import ( - load, - get_representation_path, +from ayon_core.pipeline import get_representation_path +from ayon_houdini.api import ( + pipeline, + plugin ) -from ayon_houdini.api import pipeline -class HdaLoader(load.LoaderPlugin): +class HdaLoader(plugin.HoudiniLoader): """Load Houdini Digital Asset file.""" product_types = {"hda"} diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_image.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_image.py index 6163e6d77a..9d4cd2fb18 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_image.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_image.py @@ -1,14 +1,16 @@ import os import re +import hou from ayon_core.pipeline import ( - load, get_representation_path, AVALON_CONTAINER_ID, ) -from ayon_houdini.api import lib, pipeline - -import hou +from ayon_houdini.api import ( + pipeline, + plugin, + lib +) def get_image_avalon_container(): @@ -42,7 +44,7 @@ def get_image_avalon_container(): return image_container -class ImageLoader(load.LoaderPlugin): +class ImageLoader(plugin.HoudiniLoader): """Load images into COP2""" product_types = { diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_redshift_proxy.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_redshift_proxy.py index f11ac065a1..514dbe109f 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_redshift_proxy.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_redshift_proxy.py @@ -1,16 +1,17 @@ import os import re -from ayon_core.pipeline import ( - load, - get_representation_path, -) -from ayon_houdini.api import pipeline -from ayon_core.pipeline.load import LoadError - import hou +from ayon_core.pipeline import get_representation_path +from ayon_core.pipeline.load import LoadError -class RedshiftProxyLoader(load.LoaderPlugin): +from ayon_houdini.api import ( + pipeline, + plugin +) + + +class RedshiftProxyLoader(plugin.HoudiniLoader): """Load Redshift Proxy""" product_types = {"redshiftproxy"} diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_usd_layer.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_usd_layer.py index af6f470674..fb302fd943 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_usd_layer.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_usd_layer.py @@ -1,12 +1,14 @@ from ayon_core.pipeline import ( - load, get_representation_path, AVALON_CONTAINER_ID, ) -from ayon_houdini.api import lib +from ayon_houdini.api import ( + plugin, + lib +) -class USDSublayerLoader(load.LoaderPlugin): +class USDSublayerLoader(plugin.HoudiniLoader): """Sublayer USD file in Solaris""" product_types = { diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_usd_reference.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_usd_reference.py index 41d84922f7..690f6ce187 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_usd_reference.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_usd_reference.py @@ -1,12 +1,14 @@ from ayon_core.pipeline import ( - load, get_representation_path, AVALON_CONTAINER_ID, ) -from ayon_houdini.api import lib +from ayon_houdini.api import ( + plugin, + lib +) -class USDReferenceLoader(load.LoaderPlugin): +class USDReferenceLoader(plugin.HoudiniLoader): """Reference USD file in Solaris""" product_types = { diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_usd_sop.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_usd_sop.py index 99e2c4375f..347e3283de 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_usd_sop.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_usd_sop.py @@ -1,10 +1,12 @@ import os -from ayon_core.pipeline import load -from ayon_houdini.api import pipeline +from ayon_houdini.api import ( + pipeline, + plugin +) -class SopUsdImportLoader(load.LoaderPlugin): +class SopUsdImportLoader(plugin.HoudiniLoader): """Load USD to SOPs via `usdimport`""" label = "Load USD to SOPs" diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/load_vdb.py b/server_addon/houdini/client/ayon_houdini/plugins/load/load_vdb.py index 13fab288fa..9014f4c5e2 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/load_vdb.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/load_vdb.py @@ -1,14 +1,14 @@ import os import re -from ayon_core.pipeline import ( - load, - get_representation_path, +from ayon_core.pipeline import get_representation_path +from ayon_houdini.api import ( + pipeline, + plugin ) -from ayon_houdini.api import pipeline -class VdbLoader(load.LoaderPlugin): +class VdbLoader(plugin.HoudiniLoader): """Load VDB""" product_types = {"vdbcache"} diff --git a/server_addon/houdini/client/ayon_houdini/plugins/load/show_usdview.py b/server_addon/houdini/client/ayon_houdini/plugins/load/show_usdview.py index 0158a6b963..4e18bc038a 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/load/show_usdview.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/load/show_usdview.py @@ -3,10 +3,10 @@ import platform import subprocess from ayon_core.lib.vendor_bin_utils import find_executable -from ayon_core.pipeline import load +from ayon_houdini.api import plugin -class ShowInUsdview(load.LoaderPlugin): +class ShowInUsdview(plugin.HoudiniLoader): """Open USD file in usdview""" label = "Show in usdview" diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_active_state.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_active_state.py index 7fda94b288..e09a347e9f 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_active_state.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_active_state.py @@ -1,8 +1,10 @@ -import pyblish.api import hou +import pyblish.api +from ayon_houdini.api import plugin -class CollectInstanceActiveState(pyblish.api.InstancePlugin): + +class CollectInstanceActiveState(plugin.HoudiniInstancePlugin): """Collect default active state for instance from its node bypass state. This is done at the very end of the CollectorOrder so that any required @@ -14,7 +16,6 @@ class CollectInstanceActiveState(pyblish.api.InstancePlugin): order = pyblish.api.CollectorOrder + 0.299 families = ["*"] - hosts = ["houdini"] label = "Instance Active State" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_arnold_rop.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_arnold_rop.py index 7b693c2d6f..10c6d91d26 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_arnold_rop.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_arnold_rop.py @@ -4,12 +4,14 @@ import re import hou import pyblish.api -from ayon_houdini.api import colorspace +from ayon_houdini.api import colorspace, plugin from ayon_houdini.api.lib import ( - evalParmNoFrame, get_color_management_preferences) + get_color_management_preferences, + evalParmNoFrame +) -class CollectArnoldROPRenderProducts(pyblish.api.InstancePlugin): +class CollectArnoldROPRenderProducts(plugin.HoudiniInstancePlugin): """Collect Arnold ROP Render Products Collects the instance.data["files"] for the render products. @@ -23,7 +25,6 @@ class CollectArnoldROPRenderProducts(pyblish.api.InstancePlugin): # This specific order value is used so that # this plugin runs after CollectFrames order = pyblish.api.CollectorOrder + 0.11 - hosts = ["houdini"] families = ["arnold_rop"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_asset_handles.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_asset_handles.py index 81ee5a2315..db9bde8595 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_asset_handles.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_asset_handles.py @@ -1,12 +1,12 @@ # -*- coding: utf-8 -*- """Collector plugin for frames data on ROP instances.""" -import hou # noqa import pyblish.api from ayon_core.lib import BoolDef from ayon_core.pipeline import AYONPyblishPluginMixin +from ayon_houdini.api import plugin -class CollectAssetHandles(pyblish.api.InstancePlugin, +class CollectAssetHandles(plugin.HoudiniInstancePlugin, AYONPyblishPluginMixin): """Apply folder handles. @@ -23,8 +23,6 @@ class CollectAssetHandles(pyblish.api.InstancePlugin, the exclusive frame range and actual handle ranges. """ - hosts = ["houdini"] - # This specific order value is used so that # this plugin runs after CollectAnatomyInstanceData order = pyblish.api.CollectorOrder + 0.499 @@ -32,8 +30,6 @@ class CollectAssetHandles(pyblish.api.InstancePlugin, label = "Collect Folder Handles" use_asset_handles = True - settings_category = "houdini" - def process(self, instance): # Only process instances without already existing handles data # but that do have frameStartHandle and frameEndHandle defined diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_cache_farm.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_cache_farm.py index 0e638a093e..ecfebccfef 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_cache_farm.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_cache_farm.py @@ -1,10 +1,13 @@ import os -import pyblish.api import hou -from ayon_houdini.api import lib +import pyblish.api +from ayon_houdini.api import ( + lib, + plugin +) -class CollectDataforCache(pyblish.api.InstancePlugin): +class CollectDataforCache(plugin.HoudiniInstancePlugin): """Collect data for caching to Deadline.""" # Run after Collect Frames @@ -12,7 +15,6 @@ class CollectDataforCache(pyblish.api.InstancePlugin): families = ["ass", "pointcache", "mantraifd", "redshiftproxy", "vdbcache", "model"] - hosts = ["houdini"] targets = ["local", "remote"] label = "Collect Data for Cache" diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_chunk_size.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_chunk_size.py index 14aab04b6b..6ff53b7695 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_chunk_size.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_chunk_size.py @@ -1,9 +1,10 @@ import pyblish.api from ayon_core.lib import NumberDef from ayon_core.pipeline import AYONPyblishPluginMixin +from ayon_houdini.api import plugin -class CollectChunkSize(pyblish.api.InstancePlugin, +class CollectChunkSize(plugin.HoudiniInstancePlugin, AYONPyblishPluginMixin): """Collect chunk size for cache submission to Deadline.""" @@ -11,13 +12,10 @@ class CollectChunkSize(pyblish.api.InstancePlugin, families = ["ass", "pointcache", "vdbcache", "mantraifd", "redshiftproxy", "model"] - hosts = ["houdini"] targets = ["local", "remote"] label = "Collect Chunk Size" chunk_size = 999999 - settings_category = "houdini" - def process(self, instance): # need to get the chunk size info from the setting attr_values = self.get_attr_values_from_data(instance.data) diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_current_file.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_current_file.py index 7b55778803..8e339e0e04 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_current_file.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_current_file.py @@ -2,14 +2,14 @@ import os import hou import pyblish.api +from ayon_houdini.api import plugin -class CollectHoudiniCurrentFile(pyblish.api.ContextPlugin): +class CollectHoudiniCurrentFile(plugin.HoudiniContextPlugin): """Inject the current working file into context""" order = pyblish.api.CollectorOrder - 0.1 label = "Houdini Current File" - hosts = ["houdini"] def process(self, context): """Inject the current working file""" diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_farm_instances.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_farm_instances.py index 586aa2da57..8fdae06f90 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_farm_instances.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_farm_instances.py @@ -1,7 +1,8 @@ import pyblish.api +from ayon_houdini.api import plugin -class CollectFarmInstances(pyblish.api.InstancePlugin): +class CollectFarmInstances(plugin.HoudiniInstancePlugin): """Collect instances for farm render.""" order = pyblish.api.CollectorOrder @@ -11,7 +12,6 @@ class CollectFarmInstances(pyblish.api.InstancePlugin): "arnold_rop", "vray_rop"] - hosts = ["houdini"] targets = ["local", "remote"] label = "Collect farm instances" diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_frames.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_frames.py index 7805d8ec35..3378657bfd 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_frames.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_frames.py @@ -5,10 +5,10 @@ import re import hou # noqa import pyblish.api -from ayon_houdini.api import lib +from ayon_houdini.api import lib, plugin -class CollectFrames(pyblish.api.InstancePlugin): +class CollectFrames(plugin.HoudiniInstancePlugin): """Collect all frames which would be saved from the ROP nodes""" # This specific order value is used so that diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_inputs.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_inputs.py index 6cf6bbf430..f2904a68f6 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_inputs.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_inputs.py @@ -1,8 +1,8 @@ from collections import deque import pyblish.api - from ayon_core.pipeline import registered_host +from ayon_houdini.api import plugin def get_container_members(container): @@ -80,7 +80,7 @@ def iter_upstream(node): collected.update(ancestors) -class CollectUpstreamInputs(pyblish.api.InstancePlugin): +class CollectUpstreamInputs(plugin.HoudiniInstancePlugin): """Collect source input containers used for this publish. This will include `inputs` data of which loaded publishes were used in the @@ -91,7 +91,6 @@ class CollectUpstreamInputs(pyblish.api.InstancePlugin): label = "Collect Inputs" order = pyblish.api.CollectorOrder + 0.4 - hosts = ["houdini"] def process(self, instance): # We can't get the "inputAncestors" directly from the ROP diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_instances_type.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_instances_type.py index 07851387fe..542abf8139 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_instances_type.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_instances_type.py @@ -10,7 +10,6 @@ class CollectPointcacheType(pyblish.api.InstancePlugin): """Collect data type for different instances.""" order = pyblish.api.CollectorOrder - hosts = ["houdini"] families = ["pointcache", "model"] label = "Collect instances types" diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_instances_usd_layered.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_instances_usd_layered.py index ddf4b60c66..4f85a629fb 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_instances_usd_layered.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_instances_usd_layered.py @@ -1,11 +1,11 @@ import hou import pyblish.api -from ayon_houdini.api import lib -import ayon_houdini.api.usd as hou_usdlib from ayon_core.pipeline import usdlib +from ayon_houdini.api import lib, plugin +import ayon_houdini.api.usd as hou_usdlib -class CollectInstancesUsdLayered(pyblish.api.ContextPlugin): +class CollectInstancesUsdLayered(plugin.HoudiniContextPlugin): """Collect Instances from a ROP Network and its configured layer paths. The output nodes of the ROP node will only be published when *any* of the @@ -32,7 +32,6 @@ class CollectInstancesUsdLayered(pyblish.api.ContextPlugin): order = pyblish.api.CollectorOrder - 0.01 label = "Collect Instances (USD Configured Layers)" - hosts = ["houdini"] def process(self, context): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_karma_rop.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_karma_rop.py index 62ceed9999..60fec9d2e0 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_karma_rop.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_karma_rop.py @@ -9,11 +9,12 @@ from ayon_houdini.api.lib import ( get_color_management_preferences ) from ayon_houdini.api import ( - colorspace + colorspace, + plugin ) -class CollectKarmaROPRenderProducts(pyblish.api.InstancePlugin): +class CollectKarmaROPRenderProducts(plugin.HoudiniInstancePlugin): """Collect Karma Render Products Collects the instance.data["files"] for the multipart render product. @@ -27,7 +28,6 @@ class CollectKarmaROPRenderProducts(pyblish.api.InstancePlugin): # This specific order value is used so that # this plugin runs after CollectFrames order = pyblish.api.CollectorOrder + 0.11 - hosts = ["houdini"] families = ["karma_rop"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_local_render_instances.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_local_render_instances.py index efc029373b..259b2378bb 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_local_render_instances.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_local_render_instances.py @@ -6,9 +6,10 @@ from ayon_core.pipeline.publish import ( get_plugin_settings, apply_plugin_settings_automatically ) +from ayon_houdini.api import plugin -class CollectLocalRenderInstances(pyblish.api.InstancePlugin): +class CollectLocalRenderInstances(plugin.HoudiniInstancePlugin): """Collect instances for local render. Agnostic Local Render Collector. @@ -22,11 +23,8 @@ class CollectLocalRenderInstances(pyblish.api.InstancePlugin): "arnold_rop", "vray_rop"] - hosts = ["houdini"] label = "Collect local render instances" - settings_category = "houdini" - use_deadline_aov_filter = False aov_filter = {"host_name": "houdini", "value": [".*([Bb]eauty).*"]} diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_mantra_rop.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_mantra_rop.py index 09d4c82226..f7feeee63b 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_mantra_rop.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_mantra_rop.py @@ -9,11 +9,12 @@ from ayon_houdini.api.lib import ( get_color_management_preferences ) from ayon_houdini.api import ( - colorspace + colorspace, + plugin ) -class CollectMantraROPRenderProducts(pyblish.api.InstancePlugin): +class CollectMantraROPRenderProducts(plugin.HoudiniInstancePlugin): """Collect Mantra Render Products Collects the instance.data["files"] for the render products. @@ -27,7 +28,6 @@ class CollectMantraROPRenderProducts(pyblish.api.InstancePlugin): # This specific order value is used so that # this plugin runs after CollectFrames order = pyblish.api.CollectorOrder + 0.11 - hosts = ["houdini"] families = ["mantra_rop"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_output_node.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_output_node.py index 289222f32b..ff51669376 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_output_node.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_output_node.py @@ -1,9 +1,9 @@ import pyblish.api - from ayon_core.pipeline.publish import KnownPublishError +from ayon_houdini.api import plugin -class CollectOutputSOPPath(pyblish.api.InstancePlugin): +class CollectOutputSOPPath(plugin.HoudiniInstancePlugin): """Collect the out node's SOP/COP Path value.""" order = pyblish.api.CollectorOrder @@ -19,7 +19,6 @@ class CollectOutputSOPPath(pyblish.api.InstancePlugin): "model" ] - hosts = ["houdini"] label = "Collect Output Node Path" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_redshift_rop.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_redshift_rop.py index 7982b53a7e..96cb6ebeaf 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_redshift_rop.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_redshift_rop.py @@ -9,11 +9,12 @@ from ayon_houdini.api.lib import ( get_color_management_preferences ) from ayon_houdini.api import ( - colorspace + colorspace, + plugin ) -class CollectRedshiftROPRenderProducts(pyblish.api.InstancePlugin): +class CollectRedshiftROPRenderProducts(plugin.HoudiniInstancePlugin): """Collect USD Render Products Collects the instance.data["files"] for the render products. @@ -27,7 +28,6 @@ class CollectRedshiftROPRenderProducts(pyblish.api.InstancePlugin): # This specific order value is used so that # this plugin runs after CollectFrames order = pyblish.api.CollectorOrder + 0.11 - hosts = ["houdini"] families = ["redshift_rop"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_remote_publish.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_remote_publish.py index 845a7c4a1f..e695b57518 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_remote_publish.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_remote_publish.py @@ -1,16 +1,15 @@ +import hou import pyblish.api -import hou from ayon_core.pipeline.publish import RepairAction -from ayon_houdini.api import lib +from ayon_houdini.api import lib, plugin -class CollectRemotePublishSettings(pyblish.api.ContextPlugin): +class CollectRemotePublishSettings(plugin.HoudiniContextPlugin): """Collect custom settings of the Remote Publish node.""" order = pyblish.api.CollectorOrder families = ["*"] - hosts = ["houdini"] targets = ["deadline"] label = "Remote Publish Submission Settings" actions = [RepairAction] diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_render_products.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_render_products.py index fcd80e0082..e84f6c6f84 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_render_products.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_render_products.py @@ -5,6 +5,7 @@ import hou import pxr.UsdRender import pyblish.api +from ayon_houdini.api import plugin def get_var_changed(variable=None): @@ -41,12 +42,11 @@ def get_var_changed(variable=None): return changed -class CollectRenderProducts(pyblish.api.InstancePlugin): +class CollectRenderProducts(plugin.HoudiniInstancePlugin): """Collect USD Render Products.""" label = "Collect Render Products" order = pyblish.api.CollectorOrder + 0.4 - hosts = ["houdini"] families = ["usdrender"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_review_data.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_review_data.py index ed2de785a2..cca55463e6 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_review_data.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_review_data.py @@ -1,8 +1,9 @@ import hou import pyblish.api +from ayon_houdini.api import plugin -class CollectHoudiniReviewData(pyblish.api.InstancePlugin): +class CollectHoudiniReviewData(plugin.HoudiniInstancePlugin): """Collect Review Data.""" label = "Collect Review Data" @@ -10,7 +11,6 @@ class CollectHoudiniReviewData(pyblish.api.InstancePlugin): # this plugin runs after CollectRopFrameRange # Also after CollectLocalRenderInstances order = pyblish.api.CollectorOrder + 0.13 - hosts = ["houdini"] families = ["review"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_reviewable_instances.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_reviewable_instances.py index 78dc5fe11a..84cd8377a8 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_reviewable_instances.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_reviewable_instances.py @@ -1,7 +1,8 @@ import pyblish.api +from ayon_houdini.api import plugin -class CollectReviewableInstances(pyblish.api.InstancePlugin): +class CollectReviewableInstances(plugin.HoudiniInstancePlugin): """Collect Reviewable Instances. Basically, all instances of the specified families diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_rop_frame_range.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_rop_frame_range.py index b0d69a14e7..c0f8d7aef9 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_rop_frame_range.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_rop_frame_range.py @@ -2,13 +2,12 @@ """Collector plugin for frames data on ROP instances.""" import hou # noqa import pyblish.api -from ayon_houdini.api import lib +from ayon_houdini.api import lib, plugin -class CollectRopFrameRange(pyblish.api.InstancePlugin): +class CollectRopFrameRange(plugin.HoudiniInstancePlugin): """Collect all frames which would be saved from the ROP nodes""" - hosts = ["houdini"] order = pyblish.api.CollectorOrder label = "Collect RopNode Frame Range" diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_staticmesh_type.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_staticmesh_type.py index db9efec7a1..1aab655532 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_staticmesh_type.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_staticmesh_type.py @@ -2,12 +2,12 @@ """Collector for staticMesh types. """ import pyblish.api +from ayon_houdini.api import plugin -class CollectStaticMeshType(pyblish.api.InstancePlugin): +class CollectStaticMeshType(plugin.HoudiniInstancePlugin): """Collect data type for fbx instance.""" - hosts = ["houdini"] families = ["staticMesh"] label = "Collect type of staticMesh" diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_usd_bootstrap.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_usd_bootstrap.py index cd82f1679a..5067b9aab2 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_usd_bootstrap.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_usd_bootstrap.py @@ -1,10 +1,10 @@ import pyblish.api import ayon_api - from ayon_core.pipeline import usdlib, KnownPublishError +from ayon_houdini.api import plugin -class CollectUsdBootstrap(pyblish.api.InstancePlugin): +class CollectUsdBootstrap(plugin.HoudiniInstancePlugin): """Collect special Asset/Shot bootstrap instances if those are needed. Some specific products are intended to be part of the default structure @@ -21,7 +21,6 @@ class CollectUsdBootstrap(pyblish.api.InstancePlugin): order = pyblish.api.CollectorOrder + 0.35 label = "Collect USD Bootstrap" - hosts = ["houdini"] families = ["usd", "usd.layered"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_usd_layers.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_usd_layers.py index 41990d84d9..7ecf5fbb02 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_usd_layers.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_usd_layers.py @@ -1,17 +1,15 @@ import os - +import hou import pyblish.api +from ayon_houdini.api import plugin import ayon_houdini.api.usd as usdlib -import hou - -class CollectUsdLayers(pyblish.api.InstancePlugin): +class CollectUsdLayers(plugin.HoudiniInstancePlugin): """Collect the USD Layers that have configured save paths.""" order = pyblish.api.CollectorOrder + 0.35 label = "Collect USD Layers" - hosts = ["houdini"] families = ["usd"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_vray_rop.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_vray_rop.py index 2fd2dbd599..2f9c2bb18e 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_vray_rop.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_vray_rop.py @@ -9,11 +9,12 @@ from ayon_houdini.api.lib import ( get_color_management_preferences ) from ayon_houdini.api import ( - colorspace + colorspace, + plugin ) -class CollectVrayROPRenderProducts(pyblish.api.InstancePlugin): +class CollectVrayROPRenderProducts(plugin.HoudiniInstancePlugin): """Collect Vray Render Products Collects the instance.data["files"] for the render products. @@ -27,7 +28,6 @@ class CollectVrayROPRenderProducts(pyblish.api.InstancePlugin): # This specific order value is used so that # this plugin runs after CollectFrames order = pyblish.api.CollectorOrder + 0.11 - hosts = ["houdini"] families = ["vray_rop"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_workfile.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_workfile.py index aa533bcf1b..8d0939a803 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_workfile.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_workfile.py @@ -1,14 +1,13 @@ import os import pyblish.api +from ayon_houdini.api import plugin - -class CollectWorkfile(pyblish.api.InstancePlugin): +class CollectWorkfile(plugin.HoudiniInstancePlugin): """Inject workfile representation into instance""" order = pyblish.api.CollectorOrder - 0.01 label = "Houdini Workfile Data" - hosts = ["houdini"] families = ["workfile"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_workscene_fps.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_workscene_fps.py index 6f6cc978cd..0091eb0abb 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_workscene_fps.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/collect_workscene_fps.py @@ -1,13 +1,13 @@ -import pyblish.api import hou +import pyblish.api +from ayon_houdini.api import plugin -class CollectWorksceneFPS(pyblish.api.ContextPlugin): +class CollectWorksceneFPS(plugin.HoudiniContextPlugin): """Get the FPS of the work scene.""" label = "Workscene FPS" order = pyblish.api.CollectorOrder - hosts = ["houdini"] def process(self, context): fps = hou.fps() diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_active_view_thumbnail.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_active_view_thumbnail.py index 172399479f..c4d51c0808 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_active_view_thumbnail.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_active_view_thumbnail.py @@ -1,11 +1,10 @@ -import pyblish.api import tempfile -from ayon_core.pipeline import publish -from ayon_houdini.api import lib +import pyblish.api +from ayon_houdini.api import lib, plugin from ayon_houdini.api.pipeline import IS_HEADLESS -class ExtractActiveViewThumbnail(publish.Extractor): +class ExtractActiveViewThumbnail(plugin.HoudiniExtractorPlugin): """Set instance thumbnail to a screengrab of current active viewport. This makes it so that if an instance does not have a thumbnail set yet that @@ -16,7 +15,6 @@ class ExtractActiveViewThumbnail(publish.Extractor): order = pyblish.api.ExtractorOrder + 0.49 label = "Extract Active View Thumbnail" families = ["workfile"] - hosts = ["houdini"] def process(self, instance): if IS_HEADLESS: diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_alembic.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_alembic.py index 824ac468a2..e82f07284a 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_alembic.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_alembic.py @@ -1,18 +1,16 @@ import os +import hou import pyblish.api -from ayon_core.pipeline import publish +from ayon_houdini.api import plugin from ayon_houdini.api.lib import render_rop -import hou - -class ExtractAlembic(publish.Extractor): +class ExtractAlembic(plugin.HoudiniExtractorPlugin): order = pyblish.api.ExtractorOrder label = "Extract Alembic" - hosts = ["houdini"] families = ["abc", "camera"] targets = ["local", "remote"] diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_ass.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_ass.py index 23fe6678d4..a796bbf4b3 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_ass.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_ass.py @@ -1,19 +1,17 @@ import os +import hou import pyblish.api -from ayon_core.pipeline import publish +from ayon_houdini.api import plugin from ayon_houdini.api.lib import render_rop -import hou - -class ExtractAss(publish.Extractor): +class ExtractAss(plugin.HoudiniExtractorPlugin): order = pyblish.api.ExtractorOrder + 0.1 label = "Extract Ass" families = ["ass"] - hosts = ["houdini"] targets = ["local", "remote"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_bgeo.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_bgeo.py index e477b7a552..ab8837065d 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_bgeo.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_bgeo.py @@ -1,19 +1,15 @@ import os +import hou import pyblish.api -from ayon_core.pipeline import publish -from ayon_houdini.api.lib import render_rop -from ayon_houdini.api import lib - -import hou +from ayon_houdini.api import lib, plugin -class ExtractBGEO(publish.Extractor): +class ExtractBGEO(plugin.HoudiniExtractorPlugin): order = pyblish.api.ExtractorOrder label = "Extract BGEO" - hosts = ["houdini"] families = ["bgeo"] def process(self, instance): @@ -32,7 +28,7 @@ class ExtractBGEO(publish.Extractor): file_name, staging_dir)) # write files - render_rop(ropnode) + lib.render_rop(ropnode) output = instance.data["frames"] diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_composite.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_composite.py index ca4c738a6a..cab462aef6 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_composite.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_composite.py @@ -1,18 +1,17 @@ import os +import hou import pyblish.api from ayon_core.pipeline import publish +from ayon_houdini.api import plugin from ayon_houdini.api.lib import render_rop, splitext -import hou - -class ExtractComposite(publish.Extractor, +class ExtractComposite(plugin.HoudiniExtractorPlugin, publish.ColormanagedPyblishPluginMixin): order = pyblish.api.ExtractorOrder label = "Extract Composite (Image Sequence)" - hosts = ["houdini"] families = ["imagesequence"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_fbx.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_fbx.py index de1d8d3b3b..49b3fa07ca 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_fbx.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_fbx.py @@ -2,18 +2,16 @@ """Fbx Extractor for houdini. """ import os +import hou import pyblish.api -from ayon_core.pipeline import publish +from ayon_houdini.api import plugin from ayon_houdini.api.lib import render_rop -import hou - -class ExtractFBX(publish.Extractor): +class ExtractFBX(plugin.HoudiniExtractorPlugin): label = "Extract FBX" families = ["fbx"] - hosts = ["houdini"] order = pyblish.api.ExtractorOrder + 0.1 diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_hda.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_hda.py index 5fe83e0dcf..e4449d11f8 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_hda.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_hda.py @@ -1,16 +1,15 @@ # -*- coding: utf-8 -*- import os from pprint import pformat -import pyblish.api -from ayon_core.pipeline import publish import hou +import pyblish.api +from ayon_houdini.api import plugin -class ExtractHDA(publish.Extractor): +class ExtractHDA(plugin.HoudiniExtractorPlugin): order = pyblish.api.ExtractorOrder label = "Extract HDA" - hosts = ["houdini"] families = ["hda"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_mantra_ifd.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_mantra_ifd.py index f0bcf4b371..b424f2e452 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_mantra_ifd.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_mantra_ifd.py @@ -1,17 +1,15 @@ import os +import hou import pyblish.api -from ayon_core.pipeline import publish - -import hou +from ayon_houdini.api import plugin -class ExtractMantraIFD(publish.Extractor): +class ExtractMantraIFD(plugin.HoudiniExtractorPlugin): order = pyblish.api.ExtractorOrder label = "Extract Mantra ifd" - hosts = ["houdini"] families = ["mantraifd"] targets = ["local", "remote"] diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_opengl.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_opengl.py index 6d608aacfa..bee1bf871f 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_opengl.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_opengl.py @@ -1,20 +1,19 @@ import os +import hou import pyblish.api from ayon_core.pipeline import publish +from ayon_houdini.api import plugin from ayon_houdini.api.lib import render_rop -import hou - -class ExtractOpenGL(publish.Extractor, +class ExtractOpenGL(plugin.HoudiniExtractorPlugin, publish.ColormanagedPyblishPluginMixin): order = pyblish.api.ExtractorOrder - 0.01 label = "Extract OpenGL" families = ["review"] - hosts = ["houdini"] def process(self, instance): ropnode = hou.node(instance.data.get("instance_node")) diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_redshift_proxy.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_redshift_proxy.py index 634322b310..3e8a79df00 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_redshift_proxy.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_redshift_proxy.py @@ -1,19 +1,17 @@ import os +import hou import pyblish.api -from ayon_core.pipeline import publish +from ayon_houdini.api import plugin from ayon_houdini.api.lib import render_rop -import hou - -class ExtractRedshiftProxy(publish.Extractor): +class ExtractRedshiftProxy(plugin.HoudiniExtractorPlugin): order = pyblish.api.ExtractorOrder + 0.1 label = "Extract Redshift Proxy" families = ["redshiftproxy"] - hosts = ["houdini"] targets = ["local", "remote"] def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_render.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_render.py index 0506c7c8d5..8ff8590650 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_render.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_render.py @@ -1,16 +1,16 @@ +import os +import hou + import pyblish.api -from ayon_core.pipeline import publish +from ayon_houdini.api import plugin from ayon_houdini.api.lib import render_rop -import hou -import os -class ExtractRender(publish.Extractor): +class ExtractRender(plugin.HoudiniExtractorPlugin): order = pyblish.api.ExtractorOrder label = "Extract Render" - hosts = ["houdini"] families = ["mantra_rop", "karma_rop", "redshift_rop", diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_usd.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_usd.py index 54051934d7..40e6211e63 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_usd.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_usd.py @@ -1,18 +1,16 @@ - import os +import hou import pyblish.api -from ayon_core.pipeline import publish +from ayon_houdini.api import plugin from ayon_houdini.api.lib import render_rop -import hou -class ExtractUSD(publish.Extractor): +class ExtractUSD(plugin.HoudiniExtractorPlugin): order = pyblish.api.ExtractorOrder label = "Extract USD" - hosts = ["houdini"] families = ["usd", "usdModel", "usdSetDress"] diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_usd_layered.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_usd_layered.py index df2bd0c4b6..6a377c57cf 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_usd_layered.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_usd_layered.py @@ -7,10 +7,8 @@ import hou import ayon_api import pyblish.api -from ayon_core.pipeline import ( - get_representation_path, - publish, -) +from ayon_core.pipeline import get_representation_path +from ayon_houdini.api import plugin import ayon_houdini.api.usd as hou_usdlib from ayon_houdini.api.lib import render_rop @@ -154,11 +152,10 @@ def parm_values(overrides): parm.set(value) -class ExtractUSDLayered(publish.Extractor): +class ExtractUSDLayered(plugin.HoudiniExtractorPlugin): order = pyblish.api.ExtractorOrder label = "Extract Layered USD" - hosts = ["houdini"] families = ["usdLayered", "usdShade"] # Force Output Processors so it will always save any file @@ -312,3 +309,14 @@ class ExtractUSDLayered(publish.Extractor): return False return filecmp.cmp(old_file, new_file) + + def staging_dir(self, instance): + """Provide a temporary directory in which to store extracted files + + Upon calling this method the staging directory is stored inside + the instance.data['stagingDir'] + """ + + from ayon_core.pipeline.publish import get_instance_staging_dir + + return get_instance_staging_dir(instance) diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_vdb_cache.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_vdb_cache.py index e1146e4978..a944d81e9b 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_vdb_cache.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/extract_vdb_cache.py @@ -1,19 +1,17 @@ import os +import hou import pyblish.api -from ayon_core.pipeline import publish +from ayon_houdini.api import plugin from ayon_houdini.api.lib import render_rop -import hou - -class ExtractVDBCache(publish.Extractor): +class ExtractVDBCache(plugin.HoudiniExtractorPlugin): order = pyblish.api.ExtractorOrder + 0.1 label = "Extract VDB Cache" families = ["vdbcache"] - hosts = ["houdini"] def process(self, instance): if instance.data.get("farm"): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/increment_current_file.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/increment_current_file.py index 3e9291d5c2..878500f605 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/increment_current_file.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/increment_current_file.py @@ -2,11 +2,15 @@ import pyblish.api from ayon_core.lib import version_up from ayon_core.pipeline import registered_host -from ayon_core.pipeline.publish import get_errored_plugins_from_context -from ayon_core.pipeline.publish import KnownPublishError +from ayon_core.pipeline.publish import ( + get_errored_plugins_from_context, + KnownPublishError +) + +from ayon_houdini.api import plugin -class IncrementCurrentFile(pyblish.api.ContextPlugin): +class IncrementCurrentFile(plugin.HoudiniContextPlugin): """Increment the current file. Saves the current scene with an increased version number. @@ -15,7 +19,6 @@ class IncrementCurrentFile(pyblish.api.ContextPlugin): label = "Increment current file" order = pyblish.api.IntegratorOrder + 9.0 - hosts = ["houdini"] families = ["workfile", "usdrender", "mantra_rop", diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/save_scene.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/save_scene.py index 7c453038ea..e0734da5d1 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/save_scene.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/save_scene.py @@ -2,13 +2,14 @@ import pyblish.api from ayon_core.pipeline import registered_host +from ayon_houdini.api import plugin -class SaveCurrentScene(pyblish.api.ContextPlugin): + +class SaveCurrentScene(plugin.HoudiniContextPlugin): """Save current scene""" label = "Save current file" order = pyblish.api.ExtractorOrder - 0.49 - hosts = ["houdini"] def process(self, context): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_abc_primitive_to_detail.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_abc_primitive_to_detail.py index 18a459bf7b..51885a963e 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_abc_primitive_to_detail.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_abc_primitive_to_detail.py @@ -1,11 +1,13 @@ # -*- coding: utf-8 -*- -import pyblish.api - from collections import defaultdict + +import pyblish.api from ayon_core.pipeline import PublishValidationError +from ayon_houdini.api import plugin -class ValidateAbcPrimitiveToDetail(pyblish.api.InstancePlugin): + +class ValidateAbcPrimitiveToDetail(plugin.HoudiniInstancePlugin): """Validate Alembic ROP Primitive to Detail attribute is consistent. The Alembic ROP crashes Houdini whenever an attribute in the "Primitive to @@ -18,7 +20,6 @@ class ValidateAbcPrimitiveToDetail(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder + 0.1 families = ["abc"] - hosts = ["houdini"] label = "Validate Primitive to Detail (Abc)" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_alembic_face_sets.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_alembic_face_sets.py index 40114bc40e..00ce554ff1 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_alembic_face_sets.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_alembic_face_sets.py @@ -1,8 +1,10 @@ # -*- coding: utf-8 -*- -import pyblish.api import hou +import pyblish.api +from ayon_houdini.api import plugin -class ValidateAlembicROPFaceSets(pyblish.api.InstancePlugin): + +class ValidateAlembicROPFaceSets(plugin.HoudiniInstancePlugin): """Validate Face Sets are disabled for extraction to pointcache. When groups are saved as Face Sets with the Alembic these show up @@ -19,7 +21,6 @@ class ValidateAlembicROPFaceSets(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder + 0.1 families = ["abc"] - hosts = ["houdini"] label = "Validate Alembic ROP Face Sets" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_alembic_input_node.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_alembic_input_node.py index dbc38058e6..aab3068171 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_alembic_input_node.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_alembic_input_node.py @@ -1,10 +1,12 @@ # -*- coding: utf-8 -*- +import hou import pyblish.api from ayon_core.pipeline import PublishValidationError -import hou + +from ayon_houdini.api import plugin -class ValidateAlembicInputNode(pyblish.api.InstancePlugin): +class ValidateAlembicInputNode(plugin.HoudiniInstancePlugin): """Validate that the node connected to the output is correct. The connected node cannot be of the following types for Alembic: @@ -15,7 +17,6 @@ class ValidateAlembicInputNode(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder + 0.1 families = ["abc"] - hosts = ["houdini"] label = "Validate Input Node (Abc)" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_animation_settings.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_animation_settings.py index 14bd3a05bd..1cc9e24dc9 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_animation_settings.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_animation_settings.py @@ -1,11 +1,12 @@ -import pyblish.api - -from ayon_core.pipeline.publish import PublishValidationError -from ayon_houdini.api import lib import hou +import pyblish.api +from ayon_core.pipeline.publish import PublishValidationError -class ValidateAnimationSettings(pyblish.api.InstancePlugin): +from ayon_houdini.api import lib, plugin + + +class ValidateAnimationSettings(plugin.HoudiniInstancePlugin): """Validate if the unexpanded string contains the frame ('$F') token This validator will only check the output parameter of the node if diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_bypass.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_bypass.py index 8a83ff42fb..f3856b4147 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_bypass.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_bypass.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- +import hou + import pyblish.api from ayon_core.pipeline import PublishValidationError -import hou +from ayon_houdini.api import plugin -class ValidateBypassed(pyblish.api.InstancePlugin): + +class ValidateBypassed(plugin.HoudiniInstancePlugin): """Validate all primitives build hierarchy from attribute when enabled. The name of the attribute must exist on the prims and have the same name @@ -15,7 +18,6 @@ class ValidateBypassed(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder - 0.1 families = ["*"] - hosts = ["houdini"] label = "Validate ROP Bypass" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_camera_rop.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_camera_rop.py index ad4ace988a..f21addb11d 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_camera_rop.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_camera_rop.py @@ -3,13 +3,14 @@ import pyblish.api from ayon_core.pipeline import PublishValidationError +from ayon_houdini.api import plugin -class ValidateCameraROP(pyblish.api.InstancePlugin): + +class ValidateCameraROP(plugin.HoudiniInstancePlugin): """Validate Camera ROP settings.""" order = pyblish.api.ValidatorOrder families = ["camera"] - hosts = ["houdini"] label = "Camera ROP" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_cop_output_node.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_cop_output_node.py index 91bd36018a..1d63e15d90 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_cop_output_node.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_cop_output_node.py @@ -1,11 +1,13 @@ # -*- coding: utf-8 -*- import hou -import pyblish.api +import pyblish.api from ayon_core.pipeline import PublishValidationError +from ayon_houdini.api import plugin -class ValidateCopOutputNode(pyblish.api.InstancePlugin): + +class ValidateCopOutputNode(plugin.HoudiniInstancePlugin): """Validate the instance COP Output Node. This will ensure: @@ -17,7 +19,6 @@ class ValidateCopOutputNode(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder families = ["imagesequence"] - hosts = ["houdini"] label = "Validate COP Output Node" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_export_is_a_single_frame.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_export_is_a_single_frame.py index a0dbc581ba..b26c60320b 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_export_is_a_single_frame.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_export_is_a_single_frame.py @@ -18,7 +18,6 @@ class ValidateSingleFrame(pyblish.api.InstancePlugin, """ families = ["model"] - hosts = ["houdini"] label = "Validate Single Frame" order = ValidateContentsOrder + 0.1 actions = [SelectInvalidAction] diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_fbx_output_node.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_fbx_output_node.py index 24d8c27bd6..1c236bb8f7 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_fbx_output_node.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_fbx_output_node.py @@ -5,11 +5,12 @@ from ayon_houdini.api.action import ( SelectInvalidAction, SelectROPAction, ) +from ayon_houdini.api import plugin from ayon_houdini.api.lib import get_obj_node_output import hou -class ValidateFBXOutputNode(pyblish.api.InstancePlugin): +class ValidateFBXOutputNode(plugin.HoudiniInstancePlugin): """Validate the instance Output Node. This will ensure: @@ -22,7 +23,6 @@ class ValidateFBXOutputNode(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder families = ["fbx"] - hosts = ["houdini"] label = "Validate FBX Output Node" actions = [SelectROPAction, SelectInvalidAction] diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_file_extension.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_file_extension.py index 43083feeea..1b3a58f4b3 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_file_extension.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_file_extension.py @@ -1,14 +1,14 @@ # -*- coding: utf-8 -*- import os -import pyblish.api - -from ayon_houdini.api import lib -from ayon_core.pipeline import PublishValidationError - import hou +import pyblish.api +from ayon_core.pipeline import PublishValidationError -class ValidateFileExtension(pyblish.api.InstancePlugin): +from ayon_houdini.api import lib, plugin + + +class ValidateFileExtension(plugin.HoudiniInstancePlugin): """Validate the output file extension fits the output family. File extensions: @@ -20,7 +20,6 @@ class ValidateFileExtension(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder families = ["camera", "vdbcache"] - hosts = ["houdini"] label = "Output File Extension" family_extensions = { diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_frame_range.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_frame_range.py index 08f82e12b8..9435fa033a 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_frame_range.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_frame_range.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- +import hou + import pyblish.api from ayon_core.pipeline import PublishValidationError from ayon_core.pipeline.publish import RepairAction -from ayon_houdini.api.action import SelectInvalidAction -import hou +from ayon_houdini.api.action import SelectInvalidAction +from ayon_houdini.api import plugin + class DisableUseFolderHandlesAction(RepairAction): @@ -12,7 +15,7 @@ class DisableUseFolderHandlesAction(RepairAction): icon = "mdi.toggle-switch-off" -class ValidateFrameRange(pyblish.api.InstancePlugin): +class ValidateFrameRange(plugin.HoudiniInstancePlugin): """Validate Frame Range. Due to the usage of start and end handles, @@ -21,7 +24,6 @@ class ValidateFrameRange(pyblish.api.InstancePlugin): """ order = pyblish.api.ValidatorOrder - 0.1 - hosts = ["houdini"] label = "Validate Frame Range" actions = [DisableUseFolderHandlesAction, SelectInvalidAction] diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_frame_token.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_frame_token.py index 1b8c167869..46c02ba6f2 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_frame_token.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_frame_token.py @@ -1,10 +1,11 @@ -import pyblish.api - -from ayon_houdini.api import lib import hou +import pyblish.api -class ValidateFrameToken(pyblish.api.InstancePlugin): +from ayon_houdini.api import lib, plugin + + +class ValidateFrameToken(plugin.HoudiniInstancePlugin): """Validate if the unexpanded string contains the frame ('$F') token. This validator will *only* check the output parameter of the node if diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_houdini_license_category.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_houdini_license_category.py index 9a68c34405..d76f8a0072 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_houdini_license_category.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_houdini_license_category.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- -import pyblish.api -from ayon_core.pipeline import PublishValidationError import hou +import pyblish.api +from ayon_core.pipeline import PublishValidationError -class ValidateHoudiniNotApprenticeLicense(pyblish.api.InstancePlugin): +from ayon_houdini.api import plugin + + +class ValidateHoudiniNotApprenticeLicense(plugin.HoudiniInstancePlugin): """Validate the Houdini instance runs a non Apprentice license. USD ROPs: @@ -21,7 +24,6 @@ class ValidateHoudiniNotApprenticeLicense(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder families = ["usd", "abc", "fbx", "camera"] - hosts = ["houdini"] label = "Houdini Apprentice License" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_instance_in_context.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_instance_in_context.py index 25f38c4600..7566dff240 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_instance_in_context.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_instance_in_context.py @@ -1,8 +1,5 @@ # -*- coding: utf-8 -*- """Validate if instance asset is the same as context asset.""" - -import pyblish.api -from ayon_houdini.api.action import SelectROPAction from ayon_core.pipeline.publish import ( RepairAction, ValidateContentsOrder, @@ -10,8 +7,11 @@ from ayon_core.pipeline.publish import ( OptionalPyblishPluginMixin ) +from ayon_houdini.api import plugin +from ayon_houdini.api.action import SelectROPAction -class ValidateInstanceInContextHoudini(pyblish.api.InstancePlugin, + +class ValidateInstanceInContextHoudini(plugin.HoudiniInstancePlugin, OptionalPyblishPluginMixin): """Validator to check if instance asset match context asset. @@ -24,11 +24,8 @@ class ValidateInstanceInContextHoudini(pyblish.api.InstancePlugin, order = ValidateContentsOrder label = "Instance in same Context" optional = True - hosts = ["houdini"] actions = [SelectROPAction, RepairAction] - settings_category = "houdini" - def process(self, instance): if not self.is_active(instance.data): return diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_mesh_is_static.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_mesh_is_static.py index f5bac761f2..b6725bc36c 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_mesh_is_static.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_mesh_is_static.py @@ -1,17 +1,17 @@ # -*- coding: utf-8 -*- """Validator for correct naming of Static Meshes.""" -import pyblish.api from ayon_core.pipeline import ( PublishValidationError, OptionalPyblishPluginMixin ) from ayon_core.pipeline.publish import ValidateContentsOrder +from ayon_houdini.api import plugin from ayon_houdini.api.action import SelectInvalidAction from ayon_houdini.api.lib import get_output_children -class ValidateMeshIsStatic(pyblish.api.InstancePlugin, +class ValidateMeshIsStatic(plugin.HoudiniInstancePlugin, OptionalPyblishPluginMixin): """Validate mesh is static. @@ -23,13 +23,10 @@ class ValidateMeshIsStatic(pyblish.api.InstancePlugin, families = ["staticMesh", "model"] - hosts = ["houdini"] label = "Validate Mesh is Static" order = ValidateContentsOrder + 0.1 actions = [SelectInvalidAction] - settings_category = "houdini" - def process(self, instance): invalid = self.get_invalid(instance) diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_mkpaths_toggled.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_mkpaths_toggled.py index 5e59eb505f..4573d4ba0b 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_mkpaths_toggled.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_mkpaths_toggled.py @@ -1,14 +1,16 @@ # -*- coding: utf-8 -*- import pyblish.api + from ayon_core.pipeline import PublishValidationError +from ayon_houdini.api import plugin -class ValidateIntermediateDirectoriesChecked(pyblish.api.InstancePlugin): + +class ValidateIntermediateDirectoriesChecked(plugin.HoudiniInstancePlugin): """Validate Create Intermediate Directories is enabled on ROP node.""" order = pyblish.api.ValidatorOrder families = ["pointcache", "camera", "vdbcache", "model"] - hosts = ["houdini"] label = "Create Intermediate Directories Checked" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_no_errors.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_no_errors.py index ae1e5cad27..ef66665d7b 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_no_errors.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_no_errors.py @@ -1,8 +1,11 @@ # -*- coding: utf-8 -*- -import pyblish.api import hou + +import pyblish.api from ayon_core.pipeline import PublishValidationError +from ayon_houdini.api import plugin + def cook_in_range(node, start, end): current = hou.intFrame() @@ -26,11 +29,10 @@ def get_errors(node): return node.errors() -class ValidateNoErrors(pyblish.api.InstancePlugin): +class ValidateNoErrors(plugin.HoudiniInstancePlugin): """Validate the Instance has no current cooking errors.""" order = pyblish.api.ValidatorOrder - hosts = ["houdini"] label = "Validate no errors" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_primitive_hierarchy_paths.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_primitive_hierarchy_paths.py index f63cb23138..9daab2a1a3 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_primitive_hierarchy_paths.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_primitive_hierarchy_paths.py @@ -1,20 +1,20 @@ # -*- coding: utf-8 -*- -import pyblish.api +import hou + +from ayon_houdini.api import plugin from ayon_core.pipeline import PublishValidationError from ayon_core.pipeline.publish import ( ValidateContentsOrder, RepairAction, ) -import hou - class AddDefaultPathAction(RepairAction): label = "Add a default path attribute" icon = "mdi.pencil-plus-outline" -class ValidatePrimitiveHierarchyPaths(pyblish.api.InstancePlugin): +class ValidatePrimitiveHierarchyPaths(plugin.HoudiniInstancePlugin): """Validate all primitives build hierarchy from attribute when enabled. The name of the attribute must exist on the prims and have the same name @@ -25,7 +25,6 @@ class ValidatePrimitiveHierarchyPaths(pyblish.api.InstancePlugin): order = ValidateContentsOrder + 0.1 families = ["abc"] - hosts = ["houdini"] label = "Validate Prims Hierarchy Path" actions = [AddDefaultPathAction] diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_remote_publish.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_remote_publish.py index 801ed08ce6..08597c0a6f 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_remote_publish.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_remote_publish.py @@ -1,19 +1,18 @@ # -*-coding: utf-8 -*- -import pyblish.api +import hou -from ayon_houdini.api import lib +import pyblish.api from ayon_core.pipeline.publish import RepairContextAction from ayon_core.pipeline import PublishValidationError -import hou +from ayon_houdini.api import lib, plugin -class ValidateRemotePublishOutNode(pyblish.api.ContextPlugin): +class ValidateRemotePublishOutNode(plugin.HoudiniContextPlugin): """Validate the remote publish out node exists for Deadline to trigger.""" order = pyblish.api.ValidatorOrder - 0.4 families = ["*"] - hosts = ["houdini"] targets = ["deadline"] label = "Remote Publish ROP node" actions = [RepairContextAction] diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_remote_publish_enabled.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_remote_publish_enabled.py index d4c6e7a45e..dc5666609f 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_remote_publish_enabled.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_remote_publish_enabled.py @@ -1,17 +1,18 @@ # -*- coding: utf-8 -*- -import pyblish.api - import hou + +import pyblish.api from ayon_core.pipeline.publish import RepairContextAction from ayon_core.pipeline import PublishValidationError +from ayon_houdini.api import plugin -class ValidateRemotePublishEnabled(pyblish.api.ContextPlugin): + +class ValidateRemotePublishEnabled(plugin.HoudiniContextPlugin): """Validate the remote publish node is *not* bypassed.""" order = pyblish.api.ValidatorOrder - 0.39 families = ["*"] - hosts = ["houdini"] targets = ["deadline"] label = "Remote Publish ROP enabled" actions = [RepairContextAction] diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_review_colorspace.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_review_colorspace.py index 30a8a35dca..e96b222446 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_review_colorspace.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_review_colorspace.py @@ -1,4 +1,7 @@ # -*- coding: utf-8 -*- +import os +import hou + import pyblish.api from ayon_core.pipeline import ( PublishValidationError, @@ -9,10 +12,9 @@ from ayon_core.pipeline.publish import ( get_plugin_settings, apply_plugin_settings_automatically ) -from ayon_houdini.api.action import SelectROPAction -import os -import hou +from ayon_houdini.api import plugin +from ayon_houdini.api.action import SelectROPAction class ResetViewSpaceAction(RepairAction): @@ -20,7 +22,7 @@ class ResetViewSpaceAction(RepairAction): icon = "mdi.monitor" -class ValidateReviewColorspace(pyblish.api.InstancePlugin, +class ValidateReviewColorspace(plugin.HoudiniInstancePlugin, OptionalPyblishPluginMixin): """Validate Review Colorspace parameters. @@ -29,15 +31,12 @@ class ValidateReviewColorspace(pyblish.api.InstancePlugin, order = pyblish.api.ValidatorOrder + 0.1 families = ["review"] - hosts = ["houdini"] label = "Validate Review Colorspace" actions = [ResetViewSpaceAction, SelectROPAction] optional = True review_color_space = "" - settings_category = "houdini" - @classmethod def apply_settings(cls, project_settings): # Preserve automatic settings applying logic diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_scene_review.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_scene_review.py index 0b09306b0d..f45cd1c97d 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_scene_review.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_scene_review.py @@ -1,10 +1,13 @@ # -*- coding: utf-8 -*- -import pyblish.api -from ayon_core.pipeline import PublishValidationError import hou +import pyblish.api +from ayon_core.pipeline import PublishValidationError -class ValidateSceneReview(pyblish.api.InstancePlugin): +from ayon_houdini.api import plugin + + +class ValidateSceneReview(plugin.HoudiniInstancePlugin): """Validator Some Scene Settings before publishing the review 1. Scene Path 2. Resolution @@ -12,7 +15,6 @@ class ValidateSceneReview(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder families = ["review"] - hosts = ["houdini"] label = "Scene Setting for review" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_sop_output_node.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_sop_output_node.py index 0b841e2f03..7d37927058 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_sop_output_node.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_sop_output_node.py @@ -1,15 +1,17 @@ # -*- coding: utf-8 -*- +import hou + import pyblish.api from ayon_core.pipeline import PublishValidationError + +from ayon_houdini.api import plugin from ayon_houdini.api.action import ( SelectInvalidAction, SelectROPAction, ) -import hou - -class ValidateSopOutputNode(pyblish.api.InstancePlugin): +class ValidateSopOutputNode(plugin.HoudiniInstancePlugin): """Validate the instance SOP Output Node. This will ensure: @@ -23,7 +25,6 @@ class ValidateSopOutputNode(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder families = ["pointcache", "vdbcache", "model"] - hosts = ["houdini"] label = "Validate Output Node (SOP)" actions = [SelectROPAction, SelectInvalidAction] diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_subset_name.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_subset_name.py index 3d284a4eec..dfd353bddf 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_subset_name.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_subset_name.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- """Validator for correct naming of Static Meshes.""" -import pyblish.api +import hou + from ayon_core.pipeline import ( PublishValidationError, OptionalPyblishPluginMixin @@ -9,30 +10,28 @@ from ayon_core.pipeline.publish import ( ValidateContentsOrder, RepairAction, ) + +from ayon_houdini.api import plugin from ayon_houdini.api.action import SelectInvalidAction from ayon_core.pipeline.create import get_product_name -import hou - class FixProductNameAction(RepairAction): label = "Fix Product Name" -class ValidateSubsetName(pyblish.api.InstancePlugin, +class ValidateSubsetName(plugin.HoudiniInstancePlugin, OptionalPyblishPluginMixin): """Validate Product name. """ families = ["staticMesh"] - hosts = ["houdini"] label = "Validate Product Name" order = ValidateContentsOrder + 0.1 actions = [FixProductNameAction, SelectInvalidAction] optional = True - settings_category = "houdini" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_unreal_staticmesh_naming.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_unreal_staticmesh_naming.py index 6b7c980fa2..a3d971695d 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_unreal_staticmesh_naming.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_unreal_staticmesh_naming.py @@ -1,19 +1,19 @@ # -*- coding: utf-8 -*- """Validator for correct naming of Static Meshes.""" -import pyblish.api +import hou + from ayon_core.pipeline import ( PublishValidationError, OptionalPyblishPluginMixin ) from ayon_core.pipeline.publish import ValidateContentsOrder +from ayon_houdini.api import plugin from ayon_houdini.api.action import SelectInvalidAction from ayon_houdini.api.lib import get_output_children -import hou - -class ValidateUnrealStaticMeshName(pyblish.api.InstancePlugin, +class ValidateUnrealStaticMeshName(plugin.HoudiniInstancePlugin, OptionalPyblishPluginMixin): """Validate name of Unreal Static Mesh. @@ -29,7 +29,6 @@ class ValidateUnrealStaticMeshName(pyblish.api.InstancePlugin, """ families = ["staticMesh"] - hosts = ["houdini"] label = "Unreal Static Mesh Name (FBX)" order = ValidateContentsOrder + 0.1 actions = [SelectInvalidAction] @@ -38,8 +37,6 @@ class ValidateUnrealStaticMeshName(pyblish.api.InstancePlugin, collision_prefixes = [] static_mesh_prefix = "" - settings_category = "houdini" - @classmethod def apply_settings(cls, project_settings): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_layer_path_backslashes.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_layer_path_backslashes.py index 3dcf7206f1..4da67ff199 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_layer_path_backslashes.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_layer_path_backslashes.py @@ -1,13 +1,14 @@ # -*- coding: utf-8 -*- -import pyblish.api - -import ayon_houdini.api.usd as hou_usdlib -from ayon_core.pipeline import PublishValidationError - import hou +import pyblish.api +from ayon_core.pipeline import PublishValidationError -class ValidateUSDLayerPathBackslashes(pyblish.api.InstancePlugin): +from ayon_houdini.api import plugin +import ayon_houdini.api.usd as hou_usdlib + + +class ValidateUSDLayerPathBackslashes(plugin.HoudiniInstancePlugin): """Validate USD loaded paths have no backslashes. This is a crucial validation for HUSK USD rendering as Houdini's @@ -22,7 +23,6 @@ class ValidateUSDLayerPathBackslashes(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder families = ["usdSetDress", "usdShade", "usd", "usdrender"] - hosts = ["houdini"] label = "USD Layer path backslashes" optional = True diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_model_and_shade.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_model_and_shade.py index 34440b70b0..935bd39e23 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_model_and_shade.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_model_and_shade.py @@ -1,12 +1,12 @@ # -*- coding: utf-8 -*- -import pyblish.api - -import ayon_houdini.api.usd as hou_usdlib -from ayon_core.pipeline import PublishValidationError - +import hou from pxr import UsdShade, UsdRender, UsdLux -import hou +import pyblish.api +from ayon_core.pipeline import PublishValidationError + +from ayon_houdini.api import plugin +import ayon_houdini.api.usd as hou_usdlib def fullname(o): @@ -17,7 +17,7 @@ def fullname(o): return module + "." + o.__name__ -class ValidateUsdModel(pyblish.api.InstancePlugin): +class ValidateUsdModel(plugin.HoudiniInstancePlugin): """Validate USD Model. Disallow Shaders, Render settings, products and vars and Lux lights. @@ -26,7 +26,6 @@ class ValidateUsdModel(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder families = ["usdModel"] - hosts = ["houdini"] label = "Validate USD Model" optional = True diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_output_node.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_output_node.py index 968d64e8fc..88d549d46c 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_output_node.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_output_node.py @@ -1,9 +1,12 @@ # -*- coding: utf-8 -*- import pyblish.api + from ayon_core.pipeline import PublishValidationError +from ayon_houdini.api import plugin -class ValidateUSDOutputNode(pyblish.api.InstancePlugin): + +class ValidateUSDOutputNode(plugin.HoudiniInstancePlugin): """Validate the instance USD LOPs Output Node. This will ensure: @@ -15,7 +18,6 @@ class ValidateUSDOutputNode(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder families = ["usd"] - hosts = ["houdini"] label = "Validate Output Node (USD)" def process(self, instance): diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_render_product_names.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_render_product_names.py index 4825b7cc71..eb46b266e2 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_render_product_names.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_render_product_names.py @@ -1,16 +1,17 @@ # -*- coding: utf-8 -*- import os -import pyblish.api +import pyblish.api from ayon_core.pipeline import PublishValidationError +from ayon_houdini.api import plugin -class ValidateUSDRenderProductNames(pyblish.api.InstancePlugin): + +class ValidateUSDRenderProductNames(plugin.HoudiniInstancePlugin): """Validate USD Render Product names are correctly set absolute paths.""" order = pyblish.api.ValidatorOrder families = ["usdrender"] - hosts = ["houdini"] label = "Validate USD Render Product Names" optional = True diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_setdress.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_setdress.py index dc773b6770..3e91f0418f 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_setdress.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_setdress.py @@ -1,11 +1,12 @@ # -*- coding: utf-8 -*- import pyblish.api - -import ayon_houdini.api.usd as hou_usdlib from ayon_core.pipeline import PublishValidationError +from ayon_houdini.api import plugin +import ayon_houdini.api.usd as hou_usdlib -class ValidateUsdSetDress(pyblish.api.InstancePlugin): + +class ValidateUsdSetDress(plugin.HoudiniInstancePlugin): """Validate USD Set Dress. Must only have references or payloads. May not generate new mesh or @@ -15,14 +16,13 @@ class ValidateUsdSetDress(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder families = ["usdSetDress"] - hosts = ["houdini"] label = "Validate USD Set Dress" optional = True def process(self, instance): - from pxr import UsdGeom import hou + from pxr import UsdGeom rop = hou.node(instance.data.get("instance_node")) lop_path = hou_usdlib.get_usd_rop_loppath(rop) diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_shade_model_exists.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_shade_model_exists.py index 048d675c00..8a93d3b4a1 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_shade_model_exists.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_shade_model_exists.py @@ -2,20 +2,19 @@ import re import ayon_api -import pyblish.api - from ayon_core.pipeline.publish import ( ValidateContentsOrder, KnownPublishError, PublishValidationError, ) +from ayon_houdini.api import plugin -class ValidateUSDShadeModelExists(pyblish.api.InstancePlugin): + +class ValidateUSDShadeModelExists(plugin.HoudiniInstancePlugin): """Validate the Instance has no current cooking errors.""" order = ValidateContentsOrder - hosts = ["houdini"] families = ["usdShade"] label = "USD Shade model exists" diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_shade_workspace.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_shade_workspace.py index 2ea4b5d816..8972941253 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_shade_workspace.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_usd_shade_workspace.py @@ -1,11 +1,13 @@ # -*- coding: utf-8 -*- +import hou + import pyblish.api from ayon_core.pipeline import PublishValidationError -import hou +from ayon_houdini.api import plugin -class ValidateUsdShadeWorkspace(pyblish.api.InstancePlugin): +class ValidateUsdShadeWorkspace(plugin.HoudiniInstancePlugin): """Validate USD Shading Workspace is correct version. There have been some issues with outdated/erroneous Shading Workspaces @@ -14,7 +16,6 @@ class ValidateUsdShadeWorkspace(pyblish.api.InstancePlugin): """ order = pyblish.api.ValidatorOrder - hosts = ["houdini"] families = ["usdShade"] label = "USD Shade Workspace" diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_vdb_output_node.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_vdb_output_node.py index 5c662c0084..c4ed9d2fb8 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_vdb_output_node.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_vdb_output_node.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- import contextlib - -import pyblish.api import hou +import pyblish.api from ayon_core.pipeline import PublishXmlValidationError + +from ayon_houdini.api import plugin from ayon_houdini.api.action import SelectInvalidAction @@ -60,7 +61,7 @@ def get_geometry_at_frame(sop_node, frame, force=True): return sop_node.geometryAtFrame(frame) -class ValidateVDBOutputNode(pyblish.api.InstancePlugin): +class ValidateVDBOutputNode(plugin.HoudiniInstancePlugin): """Validate that the node connected to the output node is of type VDB. All primitives of the output geometry must be VDBs, no other primitive @@ -81,7 +82,6 @@ class ValidateVDBOutputNode(pyblish.api.InstancePlugin): order = pyblish.api.ValidatorOrder + 0.1 families = ["vdbcache"] - hosts = ["houdini"] label = "Validate Output Node (VDB)" actions = [SelectInvalidAction] diff --git a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_workfile_paths.py b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_workfile_paths.py index f2008b8281..e1cd0c6caa 100644 --- a/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_workfile_paths.py +++ b/server_addon/houdini/client/ayon_houdini/plugins/publish/validate_workfile_paths.py @@ -1,20 +1,22 @@ # -*- coding: utf-8 -*- -import pyblish.api import hou + +import pyblish.api from ayon_core.pipeline import ( PublishValidationError, OptionalPyblishPluginMixin ) from ayon_core.pipeline.publish import RepairAction +from ayon_houdini.api import plugin + class ValidateWorkfilePaths( - pyblish.api.InstancePlugin, OptionalPyblishPluginMixin): + plugin.HoudiniInstancePlugin, OptionalPyblishPluginMixin): """Validate workfile paths so they are absolute.""" order = pyblish.api.ValidatorOrder families = ["workfile"] - hosts = ["houdini"] label = "Validate Workfile Paths" actions = [RepairAction] optional = True @@ -22,8 +24,6 @@ class ValidateWorkfilePaths( node_types = ["file", "alembic"] prohibited_vars = ["$HIP", "$JOB"] - settings_category = "houdini" - def process(self, instance): if not self.is_active(instance.data): return