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: