##// END OF EJS Templates
Moving extensions to either quarantine or deathrow....
Moving extensions to either quarantine or deathrow. When a module is moved to quarantine, it means that while we intend to keep it, it is currently broken or sufficiently untested that it can't be in the main IPython codebase. To be moved back into the main IPython codebase a module must: 1. Work fully. 2. Have a test suite. 3. Be a proper IPython extension and tie into the official APIs. 3. Have members of the IPython dev team who are willing to maintain it. When a module is moved to deathrow, it means that the code is either broken and not worth repairing, deprecated, replaced by newer functionality, or code that should be developed and maintained by a third party.

File last commit:

r2267:928c921b
r2267:928c921b
Show More
ipy_pretty.py
133 lines | 3.4 KiB | text/x-python | PythonLexer
Robert Kern
ENH: Add the ipy_pretty extension.
r1831 """ Use pretty.py for configurable pretty-printing.
Robert Kern
BUG: Refactor the extension a little bit in response to review. Added an activate() function. Exposed the registration functions. Exposed the example dtype_pprinter in code rather than docstring. Added some doctests (not running yet!).
r1865 Register pretty-printers for types using ipy_pretty.for_type() or
ipy_pretty.for_type_by_name(). For example, to use the example pretty-printer
for numpy dtype objects, add the following to your ipy_user_conf.py::
Robert Kern
ENH: Add the ipy_pretty extension.
r1831
Brian Granger
Renaming Extensions=>extensions in code and imports.
r2064 from IPython.extensions import ipy_pretty
Robert Kern
BUG: Refactor the extension a little bit in response to review. Added an activate() function. Exposed the registration functions. Exposed the example dtype_pprinter in code rather than docstring. Added some doctests (not running yet!).
r1865
ipy_pretty.activate()
Robert Kern
ENH: Add the ipy_pretty extension.
r1831
# If you want to have numpy always imported anyways:
import numpy
Robert Kern
BUG: Refactor the extension a little bit in response to review. Added an activate() function. Exposed the registration functions. Exposed the example dtype_pprinter in code rather than docstring. Added some doctests (not running yet!).
r1865 ipy_pretty.for_type(numpy.dtype, ipy_pretty.dtype_pprinter)
Robert Kern
ENH: Add the ipy_pretty extension.
r1831
# If you don't want to have numpy imported until it needs to be:
Robert Kern
BUG: Refactor the extension a little bit in response to review. Added an activate() function. Exposed the registration functions. Exposed the example dtype_pprinter in code rather than docstring. Added some doctests (not running yet!).
r1865 ipy_pretty.for_type_by_name('numpy', 'dtype', ipy_pretty.dtype_pprinter)
Robert Kern
ENH: Add the ipy_pretty extension.
r1831 """
Brian Granger
ipapi.py => core/ipapi.py and imports updated.
r2027 from IPython.core import ipapi
Brian Granger
Continuing a massive refactor of everything.
r2205 from IPython.core.error import TryNext
Brian Granger
genutils.py => utils/genutils.py and updated imports and tests.
r2023 from IPython.utils.genutils import Term
Robert Kern
ENH: Add the ipy_pretty extension.
r1831
Robert Kern
Incorporate suggestions from Ville.
r1842 from IPython.external import pretty
Robert Kern
ENH: Add the ipy_pretty extension.
r1831
Brian Granger
ipapi.py => core/ipapi.py and imports updated.
r2027 ip = ipapi.get()
Robert Kern
ENH: Add the ipy_pretty extension.
r1831
Robert Kern
BUG: Refactor the extension a little bit in response to review. Added an activate() function. Exposed the registration functions. Exposed the example dtype_pprinter in code rather than docstring. Added some doctests (not running yet!).
r1865
#### Implementation ############################################################
Robert Kern
ENH: Add the ipy_pretty extension.
r1831 def pretty_result_display(self, arg):
""" Uber-pretty-printing display hook.
Called for displaying the result to the user.
"""
Robert Kern
Incorporate suggestions from Ville.
r1842 if ip.options.pprint:
verbose = getattr(ip.options, 'pretty_verbose', False)
out = pretty.pretty(arg, verbose=verbose)
Robert Kern
ENH: Add the ipy_pretty extension.
r1831 if '\n' in out:
# So that multi-line strings line up with the left column of
# the screen, instead of having the output prompt mess up
# their first line.
Term.cout.write('\n')
print >>Term.cout, out
else:
Robert Kern
Incorporate suggestions from Ville.
r1842 raise TryNext
Robert Kern
BUG: Refactor the extension a little bit in response to review. Added an activate() function. Exposed the registration functions. Exposed the example dtype_pprinter in code rather than docstring. Added some doctests (not running yet!).
r1865
#### API #######################################################################
# Expose the for_type and for_type_by_name functions for easier use.
for_type = pretty.for_type
for_type_by_name = pretty.for_type_by_name
# FIXME: write deactivate(). We need a way to remove a hook.
def activate():
""" Activate this extension.
"""
ip.set_hook('result_display', pretty_result_display, priority=99)
#### Example pretty-printers ###################################################
def dtype_pprinter(obj, p, cycle):
""" A pretty-printer for numpy dtype objects.
"""
if cycle:
return p.text('dtype(...)')
if obj.fields is None:
p.text(repr(obj))
else:
p.begin_group(7, 'dtype([')
for i, field in enumerate(obj.descr):
if i > 0:
p.text(',')
p.breakable()
p.pretty(field)
p.end_group(7, '])')
#### Tests #####################################################################
def test_pretty():
"""
Brian Granger
Renaming Extensions=>extensions in code and imports.
r2064 In [1]: from IPython.extensions import ipy_pretty
Robert Kern
BUG: Refactor the extension a little bit in response to review. Added an activate() function. Exposed the registration functions. Exposed the example dtype_pprinter in code rather than docstring. Added some doctests (not running yet!).
r1865
In [2]: ipy_pretty.activate()
In [3]: class A(object):
...: def __repr__(self):
...: return 'A()'
...:
...:
In [4]: a = A()
In [5]: a
Out[5]: A()
In [6]: def a_pretty_printer(obj, p, cycle):
...: p.text('<A>')
...:
...:
In [7]: ipy_pretty.for_type(A, a_pretty_printer)
In [8]: a
Out[8]: <A>
In [9]: class B(object):
...: def __repr__(self):
...: return 'B()'
...:
...:
In [10]: B.__module__, B.__name__
Out[10]: ('__main__', 'B')
In [11]: def b_pretty_printer(obj, p, cycle):
....: p.text('<B>')
....:
....:
In [12]: ipy_pretty.for_type_by_name('__main__', 'B', b_pretty_printer)
In [13]: b = B()
In [14]: b
Out[14]: <B>
"""
assert False, "This should only be doctested, not run."
Robert Kern
ENH: Add the ipy_pretty extension.
r1831