Pretty SimpleNamespace
Table of Contents
What is it?
- A stringifier and formatter for SimpleNamespace which attempts to make the data as readable as possible.
Why create it?
- I use SimpleNamespace often to hold state and needed a way to print it out for debugging purposes.
Simple usage
from pretty_simple_namespace import pprint
from types import SimpleNamespace as o
joe = o(
name={"first": "joe", "last": "schmo"},
age=30,
favoriteFoods=["apples", "steak"],
)
pprint(joe)
# prints
# {
# name: {
# first: 'joe'
# last: 'schmo'
# }
# age: 30
# favoriteFoods: [
# 'apples'
# 'steak'
# ]
# }
Features
- handles recursive structures by tracking and printing references nicely
- recurses into types
list
,dict
andSimpleNamespace
for now - has special-case printing for types
bool
,str
,callable
andNone
- booleans and None are printed lowercase
- strings are wrapped in single quotes
- callable appends
()
e.g.myMethod()
. Arguments aren't represented
- all other types are printed by wrapping it in
str
e.g.str(userDefinedType)
Limitations
- multi-line strings look ugly
- doesn't have a way to recurse into structures other than what's listed above
Related projects
Api
format(something, indent=2) => str
- formats
something
to a string as seen in Simple usage
pprint(something, indent=2) => None
- just prints the formated
something
Wrapped module
wrapWith(*, indent) =>-
use this when you want to call
format
orpprint
with a different default indent value so you don't have to pass it manually all the time.e.g.
from pretty_simple_namespace import wrapWith pprint = wrapWith(indent=4).pprint pprint(o(tabbed4spaces=True)) # { # tabbed4spaces: true # }
Wrapped module
- just an instance of SimpleNamespace with two attributes
format
andpprint
.
Test
#
# you must have poetry installed
#
$ poetry shell
$ poetry install
$ python runTests.py