flexget.plugins.output.sabnzbd
Covered: 34 lines
Missed: 49 lines
Skipped 20 lines
Percent: 40 %
  1
import logging
  2
import urllib
  3
from flexget.plugin import get_plugin_by_name, register_plugin
  4
from flexget.utils.tools import urlopener
  6
log = logging.getLogger('sabnzbd')
  9
class OutputSabnzbd(object):
 10
    """
 11
    Example::
 13
      sabnzbd:
 14
        apikey: 123456
 15
        url: http://localhost/sabnzbd/api?
 16
        category: movies
 18
    All parameters::
 20
      sabnzbd:
 21
        apikey: ...
 22
        url: ...
 23
        category: ...
 24
        script: ...
 25
        pp: ...
 26
        priority: ...
 27
    """
 29
    def validator(self):
 30
        from flexget import validator
 31
        config = validator.factory('dict')
 32
        config.accept('text', key='key', required=True)
 33
        config.accept('url', key='url', required=True)
 34
        config.accept('text', key='category')
 35
        config.accept('text', key='script')
 36
        config.accept('text', key='pp')
 37
        config.accept('integer', key='priority')
 38
        config.accept('text', key='password')
 39
        config.accept('text', key='username')
 40
        return config
 42
    def get_params(self, config):
 43
        params = {}
 44
        if 'key' in config:
 45
            params['apikey'] = config['key']
 46
        if 'category' in config:
 47
            params['cat'] = '%s' % config['category']
 48
        if 'script' in config:
 49
            params['script'] = config['script']
 50
        if 'pp' in config:
 51
            params['pp'] = config['pp']
 52
        if 'priority' in config:
 53
            params['priority'] = config['priority']
 54
        if 'username' in config:
 55
            params['ma_username'] = config['username']
 56
        if 'password' in config:
 57
            params['ma_password'] = config['password']
 58
        params['mode'] = 'addurl'
 59
        return params
 61
    def on_process_start(self, feed, config):
 62
        """
 63
        register the usable set: keywords
 64
        """
 65
        set = get_plugin_by_name('set')
 66
        set.instance.register_keys({'category': 'text'})
 68
    def on_feed_output(self, feed, config):
 69
        for entry in feed.accepted:
 70
            if feed.manager.options.test:
 71
                log.info('Would add into sabnzbd: %s' % entry['title'])
 72
                continue
 74
            params = self.get_params(config)
 76
            if 'category' in entry:
 80
                params['cat'] = ''.join([x for x in entry['category'] if ord(x) < 128])
 81
            params['name'] = ''.join([x for x in entry['url'] if ord(x) < 128])
 83
            params['nzbname'] = ''.join([x for x in entry['title'] if ord(x) < 128])
 85
            request_url = config['url'] + urllib.urlencode(params)
 86
            log.debug('request_url: %s' % request_url)
 87
            try:
 88
                response = urlopener(request_url, log).read()
 89
            except Exception, e:
 90
                log.critical('Failed to use sabnzbd. Requested %s' % request_url)
 91
                log.critical('Result was: %s' % e)
 92
                feed.fail(entry, 'sabnzbd unreachable')
 93
                if feed.manager.options.debug:
 94
                    log.exception(e)
 95
                continue
 97
            if 'error' in response.lower():
 98
                feed.fail(entry, response.replace('\n', ''))
 99
            else:
100
                log.info('Added `%s` to SABnzbd' % (entry['title']))
102
register_plugin(OutputSabnzbd, 'sabnzbd', api_ver=2)