##// END OF EJS Templates
Mostly final version of display data....
Mostly final version of display data. * New publish_display_data function. * backend_inline is using publish_display_data. * Documentation added.

File last commit:

r3277:aba5f629
r3277:aba5f629
Show More
displaypub.py
103 lines | 3.7 KiB | text/x-python | PythonLexer
Brian Granger
Initial version of DisplayPublisher is working....
r3276 # -*- coding: utf-8 -*-
Brian Granger
Mostly final version of display data....
r3277 """An interface for publishing rich data to frontends.
Brian Granger
Initial version of DisplayPublisher is working....
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
Mostly final version of display data....
r3277 """Publish data and metadata to all frontends.
Brian Granger
Initial version of DisplayPublisher is working....
r3276
Brian Granger
Mostly final version of display data....
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
)