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 |
|
|
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