You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.7 KiB

"""
An ipython extension that monkey-patches it to use pprintpp.
This solution was adapted from an answer to this Stack Overflow question:
https://stackoverflow.com/questions/35375099
asked by:
https://stackoverflow.com/users/71522/david-wolever
and answered by:
https://stackoverflow.com/users/1530134/kupiakos
"""
import IPython
from traitlets.config import Configurable
from traitlets import Int
from . import pformat
original_representation = IPython.lib.pretty.RepresentationPrinter
DEFAULT_INDENTATION = 2
def load_ipython_extension(ipython):
ipython.config.PPrintPP.indentation = DEFAULT_INDENTATION
IPython.lib.pretty.RepresentationPrinter = PPrintPPRepresentation
pprintpp = PPrintPP(parent=ipython, config=ipython.config)
ipython.configurables.append(pprintpp)
def unload_ipython_extension(ipython):
IPython.lib.pretty.RepresentationPrinter = original_representation
try:
pprintpp = [
configurable for configurable in ipython.configurables
if isinstance(configurable, PPrintPP)
][0]
except IndexError:
print('Could not unload {}'.format(__name__))
else:
ipython.configurables.remove(pprintpp)
class PPrintPPRepresentation(object):
"""
A pretty printer that uses pprintpp
"""
def __init__(self, stream, *args, **kwargs):
self.stream = stream
self.config = IPython.get_ipython().config
def pretty(self, obj):
indentation = self.config.PPrintPP.indentation
self.stream.write(pformat(obj, indent=indentation))
def flush(self):
pass
class PPrintPP(Configurable):
"""
PPrintPP configuration
"""
indentation = Int(config=True)