Source code for flexget.plugins.output.sabnzbd

from urllib.parse import urlencode

from loguru import logger
from requests import RequestException

from flexget import plugin
from flexget.event import event

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


[docs] class OutputSabnzbd: """The sabnzbd plugin. Example:: sabnzbd: apikey: 123456 url: http://localhost/sabnzbd/api? category: movies All parameters:: sabnzbd: apikey: ... url: ... category: ... script: ... pp: ... priority: ... """ schema = { 'type': 'object', 'properties': { 'key': {'type': 'string'}, 'url': {'type': 'string', 'format': 'url'}, 'category': {'type': 'string'}, 'script': {'type': 'string'}, 'pp': {'type': 'string'}, 'priority': {'type': 'integer'}, 'password': {'type': 'string'}, 'username': {'type': 'string'}, }, 'required': ['key', 'url'], 'additionalProperties': False, }
[docs] def get_params(self, config): params = {} if 'key' in config: params['apikey'] = config['key'] if 'category' in config: params['cat'] = '{}'.format(config['category']) if 'script' in config: params['script'] = config['script'] if 'pp' in config: params['pp'] = config['pp'] if 'priority' in config: params['priority'] = config['priority'] if 'username' in config: params['ma_username'] = config['username'] if 'password' in config: params['ma_password'] = config['password'] return params
[docs] def on_task_output(self, task, config): for entry in task.accepted: if task.options.test: logger.info('Would add into sabnzbd: {}', entry['title']) continue params = self.get_params(config) # allow overriding the category if 'category' in entry: # Dirty hack over the next few lines to strip out non-ascii # chars. We're going to urlencode this, which causes # serious issues in python2.x if it's not ascii input. params['cat'] = ''.join([x for x in entry['category'] if ord(x) < 128]) params['name'] = ''.join([x for x in entry['url'] if ord(x) < 128]) # add cleaner nzb name (undocumented api feature) params['nzbname'] = ''.join([x for x in entry['title'] if ord(x) < 128]) # check whether file is local or remote if entry['url'].startswith('file://'): params['mode'] = 'addlocalfile' params['name'] = str(entry['location']) else: params['mode'] = 'addurl' request_url = config['url'] + urlencode(params) logger.debug('request_url: {}', request_url) try: response = task.requests.get(request_url) except RequestException as e: logger.critical('Failed to use sabnzbd. Requested {}', request_url) logger.critical('Result was: {}', e.args[0]) entry.fail('sabnzbd unreachable') if task.options.debug: logger.exception('Found an error') continue if 'error' in response.text.lower(): entry.fail(response.text.replace('\n', '')) else: logger.info('Added `{}` to SABnzbd', entry['title'])
[docs] @event('plugin.register') def register_plugin(): plugin.register(OutputSabnzbd, 'sabnzbd', api_ver=2)