Source code for flexget.plugins.operate.disable
from loguru import logger
from flexget import plugin
from flexget.config_schema import one_or_more
from flexget.event import event
logger = logger.bind(name='disable')
[docs]
def all_builtins():
"""Return an iterator over all builtin plugins."""
return (p for p in plugin.plugins.values() if p.builtin)
[docs]
class DisablePlugin:
"""Allows disabling built-ins, or plugins referenced by template/include plugin.
Example::
templates:
movies:
download: ~/torrents/movies/
.
.
tasks:
nzbs:
template: movies
disable:
- download
sabnzbd:
.
.
# Task nzbs uses all other configuration from template movies but removes the download plugin
"""
schema = one_or_more({'type': 'string'})
disabled_builtins = None
[docs]
@plugin.priority(254)
def on_task_start(self, task, config):
disabled = set()
if isinstance(config, str):
config = [config]
# Disable plugins explicitly included in config.
for p in config:
if p == 'builtins':
continue
try:
task.disable_plugin(p)
except ValueError:
logger.error('Unknown plugin `{}`', p)
else:
disabled.add(p)
# Disable all builtins mode.
if 'builtins' in config:
for p in all_builtins():
task.disable_plugin(p.name)
disabled.add(p.name)
logger.debug('Disabled plugins: {}', ', '.join(disabled))
[docs]
@event('plugin.register')
def register_plugin():
plugin.register(DisablePlugin, 'disable', api_ver=2)