Skip to main content

EpicStuff

A few somewhat useful (Epic) python objects/functions (Stuff).

Installation

pip install epicstuff

Dict

Lets you access a dictionary's keys as attributes

JDict version

Points to 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({})

d.x = 1

BoxDict version

Simpler (less features) than Box but with more features (recursive conversion and creation on access) than jdict (and without some of the "extra" stuff)

  • Example:
from epicstuff import Dict

d = Dict({"a": 1, "b": {"c": 2, "d": 3}}, _convert=None)

print(d.b.c)  # 2

NewDict version

Combines the source-class preservation of JDict (eg. wrapped CommentedMaps keep their comments) and being a dict subclass, so isinstance(d, dict) is True. Also has extra features of BoxDict like auto-creation.

  • Example:
from epicstuff import NewDict

d = NewDict({"a": 1, "b": {"c": 2, "d": 3}}, _convert=None)

print(d.b.c)  # 2

How it works: dict sources are turned into NewDict. Other mappings has its __class__ swapped in place to a generated dotSourceName (e.g. dotCommentedMap) that inherits from both NewDict and the source class. The instance keeps its original data and NewDict features.

Rich Trace

Easily install terminal-wide rich.traceback and use helpers to ensure pretty tracebacks with async functions.

  • Example:
from epicstuff import run_install_trace
  • or:
from epicstuff import rich_trace

@rich_trace
async def some_func():
	raise Exception
some_func()
  • or:
@rich_trace(_return=0)
async def some_func():
	raise Exception
some_func()
  • or:
with rich_trace():
	raise Exception

Bar

Makes using nested progress bars from rich.progress easier

  • Example:

basically lets you replace

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)

Timer

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

s

An autoformatting string. Removes extra indent and leading/trailing newlines.

  • Example:
from epicstuff import s

string = s('''
	line 1
		line 2
			line 3
''') + 'line 4'

print(s)
# line 1
# 	line 2
# 		line 3
# line 4

Permissify

make function ignore extra arguments instead of raising an error.

  • Example:
from epicstuff import perm

def tmp(a, b=2): ...

perm(tmp)(1, 2, b=3, c=5)  # this will run without raising TypeError

fix_import

Lets you do relative imports and absolute imports from parent folder without having to run the file as a module.

  • Example:
from epicstuff import run_fix_import
  • or
from epicstuff import fix_import
fix_import('src')
# or
fix_import('..')

from src.stuff import *
# or
from ..stuff import *

Stuff

extra functions:

  • open: overwrites open with Path.open and encoding='utf8'
    • with open('file') as f: ...
  • wrap: just a renamed functools.partial
  • rmap: map but recursive for lists and dicts
    • takes list or dict and 2 functions, will apply function 1 to all keys and function 2 to all values
  • Tee: Text stream that writes to multiple underlying streams. (Example: redirect stdout to terminal and a file)
  • Pointer: an object you can kinda use like a pointer. (Example number = Pointer(5), number._t = 6)

TODO:

  • 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()
  • look into using wrapt.ObjectProxy

Stuff:

  • Note to self:
    • "self install" using pip install -U -e .
    • upload by running python -m build then twine upload --skip-existing dist/*

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

epicstuff-3.0.9.tar.gz (40.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

epicstuff-3.0.9-py3-none-any.whl (41.9 kB view details)

Uploaded Python 3

File details

Details for the file epicstuff-3.0.9.tar.gz.

File metadata

  • Download URL: epicstuff-3.0.9.tar.gz
  • Upload date:
  • Size: 40.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for epicstuff-3.0.9.tar.gz
Algorithm Hash digest
SHA256 d1fe5047e4837f0b9b2e95d89f57b4cd45f537448e3245d113a7f1ca0690740a
MD5 5a178c4555ad842fd1941b1f1a130005
BLAKE2b-256 39e53832435c69d224777aa35cfcc116a56af806d784639e6fba053be4335e5a

See more details on using hashes here.

File details

Details for the file epicstuff-3.0.9-py3-none-any.whl.

File metadata

  • Download URL: epicstuff-3.0.9-py3-none-any.whl
  • Upload date:
  • Size: 41.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for epicstuff-3.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 c7575fced06e0b8fda8eeb302bf4ac653e85ccd295d82555fa79234000897568
MD5 c249c83673d96becd1c8acbc12fd2597
BLAKE2b-256 dad2b0f950f72fe942c12a1345b522db10556f1a8fda59099888c98a42cc8030

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

3.0.9 This release

2 files

1.0.1

2 files

1.0.0

2 files

0.5.2

2 files

0.5.1

2 files

0.4.2

2 files

0.3.2

2 files

0.3.1

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.0

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

3 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page