[yum-commits] 3 commits - urlgrabber/progress.py
James Antill
james at osuosl.org
Mon Oct 24 19:53:35 UTC 2011
urlgrabber/progress.py | 108 ++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 85 insertions(+), 23 deletions(-)
New commits:
commit 80fa2a00d76d974734a8c8784b8e33e6f8ac6e40
Author: James Antill <james at and.org>
Date: Mon Oct 24 15:52:38 2011 -0400
Remove the "if True" sections on the new multi. progress code.
diff --git a/urlgrabber/progress.py b/urlgrabber/progress.py
index b98c085..3d7e99a 100644
--- a/urlgrabber/progress.py
+++ b/urlgrabber/progress.py
@@ -518,35 +518,32 @@ class TextMultiFileMeter(MultiFileMeter):
fdt = format_time(dt, 1)
ftt = format_time(tt, 1)
- 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)
+ 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)
+ # Include text + ui_rate in minimal
+ tl = TerminalLine(8, 8+1+8)
- ui_size = tl.add(' | %5sB' % format_number(dd))
+ ui_size = tl.add(' | %5sB' % format_number(dd))
- ui_time = tl.add(' %9s' % format_time(rt))
- ui_end = tl.add(' ETA ')
+ 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)
- ui_bar = _term_add_bar(tl, blen, frac)
- 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)
+ 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)
+ ui_bar = _term_add_bar(tl, blen, frac)
+ out = '\r%-*.*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)
+ self.fo.write(out)
self.fo.flush()
finally:
self._lock.release()
@@ -564,22 +561,19 @@ class TextMultiFileMeter(MultiFileMeter):
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)
- ui_end, not_done = _term_add_end(tl, meter.size, size)
- out = '%-*.*s%s%s%s' % (tl.rest(), tl.rest(), text,
+ 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)
+ ui_end, not_done = _term_add_end(tl, meter.size, size)
+ out = '\r%-*.*s%s%s%s\n' % (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')
+ self.fo.write(out)
finally:
self._lock.release()
self._do_update_meter(meter, now)
commit b7fd73e7020bba5c233f093d83549eef73988f43
Author: James Antill <james at and.org>
Date: Mon Oct 24 15:51:27 2011 -0400
Share some code between the single vs. multi. progress code.
diff --git a/urlgrabber/progress.py b/urlgrabber/progress.py
index 0f38447..b98c085 100644
--- a/urlgrabber/progress.py
+++ b/urlgrabber/progress.py
@@ -211,6 +211,21 @@ def text_meter_total_size(size, downloaded=0):
# 4. + ( 5, total: 32)
#
+def _term_add_bar(tl, bar_max_length, pc):
+ blen = bar_max_length
+ bar = '='*int(blen * pc)
+ if (blen * pc) - int(blen * pc) >= 0.5:
+ bar += '-'
+ return tl.add(' [%-*.*s]' % (blen, blen, bar))
+
+def _term_add_end(tl, osize, size):
+ if osize is not None:
+ if size > osize: # Is ??? better? Really need something to say < vs >.
+ return tl.add(' !!! '), True
+ elif size != osize:
+ return tl.add(' ... '), True
+ return tl.add(' ' * 5), False
+
class TextMeter(BaseMeter):
def __init__(self, fo=sys.stderr):
BaseMeter.__init__(self)
@@ -259,13 +274,10 @@ class TextMeter(BaseMeter):
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%s\r' % (tl.rest(), tl.rest(), text,
- ui_sofar_pc, ui_pc, ui_bar,
- ui_rate, ui_size, ui_time, ui_end)
+ ui_bar = _term_add_bar(tl, blen, frac)
+ out = '\r%-*.*s%s%s%s%s%s%s%s\r' % (tl.rest(), tl.rest(), text,
+ ui_sofar_pc, ui_pc, ui_bar,
+ ui_rate,ui_size,ui_time, ui_end)
self.fo.write(out)
self.fo.flush()
@@ -284,12 +296,7 @@ class TextMeter(BaseMeter):
tl = TerminalLine(8)
ui_size = tl.add(' | %5sB' % total_size)
ui_time = tl.add(' %9s' % total_time)
- not_done = self.size is not None and amount_read != self.size
- if not_done:
- ui_end = tl.add(' ... ')
- else:
- ui_end = tl.add(' ' * 5)
-
+ ui_end, not_done = _term_add_end(tl, self.size, amount_read)
out = '\r%-*.*s%s%s%s\n' % (tl.rest(), tl.rest(), text,
ui_size, ui_time, ui_end)
self.fo.write(out)
@@ -532,10 +539,7 @@ class TextMultiFileMeter(MultiFileMeter):
# 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))
+ ui_bar = _term_add_bar(tl, blen, frac)
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,
@@ -570,14 +574,7 @@ class TextMultiFileMeter(MultiFileMeter):
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)
-
+ ui_end, not_done = _term_add_end(tl, meter.size, size)
out = '%-*.*s%s%s%s' % (tl.rest(), tl.rest(), text,
ui_size, ui_time, ui_end)
else:
commit d09bda90f15eee161a17944428e9bec0bfc812b6
Author: James Antill <james at and.org>
Date: Fri Oct 21 15:34:16 2011 -0400
Make TextMultiFileMeter not suck UI, make it mostly UI compat. with TextMeter.
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()
More information about the Yum-commits
mailing list