blob: 0cfdecfb60244177854ca46509d60ba2756c4973 [file] [log] [blame]
Alex41485522019-04-12 17:26:18 -05001import sys
2
3
4class Progress(object):
Alexd9fd85e2019-05-16 16:58:24 -05005 _strsize = 0
6 _note_size = 0
7
Alex41485522019-04-12 17:26:18 -05008 def __init__(self, max_index, bar_size=21):
9 self.total = max_index
10 # bar size in symbols
11 self.bar_size = bar_size
12
13 def write_progress(self, index, note=''):
Alex3ebc5632019-04-18 16:47:18 -050014 # calc index and percent values
Alexd9fd85e2019-05-16 16:58:24 -050015 _suffix = ''
16 new_size = len(note)
17 if self._note_size > new_size:
18 _suffix = ' '*(self._note_size - new_size)
Alex1f90e7b2021-09-03 15:31:28 -050019 if index:
20 _percent = (100 * index) // self.total
21 _index = (self.bar_size * index) // self.total
22 else:
23 _percent = 0
24 _index = 0
25
Alex41485522019-04-12 17:26:18 -050026 # clear the line
27 sys.stdout.write('\r')
28 # print new progress
29 _format = "[{:"+str(self.bar_size-1)+"}] {}/{} ({}%) {}"
Alexd9fd85e2019-05-16 16:58:24 -050030 _progress_string = _format.format(
Alex41485522019-04-12 17:26:18 -050031 '='*_index,
32 index,
33 self.total,
34 _percent,
Alexd9fd85e2019-05-16 16:58:24 -050035 note + _suffix
36 )
37 sys.stdout.write(_progress_string)
38 # Save new note size and whole string size
39 self._strsize = len(_progress_string)
40 self._note_size = new_size
Alex41485522019-04-12 17:26:18 -050041 sys.stdout.flush()
Alex3ebc5632019-04-18 16:47:18 -050042
Alexd9fd85e2019-05-16 16:58:24 -050043 def clearline(self):
44 sys.stdout.write('\r')
45 sys.stdout.write(' '*self._strsize)
46 sys.stdout.write('\r')
Alexd0391d42019-05-21 18:48:55 -050047 sys.stdout.flush()
Alexd9fd85e2019-05-16 16:58:24 -050048
49 def end(self):
50 self._note_size = 0
51 self._strsize = 0
Alex41485522019-04-12 17:26:18 -050052 sys.stdout.write('\n')