Source code for flexget.plugins.metainfo.nzb_size

import mimetypes

from loguru import logger

from flexget import plugin
from flexget.event import event
from flexget.utils.tools import format_filesize

logger = logger.bind(name='nzb_size')

# a bit hacky, add nzb as a known mimetype
mimetypes.add_type('application/x-nzb', '.nzb')


[docs] class NzbSize: """Provides entry size information when dealing with nzb files."""
[docs] @plugin.priority(200) def on_task_modify(self, task, config): """Register this as modify output plugin. The downloaded file is accessible in modify phase """ try: from pynzb import nzb_parser except ImportError: # TODO: remove builtin status so this won't get repeated on every task execution # TODO: this will get loaded even without any need for nzb raise plugin.DependencyError(issued_by='nzb_size', missing='lib pynzb') for entry in task.accepted: if entry.get('mime-type') in ['text/nzb', 'application/x-nzb'] or ( entry.get('filename') and entry['filename'].endswith('.nzb') ): if 'file' not in entry: logger.warning( '`{}` does not have a `file` that could be used to get size information', entry['title'], ) continue filename = entry['file'] logger.debug('reading {}', filename) with open(filename) as file: try: nzbfiles = nzb_parser.parse(file.read()) except Exception: logger.debug('{} is not a valid nzb', entry['title']) continue size = 0 for nzbfile in nzbfiles: for segment in nzbfile.segments: size += segment.bytes logger.debug('{} content size: {}', entry['title'], format_filesize(size)) entry['content_size'] = size else: logger.trace('{} does not seem to be nzb', entry['title'])
[docs] @event('plugin.register') def register_plugin(): plugin.register(NzbSize, 'nzb_size', api_ver=2, builtin=True)