flexget.plugins.operate.interval
Covered: 18 lines
Missed: 21 lines
Skipped 10 lines
Percent: 46 %
 1
import logging
 2
import datetime
 3
from flexget.plugin import register_plugin, register_parser_option
 4
from flexget.utils.tools import parse_timedelta
 6
log = logging.getLogger('interval')
 9
class PluginInterval(object):
10
    """
11
        Allows specifying minimum interval for feed execution.
13
        Format: [n] [minutes|hours|days|weeks]
15
        Example:
17
        interval: 7 days
18
    """
20
    def validator(self):
21
        from flexget import validator
22
        return validator.factory('interval')
24
    def on_feed_start(self, feed, config):
25
        if feed.manager.options.learn:
26
            log.info('Ignoring feed %s interval for --learn' % feed.name)
27
            return
28
        last_time = feed.simple_persistence.get('last_time')
29
        if not last_time:
30
            log.info('No previous run recorded, running now')
31
        elif feed.manager.options.interval_ignore:
32
            log.info('Ignoring interval because of --now')
33
        else:
34
            log.debug('last_time: %r' % last_time)
35
            log.debug('interval: %s' % config)
36
            next_time = last_time + parse_timedelta(config)
37
            log.debug('next_time: %r' % next_time)
38
            if datetime.datetime.now() < next_time:
39
                log.debug('interval not met')
40
                log.verbose('Interval %s not met on feed %s. Use --now to override.' % (config, feed.name))
41
                feed.abort(silent=True)
42
                return
43
        log.debug('interval passed')
44
        feed.simple_persistence['last_time'] = datetime.datetime.now()
46
register_plugin(PluginInterval, 'interval', api_ver=2)
47
register_parser_option('--now', action='store_true', dest='interval_ignore', default=False,
48
                       help='Ignore interval(s)')