[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