Source code for flexget.plugins.input.parameterize
from loguru import logger
from flexget import plugin
from flexget.event import event
from flexget.utils.template import RenderError, render_from_entry
logger = logger.bind(name='parameterize')
[docs]
class Parameterize:
schema = {
'type': 'object',
'properties': {
'plugin': {'$ref': '/schema/plugins?phase=input'},
'using': {'$ref': '/schema/plugins?phase=input'},
},
}
[docs]
def on_task_input(self, task, config):
for param_input_name, param_input_config in config['using'].items():
param_input = plugin.get_plugin_by_name(param_input_name)
method = param_input.phase_handlers['input']
try:
param_entries = method(task, param_input_config)
except plugin.PluginError as e:
logger.warning('Error during input plugin {}: {}', param_input_name, e)
continue
for param_entry in param_entries:
for subj_input_name, subj_input_config in config['plugin'].items():
subj_input = plugin.get_plugin_by_name(subj_input_name)
method = subj_input.phase_handlers['input']
subj_input_config = _parameterize(subj_input_config, param_entry)
try:
result = method(task, subj_input_config)
except plugin.PluginError as e:
logger.warning('Error during input plugin {}: {}', subj_input_name, e)
continue
yield from result
[docs]
def _parameterize(element, entry):
if isinstance(element, dict):
return {k: _parameterize(v, entry) for k, v in element.items()}
if isinstance(element, list):
return [_parameterize(v, entry) for v in element]
if isinstance(element, str) and ('{{' in element or '{%' in element):
try:
return render_from_entry(element, entry, native=True)
except (RenderError, TypeError) as e:
raise plugin.PluginError(f'Error parameterizing `{element}`: {e}', logger=logger)
return element
[docs]
@event('plugin.register')
def register_plugin():
plugin.register(Parameterize, 'parameterize', api_ver=2)