##// END OF EJS Templates
Adding transient and update, change to dict for outputs
Henry Fredrick Schreiner -
Show More
@@ -115,10 +115,11 b' class CapturingDisplayPublisher(DisplayPublisher):'
115 outputs = List()
115 outputs = List()
116
116
117 def publish(self, data, metadata=None, source=None, *, transient=None, update=False):
117 def publish(self, data, metadata=None, source=None, *, transient=None, update=False):
118 self.outputs.append((data, metadata))
118 self.outputs.append({'data':data, 'metadata':metadata,
119 'transient':transient, 'update':update})
119
120
120 def clear_output(self, wait=False):
121 def clear_output(self, wait=False):
121 super(CapturingDisplayPublisher, self).clear_output(wait)
122 super(CapturingDisplayPublisher, self).clear_output(wait)
122
123
123 # empty the list, *do not* reassign a new list
124 # empty the list, *do not* reassign a new list
124 del self.outputs[:]
125 self.outputs.clear()
@@ -14,14 +14,17 b' from io import StringIO'
14
14
15
15
16 class RichOutput(object):
16 class RichOutput(object):
17 def __init__(self, data=None, metadata=None):
17 def __init__(self, data=None, metadata=None, transient=None, update=False):
18 self.data = data or {}
18 self.data = data or {}
19 self.metadata = metadata or {}
19 self.metadata = metadata or {}
20
20 self.transient = transient or {}
21 self.update = update
22
21 def display(self):
23 def display(self):
22 from IPython.display import publish_display_data
24 from IPython.display import publish_display_data
23 publish_display_data(data=self.data, metadata=self.metadata)
25 publish_display_data(data=self.data, metadata=self.metadata,
24
26 transient=self.transient, update=self.update)
27
25 def _repr_mime_(self, mime):
28 def _repr_mime_(self, mime):
26 if mime not in self.data:
29 if mime not in self.data:
27 return
30 return
@@ -36,22 +39,22 b' class RichOutput(object):'
36
39
37 def _repr_html_(self):
40 def _repr_html_(self):
38 return self._repr_mime_("text/html")
41 return self._repr_mime_("text/html")
39
42
40 def _repr_latex_(self):
43 def _repr_latex_(self):
41 return self._repr_mime_("text/latex")
44 return self._repr_mime_("text/latex")
42
45
43 def _repr_json_(self):
46 def _repr_json_(self):
44 return self._repr_mime_("application/json")
47 return self._repr_mime_("application/json")
45
48
46 def _repr_javascript_(self):
49 def _repr_javascript_(self):
47 return self._repr_mime_("application/javascript")
50 return self._repr_mime_("application/javascript")
48
51
49 def _repr_png_(self):
52 def _repr_png_(self):
50 return self._repr_mime_("image/png")
53 return self._repr_mime_("image/png")
51
54
52 def _repr_jpeg_(self):
55 def _repr_jpeg_(self):
53 return self._repr_mime_("image/jpeg")
56 return self._repr_mime_("image/jpeg")
54
57
55 def _repr_svg_(self):
58 def _repr_svg_(self):
56 return self._repr_mime_("image/svg+xml")
59 return self._repr_mime_("image/svg+xml")
57
60
@@ -68,35 +71,35 b' class CapturedIO(object):'
68 Additionally, there's a ``c.show()`` method which will print all of the
71 Additionally, there's a ``c.show()`` method which will print all of the
69 above in the same order, and can be invoked simply via ``c()``.
72 above in the same order, and can be invoked simply via ``c()``.
70 """
73 """
71
74
72 def __init__(self, stdout, stderr, outputs=None):
75 def __init__(self, stdout, stderr, outputs=None):
73 self._stdout = stdout
76 self._stdout = stdout
74 self._stderr = stderr
77 self._stderr = stderr
75 if outputs is None:
78 if outputs is None:
76 outputs = []
79 outputs = []
77 self._outputs = outputs
80 self._outputs = outputs
78
81
79 def __str__(self):
82 def __str__(self):
80 return self.stdout
83 return self.stdout
81
84
82 @property
85 @property
83 def stdout(self):
86 def stdout(self):
84 "Captured standard output"
87 "Captured standard output"
85 if not self._stdout:
88 if not self._stdout:
86 return ''
89 return ''
87 return self._stdout.getvalue()
90 return self._stdout.getvalue()
88
91
89 @property
92 @property
90 def stderr(self):
93 def stderr(self):
91 "Captured standard error"
94 "Captured standard error"
92 if not self._stderr:
95 if not self._stderr:
93 return ''
96 return ''
94 return self._stderr.getvalue()
97 return self._stderr.getvalue()
95
98
96 @property
99 @property
97 def outputs(self):
100 def outputs(self):
98 """A list of the captured rich display outputs, if any.
101 """A list of the captured rich display outputs, if any.
99
102
100 If you have a CapturedIO object ``c``, these can be displayed in IPython
103 If you have a CapturedIO object ``c``, these can be displayed in IPython
101 using::
104 using::
102
105
@@ -104,17 +107,17 b' class CapturedIO(object):'
104 for o in c.outputs:
107 for o in c.outputs:
105 display(o)
108 display(o)
106 """
109 """
107 return [ RichOutput(d, md) for d, md in self._outputs ]
110 return [ RichOutput(**kargs) for kargs in self._outputs ]
108
111
109 def show(self):
112 def show(self):
110 """write my output to sys.stdout/err as appropriate"""
113 """write my output to sys.stdout/err as appropriate"""
111 sys.stdout.write(self.stdout)
114 sys.stdout.write(self.stdout)
112 sys.stderr.write(self.stderr)
115 sys.stderr.write(self.stderr)
113 sys.stdout.flush()
116 sys.stdout.flush()
114 sys.stderr.flush()
117 sys.stderr.flush()
115 for data, metadata in self._outputs:
118 for kargs in self._outputs:
116 RichOutput(data, metadata).display()
119 RichOutput(**kargs).display()
117
120
118 __call__ = show
121 __call__ = show
119
122
120
123
@@ -123,27 +126,27 b' class capture_output(object):'
123 stdout = True
126 stdout = True
124 stderr = True
127 stderr = True
125 display = True
128 display = True
126
129
127 def __init__(self, stdout=True, stderr=True, display=True):
130 def __init__(self, stdout=True, stderr=True, display=True):
128 self.stdout = stdout
131 self.stdout = stdout
129 self.stderr = stderr
132 self.stderr = stderr
130 self.display = display
133 self.display = display
131 self.shell = None
134 self.shell = None
132
135
133 def __enter__(self):
136 def __enter__(self):
134 from IPython.core.getipython import get_ipython
137 from IPython.core.getipython import get_ipython
135 from IPython.core.displaypub import CapturingDisplayPublisher
138 from IPython.core.displaypub import CapturingDisplayPublisher
136 from IPython.core.displayhook import CapturingDisplayHook
139 from IPython.core.displayhook import CapturingDisplayHook
137
140
138 self.sys_stdout = sys.stdout
141 self.sys_stdout = sys.stdout
139 self.sys_stderr = sys.stderr
142 self.sys_stderr = sys.stderr
140
143
141 if self.display:
144 if self.display:
142 self.shell = get_ipython()
145 self.shell = get_ipython()
143 if self.shell is None:
146 if self.shell is None:
144 self.save_display_pub = None
147 self.save_display_pub = None
145 self.display = False
148 self.display = False
146
149
147 stdout = stderr = outputs = None
150 stdout = stderr = outputs = None
148 if self.stdout:
151 if self.stdout:
149 stdout = sys.stdout = StringIO()
152 stdout = sys.stdout = StringIO()
@@ -156,9 +159,9 b' class capture_output(object):'
156 self.save_display_hook = sys.displayhook
159 self.save_display_hook = sys.displayhook
157 sys.displayhook = CapturingDisplayHook(shell=self.shell,
160 sys.displayhook = CapturingDisplayHook(shell=self.shell,
158 outputs=outputs)
161 outputs=outputs)
159
162
160 return CapturedIO(stdout, stderr, outputs)
163 return CapturedIO(stdout, stderr, outputs)
161
164
162 def __exit__(self, exc_type, exc_value, traceback):
165 def __exit__(self, exc_type, exc_value, traceback):
163 sys.stdout = self.sys_stdout
166 sys.stdout = self.sys_stdout
164 sys.stderr = self.sys_stderr
167 sys.stderr = self.sys_stderr
General Comments 0
You need to be logged in to leave comments. Login now