2
from flexget.plugin import *
4
log = logging.getLogger('preset')
7
class PluginPreset(object):
15
Example, list of presets:
26
from flexget import validator
27
root = validator.factory()
29
root.accept('boolean')
30
presets = root.accept('list')
31
presets.accept('text')
35
def on_process_start(self, feed):
36
config = feed.config.get('preset', 'global')
37
if isinstance(config, basestring):
39
elif isinstance(config, bool): # handles 'preset: no' form to turn off preset on this feed
43
# implements --preset NAME
44
if feed.manager.options.preset:
45
if feed.manager.options.preset not in config:
49
# add global in except when disabled with no_global
50
if 'no_global' in config:
51
config.remove('no_global')
52
if 'global' in config:
53
config.remove('global')
54
elif not 'global' in config:
55
config.append('global')
57
log.log(5, 'presets: %s' % config)
59
toplevel_presets = feed.manager.config.get('presets', {})
61
# check for indentation error (plugin as a preset)
62
if (feed.manager.options.test or feed.manager.options.validate) and not self.warned:
63
plugins = get_plugin_keywords()
64
for name in toplevel_presets.iterkeys():
66
log.warning('Plugin \'%s\' seems to be in the wrong place? You probably wanted to put it in a preset. Please fix the indentation level!' % name)
71
if preset != 'global':
72
log.debug('Merging preset %s into feed %s' % (preset, feed.name))
73
if not preset in toplevel_presets:
74
if preset == 'global':
76
raise PluginError('Unable to find preset %s for feed %s' % (preset, feed.name), log)
78
from flexget.utils.tools import MergeException, merge_dict_from_to
80
merge_dict_from_to(toplevel_presets[preset], feed.config)
81
except MergeException:
82
raise PluginError('Failed to merge preset %s to feed %s, incompatible datatypes' % (preset, feed.name))
85
class DisablePlugin(object):
87
Allows disabling plugins when using presets.
93
download: ~/torrents/movies/
106
Feed nzbs uses all other configuration from preset movies but removes the download plugin
110
from flexget import validator
111
root = validator.factory()
113
presets = root.accept('list')
114
presets.accept('text')
118
def on_feed_start(self, feed):
119
config = feed.config['disable_plugin']
120
if isinstance(config, basestring):
123
for disable in config:
124
if disable in feed.config:
125
log.debug('disabling %s' % disable)
126
del(feed.config[disable])
128
register_plugin(PluginPreset, 'preset', builtin=True)
129
register_plugin(DisablePlugin, 'disable_plugin')
131
register_parser_option('--preset', action='store', dest='preset', default=False,
132
metavar='NAME', help='Execute feeds with given preset.')