"""Generic functions for extending IPython.

See http://cheeseshop.python.org/pypi/simplegeneric.

Here is an example from genutils.py::

    def print_lsstring(arg):
        "Prettier (non-repr-like) and more informative printer for LSString"
        print "LSString (.p, .n, .l, .s available). Value:"
        print arg
        
    print_lsstring = result_display.when_type(LSString)(print_lsstring)
"""

from IPython.core.error import TryNext
from IPython.external.simplegeneric import generic

@generic
def result_display(result):
    """Print the result of computation."""
    raise TryNext

@generic
def inspect_object(obj):
    """Called when you do obj?"""
    raise TryNext

@generic
def complete_object(obj, prev_completions):
    """Custom completer dispatching for python objects.

    Parameters
    ----------
    obj : object
        The object to complete.
    prev_completions : list
        List of attributes discovered so far.

    This should return the list of attributes in obj. If you only wish to
    add to the attributes already discovered normally, return 
    own_attrs + prev_completions.
    """
    raise TryNext