flexget.plugins.modify.path_by_ext
Covered: 17 lines
Missed: 22 lines
Skipped 14 lines
Percent: 43 %
 1
import logging
 2
import mimetypes
 3
from flexget.plugin import register_plugin
 5
log = logging.getLogger('path_by_ext')
 8
class PluginPathByExt(object):
 9
    """
10
        Allows specifying path based on content-type
12
        Example:
14
        path_by_ext:
15
          torrent: ~/watch/torrent/
16
          nzb: ~/watch/nzb/
17
    """
19
    def validator(self):
20
        from flexget import validator
21
        config = validator.factory('dict')
22
        config.accept_any_key('any')
23
        return config
25
    def on_feed_modify(self, feed):
26
        self.ext(feed, self.set_path)
28
    def set_path(self, entry, path):
29
        log.debug('Setting %s path to %s' % (entry['title'], path))
30
        entry['path'] = path
32
    def ext(self, feed, callback):
33
        config = feed.config
34
        for entry in feed.entries:
35
            if 'mime-type' in entry:
37
                if entry['mime-type'] in config:
38
                    callback(entry, config[entry['mime-type']])
40
                ext = mimetypes.types_map.get(entry['mime-type'])
41
                path = config.get(ext) or config.get(ext[1:])
42
                if path:
43
                    callback(entry, path)
44
                else:
45
                    log.debug('Unknown mimetype %s' % entry['mime-type'])
46
            else:
48
                for ext, path in config.iteritems():
49
                    if entry['url'].endswith('.' + ext):
50
                        callback(entry, path)
52
register_plugin(PluginPathByExt, 'path_by_ext')