payloadpage.py
96 lines
| 2.9 KiB
| text/x-python
|
PythonLexer
Brian Granger
|
r2830 | # encoding: utf-8 | ||
""" | ||||
A payload based version of page. | ||||
Authors: | ||||
* Brian Granger | ||||
* Fernando Perez | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
Matthias BUSSONNIER
|
r5390 | # Copyright (C) 2008-2011 The IPython Development Team | ||
Brian Granger
|
r2830 | # | ||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
Fernando Perez
|
r3011 | # Third-party | ||
try: | ||||
from docutils.core import publish_string | ||||
except ImportError: | ||||
# html paging won't be available, but we don't raise any errors. It's a | ||||
# purely optional feature. | ||||
pass | ||||
# Our own | ||||
Brian Granger
|
r2830 | from IPython.core.interactiveshell import InteractiveShell | ||
#----------------------------------------------------------------------------- | ||||
# Classes and functions | ||||
#----------------------------------------------------------------------------- | ||||
Fernando Perez
|
r3011 | def page(strng, start=0, screen_lines=0, pager_cmd=None, | ||
html=None, auto_html=False): | ||||
Brian Granger
|
r2830 | """Print a string, piping through a pager. | ||
This version ignores the screen_lines and pager_cmd arguments and uses | ||||
IPython's payload system instead. | ||||
Fernando Perez
|
r3011 | |||
Parameters | ||||
---------- | ||||
strng : str | ||||
Text to page. | ||||
start : int | ||||
Starting line at which to place the display. | ||||
html : str, optional | ||||
If given, an html string to send as well. | ||||
auto_html : bool, optional | ||||
If true, the input string is assumed to be valid reStructuredText and is | ||||
converted to HTML with docutils. Note that if docutils is not found, | ||||
this option is silently ignored. | ||||
Thomas Kluyver
|
r9244 | Notes | ||
----- | ||||
Fernando Perez
|
r3011 | |||
Only one of the ``html`` and ``auto_html`` options can be given, not | ||||
both. | ||||
Brian Granger
|
r2830 | """ | ||
# Some routines may auto-compute start offsets incorrectly and pass a | ||||
# negative value. Offset to 0 for robustness. | ||||
start = max(0, start) | ||||
shell = InteractiveShell.instance() | ||||
Fernando Perez
|
r3011 | |||
if auto_html: | ||||
try: | ||||
# These defaults ensure user configuration variables for docutils | ||||
# are not loaded, only our config is used here. | ||||
defaults = {'file_insertion_enabled': 0, | ||||
'raw_enabled': 0, | ||||
'_disable_config': 1} | ||||
html = publish_string(strng, writer_name='html', | ||||
settings_overrides=defaults) | ||||
except: | ||||
pass | ||||
Brian Granger
|
r2830 | payload = dict( | ||
MinRK
|
r9372 | source='IPython.kernel.zmq.page.page', | ||
Fernando Perez
|
r3011 | text=strng, | ||
html=html, | ||||
Brian Granger
|
r2830 | start_line_number=start | ||
Fernando Perez
|
r3011 | ) | ||
Brian Granger
|
r2830 | shell.payload_manager.write_payload(payload) | ||
Fernando Perez
|
r3011 | |||
Brian Granger
|
r2830 | def install_payload_page(): | ||
"""Install this version of page as IPython.core.page.page.""" | ||||
from IPython.core import page as corepage | ||||
corepage.page = page | ||||