Source code for flexget.components.managed_lists.list_clear
from loguru import logger
from flexget import plugin
from flexget.event import event
from flexget.plugin import PluginError
logger = logger.bind(name='list_clear')
[docs]
class ListClear:
schema = {
'type': 'object',
'properties': {
'what': {
'type': 'array',
'items': {
'allOf': [
{'$ref': '/schema/plugins?interface=list'},
{
'maxProperties': 1,
'error_maxProperties': 'Plugin options within list_clear plugin must be indented '
'2 more spaces than the first letter of the plugin name.',
'minProperties': 1,
},
]
},
},
'phase': {'type': 'string', 'enum': plugin.task_phases, 'default': 'start'},
},
'required': ['what'],
}
def __getattr__(self, phase):
# enable plugin in regular task phases
if phase.replace('on_task_', '') in plugin.task_phases:
return self.clear
return None
[docs]
@plugin.priority(plugin.PRIORITY_FIRST)
def clear(self, task, config):
for item in config['what']:
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)
if config['phase'] == task.current_phase:
if task.manager.options.test and thelist.online:
logger.info(
'would have cleared all items from {} - {}', plugin_name, plugin_config
)
continue
logger.verbose('clearing all items from {} - {}', plugin_name, plugin_config)
thelist.clear()
[docs]
@event('plugin.register')
def register_plugin():
plugin.register(ListClear, 'list_clear', api_ver=2)