r285 - in branches/rewrite: . src
Otavio Salvador
partial-mirror-devel@lists.alioth.debian.org
Wed, 10 Nov 2004 09:40:57 -0700
Author: otavio
Date: Wed Nov 10 09:40:57 2004
New Revision: 285
Modified:
branches/rewrite/ (props changed)
branches/rewrite/src/Download.py
Log:
r209@nurf: otavio | 2004-11-10T16:40:02.659997Z
Remove ProgressBar when doesn't have other file on queue; Handle IOError exception.
Modified: branches/rewrite/src/Download.py
==============================================================================
--- branches/rewrite/src/Download.py (original)
+++ branches/rewrite/src/Download.py Wed Nov 10 09:40:57 2004
@@ -19,8 +19,7 @@
import pycurl
import threading
-from Queue import Queue
-
+from Queue import Queue, Empty
from DisplayInfo import *
class DownloadQueue(Queue):
@@ -37,7 +36,6 @@
_Lock = threading.Lock()
DisplayInfo = None
- ProgressBar = None
def __init__(self, info = None, progress = None):
if info == None:
@@ -46,16 +44,20 @@
self.DisplayInfo = info
if progress == None:
- self.ProgressBar = TextProgressBar()
+ self._ProgressBar = TextProgressBar()
else:
- self.ProgressBar = progress
+ self._ProgressBar = progress
- self.DisplayInfo.add(self.ProgressBar)
+ self.DisplayInfo.add(self._ProgressBar)
threading.Thread.__init__(self)
def run(self):
while 1:
- url, filename = Download.queue.get()
+ try:
+ url, filename = Download.queue.get_nowait()
+ except Empty:
+ self.DisplayInfo.remove(self._ProgressBar)
+
f = open(filename, "wb")
curl = pycurl.Curl()
curl.setopt(pycurl.FOLLOWLOCATION, 1)
@@ -70,7 +72,7 @@
self.url = url
- self.ProgressBar.text = self.url
+ self._ProgressBar.text = self.url
# Store counter information about it
self._Lock.acquire()
@@ -81,11 +83,13 @@
try:
curl.perform()
except:
- import traceback
- traceback.print_exc(file=sys.stderr)
- sys.stderr.flush()
+ self.DisplayInfo.failed(url)
+
curl.close()
- f.close()
+ try:
+ f.close()
+ except IOError:
+ pass
# Store counter information about it
self._Lock.acquire()
@@ -93,9 +97,11 @@
self._counter = DownloadQueue.counter
self._Lock.release()
+ self.DisplayInfo.done(url)
+
def progress(self, download_t, download_d, upload_t, upload_d):
- self.ProgressBar.max = download_t
- self.ProgressBar.current = download_d
+ self._ProgressBar.max = download_t
+ self._ProgressBar.current = download_d
self.DisplayInfo.refresh()
class Download: