Skip to content

Commit 06b8630

Browse files
committed
added prefix/suffix arguments to fix #168
1 parent 0088e52 commit 06b8630

File tree

4 files changed

+37
-5
lines changed

4 files changed

+37
-5
lines changed

examples.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,18 @@ def shortcut_example():
3737
time.sleep(0.1)
3838

3939

40+
@example
41+
def prefixed_shortcut_example():
42+
for i in progressbar.progressbar(range(10), prefix='Hi: '):
43+
time.sleep(0.1)
44+
45+
46+
@example
47+
def templated_shortcut_example():
48+
for i in progressbar.progressbar(range(10), suffix='{seconds_elapsed:.1}'):
49+
time.sleep(0.1)
50+
51+
4052
@example
4153
def with_example_stdout_redirection():
4254
with progressbar.ProgressBar(max_value=10, redirect_stdout=True) as p:

progressbar/bar.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ class ProgressBar(StdRedirectMixin, ResizableMixin, ProgressBarBase):
178178
max_error (bool): When True the progressbar will raise an error if it
179179
goes beyond it's set max_value. Otherwise the max_value is simply
180180
raised when needed
181+
prefix (str): Prefix the progressbar with the given string
182+
suffix (str): Prefix the progressbar with the given string
181183
182184
A common way of using it is like:
183185
@@ -228,7 +230,7 @@ class ProgressBar(StdRedirectMixin, ResizableMixin, ProgressBarBase):
228230
def __init__(self, min_value=0, max_value=None,
229231
widgets=None, left_justify=True, initial_value=0,
230232
poll_interval=None, widget_kwargs=None, custom_len=len,
231-
max_error=True, **kwargs):
233+
max_error=True, prefix=None, suffix=None, **kwargs):
232234
'''
233235
Initializes a progress bar with sane defaults
234236
'''
@@ -253,6 +255,8 @@ def __init__(self, min_value=0, max_value=None,
253255
self.max_value = max_value
254256
self.max_error = max_error
255257
self.widgets = widgets
258+
self.prefix = prefix
259+
self.suffix = suffix
256260
self.widget_kwargs = widget_kwargs or {}
257261
self.left_justify = left_justify
258262
self.value = initial_value
@@ -626,6 +630,14 @@ def start(self, max_value=None, init=True):
626630
if self.widgets is None:
627631
self.widgets = self.default_widgets()
628632

633+
if self.prefix:
634+
self.widgets.insert(0, widgets.FormatLabel(
635+
self.prefix, new_style=True))
636+
637+
if self.suffix:
638+
self.widgets.append(widgets.FormatLabel(
639+
self.suffix, new_style=True))
640+
629641
for widget in self.widgets:
630642
interval = getattr(widget, 'INTERVAL', None)
631643
if interval is not None:

progressbar/shortcuts.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33

44
def progressbar(iterator, min_value=0, max_value=None,
5-
widgets=None, **kwargs):
5+
widgets=None, prefix=None, suffix=None, **kwargs):
66
progressbar = bar.ProgressBar(
77
min_value=min_value, max_value=max_value,
8-
widgets=widgets, **kwargs)
8+
widgets=widgets, prefix=prefix, suffix=suffix, **kwargs)
99

1010
for result in progressbar(iterator):
1111
yield result

progressbar/widgets.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,17 @@ class FormatWidgetMixin(object):
6565
'''
6666
required_values = []
6767

68-
def __init__(self, format, **kwargs):
68+
def __init__(self, format, new_style=False, **kwargs):
69+
self.new_style = new_style
6970
self.format = format
7071

7172
def __call__(self, progress, data, format=None):
7273
'''Formats the widget into a string'''
7374
try:
74-
return (format or self.format) % data
75+
if self.new_style:
76+
return (format or self.format).format(**data)
77+
else:
78+
return (format or self.format) % data
7579
except (TypeError, KeyError):
7680
print('Error while formatting %r' % self.format, file=sys.stderr)
7781
pprint.pprint(data, stream=sys.stderr)
@@ -173,6 +177,10 @@ class FormatLabel(FormatWidgetMixin, WidthWidgetMixin):
173177
>>> str(label(Progress, dict(value='test')))
174178
''
175179
180+
>>> label = FormatLabel('{value} :: {value:^6}', new_style=True)
181+
>>> str(label(Progress, dict(value='test')))
182+
'test :: test '
183+
176184
'''
177185

178186
mapping = {

0 commit comments

Comments
 (0)