From f2a82d1afcf8e05b0be278d2364126d6469dcb99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Wed, 31 Jul 2019 06:29:53 +0200 Subject: [PATCH 1/5] initial wip commit --- pype/plugin.py | 89 +++++++++++++++++++++++- pype/plugins/maya/create/create_model.py | 4 +- 2 files changed, 90 insertions(+), 3 deletions(-) diff --git a/pype/plugin.py b/pype/plugin.py index c77b9927e1..026ea757c5 100644 --- a/pype/plugin.py +++ b/pype/plugin.py @@ -1,6 +1,11 @@ import tempfile import os import pyblish.api +import avalon.api +from pprint import pprint + +from pypeapp import config +import inspect ValidatePipelineOrder = pyblish.api.ValidatorOrder + 0.05 ValidateContentsOrder = pyblish.api.ValidatorOrder + 0.1 @@ -8,7 +13,89 @@ ValidateSceneOrder = pyblish.api.ValidatorOrder + 0.2 ValidateMeshOrder = pyblish.api.ValidatorOrder + 0.3 -class Extractor(pyblish.api.InstancePlugin): +def imprint_attributes(plugin): + """ + Load presets by class and set them as attributes (if found) + + :param plugin: plugin instance + :type plugin: instance + """ + print("-" * 50) + print("imprinting") + file = inspect.getfile(plugin.__class__) + file = os.path.normpath(file) + plugin_kind = file.split(os.path.sep)[-2:-1][0] + plugin_host = file.split(os.path.sep)[-3:-2][0] + plugin_name = type(plugin).__name__ + print(file) + print(plugin_kind) + print(plugin_host) + print(plugin_name) + + pprint(config.get_presets()['plugins']) + try: + config_data = config.get_presets()['plugins'][plugin_host][plugin_kind][plugin_name] # noqa: E501 + except KeyError: + print("preset not found") + return + + for option, value in config_data.items(): + if option == "enabled" and value is False: + setattr(plugin, "active", False) + else: + setattr(plugin, option, value) + print("setting {}: {} on {}".format(option, value, plugin_name)) + print("-" * 50) + + +def add_init_presets(source_class): + orig_init = source_class.__init__ + + def __init__(self, *args, **kwargs): + imprint_attributes(self) + print("overriding init") + orig_init(self, *args, **kwargs) + + source_class.__init__ = __init__ + return source_class + + +def add_process_presets(source_class): + orig_process = source_class.__init__ + + def process(self, *args, **kwargs): + imprint_attributes(self) + orig_process(self, *args, **kwargs) + + source_class.__init__ = process + return source_class + + +@add_process_presets +class ContextPlugin(pyblish.api.ContextPlugin): + pass + + +@add_process_presets +class InstancePlugin(pyblish.api.InstancePlugin): + pass + + + +class PypeLoader(avalon.api.Loader): + pass + + +@add_init_presets +class PypeCreator(avalon.api.Creator): + pass + + +avalon.api.Creator = PypeCreator + + + +class Extractor(InstancePlugin): """Extractor base class. The extractor base class implements a "staging_dir" function used to diff --git a/pype/plugins/maya/create/create_model.py b/pype/plugins/maya/create/create_model.py index 241e2be7f9..6a1cc91c5f 100644 --- a/pype/plugins/maya/create/create_model.py +++ b/pype/plugins/maya/create/create_model.py @@ -1,7 +1,7 @@ -import avalon.maya +import pype.plugin -class CreateModel(avalon.maya.Creator): +class CreateModel(pype.plugin.PypeCreator): """Polygonal static geometry""" name = "modelMain" From dca53a183c5d70fdaa21048442c5dbebba46612d Mon Sep 17 00:00:00 2001 From: Ondrej Samohel Date: Fri, 6 Sep 2019 15:41:00 +0200 Subject: [PATCH 2/5] added support for presets on global plugins --- pype/lib.py | 22 +++++++++++++++++----- pype/tests/test_pyblish_filter.py | 2 +- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/pype/lib.py b/pype/lib.py index c097ad1f10..acd8756aa7 100644 --- a/pype/lib.py +++ b/pype/lib.py @@ -5,6 +5,7 @@ import importlib import itertools import contextlib import subprocess +import inspect from .vendor import pather from .vendor.pather.error import ParseError @@ -467,9 +468,7 @@ def filter_pyblish_plugins(plugins): host = api.current_host() - presets = config.get_presets().get('plugins', {}).get(host, {}).get( - "publish", {} - ) + presets = config.get_presets().get('plugins', {}) # iterate over plugins for plugin in plugins[:]: @@ -477,10 +476,23 @@ def filter_pyblish_plugins(plugins): if not presets: continue + file = os.path.normpath(inspect.getfile(plugin.__class__)) + file = os.path.normpath(file) + + # host determined from path + host_from_file = file.split(os.path.sep)[-3:-2][0] + plugin_kind = file.split(os.path.sep)[-2:-1][0] + + print(host_from_file) + print(plugin_kind) + try: - config_data = presets[plugin.__name__] # noqa: E501 + config_data = presets[host]["publish"][plugin.__name__] except KeyError: - continue + try: + config_data = presets[host_from_file][plugin_kind][plugin.__name__] # noqa: E501 + except KeyError: + continue for option, value in config_data.items(): if option == "enabled" and value is False: diff --git a/pype/tests/test_pyblish_filter.py b/pype/tests/test_pyblish_filter.py index 8d747e63df..cf3d5d6015 100644 --- a/pype/tests/test_pyblish_filter.py +++ b/pype/tests/test_pyblish_filter.py @@ -18,7 +18,7 @@ def test_pyblish_plugin_filter_modifier(printer, monkeypatch): assert len(plugins) == 0 paths = pyblish.api.registered_paths() printer("Test if we have no registered plugin paths") - print(paths) + assert len(paths) == 0 class MyTestPlugin(pyblish.api.InstancePlugin): my_test_property = 1 From 04919acaeb3fb5aa3faa54162f3450fa9fa8447e Mon Sep 17 00:00:00 2001 From: Ondrej Samohel Date: Fri, 6 Sep 2019 15:59:35 +0200 Subject: [PATCH 3/5] fixed getting source path --- pype/lib.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pype/lib.py b/pype/lib.py index acd8756aa7..f357de2a85 100644 --- a/pype/lib.py +++ b/pype/lib.py @@ -476,16 +476,13 @@ def filter_pyblish_plugins(plugins): if not presets: continue - file = os.path.normpath(inspect.getfile(plugin.__class__)) + file = os.path.normpath(inspect.getsourcefile(plugin)) file = os.path.normpath(file) # host determined from path host_from_file = file.split(os.path.sep)[-3:-2][0] plugin_kind = file.split(os.path.sep)[-2:-1][0] - print(host_from_file) - print(plugin_kind) - try: config_data = presets[host]["publish"][plugin.__name__] except KeyError: From 495b747ace09d286787cb3a178121da0ac6342d9 Mon Sep 17 00:00:00 2001 From: Ondrej Samohel Date: Fri, 6 Sep 2019 18:39:31 +0200 Subject: [PATCH 4/5] fixed uncommited changes --- pype/plugin.py | 58 ++++++-------------------------------------------- 1 file changed, 6 insertions(+), 52 deletions(-) diff --git a/pype/plugin.py b/pype/plugin.py index 026ea757c5..a3460e693e 100644 --- a/pype/plugin.py +++ b/pype/plugin.py @@ -1,8 +1,6 @@ import tempfile import os import pyblish.api -import avalon.api -from pprint import pprint from pypeapp import config import inspect @@ -20,19 +18,11 @@ def imprint_attributes(plugin): :param plugin: plugin instance :type plugin: instance """ - print("-" * 50) - print("imprinting") file = inspect.getfile(plugin.__class__) file = os.path.normpath(file) plugin_kind = file.split(os.path.sep)[-2:-1][0] plugin_host = file.split(os.path.sep)[-3:-2][0] plugin_name = type(plugin).__name__ - print(file) - print(plugin_kind) - print(plugin_host) - print(plugin_name) - - pprint(config.get_presets()['plugins']) try: config_data = config.get_presets()['plugins'][plugin_host][plugin_kind][plugin_name] # noqa: E501 except KeyError: @@ -45,54 +35,18 @@ def imprint_attributes(plugin): else: setattr(plugin, option, value) print("setting {}: {} on {}".format(option, value, plugin_name)) - print("-" * 50) -def add_init_presets(source_class): - orig_init = source_class.__init__ - - def __init__(self, *args, **kwargs): - imprint_attributes(self) - print("overriding init") - orig_init(self, *args, **kwargs) - - source_class.__init__ = __init__ - return source_class - - -def add_process_presets(source_class): - orig_process = source_class.__init__ - - def process(self, *args, **kwargs): - imprint_attributes(self) - orig_process(self, *args, **kwargs) - - source_class.__init__ = process - return source_class - - -@add_process_presets class ContextPlugin(pyblish.api.ContextPlugin): - pass + def process(cls, *args, **kwargs): + imprint_attributes(cls) + super(ContextPlugin, cls).process(cls, *args, **kwargs) -@add_process_presets class InstancePlugin(pyblish.api.InstancePlugin): - pass - - - -class PypeLoader(avalon.api.Loader): - pass - - -@add_init_presets -class PypeCreator(avalon.api.Creator): - pass - - -avalon.api.Creator = PypeCreator - + def process(cls, *args, **kwargs): + imprint_attributes(cls) + super(ContextPlugin, cls).process(cls, *args, **kwargs) class Extractor(InstancePlugin): From b1d459008175f74ed0ec8ffd2b4b4d6b8a5ff577 Mon Sep 17 00:00:00 2001 From: Ondrej Samohel Date: Fri, 6 Sep 2019 18:41:33 +0200 Subject: [PATCH 5/5] reverted changes in CreateModel --- pype/plugins/maya/create/create_model.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pype/plugins/maya/create/create_model.py b/pype/plugins/maya/create/create_model.py index 6a1cc91c5f..241e2be7f9 100644 --- a/pype/plugins/maya/create/create_model.py +++ b/pype/plugins/maya/create/create_model.py @@ -1,7 +1,7 @@ -import pype.plugin +import avalon.maya -class CreateModel(pype.plugin.PypeCreator): +class CreateModel(avalon.maya.Creator): """Polygonal static geometry""" name = "modelMain"