Source code for flexget.components.series.configure_series

from loguru import logger

from flexget import plugin
from flexget.config_schema import process_config
from flexget.event import event
from flexget.plugin import PluginError

from . import series as plugin_series

logger = logger.bind(name='configure_series')


[docs] class ConfigureSeries(plugin_series.FilterSeriesBase): """Generates series configuration from any input (supporting API version 2, soon all). Configuration:: configure_series: [settings]: # same configuration as series plugin from: [input plugin]: <configuration> Example:: configure_series: settings: quality: 720p from: listdir: - /media/series """ @property def schema(self): return { 'type': 'object', 'properties': { 'settings': self.settings_schema, 'from': {'$ref': '/schema/plugins?phase=input'}, }, 'required': ['from'], 'additionalProperties': False, }
[docs] def on_task_prepare(self, task, config): series = {} for input_name, input_config in config.get('from', {}).items(): input_plugin = plugin.get_plugin_by_name(input_name) method = input_plugin.phase_handlers['input'] try: result = method(task, input_config) except 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: s = series.setdefault(entry['title'], {}) if entry.get('tvdb_id'): s['set'] = {'tvdb_id': entry['tvdb_id']} # Allow configure_series to set anything available to series for key, schema in self.settings_schema['properties'].items(): if 'configure_series_' + key in entry: errors = process_config( entry['configure_series_' + key], schema, set_defaults=False ) if errors: logger.debug( 'not setting series option {} for {}. errors: {}', key, entry['title'], errors, ) else: s[key] = entry['configure_series_' + key] if not series: logger.info('Did not get any series to generate series configuration') return # Make a series config with the found series # Turn our dict of series with settings into a list of one item dicts series_config = {'generated_series': [dict([x]) for x in series.items()]} # If options were specified, add them to the series config if 'settings' in config: series_config['settings'] = {'generated_series': config['settings']} # Merge our series config in with the base series config self.merge_config(task, series_config)
[docs] @event('plugin.register') def register_plugin(): plugin.register(ConfigureSeries, 'configure_series', api_ver=2)