flexget.plugins.urlrewrite_urlrewrite
Covered: 19 lines
Missed: 31 lines
Skipped 24 lines
Percent: 38 %
 1
import re
 2
import logging
 3
from flexget.plugin import *
 5
log = logging.getLogger('urlrewrite')
 8
class UrlRewrite(object):
 9
    """
10
        Generic configurable urlrewriter.
12
        Example:
14
        urlrewrite:
15
          demonoid:
16
            regexp: http://www\.demonoid\.com/files/details/
17
            format: http://www.demonoid.com/files/download/HTTP/
18
    """
20
    resolves = {}
31
    def validator(self):
32
        from flexget import validator
33
        root = validator.factory('dict')
34
        config = root.accept_any_key('dict')
35
        config.accept('regexp', key='regexp', required=True)
36
        config.accept('text', key='format', required=True)
37
        return root
39
    def on_feed_start(self, feed):
40
        for name, config in feed.config.get('urlrewrite', {}).iteritems():
41
            match = re.compile(config['regexp'])
42
            format = config['format']
43
            self.resolves[name] = {'regexp_compiled': match, 'format': format, 'regexp': config['regexp']}
44
            log.debug('Added rewrite %s' % name)
46
    def url_rewritable(self, feed, entry):
47
        log.trace('running url_rewritable')
48
        log.trace(self.resolves)
49
        for name, config in self.resolves.iteritems():
50
            regexp = config['regexp_compiled']
51
            log.trace('testing %s' % config['regexp'])
52
            if regexp.search(entry['url']):
53
                return True
54
        return False
56
    def url_rewrite(self, feed, entry):
57
        for name, config in self.resolves.iteritems():
58
            regexp = config['regexp_compiled']
59
            format = config['format']
60
            if regexp.search(entry['url']):
61
                log.debug('Regexp resolving %s with %s' % (entry['url'], name))
64
                entry['url'] = regexp.sub(format, entry['url'])
66
                if regexp.match(entry['url']):
67
                    feed.fail(entry, 'urlrewriting')
68
                    feed.purge()
69
                    from plugin_urlrewriting import UrlRewritingError
70
                    raise UrlRewritingError('Regexp %s result should NOT continue to match!' % name)
71
                return
73
register_plugin(UrlRewrite, 'urlrewrite', groups=['urlrewriter'])