From 543226450c40e33db30d0efcf2eb4d336fdc6409 Mon Sep 17 00:00:00 2001 From: Ruud Date: Tue, 23 Sep 2014 22:22:27 +0200 Subject: [PATCH] NZBVortex status checking --- couchpotato/core/downloaders/nzbvortex.py | 84 +++++++---------------- 1 file changed, 23 insertions(+), 61 deletions(-) diff --git a/couchpotato/core/downloaders/nzbvortex.py b/couchpotato/core/downloaders/nzbvortex.py index af95628d..aa2ac1ef 100644 --- a/couchpotato/core/downloaders/nzbvortex.py +++ b/couchpotato/core/downloaders/nzbvortex.py @@ -1,21 +1,14 @@ from base64 import b64encode -import re -from urllib2 import URLError +import os from uuid import uuid4 import hashlib -import httplib -import json -import os -import socket -import ssl -import sys -import time import traceback -import urllib2 + +from requests import HTTPError from couchpotato.core._base.downloader.main import DownloaderBase, ReleaseDownloadList from couchpotato.core.helpers.encoding import tryUrlencode, sp -from couchpotato.core.helpers.variable import cleanHost, randomString +from couchpotato.core.helpers.variable import cleanHost from couchpotato.core.logger import CPLog @@ -36,14 +29,11 @@ class NZBVortex(DownloaderBase): # Send the nzb try: - nzb_id = '%s-%s' % (self.cpTag(media), randomString()) - nzb_filename = self.createFileName(data, filedata, media) - nzb_filename = re.sub('(.cp\(tt[0-9{7}]+\))', '', nzb_filename) - nzb_filename = '%s%s.nzb' % (nzb_filename[0:-4], nzb_id) + nzb_filename = self.createFileName(data, filedata, media, unique_tag = True) response = self.call('nzb/add', files = {'file': (nzb_filename, filedata, 'application/octet-stream')}) if response and response.get('result', '').lower() == 'ok': - return self.downloadReturnId(nzb_id) + return self.downloadReturnId(nzb_filename) log.error('Something went wrong sending the NZB file. Response: %s', response) return False @@ -65,7 +55,8 @@ class NZBVortex(DownloaderBase): release_downloads = ReleaseDownloadList(self) for nzb in raw_statuses.get('nzbs', []): - if nzb['id'] in ids: + nzb_id = os.path.basename(nzb['nzbFileName']) + if nzb_id in ids: # Check status status = 'busy' @@ -75,7 +66,8 @@ class NZBVortex(DownloaderBase): status = 'failed' release_downloads.append({ - 'id': nzb['id'], + 'temp_id': nzb['id'], + 'id': nzb_id, 'name': nzb['uiTitle'], 'status': status, 'original_status': nzb['state'], @@ -90,7 +82,7 @@ class NZBVortex(DownloaderBase): log.info('%s failed downloading, deleting...', release_download['name']) try: - self.call('nzb/%s/cancel' % release_download['id']) + self.call('nzb/%s/cancel' % release_download['temp_id']) except: log.error('Failed deleting: %s', traceback.format_exc(0)) return False @@ -132,15 +124,16 @@ class NZBVortex(DownloaderBase): params = tryUrlencode(parameters) - url = cleanHost(self.conf('host'), ssl = self.conf('ssl')) + 'api/' + call + url = cleanHost(self.conf('host')) + 'api/' + call try: - data = self.getJsonData('%s?%s' % (url, params), *args, **kwargs) + data = self.getJsonData('%s%s' % (url, '?' + params if params else ''), *args, cache_timeout = 0, show_error = False, **kwargs) if data: return data - except URLError as e: - if hasattr(e, 'code') and e.code == 403: + except HTTPError as e: + sc = e.response.status_code + if sc == 403: # Try login and do again if not is_repeat: self.login() @@ -156,13 +149,12 @@ class NZBVortex(DownloaderBase): if not self.api_level: - url = cleanHost(self.conf('host')) + 'api/app/apilevel' - try: - data = self.urlopen(url, show_error = False) - self.api_level = float(json.loads(data).get('apilevel')) - except URLError as e: - if hasattr(e, 'code') and e.code == 403: + data = self.call('app/apilevel', auth = False) + self.api_level = float(data.get('apilevel')) + except HTTPError as e: + sc = e.response.status_code + if sc == 403: log.error('This version of NZBVortex isn\'t supported. Please update to 2.8.6 or higher') else: log.error('NZBVortex doesn\'t seem to be running or maybe the remote option isn\'t enabled yet: %s', traceback.format_exc(1)) @@ -174,29 +166,6 @@ class NZBVortex(DownloaderBase): return super(NZBVortex, self).isEnabled(manual, data) and self.getApiLevel() -class HTTPSConnection(httplib.HTTPSConnection): - def __init__(self, *args, **kwargs): - httplib.HTTPSConnection.__init__(self, *args, **kwargs) - - def connect(self): - sock = socket.create_connection((self.host, self.port), self.timeout) - if sys.version_info < (2, 6, 7): - if hasattr(self, '_tunnel_host'): - self.sock = sock - self._tunnel() - else: - if self._tunnel_host: - self.sock = sock - self._tunnel() - - self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version = ssl.PROTOCOL_TLSv1) - - -class HTTPSHandler(urllib2.HTTPSHandler): - def https_open(self, req): - return self.do_open(HTTPSConnection, req) - - config = [{ 'name': 'nzbvortex', 'groups': [ @@ -216,15 +185,8 @@ config = [{ }, { 'name': 'host', - 'default': 'localhost:4321', - 'description': 'Hostname with port. Usually localhost:4321', - }, - { - 'name': 'ssl', - 'default': 1, - 'type': 'bool', - 'advanced': True, - 'description': 'Use HyperText Transfer Protocol Secure, or https', + 'default': 'https://localhost:4321', + 'description': 'Hostname with port. Usually https://localhost:4321', }, { 'name': 'api_key',