displaypub.py
103 lines
| 3.7 KiB
| text/x-python
|
PythonLexer
Brian Granger
|
r3276 | # -*- coding: utf-8 -*- | ||
Brian Granger
|
r3277 | """An interface for publishing rich data to frontends. | ||
Brian Granger
|
r3276 | |||
Authors: | ||||
* Brian Granger | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
# Copyright (C) 2008-2010 The IPython Development Team | ||||
# | ||||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
from IPython.config.configurable import Configurable | ||||
#----------------------------------------------------------------------------- | ||||
# Main payload class | ||||
#----------------------------------------------------------------------------- | ||||
class DisplayPublisher(Configurable): | ||||
def _validate_data(self, source, data, metadata=None): | ||||
if not isinstance(source, str): | ||||
raise TypeError('source must be a str, got: %r' % source) | ||||
if not isinstance(data, dict): | ||||
raise TypeError('data must be a dict, got: %r' % data) | ||||
if metadata is not None: | ||||
if not isinstance(metadata, dict): | ||||
raise TypeError('metadata must be a dict, got: %r' % data) | ||||
def publish(self, source, data, metadata=None): | ||||
Brian Granger
|
r3277 | """Publish data and metadata to all frontends. | ||
Brian Granger
|
r3276 | |||
Brian Granger
|
r3277 | See the ``display_data`` message in the messaging documentation for | ||
more details about this message type. | ||||
Parameters | ||||
---------- | ||||
source : str | ||||
A string that give the function or method that created the data, | ||||
such as 'IPython.core.page'. | ||||
data : dict | ||||
A dictionary having keys that are valid MIME types (like | ||||
'text/plain' or 'image/svg+xml') and values that are the data for | ||||
that MIME type. The data itself must be a JSON'able data | ||||
structure. Minimally all data should have the 'text/plain' data, | ||||
which can be displayed by all frontends. If more than the plain | ||||
text is given, it is up to the frontend to decide which | ||||
representation to use. | ||||
metadata : dict | ||||
A dictionary for metadata related to the data. This can contain | ||||
arbitrary key, value pairs that frontends can use to interpret | ||||
the data. | ||||
""" | ||||
from IPython.utils import io | ||||
# The default is to simply write the plain text data using io.Term. | ||||
if data.has_key('text/plain'): | ||||
print >>io.Term.cout, data['text/plain'] | ||||
def publish_display_data(source, text, svg=None, png=None, | ||||
html=None, metadata=None): | ||||
"""Publish a display data to the frontends. | ||||
This function is a high level helper for the publishing of display data. | ||||
It handle a number of common MIME types in a clean API. For other MIME | ||||
types, use ``get_ipython().display_pub.publish`` directly. | ||||
Parameters | ||||
---------- | ||||
text : str/unicode | ||||
The string representation of the plot. | ||||
svn : str/unicode | ||||
The raw svg data of the plot. | ||||
png : ??? | ||||
The raw png data of the plot. | ||||
metadata : dict, optional [default empty] | ||||
Allows for specification of additional information about the plot data. | ||||
""" | ||||
from IPython.core.interactiveshell import InteractiveShell | ||||
data_dict = {} | ||||
data_dict['text/plain'] = text | ||||
if svg is not None: | ||||
data_dict['image/svg+xml'] = svg | ||||
if png is not None: | ||||
data_dict['image/png'] = png | ||||
if html is not None: | ||||
data_dict['text/html'] = html | ||||
InteractiveShell.instance().display_pub.publish( | ||||
source, | ||||
data_dict, | ||||
metadata | ||||
) | ||||