3
from flexget.plugin import *
5
log = logging.getLogger('urlrewrite')
8
class UrlRewrite(object):
10
Generic configurable urlrewriter.
16
regexp: http://www\.demonoid\.com/files/details/
17
format: http://www.demonoid.com/files/download/HTTP/
24
# resolves = yaml.safe_load("""
26
# match: http://www.tvsubtitles.net/subtitle-
27
# replace: http://www.tvsubtitles.net/download-
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)
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']):
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')
69
from plugin_urlrewriting import UrlRewritingError
70
raise UrlRewritingError('Regexp %s result should NOT continue to match!' % name)
73
register_plugin(UrlRewrite, 'urlrewrite', groups=['urlrewriter'])