Skip to content

Commit 2d8e611

Browse files
authored
Merge pull request #5 from ModelCloud/auto-iterable
simplify usage: auto convert int and dict/set into common iterables
2 parents 0824f19 + b624065 commit 2d8e611

File tree

4 files changed

+40
-10
lines changed

4 files changed

+40
-10
lines changed

logbar/progress.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@
1717
import datetime
1818
import time
1919
from enum import Enum
20-
from typing import Iterable, Optional
20+
from typing import Iterable, Optional, Union
2121
from warnings import warn
2222

2323
from . import LogBar
2424
from .logbar import update_last_pb_instance
2525
from .terminal import terminal_size
26+
from .util import auto_iterable
2627

2728
logger = LogBar.shared()
2829

@@ -40,7 +41,7 @@ class RenderMode(str, Enum):
4041

4142

4243
class ProgressBar:
43-
def __init__(self, iterable: Iterable):
44+
def __init__(self, iterable: Union[Iterable, int, dict, set]):
4445
self._iterating = False # state: in init or active iteration
4546

4647
self._render_mode = RenderMode.AUTO
@@ -54,7 +55,9 @@ def __init__(self, iterable: Iterable):
5455
self.max_title_len = 0
5556
self.max_subtitle_len = 0
5657

57-
self.iterable = iterable
58+
# auto convert simple types into iterable
59+
auto_iter = auto_iterable(iterable)
60+
self.iterable = auto_iter if auto_iter else iterable
5861

5962
self.bar_length = 0
6063
self.current_iter_step = 0

logbar/util.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from typing import Iterable, Optional, Union
2+
3+
# simplify user usage so instead of this: pb(range(10))
4+
# they use: pb(10)
5+
def auto_iterable(input) -> Optional[Iterable]:
6+
if isinstance(input, Iterable):
7+
return input
8+
9+
if isinstance(input, int):
10+
return range(input)
11+
12+
# when you iterate dict/sets, 99% of the time you want to call items()
13+
# and for loop k,v
14+
if isinstance(input, (dict, set)):
15+
return input.items()
16+
17+
return None
18+

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
from setuptools import find_packages, setup
2020

21-
__version__ = "0.0.3"
21+
__version__ = "0.0.4"
2222

2323
with open("requirements.txt") as f:
2424
requirements = f.read().splitlines()

tests/test_progress.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,33 +58,42 @@ def test_title_dynamic_subtitle_fixed(self):
5858

5959
def test_title_dynamic_subtitle_dynamic(self):
6060
pb = log.pb(SAMPLES).manual()
61+
count = 1
6162
for i in pb:
63+
log.info(f"random log: {count}")
64+
count += 1
6265
pb.title(f"[TITLE: {i}]").subtitle(f"[SUBTITLE: {i}]").draw()
63-
sleep(0.1)
66+
sleep(0.2)
6467

6568
def test_range_manual(self):
6669
pb = log.pb(range(100)).manual()
6770
for _ in pb:
6871
pb.draw()
6972
sleep(0.1)
7073

71-
def test_range_auto(self):
72-
pb = log.pb(range(100))
74+
def test_range_auto_int(self):
75+
pb = log.pb(100)
76+
for _ in pb:
77+
sleep(0.1)
78+
79+
def test_range_auto_dict(self):
80+
pb = log.pb({"1": 2, "2": 2})
81+
7382
for _ in pb:
7483
sleep(0.1)
7584

7685
def test_range_auto_disable_ui_left_steps(self):
77-
pb = log.pb(range(100)).set(show_left_steps=False)
86+
pb = log.pb(100).set(show_left_steps=False)
7887
for _ in pb:
7988
sleep(0.1)
8089

8190
def test_title(self):
82-
pb = log.pb(range(100)).title("TITLE: FIXED")
91+
pb = log.pb(100).title("TITLE: FIXED")
8392
for _ in pb:
8493
sleep(0.1)
8594

8695
def test_title_subtitle(self):
87-
pb = log.pb(range(100)).title("[TITLE: FIXED]").manual()
96+
pb = log.pb(100).title("[TITLE: FIXED]").manual()
8897
for _ in pb:
8998
pb.subtitle(f"[SUBTITLE: FIXED]").draw()
9099
sleep(0.1)

0 commit comments

Comments
 (0)