From 1f748ad0a259b03e27578968f67f1d3f451a409e Mon Sep 17 00:00:00 2001 From: antirotor Date: Tue, 25 Jun 2019 22:36:41 +0200 Subject: [PATCH] feat(pyblish): adding ability to filter and modify plugins based on presets --- pype/__init__.py | 3 +++ pype/lib.py | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/pype/__init__.py b/pype/__init__.py index 5a65e01776..7f189bb814 100644 --- a/pype/__init__.py +++ b/pype/__init__.py @@ -3,6 +3,7 @@ import os from pyblish import api as pyblish from avalon import api as avalon from Qt import QtWidgets +from .lib import filter_pyblish_plugins import logging log = logging.getLogger(__name__) @@ -23,6 +24,7 @@ LOAD_PATH = os.path.join(PLUGINS_DIR, "global", "load") def install(): log.info("Registering global plug-ins..") pyblish.register_plugin_path(PUBLISH_PATH) + pyblish.register_discovery_filter(filter_pyblish_plugins) avalon.register_plugin_path(avalon.Loader, LOAD_PATH) # pyblish-qml settings. @@ -42,5 +44,6 @@ def install(): def uninstall(): log.info("Deregistering global plug-ins..") pyblish.deregister_plugin_path(PUBLISH_PATH) + pyblish.deregister_discovery_filter(filter_pyblish_plugins) avalon.deregister_plugin_path(avalon.Loader, LOAD_PATH) log.info("Global plug-ins unregistred") diff --git a/pype/lib.py b/pype/lib.py index 648a26a8a3..8120a1456a 100644 --- a/pype/lib.py +++ b/pype/lib.py @@ -478,3 +478,30 @@ def get_presets_path(): path_items = [templates, 'presets'] filepath = os.path.sep.join(path_items) return filepath + + +def filter_pyblish_plugins(plugins): + """ + This servers as plugin filter / modifier for pyblish. It will load plugin + definitions from presets and filter those needed to be excluded. + + :param plugins: Dictionary of plugins produced by :mod:`pyblish-base` + `discover()` method. + :type plugins: Dict + """ + from pypeapp import config + + # load plugins + config_data = config.get_presets()['plugins']['config'] + + # iterate over plugins + for plugin in plugins[:]: + if config_data.get(plugin.__name__): + for option, value in config_data[plugin.__name__].items(): + if hasattr(plugin, option): + log.info('setting {}:{} on plugin {}'.format( + option, value, plugin.__name__)) + setattr(plugin, option, value) + if option == "enabled": + log.info('removing plugin {}'.format(plugin.__name__)) + plugins.remove(plugin)