=============
PrettyPrinter
Documentation_
Syntax-highlighting, declarative and composable pretty printer for Python 3.5+
.. code:: bash
pip install prettyprinter
- Drop in replacement for the standard library
pprint
: just rename pprint
to prettyprinter
in your imports. - Uses a modified Wadler-Leijen layout algorithm for optimal formatting
- Write pretty printers for your own types with a dead simple, declarative interface
.. image:: prettyprinterscreenshot.png
:alt:
.. image:: ../prettyprinterscreenshot.png
:alt:
.. image:: prettyprinterlightscreenshot.png
:alt:
.. image:: ../prettyprinterlightscreenshot.png
:alt:
Pretty print common Python values:
.. code:: python
>>> from datetime import datetime
>>> from prettyprinter import pprint
>>> pprint({'beautiful output': datetime.now()})
{
'beautiful output': datetime.datetime(
year=2017,
month=12,
day=12,
hour=0,
minute=43,
second=4,
microsecond=752094
)
}
As well as your own, without any manual string formatting:
.. code:: python
>>> class MyClass:
... def __init__(self, one, two):
... self.one = one
... self.two = two
>>> from prettyprinter import register_pretty, pretty_call
>>> @register_pretty(MyClass)
... def pretty_myclass(value, ctx):
... return pretty_call(ctx, MyClass, one=value.one, two=value.two)
>>> pprint(MyClass((1, 2, 3), {'a': 1, 'b': 2}))
MyClass(one=(1, 2, 3), two={'a': 1, 'b': 2})
>>> pprint({'beautiful output': datetime.now(), 'beautiful MyClass instance': MyClass((1, 2, 3), {'a': 1, 'b': 2})})
{
'beautiful MyClass instance': MyClass(
one=(1, 2, 3),
two={'a': 1, 'b': 2}
),
'beautiful output': datetime.datetime(
year=2017,
month=12,
day=12,
hour=0,
minute=44,
second=18,
microsecond=384219
)
}
Comes packaged with the following pretty printer definitions, which you can enable by calling prettyprinter.install_extras()
:
datetime
- (installed by default)enum
- (installed by default)pytz
- (installed by default)dataclasses
- any new class you create will be pretty printed automaticallyattrs
- pretty prints any new class you create with attrs
django
- pretty prints your Models and QuerySetsnumpy
- pretty prints numpy scalars with explicit typesrequests
- pretty prints Requests, Responses, Sessions, and more from the requests
library
- Free software: MIT license
- Documentation: Documentation_.
.. _Documentation: https://prettyprinter.readthedocs.io
=======
History
0.18.0 (2019-06-21)
Improve prettyprinting of builtin bound methods. <https://github.com/tommikaikkonen/prettyprinter/pull/57>
_ by @anntzer <https://github.com/anntzer>
_Fix test suite compatibility with hypothesis4. <https://github.com/tommikaikkonen/prettyprinter/pull/58>
_ by @anntzer <https://github.com/anntzer>
_Use $COLORFGBG to help decide whether to use a dark or light style <https://github.com/tommikaikkonen/prettyprinter/pull/62>
_ by @crowsonkb <https://github.com/crowsonkb>
_Truncate numpy arrays with ndim >= 2 so that the total printed does not exceed max_seq_len <https://github.com/tommikaikkonen/prettyprinter/pull/63>
_ by @crowsonkb <https://github.com/crowsonkb>
_- Fixed ipython_repr_pretty extra raising an exception when printing Mock instances (GH #61)
- Added support for pretty printing types.SimpleNamespace (GH #60)
- Fixed dictionary pretty printing indentation when the value had a comment on the line above (GH #59)
0.17.0 (2019-03-14)
Add prettyprinter for numpy ndarrays. <https://github.com/tommikaikkonen/prettyprinter/pull/47>
_ by @anntzer <https://github.com/anntzer>
_Add helper to apply default config. <https://github.com/tommikaikkonen/prettyprinter/pull/46>
_ by @anntzer <https://github.com/anntzer>
_- A number of docs and CI improvements:
#43 <https://github.com/tommikaikkonen/prettyprinter/pull/43>
, #44 <https://github.com/tommikaikkonen/prettyprinter/pull/44>
, #45 <https://github.com/tommikaikkonen/prettyprinter/pull/45>
_ .Thanks @anntzer <https://github.com/anntzer>
_ Add support for functools.partialmethod. <https://github.com/tommikaikkonen/prettyprinter/pull/42>
_ by @anntzer <https://github.com/anntzer>
_Fix typo in changelog. <https://github.com/tommikaikkonen/prettyprinter/pull/40>
_ Thanks @Vlad-Shcherbina <https://github.com/Vlad-Shcherbina>
_
0.16.0 (2019-02-27)
Adds a new extra for numpy. <https://github.com/tommikaikkonen/prettyprinter/pull/39>
_ The extra currently registers pretty printers for numpy scalar types. Enable it with import prettyprinter; prettyprinter.install_extras(['numpy'])
. Thanks @anntzer <https://github.com/anntzer>
_C-API named tuples are now automatically prettyprinted. <https://github.com/tommikaikkonen/prettyprinter/pull/38>
_ C-API named tuples are returned from expressions such as sys.flags
, time.strptime(...)
, and os.stat(...)
. The fieldname of each tuple element is annotated using a comment in the output.
0.15.0 (2019-02-25)
This release brings bugfixes, an enhancement to pathlib prettyprinting (thanks @anntzer <https://github.com/anntzer>
_ ) and a nice performance boost. There was an redundant subtree call in a tree normalization procedure that caused exponential runtime, worsening quickly if data was highly nested. That extra call is now removed.
Fix exponential runtime in highly nested data <https://github.com/tommikaikkonen/prettyprinter/pull/34>
_Fix infinite loop when rendering strings in highly nested data <https://github.com/tommikaikkonen/prettyprinter/pull/33>
_Only split Path prettyprints on "/", not on "-" or other nonword chars. <https://github.com/tommikaikkonen/prettyprinter/pull/29>
_ , thanks @anntzer <https://github.com/anntzer>
_Add vim swapfiles to gitignore <https://github.com/tommikaikkonen/prettyprinter/pull/30>
_ , thanks @anntzer <https://github.com/anntzer>
_Fix typo <https://github.com/tommikaikkonen/prettyprinter/pull/31>
_ , thanks @anntzer <https://github.com/anntzer>
_
0.14.0 (2018-07-25)
Most likely no breaking changes.
- Added definitions for
pathlib
standard library module thanks to GitHub user RazerM
- Fixed unexpected error output inside Jupyter notebooks thanks to GitHub user
jdanbrown
- Fixed missing commas in
setup.py
requirements list
0.13.2 (2018-05-29)
No breaking changes.
- Fixed the dataclasses pretty printer that had regressed after changes to the dataclasses API. Fix was contributed by GitHub user
dangirsh
.
0.13.1 (2018-02-03)
No breaking changes.
- Fixed GH issue #17 where Django models showed an incorrect display name for fields with choices.
0.13.0 (2018-02-03)
No breaking changes.
- Added definitions for the
ast
standard library module thanks to GitHub user johnnoone
.
0.12.0 (2018-01-22)
No breaking changes.
- Added a definition for classes that look like they were built with
collections.namedtuple
- If a pretty printer raises an exception, it is caught and emitted as a warning, and the default repr implementation will be used instead.
- Added definitions for
collections.ChainMap
, collections.defaultdict
, collections.deque
, functools.partial
, and for exception objects. - Made pretty printers for primitive types (dict, list, set, etc.) render a subclass constructor around them
0.11.0 (2018-01-20)
No breaking changes.
- Added Python 3.5 support
- Added
pretty_call_alt
function that doesn't depend on dict
maintaining insertion order - Fixed bug in
set_default_config
where most configuration values were not updated - Added
get_default_config
0.10.1 (2018-01-10)
No breaking changes.
- Fixed regression with types.MappingProxyType not being properly registered.
0.10.0 (2018-01-09)
No breaking changes.
- Added support for deferred printer registration, where instead of a concrete type value, you can pass a qualified path to a type as a
str
to register_pretty
. For an example, see the deferred printer registration for uuid.UUID <https://github.com/tommikaikkonen/prettyprinter/blob/05187126889ade1c2bf0557a40800e5c44a32bab/prettyprinter/pretty_stdlib.py#L38-L40>
_
0.9.0 (2018-01-03)
No breaking changes.
- Added pretty printer definition for
types.MappingProxyType
thanks to GitHub user Cologler <https://github.com/Cologler/>
_ - Added support for
_repr_pretty_
in the extra ipython_repr_pretty
.
0.8.1 (2018-01-01)
- Fixed issue #7 where having a
str
value for IPython's highlighting_style
setting was not properly handled in prettyprinter
's IPython integration, and raised an exception when trying to print data.
0.8.0 (2017-12-31)
Breaking changes:
- by default,
dict
keys are printed in the default order (insertion order in CPython 3.6+). Previously they were sorted like in the pprint
standard library module. To let the user control this, an additional keyword argument sort_dict_keys
was added to cpprint
, pprint
, and pformat
. Pretty printer definitions can control dict
key sorting with the PrettyContext
instance passed to each pretty printer function.
Non-breaking changes:
- Improved performance of rendering colorized output by caching colors.
- Added
prettyprinter.pretty_repr
that is assignable to __repr__
dunder methods, so you don't need to write it separately from the pretty printer definition. - Deprecated use of
PrettyContext.set
in favor of less misleading PrettyContext.assoc
- Defined pretty printing for instances of
type
, i.e. classes. - Defined pretty printing for functions
0.7.0 (2017-12-23)
Breaking change: instances of lists, sets, frozensets, tuples and dicts will be truncated to 1000 elements by default when printing.
- Added pretty printing definitions for
dataclasses
- Improved performance of splitting strings to multiple lines by ~15%
- Added a maximum sequence length that applies to subclasses of lists, sets, frozensets, tuples and dicts. The default is 1000. There is a trailing comment that indicates the number of truncated elements. To remove truncation, you can set
max_seq_len
to None
using set_default_config
explained below. - Added ability to change the default global configuration using
set_default_config
. The functions accepts zero to many keyword arguments and replaces those values in the global configuration with the ones provided.
.. code:: python
from prettyprinter import set_default_config
set_default_config(
style='dark',
max_seq_len=1000,
width=79,
ribbon_width=71,
depth=None,
)
0.6.0 (2017-12-21)
No backwards incompatible changes.
- Added pretty printer definitions for the
requests
library. To use it, include 'requests'
in your install_extras
call: prettyprinter.install_extras(include=['requests'])
.
0.5.0 (2017-12-21)
No backwards incompatible changes.
- Added integration for the default Python shell
- Wrote docs to explain integration with the default Python shell
- Check
install_extras
arguments for unknown extras
0.4.0 (2017-12-14)
- Revised
comment
to accept both normal Python values and Docs, and reversed the argument order to be more Pythonic
0.3.0 (2017-12-12)
- Add
set_default_style
function, improve docs on working with a light background
0.2.0 (2017-12-12)
- Numerous API changes and improvements.
0.1.0 (2017-12-07)