import time
from loguru import logger
from flexget import plugin
from flexget.event import event
logger = logger.bind(name='sleep')
[docs]
class PluginSleep:
"""Cause a pause in execution to occur at the beginning of the specified phase of a task.
The point at which the pause occurs can be adjusted using the `plugin_priority` plugin.
"""
schema = {
'oneOf': [
{
'type': 'object',
'properties': {
'seconds': {'type': 'integer'},
'phase': {
'type': 'string',
'enum': [
'start',
'input',
'metainfo',
'filter',
'download',
'modify',
'output',
'learn',
'abort',
'exit',
],
'default': 'start',
},
},
'required': ['seconds'],
'additionalProperties': False,
},
{'type': 'integer'},
]
}
[docs]
def do_sleep(self, config, phase):
if isinstance(config, int):
config = {'phase': 'start', 'seconds': config}
if config and config['phase'] == phase:
logger.verbose('Sleeping for {} seconds.', config['seconds'])
time.sleep(int(config['seconds']))
[docs]
@plugin.priority(plugin.PRIORITY_FIRST)
def on_task_start(self, task, config):
self.do_sleep(config, 'start')
[docs]
@plugin.priority(plugin.PRIORITY_FIRST)
def on_task_filter(self, task, config):
self.do_sleep(config, 'filter')
[docs]
@plugin.priority(plugin.PRIORITY_FIRST)
def on_task_download(self, task, config):
self.do_sleep(config, 'download')
[docs]
@plugin.priority(plugin.PRIORITY_FIRST)
def on_task_modify(self, task, config):
self.do_sleep(config, 'modify')
[docs]
@plugin.priority(plugin.PRIORITY_FIRST)
def on_task_output(self, task, config):
self.do_sleep(config, 'output')
[docs]
@plugin.priority(plugin.PRIORITY_FIRST)
def on_task_learn(self, task, config):
self.do_sleep(config, 'learn')
[docs]
@plugin.priority(plugin.PRIORITY_FIRST)
def on_task_abort(self, task, config):
self.do_sleep(config, 'abort')
[docs]
@plugin.priority(plugin.PRIORITY_FIRST)
def on_task_exit(self, task, config):
self.do_sleep(config, 'exit')
[docs]
@event('plugin.register')
def register_plugin():
plugin.register(PluginSleep, 'sleep', api_ver=2)