Package translate :: Package misc :: Module progressbar
[hide private]
[frames] | no frames]

Source Code for Module translate.misc.progressbar

  1  #!/usr/bin/env python 
  2  # -*- coding: utf-8 -*- 
  3  #  
  4  # Copyright 2004, 2005 Zuza Software Foundation 
  5  #  
  6  # This file is part of translate. 
  7  # 
  8  # translate is free software; you can redistribute it and/or modify 
  9  # it under the terms of the GNU General Public License as published by 
 10  # the Free Software Foundation; either version 2 of the License, or 
 11  # (at your option) any later version. 
 12  #  
 13  # translate is distributed in the hope that it will be useful, 
 14  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 15  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 16  # GNU General Public License for more details. 
 17  # 
 18  # You should have received a copy of the GNU General Public License 
 19  # along with translate; if not, write to the Free Software 
 20  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 21   
 22  """progress bar utilities for reporting feedback on progress of application...""" 
 23   
24 -class DotsProgressBar:
25 """an ultra-simple progress indicator that just writes a dot for each action"""
26 - def __init__(self):
27 import sys 28 self.stderr = sys.stderr 29 self.amount = 0
30
31 - def show(self, verbosemessage):
32 """show a dot for progress :-)""" 33 # pylint: disable-msg=W0613 34 self.stderr.write('.') 35 self.stderr.flush()
36
37 - def close(self):
38 self.stderr.write('\n') 39 self.stderr.flush()
40
41 - def __del__(self):
42 self.close()
43
44 -class NoProgressBar:
45 """an invisible indicator that does nothing..."""
46 - def __init__(self):
47 self.amount = 0
48
49 - def show(self, verbosemessage):
50 """show nothing for progress :-)""" 51 pass
52
53 - def close(self):
54 pass
55
56 -class ProgressBar:
57 """a plain progress bar that doesn't know very much about output..."""
58 - def __init__(self, minValue = 0, maxValue = 100, totalWidth=50):
59 self.progBar = "[]" # This holds the progress bar string 60 self.min = minValue 61 self.max = maxValue 62 self.span = maxValue - minValue 63 self.width = totalWidth 64 self.amount = 0 # When amount == max, we are 100% done
65
66 - def __str__(self):
67 """produces the string representing the progress bar""" 68 if self.amount < self.min: 69 self.amount = self.min 70 if self.amount > self.max: 71 self.amount = self.max 72 73 # Figure out the new percent done, round to an integer 74 diffFromMin = float(self.amount - self.min) 75 percentDone = (diffFromMin / float(self.span)) * 100.0 76 percentDone = round(percentDone) 77 percentDone = int(percentDone) 78 79 # Figure out how many hash bars the percentage should be 80 allFull = self.width - 7 81 numHashes = (percentDone / 100.0) * allFull 82 numHashes = int(round(numHashes)) 83 84 # build a progress bar with hashes and spaces 85 self.progBar = "[%s%s] %3d%%" % ('#'*numHashes, ' '*(allFull-numHashes), percentDone) 86 return str(self.progBar)
87
88 - def show(self, verbosemessage):
89 """displays the progress bar""" 90 # pylint: disable-msg=W0613 91 print self
92
93 -class MessageProgressBar(ProgressBar):
94 """a ProgressBar that just writes out the messages without any progress display"""
95 - def __init__(self, *args, **kwargs):
96 import sys 97 self.sys = sys 98 ProgressBar.__init__(self, *args, **kwargs)
99
100 - def show(self, verbosemessage):
101 self.sys.stderr.write(verbosemessage + '\n') 102 self.sys.stderr.flush()
103
104 -class HashProgressBar(ProgressBar):
105 """a ProgressBar which knows how to go back to the beginning of the line..."""
106 - def __init__(self, *args, **kwargs):
107 import sys 108 self.sys = sys 109 ProgressBar.__init__(self, *args, **kwargs)
110
111 - def show(self, verbosemessage):
112 self.sys.stderr.write(str(self) + '\r') 113 self.sys.stderr.flush()
114
115 - def close(self):
116 self.sys.stderr.write('\n') 117 self.sys.stderr.flush()
118
119 - def __del__(self):
120 self.close()
121
122 -class VerboseProgressBar(HashProgressBar):
123 - def __init__(self, *args, **kwargs):
124 self.lastwidth = 0 125 HashProgressBar.__init__(self, *args, **kwargs)
126
127 - def show(self, verbosemessage):
128 output = str(self) 129 self.sys.stderr.write('\r' + ' '*self.lastwidth) 130 self.sys.stderr.write('\r' + verbosemessage + '\n') 131 self.lastwidth = len(output) 132 self.sys.stderr.write('\r' + output) 133 self.sys.stderr.flush()
134
135 -def test(progressbar):
136 import time 137 for n in range(progressbar.min, progressbar.max+1, 5): 138 progressbar.amount = n 139 progressbar.show("Some message") 140 time.sleep(0.2)
141 142 if __name__ == '__main__': 143 p = HashProgressBar(0, 100, 50) 144 test(p) 145