# -*- coding: utf-8 -*- """Avalon/Pyblish plugin tools.""" import os import inspect import logging from .api import config log = logging.getLogger(__name__) def filter_pyblish_plugins(plugins): """Filter pyblish plugins by presets. This servers as plugin filter / modifier for pyblish. It will load plugin definitions from presets and filter those needed to be excluded. Args: plugins (dict): Dictionary of plugins produced by :mod:`pyblish-base` `discover()` method. """ from pyblish import api host = api.current_host() presets = config.get_presets().get('plugins', {}) # iterate over plugins for plugin in plugins[:]: # skip if there are no presets to process if not presets: continue 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] try: config_data = presets[host]["publish"][plugin.__name__] except KeyError: 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: log.info('removing plugin {}'.format(plugin.__name__)) plugins.remove(plugin) else: log.info('setting {}:{} on plugin {}'.format( option, value, plugin.__name__)) setattr(plugin, option, value)