Skip to content

Commit 2bb4859

Browse files
committed
Feature update and bugs fix
Features: 1.FillBar class add for more predefined bar style. 2.More customizable bar parameters added Fixes: Unnecessary functions and variables removed On branch master modified: progress.py
1 parent dff589c commit 2bb4859

1 file changed

Lines changed: 60 additions & 25 deletions

File tree

progress.py

Lines changed: 60 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class Elememt:
1515
def __init__(self, name,initial_value,max_value = None,display_name="normal",value_display_mode=0,separator=":",f=None):
1616
self.name = name
1717
self.value = initial_value
18+
self.initial_value = initial_value
1819
self.value_display_mode = value_display_mode
1920
self.max_value = max_value
2021
self.display_name = display_name
@@ -49,20 +50,28 @@ def get_element(self):
4950
element += self.name +" "
5051
if self.display_name == "hide":
5152
pass
52-
53-
return element
53+
54+
return element
55+
def reset(self):
56+
self.value = self.initial_value
5457

5558
#Class Bar
5659
class Bar:
57-
def __init__(self,max_value=None,bar_len=20, bar_marker="=", bar_pointer=">"):
58-
self.max_value = max_value
60+
def __init__(self, max_value=None, bar_len=25, fill="=", pointer=">"):
61+
#Bar properties
5962
self.val = 0
63+
self.max_value = max_value
6064
self.bar_len = bar_len
61-
self.bar_marker = bar_marker
62-
if len(bar_pointer) == 1:
63-
self.bar_pointer = bar_pointer
65+
66+
# style properties
67+
self.fill = fill
68+
self.empty_fill = ' '
69+
self.prefix = '['
70+
self.postfix = ']'
71+
if len(pointer) == 1:
72+
self.pointer = pointer
6473
else:
65-
self.bar_pointer = " "
74+
self.pointer = ""
6675

6776
def __call__(self,value = None):
6877
if value != None:
@@ -73,12 +82,34 @@ def update_bar(self,val):
7382
persent = int((val * 100) / self.max_value)
7483
bar_unit = 100/self.bar_len
7584

76-
num_marker = int(persent/bar_unit)
85+
num_fill = int(persent/bar_unit)
7786

78-
bar = self.bar_marker*num_marker+\
79-
self.bar_pointer+\
80-
" "*(self.bar_len -num_marker-1)
81-
return "["+bar[:self.bar_len]+"]"
87+
bar = self.fill*num_fill+\
88+
self.pointer+\
89+
self.empty_fill*(self.bar_len -num_fill- len(self.pointer))
90+
return self.prefix + bar[:self.bar_len] + self.postfix
91+
92+
def reset(self):
93+
pass
94+
95+
#Fill Bar class
96+
class FillBar(Bar):
97+
def __init__(self, mode=None, max_value=None, bar_len=25):
98+
super().__init__(max_value=max_value, bar_len=bar_len, pointer="")
99+
self.prefix = ''
100+
self.postfix = ''
101+
102+
if mode == "c" or mode =="circle" or mode == 0:
103+
self.empty_fill = '○'
104+
self.fill = '●'
105+
if mode == "s" or mode =="square" or mode == 1:
106+
self.empty_fill = '□'
107+
self.fill = '■'
108+
if mode == None or mode =='n' or mode == "Normal" or mode == 2:
109+
self.empty_fill = '●'
110+
self.fill = '█'
111+
self.prefix = '|'
112+
self.postfix = '|'
82113

83114
class ProgressTime:
84115
def __init__(self, postfix=""):
@@ -88,17 +119,14 @@ def __init__(self, postfix=""):
88119
def __call__(self):
89120
return self.calculate_elapsed_time()
90121

91-
def initialize(self):
92-
self.start_time = time.time()
93-
94122
def calculate_elapsed_time(self):
95123
elapsed_time = time.time() - self.start_time
96124
if elapsed_time < 1:
97125
elapsed_time = elapsed_time*1000
98126

99127
if elapsed_time < 1:
100128
elapsed_time = (elapsed_time*1000)//1
101-
return str(int(elapsed_time))+"um"+self.postfix
129+
return str(int(elapsed_time))+"us"+self.postfix
102130
else:
103131
return str(int(elapsed_time))+"ms"+self.postfix
104132
else:
@@ -107,6 +135,9 @@ def calculate_elapsed_time(self):
107135
def get_element(self):
108136
element = " {} "
109137
return element
138+
139+
def reset(self):
140+
self.start_time = time.time()
110141

111142

112143
def __init__(self, max_val, desc= "Step", mode = "no-bar"):
@@ -128,7 +159,7 @@ def initialize(self):
128159
self.history = []
129160
self.max_string_len = 0
130161
if self.progress_time != None:
131-
self.progress_time.initialize()
162+
self.progress_time.reset()
132163

133164
def add(self,element):
134165
if element == None:
@@ -151,7 +182,7 @@ def add(self,element):
151182
self.elements.append(element)
152183
return
153184

154-
if type(element) == Progress.Bar:
185+
if type(element) == Progress.Bar or type(element) == Progress.FillBar:
155186
self.add_postfix = True
156187
element.max_value = self.max_val
157188
self.bar = element
@@ -178,8 +209,6 @@ def update(self,step = 1):
178209
self.val += step
179210
if self.val > self.max_val:
180211
self.val = 1
181-
if self.progress_time != None:
182-
self.progress_time.initialize()
183212
self.output()
184213

185214
def output(self):
@@ -206,11 +235,17 @@ def set_cursor_position(self):
206235
bar = ""
207236
if self.bar_mode:
208237
bar = "{}"
238+
self.bar(self.val)
239+
240+
# saving history of progress
209241
out = self.prefix + bar + self.postfix
210-
211-
self.bar(self.val)
212242
history = out.format(*[ e() for e in self.elements])
213243
self.history.append(history)
214-
215-
print("\r"+history)
244+
245+
# reset progress bar
246+
for e in self.elements:
247+
e.reset()
248+
249+
#line Change
250+
print()
216251
self.max_string_len = 0

0 commit comments

Comments
 (0)