[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