[Gelistirici] fetcher at trunk

S.Çağlar Onur caglar at pardus.org.tr
23 Kas 2007 Cum 23:51:49 EET


trunk'daki pisi Content-Length vermeyen paketler için (örn: system/base/acl || 
system/base/attr) için patlıyor. Hızlı ve kirli bir şekilde aşağıdaki yama 
ile sorunu _sanırım_ çözdüm fakat;

1. Bu yama pek temiz değil
2. Aynı sunucu Range'de vermediği için dosya çekip yarısında kes, resume et 
imkanı olmuyor, eskiden nasıldı emin değilim fakat diff'e göre eskiden bu 
durum için

...
+        try:
+            total_size = int(headers['Content-Length']) + self.exist_size
+        except KeyboardInterrupt:
+            raise
+        except Exception, e: #FIXME: what exception could we catch here, 
replace with that.
+            total_size = 0
+
+        self._do_grab(fileObj, dest, total_size)
...

benzeri birşey yapıyormuşuz, alternatif çözüm önerisi olan var mıdır?


Index: pisi/fetcher.py
===================================================================
--- pisi/fetcher.py	(revision 16144)
+++ pisi/fetcher.py	(working copy)
@@ -56,7 +56,11 @@
         self.filename   = basename
         self.url        = url
         self.basename   = basename
-        self.total_size = total_size
+        if total_size is None:
+            # Some servers do not provides "Content-Length" header (like 
sgi.com)
+            self.total_size = 0
+        else:
+            self.total_size = total_size
         self.text       = text
 
         self.now    = lambda: time.time()
@@ -65,13 +69,19 @@
         self.s_time = self.now()
 
     def update(self, size):
-        self.size    = size
-        self.percent = (size * 100.0) / self.total_size
+        self.size = size
+        if self.total_size == 0:
+            self.percent = 0
+        else:
+            self.percent = (size * 100.0) / self.total_size
 
         if int(self.now()) != int(self.last_updated) and size > 0:
             self.rate, self.symbol = util.human_readable_rate((size - 
self.exist_size) / (self.now() - self.s_time))
-            self.eta  = '%02d:%02d:%02d' %\
+            if self.percent != 0:
+                self.eta  = '%02d:%02d:%02d' %\
                     tuple([i for i in time.gmtime((self.t_diff() * (100 - 
self.percent)) / self.percent)[3:6]])
+            else:
+                self.eta = 0
 
         self._update_ui()
 



Gelistirici mesaj listesiyle ilgili daha fazla bilgi