##// END OF EJS Templates
Inject display into builtins...
Matthias Bussonnier -
Show More
@@ -145,6 +145,9 b' def display(*objs, include=None, exclude=None, metadata=None, transient=None, di'
145 145 By default all representations will be computed and sent to the frontends.
146 146 Frontends can decide which representation is used and how.
147 147
148 In terminal IPython this will be similar to using `print`, for use in richer
149 frontends see Jupyter notebook examples with rich display logic.
150
148 151 Parameters
149 152 ----------
150 153 objs : tuple of objects
@@ -173,19 +176,109 b' def display(*objs, include=None, exclude=None, metadata=None, transient=None, di'
173 176 If given as True, generate a new display_id
174 177 kwargs: additional keyword-args, optional
175 178 Additional keyword-arguments are passed through to the display publisher.
176
179
177 180 Returns
178 181 -------
179
182
180 183 handle: DisplayHandle
181 184 Returns a handle on updatable displays, if display_id is given.
182 185 Returns None if no display_id is given (default).
186
187 Examples
188 --------
189
190 >>> class Json(object):
191 ... def __init__(self, json):
192 ... self.json = json
193 ... def _repr_pretty_(self, pp, cycle):
194 ... import json
195 ... pp.text(json.dumps(self.json, indent=2))
196 ... def __repr__(self):
197 ... return str(self.json)
198 ...
199
200 >>> d = Json({1:2, 3: {4:5}})
201
202 >>> print(d)
203 {1: 2, 3: {4: 5}}
204
205 >>> display(d)
206 {
207 "1": 2,
208 "3": {
209 "4": 5
210 }
211 }
212
213 >>> def int_formatter(integer, pp, cycle):
214 ... pp.text('I'*integer)
215
216 >>> plain = get_ipython().display_formatter.formatters['text/plain']
217 >>> plain.for_type(int, int_formatter)
218 <function _repr_pprint at 0x...>
219 >>> display(7-5)
220 II
221
222 >>> del plain.type_printers[int]
223 >>> display(7-5)
224 2
225
226 See Also
227 --------
228
229 `update_display`
230
231 Notes
232 -----
233
234 In Python, objects can declare their textual representation using the
235 `__repr__` method. IPython expands on this idea and allows objects to declare
236 other, rich representations including:
237
238 - HTML
239 - JSON
240 - PNG
241 - JPEG
242 - SVG
243 - LaTeX
244
245 A single object can declare some or all of these representations; all are
246 handled by IPython's display system.
247
248 The main idea of the first approach is that you have to implement special
249 display methods when you define your class, one for each representation you
250 want to use. Here is a list of the names of the special methods and the
251 values they must return:
252
253 - `_repr_html_`: return raw HTML as a string
254 - `_repr_json_`: return a JSONable dict
255 - `_repr_jpeg_`: return raw JPEG data
256 - `_repr_png_`: return raw PNG data
257 - `_repr_svg_`: return raw SVG data as a string
258 - `_repr_latex_`: return LaTeX commands in a string surrounded by "$".
259 - `_repr_mimebundle_`: return a full mimebundle containing the mapping
260 from all mimetypes to data
261
262 When you are directly writing your own classes, you can adapt them for
263 display in IPython by following the above approach. But in practice, you
264 often need to work with existing classes that you can't easily modify.
265
266 You can refer to the documentation on IPython display formatters in order to
267 register custom formatters for already existing types.
268
269 Since IPython 5.4 and 6.1 display is automatically made available to the
270 user without import. If you are using display in a document that might be
271 used in a pure python context or with older version of IPython, use the
272 following import at the top of your file::
273
274 from IPython.display import display
275
183 276 """
184 277 raw = kwargs.pop('raw', False)
185 278 if transient is None:
186 279 transient = {}
187 280 if display_id:
188 if display_id == True:
281 if display_id is True:
189 282 display_id = _new_id()
190 283 transient['display_id'] = display_id
191 284 if kwargs.get('update') and 'display_id' not in transient:
@@ -56,6 +56,7 b' from IPython.core.payload import PayloadManager'
56 56 from IPython.core.prefilter import PrefilterManager
57 57 from IPython.core.profiledir import ProfileDir
58 58 from IPython.core.usage import default_banner
59 from IPython.display import display
59 60 from IPython.testing.skipdoctest import skip_doctest
60 61 from IPython.utils import PyColorize
61 62 from IPython.utils import io
@@ -618,6 +619,7 b' class InteractiveShell(SingletonConfigurable):'
618 619 # removing on exit or representing the existence of more than one
619 620 # IPython at a time.
620 621 builtin_mod.__dict__['__IPYTHON__'] = True
622 builtin_mod.__dict__['display'] = display
621 623
622 624 self.builtin_trap = BuiltinTrap(shell=self)
623 625
General Comments 0
You need to be logged in to leave comments. Login now