flexget.plugins.metainfo.nzb_size
Covered: 22 lines
Missed: 20 lines
Skipped 18 lines
Percent: 52 %
 1
import logging
 2
from flexget.plugin import register_plugin, priority, DependencyError
 4
log = logging.getLogger('nzb_size')
 7
import mimetypes
 8
mimetypes.add_type('application/x-nzb', '.nzb')
11
class NzbSize(object):
13
    """
14
    Provides entry size information when dealing with nzb files
15
    """
17
    @priority(200)
18
    def on_feed_modify(self, feed):
19
        """
20
        The downloaded file is accessible in modify phase
21
        """
22
        try:
23
            from pynzb import nzb_parser
24
        except ImportError:
27
            raise DependencyError(issued_by='nzb_size', missing='lib pynzb')
29
        for entry in feed.accepted:
30
            if entry.get('mime-type', None) in [u'text/nzb', u'application/x-nzb'] or \
31
               entry.get('filename', '').endswith('.nzb'):
33
                if 'file' not in entry:
34
                    log.warning('%s does not have a to get size from' % entry['title'])
35
                    continue
37
                filename = entry['file']
38
                log.debug('reading %s' % filename)
39
                xmldata = file(filename).read()
41
                try:
42
                    nzbfiles = nzb_parser.parse(xmldata)
43
                except:
44
                    log.debug('%s is not a valid nzb' % entry['title'])
45
                    continue
47
                size = 0
48
                for nzbfile in nzbfiles:
49
                    for segment in nzbfile.segments:
50
                        size += segment.bytes
52
                size_mb = size / 1024 / 1024
53
                log.debug('%s content size: %s MB' % (entry['title'], size_mb))
54
                entry['content_size'] = size_mb
55
            else:
56
                log.trace('%s does not seem to be nzb' % entry['title'])
59
register_plugin(NzbSize, 'nzb_size', builtin=True)