##// 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
# -*- coding: utf-8 -*-
"""An interface for publishing rich data to frontends.
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):
"""Publish data and metadata to all frontends.
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
)