---
urlgrabber/progress.py | 87 +++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 79 insertions(+), 8 deletions(-)
diff --git a/urlgrabber/progress.py b/urlgrabber/progress.py
index ecef8ca..0f38447 100644
--- a/urlgrabber/progress.py
+++ b/urlgrabber/progress.py
@@ -331,12 +331,21 @@ class MultiFileHelper(BaseMeter):
def message(self, message):
self.master.message_meter(self, message)
+class _FakeLock:
+ def acquire(self):
+ pass
+ def release(self):
+ pass
+
class MultiFileMeter:
helperclass = MultiFileHelper
- def __init__(self):
+ def __init__(self, threaded=True):
self.meters = []
self.in_progress_meters = []
- self._lock = thread.allocate_lock()
+ if threaded:
+ self._lock = thread.allocate_lock()
+ else:
+ self._lock = _FakeLock()
self.update_period = 0.3 # seconds
self.numfiles = None
@@ -467,11 +476,20 @@ class MultiFileMeter:
class TextMultiFileMeter(MultiFileMeter):
- def __init__(self, fo=sys.stderr):
+ def __init__(self, fo=sys.stderr, threaded=True):
self.fo = fo
- MultiFileMeter.__init__(self)
+ MultiFileMeter.__init__(self, threaded)
# files: ###/### ###% data: ######/###### ###% time: ##:##:##/##:##:##
+# New output, like TextMeter output...
+# update: Size, All files
+# -----------------------
+# (<#file>/<#tot files>): <text> <pc> <bar> <rate> | <size> <eta time> ETA
+# 8-22 1 3-4 1 6-12 1 8 3 6 1 9 1 3 1
+# end
+# ---
+# <text> | <file size> <file elapsed time>
+# 8-56 3 6 1 9 5
def _do_update_meter(self, meter, now):
self._lock.acquire()
try:
@@ -492,8 +510,38 @@ class TextMultiFileMeter(MultiFileMeter):
ftd = format_number(td) + 'B'
fdt = format_time(dt, 1)
ftt = format_time(tt, 1)
-
- out = '%-79.79s' % (format % (df, tf, pf, fdd, ftd, pd, fdt, ftt))
+
+ if True:
+ frac = self.re.fraction_read() or 0
+ ave_dl = format_number(self.re.average_rate())
+ text = meter.text or meter.basename
+ if tf > 1:
+ text = '(%u/%u): %s' % (df+1, tf, text)
+
+ # Include text + ui_rate in minimal
+ tl = TerminalLine(8, 8+1+8)
+
+ ui_size = tl.add(' | %5sB' % format_number(dd))
+
+ ui_time = tl.add(' %9s' % format_time(rt))
+ ui_end = tl.add(' ETA ')
+
+ ui_sofar_pc = tl.add(' %i%%' % pf,
+ full_len=len(" (100%)"))
+ ui_rate = tl.add(' %5sB/s' % ave_dl)
+
+ # Make text grow a bit before we start growing the bar too
+ blen = 4 + tl.rest_split(8 + 8 + 4)
+ bar = '='*int(blen * frac)
+ if (blen * frac) - int(blen * frac) >= 0.5:
+ bar += '-'
+ ui_bar = tl.add(' [%-*.*s]' % (blen, blen, bar))
+ out = '%-*.*s%s%s%s%s%s%s\r' % (tl.rest(), tl.rest(), text,
+ ui_sofar_pc, ui_bar,
+ ui_rate, ui_size, ui_time,
+ ui_end)
+ else:
+ out = '%-79.79s' % (format % (df,tf,pf, fdd, ftd, pd, fdt,
ftt))
self.fo.write('\r' + out)
self.fo.flush()
finally:
@@ -509,8 +557,31 @@ class TextMultiFileMeter(MultiFileMeter):
et = meter.re.elapsed_time()
fet = format_time(et, 1)
frate = format_number(et and size / et) + 'B/s'
-
- out = '%-79.79s' % (format % (fn, fsize, fet, frate))
+ df = self.finished_files
+ tf = self.numfiles or 1
+
+ if True:
+ total_time = format_time(et)
+ total_size = format_number(size)
+ text = meter.text or meter.basename
+ if tf > 1:
+ text = '(%u/%u): %s' % (df, tf, text)
+
+ tl = TerminalLine(8)
+ ui_size = tl.add(' | %5sB' % total_size)
+ ui_time = tl.add(' %9s' % total_time)
+ if meter.size is not None:
+ if size > meter.size:
+ ui_end = tl.add(' !!! ')
+ elif size != meter.size:
+ ui_end = tl.add(' ... ')
+ else:
+ ui_end = tl.add(' ' * 5)
+
+ out = '%-*.*s%s%s%s' % (tl.rest(), tl.rest(), text,
+ ui_size, ui_time, ui_end)
+ else:
+ out = '%-79.79s' % (format % (fn, fsize, fet, frate))
self.fo.write('\r' + out + '\n')
finally:
self._lock.release()
--
1.7.6.4
_______________________________________________
Yum-devel mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel