A few (currently only 3) somewhat useful (Epic) python objects/functions (Stuff)
pip install epicstuff
Makes using nested progress bars from rich.progress easier
- Example:
basically replaces
from rich.progress import Progress
with Progress() as progress:
task = progress.add_task("task", total=100)
for i in range(100):
sub_task = progress.add_task("subtask", total=100)
for j in range(100):
time.sleep(0.01) # some task
progress.update(sub_task, advance=1)
progress.remove_task(sub_task)
progress.update(task, advance=1)
with
from epicstuff import Bar
with Bar() as bar:
for i in bar(range(100)):
for j in bar(range(100), transient=True):
time.sleep(0.01) # some task
with minor extra features (fancier default bar)
Lets you access a dictionary's keys as attributes
Simpler than Bar
(and faster i think) and with more features (basically only recursive conversion) than jdict
(and without some of the "extra" stuff)
- Example:
from epicstuff import Dict
d = Dict({"a": 1, "b": {"c": 2, "d": 3}})
print(d.b.c) # 2
"Wraps" a target instead of converting it into a (new) Dict
object. Useful for when your "target" is say, a CommentedMap
and you don't want to loose the comments
- Example:
from epicstuff import Dict
d = Dict(dict(), _convert=False) # ignore the unexpected-keyword-arg warning
# d._t points to the original dictionary
d.x = 1
downsides: currently no recursive "wrapping" and is "messier" than the new Dict in VSCode debugger
a simple timer to time execution of code a code segment
- Example:
from epicstuff import timer
with timer():
pass # some code
# outputs: Time elapsed: 0.0 seconds
# message can be changed by passing a string with {} to timer
extra functions:
-
open
: overwritingopen
to useencoding='utf8'
by default -
wrap
: just a renamedfunctools.partial
- when doing bar in bar with the second bar being transient, make so that the dots continue from where the previous bar left off
- implement auto transient for bar in bar
- add and implement simple=False for .Bar.track()
- Note to self:
- "self install" using
pip install -U -e .
- upload by running
python -m build
thentwine upload dist/*
- "self install" using