##// END OF EJS Templates
ENH: Extend the DisplayHook.compute_result_repr() and write_result_repr() methods to produce and consume the lists of extra formats. Use this capability in the ZMQ shell. Document the extension to the messaging format.
Robert Kern -
Show More
@@ -208,9 +208,19 b' class DisplayHook(Configurable):'
208 208 # But avoid extraneous empty lines.
209 209 result_repr = '\n' + result_repr
210 210
211 return result_repr
211 extra_formats = []
212 for f in self.extra_formatters:
213 try:
214 data = f(result)
215 except Exception:
216 # FIXME: log the exception.
217 continue
218 if data is not None:
219 extra_formats.append((f.id, f.format, data))
220
221 return result_repr, extra_formats
212 222
213 def write_result_repr(self, result_repr):
223 def write_result_repr(self, result_repr, extra_formats):
214 224 # We want to print because we want to always make sure we have a
215 225 # newline, even if all the prompt separators are ''. This is the
216 226 # standard IPython behavior.
@@ -265,8 +275,8 b' class DisplayHook(Configurable):'
265 275 if result is not None and not self.quiet():
266 276 self.start_displayhook()
267 277 self.write_output_prompt()
268 result_repr = self.compute_result_repr(result)
269 self.write_result_repr(result_repr)
278 result_repr, extra_formats = self.compute_result_repr(result)
279 self.write_result_repr(result_repr, extra_formats)
270 280 self.update_user_ns(result)
271 281 self.log_output(result)
272 282 self.finish_displayhook()
@@ -65,8 +65,9 b' class ZMQDisplayHook(DisplayHook):'
65 65 if self.do_full_cache:
66 66 self.msg['content']['execution_count'] = self.prompt_count
67 67
68 def write_result_repr(self, result_repr):
68 def write_result_repr(self, result_repr, extra_formats):
69 69 self.msg['content']['data'] = result_repr
70 self.msg['content']['extra_formats'] = extra_formats
70 71
71 72 def finish_displayhook(self):
72 73 """Finish up all displayhook activities."""
@@ -725,16 +725,35 b' case, the kernel instantiates as ``sys.displayhook`` an object which has'
725 725 similar behavior, but which instead of printing to stdout, broadcasts these
726 726 values as ``pyout`` messages for clients to display appropriately.
727 727
728 IPython's displayhook can handle multiple simultaneous formats depending on its
729 configuration. The default pretty-printed repr text is always given with the
730 ``data`` entry in this message. Any other formats are provided in the
731 ``extra_formats`` list. Frontends are free to display any or all of these
732 according to its capabilities. ``extra_formats`` list contains 3-tuples of an ID
733 string, a type string, and the data. The ID is unique to the formatter
734 implementation that created the data. Frontends will typically ignore the ID
735 unless if it has requested a particular formatter. The type string tells the
736 frontend how to interpret the data. It is often, but not always a MIME type.
737 Frontends should ignore types that it does not understand. The data itself is
738 any JSON object and depends on the format. It is often, but not always a string.
739
728 740 Message type: ``pyout``::
729 741
730 742 content = {
731 # The data is typically the repr() of the object.
732 'data' : str,
743 # The data is typically the repr() of the object. It should be displayed
744 # as monospaced text.
745 'data' : str,
733 746
734 # The counter for this execution is also provided so that clients can
735 # display it, since IPython automatically creates variables called _N (for
736 # prompt N).
737 'execution_count' : int,
747 # The counter for this execution is also provided so that clients can
748 # display it, since IPython automatically creates variables called _N
749 # (for prompt N).
750 'execution_count' : int,
751
752 # Any extra formats.
753 # The tuples are of the form (ID, type, data).
754 'extra_formats' : [
755 [str, str, object]
756 ]
738 757 }
739 758
740 759 Python errors
General Comments 0
You need to be logged in to leave comments. Login now