diff --git a/oml/downloads.py b/oml/downloads.py index e7457ee..a42a6b0 100644 --- a/oml/downloads.py +++ b/oml/downloads.py @@ -4,13 +4,13 @@ from __future__ import division from threading import Thread import time -import logging import db import state import settings import update +import logging logger = logging.getLogger('oml.downloads') class Downloads(Thread): diff --git a/oml/nodes.py b/oml/nodes.py index 7399caf..510f938 100644 --- a/oml/nodes.py +++ b/oml/nodes.py @@ -298,33 +298,41 @@ class Node(Thread): t1 = datetime.utcnow() logger.debug('download %s', url) self._opener.addheaders = zip(headers.keys(), headers.values()) - r = self._opener.open(url, timeout=self.TIMEOUT*2) + try: + r = self._opener.open(url, timeout=self.TIMEOUT*2) + except: + logger.debug('openurl failed %s', url, exec_info=1) + return False if r.getcode() == 200: - if r.headers.get('content-encoding', None) == 'gzip': - content = gzip.GzipFile(fileobj=r).read() - else: - content = '' - ct = datetime.utcnow() - for chunk in iter(lambda: r.read(16*1024), ''): - content += chunk - if (datetime.utcnow() - ct).total_seconds() > 1: - ct = datetime.utcnow() - t = Transfer.get(item.id) - t.progress = len(content) / item.info['size'] - t.save() - trigger_event('transfer', { - 'id': item.id, 'progress': t.progress - }) - ''' - content = r.read() - ''' + try: + if r.headers.get('content-encoding', None) == 'gzip': + content = gzip.GzipFile(fileobj=r).read() + else: + content = '' + ct = datetime.utcnow() + for chunk in iter(lambda: r.read(16*1024), ''): + content += chunk + if (datetime.utcnow() - ct).total_seconds() > 1: + ct = datetime.utcnow() + t = Transfer.get(item.id) + t.progress = len(content) / item.info['size'] + t.save() + trigger_event('transfer', { + 'id': item.id, 'progress': t.progress + }) + ''' + content = r.read() + ''' - t2 = datetime.utcnow() - duration = (t2-t1).total_seconds() - if duration: - self.download_speed = len(content) / duration - logger.debug('SPEED %s', ox.format_bits(self.download_speed)) - return item.save_file(content) + t2 = datetime.utcnow() + duration = (t2-t1).total_seconds() + if duration: + self.download_speed = len(content) / duration + logger.debug('SPEED %s', ox.format_bits(self.download_speed)) + return item.save_file(content) + except: + logger.debug('download failed %s', url, exec_info=1) + return False else: logger.debug('FAILED %s', url) return False