# -*- 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 )