pretty-simple-namespace

A pretty printer for SimpleNamespace


License
Other
Install
pip install pretty-simple-namespace==0.1.1

Documentation

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 and SimpleNamespace for now
  • has special-case printing for types bool, str, callable and None
    • 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

pprint(something, indent=2) => None

  • just prints the formated something

wrapWith(*, indent) => Wrapped module

  • use this when you want to call format or pprint 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 and pprint.

Test

#
# you must have poetry installed
#
$ poetry shell
$ poetry install
$ python runTests.py