Source code for flexget.plugins.operate.interval
import datetime
from loguru import logger
from flexget import options, plugin
from flexget.config_schema import parse_interval
from flexget.event import event
logger = logger.bind(name='interval')
[docs]
class PluginInterval:
"""Allows specifying minimum interval for task execution.
Format: [n] [minutes|hours|days|weeks]
Example:
interval: 7 days
"""
schema = {'type': 'string', 'format': 'interval'}
[docs]
@plugin.priority(plugin.PRIORITY_FIRST)
def on_task_start(self, task, config):
if task.options.learn:
logger.info('Ignoring task {} interval for --learn', task.name)
return
last_time = task.simple_persistence.get('last_time')
if not last_time:
logger.info('No previous run recorded, running now')
elif task.options.interval_ignore:
logger.info('Ignoring interval because of --now')
else:
logger.debug('last_time: {!r}', last_time)
logger.debug('interval: {}', config)
next_time = last_time + parse_interval(config)
logger.debug('next_time: {!r}', next_time)
if datetime.datetime.now() < next_time:
logger.verbose(
'Interval {} not met on task {}. Use --now to override.', config, task.name
)
task.abort('Interval not met', silent=True)
return
logger.debug('interval passed')
task.simple_persistence['last_time'] = datetime.datetime.now()
[docs]
@event('plugin.register')
def register_plugin():
plugin.register(PluginInterval, 'interval', api_ver=2)
[docs]
@event('options.register')
def register_parser_arguments():
options.get_parser('execute').add_argument(
'--now',
action='store_true',
dest='interval_ignore',
default=False,
help='run task(s) even if the interval plugin would normally prevent it',
)