flexget.plugins.filter_limit_new
Covered: 45 lines
Missed: 1 lines
Skipped 16 lines
Percent: 97 %
 1
import logging
 2
from flexget.plugin import register_plugin, priority, DependencyError, get_plugin_by_name
 4
log = logging.getLogger('limit_new')
 7
class FilterLimitNew(object):
 8
    """
 9
        Limit number of new items.
11
        Example:
13
        limit_new: 1
15
        This would allow only one new item to pass trough per execution.
16
        Useful for passing torrents slowly into download.
18
        Note that since this is per execution, actual rate depends how often
19
        FlexGet is executed.
20
    """
22
    def __init__(self):
23
        self.backlog = None
25
    def validator(self):
26
        from flexget import validator
27
        return validator.factory('integer')
29
    def on_process_start(self, feed):
30
        try:
31
            self.backlog = get_plugin_by_name('backlog').instance
32
        except DependencyError:
33
            log.warning('Unable utilize backlog plugin, entries may slip trough limit_new in some rare cases')
35
    @priority(-255)
36
    def on_feed_filter(self, feed):
37
        if feed.manager.options.learn:
38
            log.info('Plugin limit_new is disabled with --learn / --reset')
39
            return
41
        amount = feed.config.get('limit_new', len(feed.entries))
42
        i = 1
43
        rejected = 0
44
        passed = []
45
        for entry in feed.accepted + [e for e in feed.entries if e not in feed.accepted]:
48
            if entry in passed:
49
                continue
50
            if i > amount:
51
                rejected += 1
52
                feed.reject(entry, 'limit exceeded')
53
                if self.backlog:
54
                    self.backlog.add_backlog(feed, entry, '48 hours')
55
            else:
56
                passed.append(entry)
57
                feed.verbose_progress('Allowed %s (%s)' % (entry['title'], entry['url']))
58
            i += 1
59
        log.debug('Rejected: %s Allowed: %s' % (rejected, len(passed)))
61
register_plugin(FilterLimitNew, 'limit_new')