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
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)
|