Source code for flexget.components.managed_lists.list_add
from loguru import logger
from flexget import plugin
from flexget.event import event
from flexget.plugin import PluginError
logger = logger.bind(name='list_add')
[docs]
class ListAdd:
schema = {
'type': 'array',
'items': {
'allOf': [
{'$ref': '/schema/plugins?interface=list'},
{
'maxProperties': 1,
'error_maxProperties': 'Plugin options within list_add plugin must be indented 2 more spaces than '
'the first letter of the plugin name.',
'minProperties': 1,
},
]
},
}
[docs]
def on_task_start(self, task, config):
for item in config:
for plugin_name, plugin_config in item.items():
try:
thelist = plugin.get(plugin_name, self).get_list(plugin_config)
except AttributeError:
raise PluginError(f'Plugin {plugin_name} does not support list interface')
if thelist.immutable:
raise plugin.PluginError(thelist.immutable)
# Run later in the phase, to capture any entry fields that might change during the output phase
[docs]
@plugin.priority(0)
def on_task_output(self, task, config):
if not len(task.accepted) > 0:
logger.debug('no accepted entries, nothing to add')
return
for item in config:
for plugin_name, plugin_config in item.items():
thelist = plugin.get(plugin_name, self).get_list(plugin_config)
if task.manager.options.test and thelist.online:
logger.info(
'`{}` is marked as an online plugin, would add accepted items outside of --test mode. Skipping',
plugin_name,
)
continue
logger.verbose('adding accepted entries into {} - {}', plugin_name, plugin_config)
thelist |= task.accepted
[docs]
@event('plugin.register')
def register_plugin():
plugin.register(ListAdd, 'list_add', api_ver=2)