2
from flexget.plugin import get_plugins_by_group, priority, PluginError, register_plugin, register_feed_phase
4
log = logging.getLogger('urlrewriter')
7
class UrlRewritingError(Exception):
9
def __init__(self, value):
13
return repr(self.value)
16
class PluginUrlRewriting(object):
19
Provides URL rewriting framework
22
def on_feed_urlrewrite(self, feed):
23
# no urlrewriting in unit test mode
24
if feed.manager.unit_test:
26
log.debug('Checking %s entries' % len(feed.accepted))
27
# try to urlrewrite all accepted
28
for entry in feed.accepted:
30
self.url_rewrite(feed, entry)
31
except UrlRewritingError, e:
35
def url_rewritable(self, feed, entry):
36
"""Return True if entry is urlrewritable by registered rewriter."""
37
for urlrewriter in get_plugins_by_group('urlrewriter'):
38
log.trace('checking urlrewriter %s' % urlrewriter.name)
39
if urlrewriter.instance.url_rewritable(self, entry):
44
def url_rewrite(self, feed, entry):
45
"""Rewrites given entry url. Raises UrlRewritingError if failed."""
47
while self.url_rewritable(feed, entry):
50
raise UrlRewritingError('URL rewriting was left in infinite loop while rewriting url for %s, some rewriter is returning always True' % entry)
51
for urlrewriter in get_plugins_by_group('urlrewriter'):
52
name = urlrewriter.name
54
if urlrewriter.instance.url_rewritable(feed, entry):
55
log.debug('Url rewriting %s' % entry['url'])
56
urlrewriter.instance.url_rewrite(feed, entry)
57
log.info('Entry \'%s\' URL rewritten to %s (with %s)' % (entry['title'], entry['url'], name))
58
except UrlRewritingError, r:
60
#count = self.shared_cache.storedefault(entry['url'], 1)
62
raise UrlRewritingError('URL rewriting %s failed: %s' % (name, str(r.value)))
63
except PluginError, e:
64
raise UrlRewritingError('URL rewriting %s failed: %s' % (name, str(e.value)))
67
raise UrlRewritingError('%s: Internal error with url %s' % (name, entry['url']))
69
register_plugin(PluginUrlRewriting, 'urlrewriting', builtin=True)
70
register_feed_phase('urlrewrite', before='download')