--- 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 Yum-devel@lists.baseurl.org http://lists.baseurl.org/mailman/listinfo/yum-devel