Source code for flexget.plugins.input.inputs
from loguru import logger
from flexget import plugin
from flexget.event import event
logger = logger.bind(name='inputs')
[docs]
class PluginInputs:
"""Allows the same input plugin to be configured multiple times in a task.
Example::
inputs:
- rss: http://feeda.com
- rss: http://feedb.com
"""
schema = {
'type': 'array',
'items': {
'allOf': [
{'$ref': '/schema/plugins?phase=input'},
{
'maxProperties': 1,
'error_maxProperties': 'Plugin options within inputs plugin must be indented 2 more spaces than '
'the first letter of the plugin name.',
'minProperties': 1,
},
]
},
}
[docs]
def on_task_input(self, task, config):
entry_titles = set()
entry_urls = set()
for item in config:
for input_name, input_config in item.items():
input = plugin.get_plugin_by_name(input_name)
method = input.phase_handlers['input']
try:
result = method(task, input_config)
except plugin.PluginError as e:
logger.warning('Error during input plugin {}: {}', input_name, e)
continue
if not result:
msg = f'Input {input_name} did not return anything'
if getattr(task, 'no_entries_ok', False):
logger.verbose(msg)
else:
logger.warning(msg)
continue
for entry in result:
if entry['title'] in entry_titles:
logger.debug('Title `{}` already in entry list, skipping.', entry['title'])
continue
urls = ([entry['url']] if entry.get('url') else []) + entry.get('urls', [])
if any(url in entry_urls for url in urls):
logger.debug(
'URL for `{}` already in entry list, skipping.', entry['title']
)
continue
yield entry
entry_titles.add(entry['title'])
entry_urls.update(urls)
[docs]
@event('plugin.register')
def register_plugin():
plugin.register(PluginInputs, 'inputs', api_ver=2)