root/trunk/flexget/plugins/resolve_regexp.py @ 708

Revision 708, 1.9 KB (checked in by paranoidi, 15 months ago)

Implemented configurable regexp based resolver. Closes #84

  • Property svn:executable set to *
Line 
1import re
2import logging
3from flexget.plugin import *
4
5log = logging.getLogger('regexp')
6
7class ResolveRegexp:
8    """
9        Generic regexp resolver.
10       
11        Example:
12       
13        regexp_resolve:
14          demonoid:
15            match: http://www.demonoid.com/files/details/
16            replace: http://www.demonoid.com/files/download/HTTP/
17    """
18
19    resolves = {}
20
21    def validator(self):
22        from flexget import validator
23        root = validator.factory('dict')
24        config = root.accept_any_key('dict')
25        config.accept('regexp', key='match', required=True)
26        config.accept('regexp', key='replace', required=True)
27        return root
28   
29    def process_start(self, feed):
30        for name, config in feed.config.get('regexp_resolve', {}).iteritems():
31            match = re.compile(config['match'])
32            replace =  config['replace']
33            self.resolves[name] = {'match': match, 'replace': replace }
34            log.debug('Added regexp resolve %s' % name)
35
36    def resolvable(self, feed, entry):
37        for name, config in self.resolves.iteritems():
38            if config['match'].match(entry['url']):
39                return True
40        return False
41       
42    def resolve(self, feed, entry):
43        for name, config in self.resolves.iteritems():
44            if config['match'].match(entry['url']):
45                log.debug('Regexp resolving %s with %s' % (entry['url'], name))
46                entry['url'] = config['match'].sub(config['replace'], entry['url'])
47                if config['match'].match(entry['url']):
48                    from module_resolver import ResolverException
49                    raise ResolverException('Regexp %s replace result should NOT continue to match!' % name)
50                return
51
52register_plugin(ResolveRegexp, 'regexp_resolve', groups=['resolver'])
Note: See TracBrowser for help on using the browser.