##// END OF EJS Templates
Fix static analysis errors in IPython.core.formatters...
Thomas Kluyver -
Show More
@@ -1,911 +1,912 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Display formatters.
2 """Display formatters.
3
3
4 Inheritance diagram:
4 Inheritance diagram:
5
5
6 .. inheritance-diagram:: IPython.core.formatters
6 .. inheritance-diagram:: IPython.core.formatters
7 :parts: 3
7 :parts: 3
8 """
8 """
9
9
10 # Copyright (c) IPython Development Team.
10 # Copyright (c) IPython Development Team.
11 # Distributed under the terms of the Modified BSD License.
11 # Distributed under the terms of the Modified BSD License.
12
12
13 import abc
13 import abc
14 import inspect
14 import inspect
15 import sys
15 import sys
16 import traceback
16 import types
17 import types
17 import warnings
18 import warnings
18
19
19 from IPython.external.decorator import decorator
20 from IPython.external.decorator import decorator
20
21
21 from IPython.config.configurable import Configurable
22 from IPython.config.configurable import Configurable
22 from IPython.core.getipython import get_ipython
23 from IPython.core.getipython import get_ipython
23 from IPython.lib import pretty
24 from IPython.lib import pretty
24 from IPython.utils.traitlets import (
25 from IPython.utils.traitlets import (
25 Bool, Dict, Integer, Unicode, CUnicode, ObjectName, List,
26 Bool, Dict, Integer, Unicode, CUnicode, ObjectName, List,
26 )
27 )
27 from IPython.utils.py3compat import (
28 from IPython.utils.py3compat import (
28 unicode_to_str, with_metaclass, PY3, string_types, unicode_type,
29 unicode_to_str, with_metaclass, PY3, string_types, unicode_type,
29 )
30 )
30
31
31 if PY3:
32 if PY3:
32 from io import StringIO
33 from io import StringIO
33 else:
34 else:
34 from StringIO import StringIO
35 from StringIO import StringIO
35
36
36
37
37 #-----------------------------------------------------------------------------
38 #-----------------------------------------------------------------------------
38 # The main DisplayFormatter class
39 # The main DisplayFormatter class
39 #-----------------------------------------------------------------------------
40 #-----------------------------------------------------------------------------
40
41
41
42
42 def _valid_formatter(f):
43 def _valid_formatter(f):
43 """Return whether an object is a valid formatter
44 """Return whether an object is a valid formatter
44
45
45 Cases checked:
46 Cases checked:
46
47
47 - bound methods OK
48 - bound methods OK
48 - unbound methods NO
49 - unbound methods NO
49 - callable with zero args OK
50 - callable with zero args OK
50 """
51 """
51 if f is None:
52 if f is None:
52 return False
53 return False
53 elif isinstance(f, type(str.find)):
54 elif isinstance(f, type(str.find)):
54 # unbound methods on compiled classes have type method_descriptor
55 # unbound methods on compiled classes have type method_descriptor
55 return False
56 return False
56 elif isinstance(f, types.BuiltinFunctionType):
57 elif isinstance(f, types.BuiltinFunctionType):
57 # bound methods on compiled classes have type builtin_function
58 # bound methods on compiled classes have type builtin_function
58 return True
59 return True
59 elif callable(f):
60 elif callable(f):
60 # anything that works with zero args should be okay
61 # anything that works with zero args should be okay
61 try:
62 try:
62 inspect.getcallargs(f)
63 inspect.getcallargs(f)
63 except Exception:
64 except Exception:
64 return False
65 return False
65 else:
66 else:
66 return True
67 return True
67 return False
68 return False
68
69
69 def _safe_get_formatter_method(obj, name):
70 def _safe_get_formatter_method(obj, name):
70 """Safely get a formatter method"""
71 """Safely get a formatter method"""
71 method = pretty._safe_getattr(obj, name, None)
72 method = pretty._safe_getattr(obj, name, None)
72 # formatter methods must be bound
73 # formatter methods must be bound
73 if _valid_formatter(method):
74 if _valid_formatter(method):
74 return method
75 return method
75
76
76
77
77 class DisplayFormatter(Configurable):
78 class DisplayFormatter(Configurable):
78
79
79 # When set to true only the default plain text formatter will be used.
80 # When set to true only the default plain text formatter will be used.
80 plain_text_only = Bool(False, config=True)
81 plain_text_only = Bool(False, config=True)
81 def _plain_text_only_changed(self, name, old, new):
82 def _plain_text_only_changed(self, name, old, new):
82 warnings.warn("""DisplayFormatter.plain_text_only is deprecated.
83 warnings.warn("""DisplayFormatter.plain_text_only is deprecated.
83
84
84 Use DisplayFormatter.active_types = ['text/plain']
85 Use DisplayFormatter.active_types = ['text/plain']
85 for the same effect.
86 for the same effect.
86 """, DeprecationWarning)
87 """, DeprecationWarning)
87 if new:
88 if new:
88 self.active_types = ['text/plain']
89 self.active_types = ['text/plain']
89 else:
90 else:
90 self.active_types = self.format_types
91 self.active_types = self.format_types
91
92
92 active_types = List(Unicode, config=True,
93 active_types = List(Unicode, config=True,
93 help="""List of currently active mime-types to display.
94 help="""List of currently active mime-types to display.
94 You can use this to set a white-list for formats to display.
95 You can use this to set a white-list for formats to display.
95
96
96 Most users will not need to change this value.
97 Most users will not need to change this value.
97 """)
98 """)
98 def _active_types_default(self):
99 def _active_types_default(self):
99 return self.format_types
100 return self.format_types
100
101
101 def _active_types_changed(self, name, old, new):
102 def _active_types_changed(self, name, old, new):
102 for key, formatter in self.formatters.items():
103 for key, formatter in self.formatters.items():
103 if key in new:
104 if key in new:
104 formatter.enabled = True
105 formatter.enabled = True
105 else:
106 else:
106 formatter.enabled = False
107 formatter.enabled = False
107
108
108 # A dict of formatter whose keys are format types (MIME types) and whose
109 # A dict of formatter whose keys are format types (MIME types) and whose
109 # values are subclasses of BaseFormatter.
110 # values are subclasses of BaseFormatter.
110 formatters = Dict()
111 formatters = Dict()
111 def _formatters_default(self):
112 def _formatters_default(self):
112 """Activate the default formatters."""
113 """Activate the default formatters."""
113 formatter_classes = [
114 formatter_classes = [
114 PlainTextFormatter,
115 PlainTextFormatter,
115 HTMLFormatter,
116 HTMLFormatter,
116 MarkdownFormatter,
117 MarkdownFormatter,
117 SVGFormatter,
118 SVGFormatter,
118 PNGFormatter,
119 PNGFormatter,
119 PDFFormatter,
120 PDFFormatter,
120 JPEGFormatter,
121 JPEGFormatter,
121 LatexFormatter,
122 LatexFormatter,
122 JSONFormatter,
123 JSONFormatter,
123 JavascriptFormatter
124 JavascriptFormatter
124 ]
125 ]
125 d = {}
126 d = {}
126 for cls in formatter_classes:
127 for cls in formatter_classes:
127 f = cls(parent=self)
128 f = cls(parent=self)
128 d[f.format_type] = f
129 d[f.format_type] = f
129 return d
130 return d
130
131
131 def format(self, obj, include=None, exclude=None):
132 def format(self, obj, include=None, exclude=None):
132 """Return a format data dict for an object.
133 """Return a format data dict for an object.
133
134
134 By default all format types will be computed.
135 By default all format types will be computed.
135
136
136 The following MIME types are currently implemented:
137 The following MIME types are currently implemented:
137
138
138 * text/plain
139 * text/plain
139 * text/html
140 * text/html
140 * text/markdown
141 * text/markdown
141 * text/latex
142 * text/latex
142 * application/json
143 * application/json
143 * application/javascript
144 * application/javascript
144 * application/pdf
145 * application/pdf
145 * image/png
146 * image/png
146 * image/jpeg
147 * image/jpeg
147 * image/svg+xml
148 * image/svg+xml
148
149
149 Parameters
150 Parameters
150 ----------
151 ----------
151 obj : object
152 obj : object
152 The Python object whose format data will be computed.
153 The Python object whose format data will be computed.
153 include : list or tuple, optional
154 include : list or tuple, optional
154 A list of format type strings (MIME types) to include in the
155 A list of format type strings (MIME types) to include in the
155 format data dict. If this is set *only* the format types included
156 format data dict. If this is set *only* the format types included
156 in this list will be computed.
157 in this list will be computed.
157 exclude : list or tuple, optional
158 exclude : list or tuple, optional
158 A list of format type string (MIME types) to exclude in the format
159 A list of format type string (MIME types) to exclude in the format
159 data dict. If this is set all format types will be computed,
160 data dict. If this is set all format types will be computed,
160 except for those included in this argument.
161 except for those included in this argument.
161
162
162 Returns
163 Returns
163 -------
164 -------
164 (format_dict, metadata_dict) : tuple of two dicts
165 (format_dict, metadata_dict) : tuple of two dicts
165
166
166 format_dict is a dictionary of key/value pairs, one of each format that was
167 format_dict is a dictionary of key/value pairs, one of each format that was
167 generated for the object. The keys are the format types, which
168 generated for the object. The keys are the format types, which
168 will usually be MIME type strings and the values and JSON'able
169 will usually be MIME type strings and the values and JSON'able
169 data structure containing the raw data for the representation in
170 data structure containing the raw data for the representation in
170 that format.
171 that format.
171
172
172 metadata_dict is a dictionary of metadata about each mime-type output.
173 metadata_dict is a dictionary of metadata about each mime-type output.
173 Its keys will be a strict subset of the keys in format_dict.
174 Its keys will be a strict subset of the keys in format_dict.
174 """
175 """
175 format_dict = {}
176 format_dict = {}
176 md_dict = {}
177 md_dict = {}
177
178
178 for format_type, formatter in self.formatters.items():
179 for format_type, formatter in self.formatters.items():
179 if include and format_type not in include:
180 if include and format_type not in include:
180 continue
181 continue
181 if exclude and format_type in exclude:
182 if exclude and format_type in exclude:
182 continue
183 continue
183
184
184 md = None
185 md = None
185 try:
186 try:
186 data = formatter(obj)
187 data = formatter(obj)
187 except:
188 except:
188 # FIXME: log the exception
189 # FIXME: log the exception
189 raise
190 raise
190
191
191 # formatters can return raw data or (data, metadata)
192 # formatters can return raw data or (data, metadata)
192 if isinstance(data, tuple) and len(data) == 2:
193 if isinstance(data, tuple) and len(data) == 2:
193 data, md = data
194 data, md = data
194
195
195 if data is not None:
196 if data is not None:
196 format_dict[format_type] = data
197 format_dict[format_type] = data
197 if md is not None:
198 if md is not None:
198 md_dict[format_type] = md
199 md_dict[format_type] = md
199
200
200 return format_dict, md_dict
201 return format_dict, md_dict
201
202
202 @property
203 @property
203 def format_types(self):
204 def format_types(self):
204 """Return the format types (MIME types) of the active formatters."""
205 """Return the format types (MIME types) of the active formatters."""
205 return list(self.formatters.keys())
206 return list(self.formatters.keys())
206
207
207
208
208 #-----------------------------------------------------------------------------
209 #-----------------------------------------------------------------------------
209 # Formatters for specific format types (text, html, svg, etc.)
210 # Formatters for specific format types (text, html, svg, etc.)
210 #-----------------------------------------------------------------------------
211 #-----------------------------------------------------------------------------
211
212
212
213
213 def _safe_repr(obj):
214 def _safe_repr(obj):
214 """Try to return a repr of an object
215 """Try to return a repr of an object
215
216
216 always returns a string, at least.
217 always returns a string, at least.
217 """
218 """
218 try:
219 try:
219 return repr(obj)
220 return repr(obj)
220 except Exception as e:
221 except Exception as e:
221 return "un-repr-able object (%r)" % e
222 return "un-repr-able object (%r)" % e
222
223
223
224
224 class FormatterWarning(UserWarning):
225 class FormatterWarning(UserWarning):
225 """Warning class for errors in formatters"""
226 """Warning class for errors in formatters"""
226
227
227 @decorator
228 @decorator
228 def warn_format_error(method, self, *args, **kwargs):
229 def warn_format_error(method, self, *args, **kwargs):
229 """decorator for warning on failed format call"""
230 """decorator for warning on failed format call"""
230 try:
231 try:
231 r = method(self, *args, **kwargs)
232 r = method(self, *args, **kwargs)
232 except NotImplementedError as e:
233 except NotImplementedError:
233 # don't warn on NotImplementedErrors
234 # don't warn on NotImplementedErrors
234 return None
235 return None
235 except Exception:
236 except Exception:
236 exc_info = sys.exc_info()
237 exc_info = sys.exc_info()
237 ip = get_ipython()
238 ip = get_ipython()
238 if ip is not None:
239 if ip is not None:
239 ip.showtraceback(exc_info)
240 ip.showtraceback(exc_info)
240 else:
241 else:
241 traceback.print_exception(*exc_info)
242 traceback.print_exception(*exc_info)
242 return None
243 return None
243 if r is None or isinstance(r, self._return_type) or \
244 if r is None or isinstance(r, self._return_type) or \
244 (isinstance(r, tuple) and r and isinstance(r[0], self._return_type)):
245 (isinstance(r, tuple) and r and isinstance(r[0], self._return_type)):
245 return r
246 return r
246 else:
247 else:
247 warnings.warn(
248 warnings.warn(
248 "%s formatter returned invalid type %s (expected %s) for object: %s" % \
249 "%s formatter returned invalid type %s (expected %s) for object: %s" % \
249 (self.format_type, type(r), self._return_type, _safe_repr(args[0])),
250 (self.format_type, type(r), self._return_type, _safe_repr(args[0])),
250 FormatterWarning
251 FormatterWarning
251 )
252 )
252
253
253
254
254 class FormatterABC(with_metaclass(abc.ABCMeta, object)):
255 class FormatterABC(with_metaclass(abc.ABCMeta, object)):
255 """ Abstract base class for Formatters.
256 """ Abstract base class for Formatters.
256
257
257 A formatter is a callable class that is responsible for computing the
258 A formatter is a callable class that is responsible for computing the
258 raw format data for a particular format type (MIME type). For example,
259 raw format data for a particular format type (MIME type). For example,
259 an HTML formatter would have a format type of `text/html` and would return
260 an HTML formatter would have a format type of `text/html` and would return
260 the HTML representation of the object when called.
261 the HTML representation of the object when called.
261 """
262 """
262
263
263 # The format type of the data returned, usually a MIME type.
264 # The format type of the data returned, usually a MIME type.
264 format_type = 'text/plain'
265 format_type = 'text/plain'
265
266
266 # Is the formatter enabled...
267 # Is the formatter enabled...
267 enabled = True
268 enabled = True
268
269
269 @abc.abstractmethod
270 @abc.abstractmethod
270 @warn_format_error
271 @warn_format_error
271 def __call__(self, obj):
272 def __call__(self, obj):
272 """Return a JSON'able representation of the object.
273 """Return a JSON'able representation of the object.
273
274
274 If the object cannot be formatted by this formatter,
275 If the object cannot be formatted by this formatter,
275 warn and return None.
276 warn and return None.
276 """
277 """
277 return repr(obj)
278 return repr(obj)
278
279
279
280
280 def _mod_name_key(typ):
281 def _mod_name_key(typ):
281 """Return a (__module__, __name__) tuple for a type.
282 """Return a (__module__, __name__) tuple for a type.
282
283
283 Used as key in Formatter.deferred_printers.
284 Used as key in Formatter.deferred_printers.
284 """
285 """
285 module = getattr(typ, '__module__', None)
286 module = getattr(typ, '__module__', None)
286 name = getattr(typ, '__name__', None)
287 name = getattr(typ, '__name__', None)
287 return (module, name)
288 return (module, name)
288
289
289
290
290 def _get_type(obj):
291 def _get_type(obj):
291 """Return the type of an instance (old and new-style)"""
292 """Return the type of an instance (old and new-style)"""
292 return getattr(obj, '__class__', None) or type(obj)
293 return getattr(obj, '__class__', None) or type(obj)
293
294
294 _raise_key_error = object()
295 _raise_key_error = object()
295
296
296
297
297 class BaseFormatter(Configurable):
298 class BaseFormatter(Configurable):
298 """A base formatter class that is configurable.
299 """A base formatter class that is configurable.
299
300
300 This formatter should usually be used as the base class of all formatters.
301 This formatter should usually be used as the base class of all formatters.
301 It is a traited :class:`Configurable` class and includes an extensible
302 It is a traited :class:`Configurable` class and includes an extensible
302 API for users to determine how their objects are formatted. The following
303 API for users to determine how their objects are formatted. The following
303 logic is used to find a function to format an given object.
304 logic is used to find a function to format an given object.
304
305
305 1. The object is introspected to see if it has a method with the name
306 1. The object is introspected to see if it has a method with the name
306 :attr:`print_method`. If is does, that object is passed to that method
307 :attr:`print_method`. If is does, that object is passed to that method
307 for formatting.
308 for formatting.
308 2. If no print method is found, three internal dictionaries are consulted
309 2. If no print method is found, three internal dictionaries are consulted
309 to find print method: :attr:`singleton_printers`, :attr:`type_printers`
310 to find print method: :attr:`singleton_printers`, :attr:`type_printers`
310 and :attr:`deferred_printers`.
311 and :attr:`deferred_printers`.
311
312
312 Users should use these dictionaries to register functions that will be
313 Users should use these dictionaries to register functions that will be
313 used to compute the format data for their objects (if those objects don't
314 used to compute the format data for their objects (if those objects don't
314 have the special print methods). The easiest way of using these
315 have the special print methods). The easiest way of using these
315 dictionaries is through the :meth:`for_type` and :meth:`for_type_by_name`
316 dictionaries is through the :meth:`for_type` and :meth:`for_type_by_name`
316 methods.
317 methods.
317
318
318 If no function/callable is found to compute the format data, ``None`` is
319 If no function/callable is found to compute the format data, ``None`` is
319 returned and this format type is not used.
320 returned and this format type is not used.
320 """
321 """
321
322
322 format_type = Unicode('text/plain')
323 format_type = Unicode('text/plain')
323 _return_type = string_types
324 _return_type = string_types
324
325
325 enabled = Bool(True, config=True)
326 enabled = Bool(True, config=True)
326
327
327 print_method = ObjectName('__repr__')
328 print_method = ObjectName('__repr__')
328
329
329 # The singleton printers.
330 # The singleton printers.
330 # Maps the IDs of the builtin singleton objects to the format functions.
331 # Maps the IDs of the builtin singleton objects to the format functions.
331 singleton_printers = Dict(config=True)
332 singleton_printers = Dict(config=True)
332
333
333 # The type-specific printers.
334 # The type-specific printers.
334 # Map type objects to the format functions.
335 # Map type objects to the format functions.
335 type_printers = Dict(config=True)
336 type_printers = Dict(config=True)
336
337
337 # The deferred-import type-specific printers.
338 # The deferred-import type-specific printers.
338 # Map (modulename, classname) pairs to the format functions.
339 # Map (modulename, classname) pairs to the format functions.
339 deferred_printers = Dict(config=True)
340 deferred_printers = Dict(config=True)
340
341
341 @warn_format_error
342 @warn_format_error
342 def __call__(self, obj):
343 def __call__(self, obj):
343 """Compute the format for an object."""
344 """Compute the format for an object."""
344 if self.enabled:
345 if self.enabled:
345 # lookup registered printer
346 # lookup registered printer
346 try:
347 try:
347 printer = self.lookup(obj)
348 printer = self.lookup(obj)
348 except KeyError:
349 except KeyError:
349 pass
350 pass
350 else:
351 else:
351 return printer(obj)
352 return printer(obj)
352 # Finally look for special method names
353 # Finally look for special method names
353 method = _safe_get_formatter_method(obj, self.print_method)
354 method = _safe_get_formatter_method(obj, self.print_method)
354 if method is not None:
355 if method is not None:
355 return method()
356 return method()
356 return None
357 return None
357 else:
358 else:
358 return None
359 return None
359
360
360 def __contains__(self, typ):
361 def __contains__(self, typ):
361 """map in to lookup_by_type"""
362 """map in to lookup_by_type"""
362 try:
363 try:
363 self.lookup_by_type(typ)
364 self.lookup_by_type(typ)
364 except KeyError:
365 except KeyError:
365 return False
366 return False
366 else:
367 else:
367 return True
368 return True
368
369
369 def lookup(self, obj):
370 def lookup(self, obj):
370 """Look up the formatter for a given instance.
371 """Look up the formatter for a given instance.
371
372
372 Parameters
373 Parameters
373 ----------
374 ----------
374 obj : object instance
375 obj : object instance
375
376
376 Returns
377 Returns
377 -------
378 -------
378 f : callable
379 f : callable
379 The registered formatting callable for the type.
380 The registered formatting callable for the type.
380
381
381 Raises
382 Raises
382 ------
383 ------
383 KeyError if the type has not been registered.
384 KeyError if the type has not been registered.
384 """
385 """
385 # look for singleton first
386 # look for singleton first
386 obj_id = id(obj)
387 obj_id = id(obj)
387 if obj_id in self.singleton_printers:
388 if obj_id in self.singleton_printers:
388 return self.singleton_printers[obj_id]
389 return self.singleton_printers[obj_id]
389 # then lookup by type
390 # then lookup by type
390 return self.lookup_by_type(_get_type(obj))
391 return self.lookup_by_type(_get_type(obj))
391
392
392 def lookup_by_type(self, typ):
393 def lookup_by_type(self, typ):
393 """Look up the registered formatter for a type.
394 """Look up the registered formatter for a type.
394
395
395 Parameters
396 Parameters
396 ----------
397 ----------
397 typ : type or '__module__.__name__' string for a type
398 typ : type or '__module__.__name__' string for a type
398
399
399 Returns
400 Returns
400 -------
401 -------
401 f : callable
402 f : callable
402 The registered formatting callable for the type.
403 The registered formatting callable for the type.
403
404
404 Raises
405 Raises
405 ------
406 ------
406 KeyError if the type has not been registered.
407 KeyError if the type has not been registered.
407 """
408 """
408 if isinstance(typ, string_types):
409 if isinstance(typ, string_types):
409 typ_key = tuple(typ.rsplit('.',1))
410 typ_key = tuple(typ.rsplit('.',1))
410 if typ_key not in self.deferred_printers:
411 if typ_key not in self.deferred_printers:
411 # We may have it cached in the type map. We will have to
412 # We may have it cached in the type map. We will have to
412 # iterate over all of the types to check.
413 # iterate over all of the types to check.
413 for cls in self.type_printers:
414 for cls in self.type_printers:
414 if _mod_name_key(cls) == typ_key:
415 if _mod_name_key(cls) == typ_key:
415 return self.type_printers[cls]
416 return self.type_printers[cls]
416 else:
417 else:
417 return self.deferred_printers[typ_key]
418 return self.deferred_printers[typ_key]
418 else:
419 else:
419 for cls in pretty._get_mro(typ):
420 for cls in pretty._get_mro(typ):
420 if cls in self.type_printers or self._in_deferred_types(cls):
421 if cls in self.type_printers or self._in_deferred_types(cls):
421 return self.type_printers[cls]
422 return self.type_printers[cls]
422
423
423 # If we have reached here, the lookup failed.
424 # If we have reached here, the lookup failed.
424 raise KeyError("No registered printer for {0!r}".format(typ))
425 raise KeyError("No registered printer for {0!r}".format(typ))
425
426
426 def for_type(self, typ, func=None):
427 def for_type(self, typ, func=None):
427 """Add a format function for a given type.
428 """Add a format function for a given type.
428
429
429 Parameters
430 Parameters
430 -----------
431 -----------
431 typ : type or '__module__.__name__' string for a type
432 typ : type or '__module__.__name__' string for a type
432 The class of the object that will be formatted using `func`.
433 The class of the object that will be formatted using `func`.
433 func : callable
434 func : callable
434 A callable for computing the format data.
435 A callable for computing the format data.
435 `func` will be called with the object to be formatted,
436 `func` will be called with the object to be formatted,
436 and will return the raw data in this formatter's format.
437 and will return the raw data in this formatter's format.
437 Subclasses may use a different call signature for the
438 Subclasses may use a different call signature for the
438 `func` argument.
439 `func` argument.
439
440
440 If `func` is None or not specified, there will be no change,
441 If `func` is None or not specified, there will be no change,
441 only returning the current value.
442 only returning the current value.
442
443
443 Returns
444 Returns
444 -------
445 -------
445 oldfunc : callable
446 oldfunc : callable
446 The currently registered callable.
447 The currently registered callable.
447 If you are registering a new formatter,
448 If you are registering a new formatter,
448 this will be the previous value (to enable restoring later).
449 this will be the previous value (to enable restoring later).
449 """
450 """
450 # if string given, interpret as 'pkg.module.class_name'
451 # if string given, interpret as 'pkg.module.class_name'
451 if isinstance(typ, string_types):
452 if isinstance(typ, string_types):
452 type_module, type_name = typ.rsplit('.', 1)
453 type_module, type_name = typ.rsplit('.', 1)
453 return self.for_type_by_name(type_module, type_name, func)
454 return self.for_type_by_name(type_module, type_name, func)
454
455
455 try:
456 try:
456 oldfunc = self.lookup_by_type(typ)
457 oldfunc = self.lookup_by_type(typ)
457 except KeyError:
458 except KeyError:
458 oldfunc = None
459 oldfunc = None
459
460
460 if func is not None:
461 if func is not None:
461 self.type_printers[typ] = func
462 self.type_printers[typ] = func
462
463
463 return oldfunc
464 return oldfunc
464
465
465 def for_type_by_name(self, type_module, type_name, func=None):
466 def for_type_by_name(self, type_module, type_name, func=None):
466 """Add a format function for a type specified by the full dotted
467 """Add a format function for a type specified by the full dotted
467 module and name of the type, rather than the type of the object.
468 module and name of the type, rather than the type of the object.
468
469
469 Parameters
470 Parameters
470 ----------
471 ----------
471 type_module : str
472 type_module : str
472 The full dotted name of the module the type is defined in, like
473 The full dotted name of the module the type is defined in, like
473 ``numpy``.
474 ``numpy``.
474 type_name : str
475 type_name : str
475 The name of the type (the class name), like ``dtype``
476 The name of the type (the class name), like ``dtype``
476 func : callable
477 func : callable
477 A callable for computing the format data.
478 A callable for computing the format data.
478 `func` will be called with the object to be formatted,
479 `func` will be called with the object to be formatted,
479 and will return the raw data in this formatter's format.
480 and will return the raw data in this formatter's format.
480 Subclasses may use a different call signature for the
481 Subclasses may use a different call signature for the
481 `func` argument.
482 `func` argument.
482
483
483 If `func` is None or unspecified, there will be no change,
484 If `func` is None or unspecified, there will be no change,
484 only returning the current value.
485 only returning the current value.
485
486
486 Returns
487 Returns
487 -------
488 -------
488 oldfunc : callable
489 oldfunc : callable
489 The currently registered callable.
490 The currently registered callable.
490 If you are registering a new formatter,
491 If you are registering a new formatter,
491 this will be the previous value (to enable restoring later).
492 this will be the previous value (to enable restoring later).
492 """
493 """
493 key = (type_module, type_name)
494 key = (type_module, type_name)
494
495
495 try:
496 try:
496 oldfunc = self.lookup_by_type("%s.%s" % key)
497 oldfunc = self.lookup_by_type("%s.%s" % key)
497 except KeyError:
498 except KeyError:
498 oldfunc = None
499 oldfunc = None
499
500
500 if func is not None:
501 if func is not None:
501 self.deferred_printers[key] = func
502 self.deferred_printers[key] = func
502 return oldfunc
503 return oldfunc
503
504
504 def pop(self, typ, default=_raise_key_error):
505 def pop(self, typ, default=_raise_key_error):
505 """Pop a formatter for the given type.
506 """Pop a formatter for the given type.
506
507
507 Parameters
508 Parameters
508 ----------
509 ----------
509 typ : type or '__module__.__name__' string for a type
510 typ : type or '__module__.__name__' string for a type
510 default : object
511 default : object
511 value to be returned if no formatter is registered for typ.
512 value to be returned if no formatter is registered for typ.
512
513
513 Returns
514 Returns
514 -------
515 -------
515 obj : object
516 obj : object
516 The last registered object for the type.
517 The last registered object for the type.
517
518
518 Raises
519 Raises
519 ------
520 ------
520 KeyError if the type is not registered and default is not specified.
521 KeyError if the type is not registered and default is not specified.
521 """
522 """
522
523
523 if isinstance(typ, string_types):
524 if isinstance(typ, string_types):
524 typ_key = tuple(typ.rsplit('.',1))
525 typ_key = tuple(typ.rsplit('.',1))
525 if typ_key not in self.deferred_printers:
526 if typ_key not in self.deferred_printers:
526 # We may have it cached in the type map. We will have to
527 # We may have it cached in the type map. We will have to
527 # iterate over all of the types to check.
528 # iterate over all of the types to check.
528 for cls in self.type_printers:
529 for cls in self.type_printers:
529 if _mod_name_key(cls) == typ_key:
530 if _mod_name_key(cls) == typ_key:
530 old = self.type_printers.pop(cls)
531 old = self.type_printers.pop(cls)
531 break
532 break
532 else:
533 else:
533 old = default
534 old = default
534 else:
535 else:
535 old = self.deferred_printers.pop(typ_key)
536 old = self.deferred_printers.pop(typ_key)
536 else:
537 else:
537 if typ in self.type_printers:
538 if typ in self.type_printers:
538 old = self.type_printers.pop(typ)
539 old = self.type_printers.pop(typ)
539 else:
540 else:
540 old = self.deferred_printers.pop(_mod_name_key(typ), default)
541 old = self.deferred_printers.pop(_mod_name_key(typ), default)
541 if old is _raise_key_error:
542 if old is _raise_key_error:
542 raise KeyError("No registered value for {0!r}".format(typ))
543 raise KeyError("No registered value for {0!r}".format(typ))
543 return old
544 return old
544
545
545 def _in_deferred_types(self, cls):
546 def _in_deferred_types(self, cls):
546 """
547 """
547 Check if the given class is specified in the deferred type registry.
548 Check if the given class is specified in the deferred type registry.
548
549
549 Successful matches will be moved to the regular type registry for future use.
550 Successful matches will be moved to the regular type registry for future use.
550 """
551 """
551 mod = getattr(cls, '__module__', None)
552 mod = getattr(cls, '__module__', None)
552 name = getattr(cls, '__name__', None)
553 name = getattr(cls, '__name__', None)
553 key = (mod, name)
554 key = (mod, name)
554 if key in self.deferred_printers:
555 if key in self.deferred_printers:
555 # Move the printer over to the regular registry.
556 # Move the printer over to the regular registry.
556 printer = self.deferred_printers.pop(key)
557 printer = self.deferred_printers.pop(key)
557 self.type_printers[cls] = printer
558 self.type_printers[cls] = printer
558 return True
559 return True
559 return False
560 return False
560
561
561
562
562 class PlainTextFormatter(BaseFormatter):
563 class PlainTextFormatter(BaseFormatter):
563 """The default pretty-printer.
564 """The default pretty-printer.
564
565
565 This uses :mod:`IPython.lib.pretty` to compute the format data of
566 This uses :mod:`IPython.lib.pretty` to compute the format data of
566 the object. If the object cannot be pretty printed, :func:`repr` is used.
567 the object. If the object cannot be pretty printed, :func:`repr` is used.
567 See the documentation of :mod:`IPython.lib.pretty` for details on
568 See the documentation of :mod:`IPython.lib.pretty` for details on
568 how to write pretty printers. Here is a simple example::
569 how to write pretty printers. Here is a simple example::
569
570
570 def dtype_pprinter(obj, p, cycle):
571 def dtype_pprinter(obj, p, cycle):
571 if cycle:
572 if cycle:
572 return p.text('dtype(...)')
573 return p.text('dtype(...)')
573 if hasattr(obj, 'fields'):
574 if hasattr(obj, 'fields'):
574 if obj.fields is None:
575 if obj.fields is None:
575 p.text(repr(obj))
576 p.text(repr(obj))
576 else:
577 else:
577 p.begin_group(7, 'dtype([')
578 p.begin_group(7, 'dtype([')
578 for i, field in enumerate(obj.descr):
579 for i, field in enumerate(obj.descr):
579 if i > 0:
580 if i > 0:
580 p.text(',')
581 p.text(',')
581 p.breakable()
582 p.breakable()
582 p.pretty(field)
583 p.pretty(field)
583 p.end_group(7, '])')
584 p.end_group(7, '])')
584 """
585 """
585
586
586 # The format type of data returned.
587 # The format type of data returned.
587 format_type = Unicode('text/plain')
588 format_type = Unicode('text/plain')
588
589
589 # This subclass ignores this attribute as it always need to return
590 # This subclass ignores this attribute as it always need to return
590 # something.
591 # something.
591 enabled = Bool(True, config=False)
592 enabled = Bool(True, config=False)
592
593
593 max_seq_length = Integer(pretty.MAX_SEQ_LENGTH, config=True,
594 max_seq_length = Integer(pretty.MAX_SEQ_LENGTH, config=True,
594 help="""Truncate large collections (lists, dicts, tuples, sets) to this size.
595 help="""Truncate large collections (lists, dicts, tuples, sets) to this size.
595
596
596 Set to 0 to disable truncation.
597 Set to 0 to disable truncation.
597 """
598 """
598 )
599 )
599
600
600 # Look for a _repr_pretty_ methods to use for pretty printing.
601 # Look for a _repr_pretty_ methods to use for pretty printing.
601 print_method = ObjectName('_repr_pretty_')
602 print_method = ObjectName('_repr_pretty_')
602
603
603 # Whether to pretty-print or not.
604 # Whether to pretty-print or not.
604 pprint = Bool(True, config=True)
605 pprint = Bool(True, config=True)
605
606
606 # Whether to be verbose or not.
607 # Whether to be verbose or not.
607 verbose = Bool(False, config=True)
608 verbose = Bool(False, config=True)
608
609
609 # The maximum width.
610 # The maximum width.
610 max_width = Integer(79, config=True)
611 max_width = Integer(79, config=True)
611
612
612 # The newline character.
613 # The newline character.
613 newline = Unicode('\n', config=True)
614 newline = Unicode('\n', config=True)
614
615
615 # format-string for pprinting floats
616 # format-string for pprinting floats
616 float_format = Unicode('%r')
617 float_format = Unicode('%r')
617 # setter for float precision, either int or direct format-string
618 # setter for float precision, either int or direct format-string
618 float_precision = CUnicode('', config=True)
619 float_precision = CUnicode('', config=True)
619
620
620 def _float_precision_changed(self, name, old, new):
621 def _float_precision_changed(self, name, old, new):
621 """float_precision changed, set float_format accordingly.
622 """float_precision changed, set float_format accordingly.
622
623
623 float_precision can be set by int or str.
624 float_precision can be set by int or str.
624 This will set float_format, after interpreting input.
625 This will set float_format, after interpreting input.
625 If numpy has been imported, numpy print precision will also be set.
626 If numpy has been imported, numpy print precision will also be set.
626
627
627 integer `n` sets format to '%.nf', otherwise, format set directly.
628 integer `n` sets format to '%.nf', otherwise, format set directly.
628
629
629 An empty string returns to defaults (repr for float, 8 for numpy).
630 An empty string returns to defaults (repr for float, 8 for numpy).
630
631
631 This parameter can be set via the '%precision' magic.
632 This parameter can be set via the '%precision' magic.
632 """
633 """
633
634
634 if '%' in new:
635 if '%' in new:
635 # got explicit format string
636 # got explicit format string
636 fmt = new
637 fmt = new
637 try:
638 try:
638 fmt%3.14159
639 fmt%3.14159
639 except Exception:
640 except Exception:
640 raise ValueError("Precision must be int or format string, not %r"%new)
641 raise ValueError("Precision must be int or format string, not %r"%new)
641 elif new:
642 elif new:
642 # otherwise, should be an int
643 # otherwise, should be an int
643 try:
644 try:
644 i = int(new)
645 i = int(new)
645 assert i >= 0
646 assert i >= 0
646 except ValueError:
647 except ValueError:
647 raise ValueError("Precision must be int or format string, not %r"%new)
648 raise ValueError("Precision must be int or format string, not %r"%new)
648 except AssertionError:
649 except AssertionError:
649 raise ValueError("int precision must be non-negative, not %r"%i)
650 raise ValueError("int precision must be non-negative, not %r"%i)
650
651
651 fmt = '%%.%if'%i
652 fmt = '%%.%if'%i
652 if 'numpy' in sys.modules:
653 if 'numpy' in sys.modules:
653 # set numpy precision if it has been imported
654 # set numpy precision if it has been imported
654 import numpy
655 import numpy
655 numpy.set_printoptions(precision=i)
656 numpy.set_printoptions(precision=i)
656 else:
657 else:
657 # default back to repr
658 # default back to repr
658 fmt = '%r'
659 fmt = '%r'
659 if 'numpy' in sys.modules:
660 if 'numpy' in sys.modules:
660 import numpy
661 import numpy
661 # numpy default is 8
662 # numpy default is 8
662 numpy.set_printoptions(precision=8)
663 numpy.set_printoptions(precision=8)
663 self.float_format = fmt
664 self.float_format = fmt
664
665
665 # Use the default pretty printers from IPython.lib.pretty.
666 # Use the default pretty printers from IPython.lib.pretty.
666 def _singleton_printers_default(self):
667 def _singleton_printers_default(self):
667 return pretty._singleton_pprinters.copy()
668 return pretty._singleton_pprinters.copy()
668
669
669 def _type_printers_default(self):
670 def _type_printers_default(self):
670 d = pretty._type_pprinters.copy()
671 d = pretty._type_pprinters.copy()
671 d[float] = lambda obj,p,cycle: p.text(self.float_format%obj)
672 d[float] = lambda obj,p,cycle: p.text(self.float_format%obj)
672 return d
673 return d
673
674
674 def _deferred_printers_default(self):
675 def _deferred_printers_default(self):
675 return pretty._deferred_type_pprinters.copy()
676 return pretty._deferred_type_pprinters.copy()
676
677
677 #### FormatterABC interface ####
678 #### FormatterABC interface ####
678
679
679 @warn_format_error
680 @warn_format_error
680 def __call__(self, obj):
681 def __call__(self, obj):
681 """Compute the pretty representation of the object."""
682 """Compute the pretty representation of the object."""
682 if not self.pprint:
683 if not self.pprint:
683 return repr(obj)
684 return repr(obj)
684 else:
685 else:
685 # This uses use StringIO, as cStringIO doesn't handle unicode.
686 # This uses use StringIO, as cStringIO doesn't handle unicode.
686 stream = StringIO()
687 stream = StringIO()
687 # self.newline.encode() is a quick fix for issue gh-597. We need to
688 # self.newline.encode() is a quick fix for issue gh-597. We need to
688 # ensure that stream does not get a mix of unicode and bytestrings,
689 # ensure that stream does not get a mix of unicode and bytestrings,
689 # or it will cause trouble.
690 # or it will cause trouble.
690 printer = pretty.RepresentationPrinter(stream, self.verbose,
691 printer = pretty.RepresentationPrinter(stream, self.verbose,
691 self.max_width, unicode_to_str(self.newline),
692 self.max_width, unicode_to_str(self.newline),
692 max_seq_length=self.max_seq_length,
693 max_seq_length=self.max_seq_length,
693 singleton_pprinters=self.singleton_printers,
694 singleton_pprinters=self.singleton_printers,
694 type_pprinters=self.type_printers,
695 type_pprinters=self.type_printers,
695 deferred_pprinters=self.deferred_printers)
696 deferred_pprinters=self.deferred_printers)
696 printer.pretty(obj)
697 printer.pretty(obj)
697 printer.flush()
698 printer.flush()
698 return stream.getvalue()
699 return stream.getvalue()
699
700
700
701
701 class HTMLFormatter(BaseFormatter):
702 class HTMLFormatter(BaseFormatter):
702 """An HTML formatter.
703 """An HTML formatter.
703
704
704 To define the callables that compute the HTML representation of your
705 To define the callables that compute the HTML representation of your
705 objects, define a :meth:`_repr_html_` method or use the :meth:`for_type`
706 objects, define a :meth:`_repr_html_` method or use the :meth:`for_type`
706 or :meth:`for_type_by_name` methods to register functions that handle
707 or :meth:`for_type_by_name` methods to register functions that handle
707 this.
708 this.
708
709
709 The return value of this formatter should be a valid HTML snippet that
710 The return value of this formatter should be a valid HTML snippet that
710 could be injected into an existing DOM. It should *not* include the
711 could be injected into an existing DOM. It should *not* include the
711 ```<html>`` or ```<body>`` tags.
712 ```<html>`` or ```<body>`` tags.
712 """
713 """
713 format_type = Unicode('text/html')
714 format_type = Unicode('text/html')
714
715
715 print_method = ObjectName('_repr_html_')
716 print_method = ObjectName('_repr_html_')
716
717
717
718
718 class MarkdownFormatter(BaseFormatter):
719 class MarkdownFormatter(BaseFormatter):
719 """A Markdown formatter.
720 """A Markdown formatter.
720
721
721 To define the callables that compute the Markdown representation of your
722 To define the callables that compute the Markdown representation of your
722 objects, define a :meth:`_repr_markdown_` method or use the :meth:`for_type`
723 objects, define a :meth:`_repr_markdown_` method or use the :meth:`for_type`
723 or :meth:`for_type_by_name` methods to register functions that handle
724 or :meth:`for_type_by_name` methods to register functions that handle
724 this.
725 this.
725
726
726 The return value of this formatter should be a valid Markdown.
727 The return value of this formatter should be a valid Markdown.
727 """
728 """
728 format_type = Unicode('text/markdown')
729 format_type = Unicode('text/markdown')
729
730
730 print_method = ObjectName('_repr_markdown_')
731 print_method = ObjectName('_repr_markdown_')
731
732
732 class SVGFormatter(BaseFormatter):
733 class SVGFormatter(BaseFormatter):
733 """An SVG formatter.
734 """An SVG formatter.
734
735
735 To define the callables that compute the SVG representation of your
736 To define the callables that compute the SVG representation of your
736 objects, define a :meth:`_repr_svg_` method or use the :meth:`for_type`
737 objects, define a :meth:`_repr_svg_` method or use the :meth:`for_type`
737 or :meth:`for_type_by_name` methods to register functions that handle
738 or :meth:`for_type_by_name` methods to register functions that handle
738 this.
739 this.
739
740
740 The return value of this formatter should be valid SVG enclosed in
741 The return value of this formatter should be valid SVG enclosed in
741 ```<svg>``` tags, that could be injected into an existing DOM. It should
742 ```<svg>``` tags, that could be injected into an existing DOM. It should
742 *not* include the ```<html>`` or ```<body>`` tags.
743 *not* include the ```<html>`` or ```<body>`` tags.
743 """
744 """
744 format_type = Unicode('image/svg+xml')
745 format_type = Unicode('image/svg+xml')
745
746
746 print_method = ObjectName('_repr_svg_')
747 print_method = ObjectName('_repr_svg_')
747
748
748
749
749 class PNGFormatter(BaseFormatter):
750 class PNGFormatter(BaseFormatter):
750 """A PNG formatter.
751 """A PNG formatter.
751
752
752 To define the callables that compute the PNG representation of your
753 To define the callables that compute the PNG representation of your
753 objects, define a :meth:`_repr_png_` method or use the :meth:`for_type`
754 objects, define a :meth:`_repr_png_` method or use the :meth:`for_type`
754 or :meth:`for_type_by_name` methods to register functions that handle
755 or :meth:`for_type_by_name` methods to register functions that handle
755 this.
756 this.
756
757
757 The return value of this formatter should be raw PNG data, *not*
758 The return value of this formatter should be raw PNG data, *not*
758 base64 encoded.
759 base64 encoded.
759 """
760 """
760 format_type = Unicode('image/png')
761 format_type = Unicode('image/png')
761
762
762 print_method = ObjectName('_repr_png_')
763 print_method = ObjectName('_repr_png_')
763
764
764 _return_type = (bytes, unicode_type)
765 _return_type = (bytes, unicode_type)
765
766
766
767
767 class JPEGFormatter(BaseFormatter):
768 class JPEGFormatter(BaseFormatter):
768 """A JPEG formatter.
769 """A JPEG formatter.
769
770
770 To define the callables that compute the JPEG representation of your
771 To define the callables that compute the JPEG representation of your
771 objects, define a :meth:`_repr_jpeg_` method or use the :meth:`for_type`
772 objects, define a :meth:`_repr_jpeg_` method or use the :meth:`for_type`
772 or :meth:`for_type_by_name` methods to register functions that handle
773 or :meth:`for_type_by_name` methods to register functions that handle
773 this.
774 this.
774
775
775 The return value of this formatter should be raw JPEG data, *not*
776 The return value of this formatter should be raw JPEG data, *not*
776 base64 encoded.
777 base64 encoded.
777 """
778 """
778 format_type = Unicode('image/jpeg')
779 format_type = Unicode('image/jpeg')
779
780
780 print_method = ObjectName('_repr_jpeg_')
781 print_method = ObjectName('_repr_jpeg_')
781
782
782 _return_type = (bytes, unicode_type)
783 _return_type = (bytes, unicode_type)
783
784
784
785
785 class LatexFormatter(BaseFormatter):
786 class LatexFormatter(BaseFormatter):
786 """A LaTeX formatter.
787 """A LaTeX formatter.
787
788
788 To define the callables that compute the LaTeX representation of your
789 To define the callables that compute the LaTeX representation of your
789 objects, define a :meth:`_repr_latex_` method or use the :meth:`for_type`
790 objects, define a :meth:`_repr_latex_` method or use the :meth:`for_type`
790 or :meth:`for_type_by_name` methods to register functions that handle
791 or :meth:`for_type_by_name` methods to register functions that handle
791 this.
792 this.
792
793
793 The return value of this formatter should be a valid LaTeX equation,
794 The return value of this formatter should be a valid LaTeX equation,
794 enclosed in either ```$```, ```$$``` or another LaTeX equation
795 enclosed in either ```$```, ```$$``` or another LaTeX equation
795 environment.
796 environment.
796 """
797 """
797 format_type = Unicode('text/latex')
798 format_type = Unicode('text/latex')
798
799
799 print_method = ObjectName('_repr_latex_')
800 print_method = ObjectName('_repr_latex_')
800
801
801
802
802 class JSONFormatter(BaseFormatter):
803 class JSONFormatter(BaseFormatter):
803 """A JSON string formatter.
804 """A JSON string formatter.
804
805
805 To define the callables that compute the JSON string representation of
806 To define the callables that compute the JSON string representation of
806 your objects, define a :meth:`_repr_json_` method or use the :meth:`for_type`
807 your objects, define a :meth:`_repr_json_` method or use the :meth:`for_type`
807 or :meth:`for_type_by_name` methods to register functions that handle
808 or :meth:`for_type_by_name` methods to register functions that handle
808 this.
809 this.
809
810
810 The return value of this formatter should be a valid JSON string.
811 The return value of this formatter should be a valid JSON string.
811 """
812 """
812 format_type = Unicode('application/json')
813 format_type = Unicode('application/json')
813
814
814 print_method = ObjectName('_repr_json_')
815 print_method = ObjectName('_repr_json_')
815
816
816
817
817 class JavascriptFormatter(BaseFormatter):
818 class JavascriptFormatter(BaseFormatter):
818 """A Javascript formatter.
819 """A Javascript formatter.
819
820
820 To define the callables that compute the Javascript representation of
821 To define the callables that compute the Javascript representation of
821 your objects, define a :meth:`_repr_javascript_` method or use the
822 your objects, define a :meth:`_repr_javascript_` method or use the
822 :meth:`for_type` or :meth:`for_type_by_name` methods to register functions
823 :meth:`for_type` or :meth:`for_type_by_name` methods to register functions
823 that handle this.
824 that handle this.
824
825
825 The return value of this formatter should be valid Javascript code and
826 The return value of this formatter should be valid Javascript code and
826 should *not* be enclosed in ```<script>``` tags.
827 should *not* be enclosed in ```<script>``` tags.
827 """
828 """
828 format_type = Unicode('application/javascript')
829 format_type = Unicode('application/javascript')
829
830
830 print_method = ObjectName('_repr_javascript_')
831 print_method = ObjectName('_repr_javascript_')
831
832
832
833
833 class PDFFormatter(BaseFormatter):
834 class PDFFormatter(BaseFormatter):
834 """A PDF formatter.
835 """A PDF formatter.
835
836
836 To define the callables that compute the PDF representation of your
837 To define the callables that compute the PDF representation of your
837 objects, define a :meth:`_repr_pdf_` method or use the :meth:`for_type`
838 objects, define a :meth:`_repr_pdf_` method or use the :meth:`for_type`
838 or :meth:`for_type_by_name` methods to register functions that handle
839 or :meth:`for_type_by_name` methods to register functions that handle
839 this.
840 this.
840
841
841 The return value of this formatter should be raw PDF data, *not*
842 The return value of this formatter should be raw PDF data, *not*
842 base64 encoded.
843 base64 encoded.
843 """
844 """
844 format_type = Unicode('application/pdf')
845 format_type = Unicode('application/pdf')
845
846
846 print_method = ObjectName('_repr_pdf_')
847 print_method = ObjectName('_repr_pdf_')
847
848
848 _return_type = (bytes, unicode_type)
849 _return_type = (bytes, unicode_type)
849
850
850
851
851 FormatterABC.register(BaseFormatter)
852 FormatterABC.register(BaseFormatter)
852 FormatterABC.register(PlainTextFormatter)
853 FormatterABC.register(PlainTextFormatter)
853 FormatterABC.register(HTMLFormatter)
854 FormatterABC.register(HTMLFormatter)
854 FormatterABC.register(MarkdownFormatter)
855 FormatterABC.register(MarkdownFormatter)
855 FormatterABC.register(SVGFormatter)
856 FormatterABC.register(SVGFormatter)
856 FormatterABC.register(PNGFormatter)
857 FormatterABC.register(PNGFormatter)
857 FormatterABC.register(PDFFormatter)
858 FormatterABC.register(PDFFormatter)
858 FormatterABC.register(JPEGFormatter)
859 FormatterABC.register(JPEGFormatter)
859 FormatterABC.register(LatexFormatter)
860 FormatterABC.register(LatexFormatter)
860 FormatterABC.register(JSONFormatter)
861 FormatterABC.register(JSONFormatter)
861 FormatterABC.register(JavascriptFormatter)
862 FormatterABC.register(JavascriptFormatter)
862
863
863
864
864 def format_display_data(obj, include=None, exclude=None):
865 def format_display_data(obj, include=None, exclude=None):
865 """Return a format data dict for an object.
866 """Return a format data dict for an object.
866
867
867 By default all format types will be computed.
868 By default all format types will be computed.
868
869
869 The following MIME types are currently implemented:
870 The following MIME types are currently implemented:
870
871
871 * text/plain
872 * text/plain
872 * text/html
873 * text/html
873 * text/markdown
874 * text/markdown
874 * text/latex
875 * text/latex
875 * application/json
876 * application/json
876 * application/javascript
877 * application/javascript
877 * application/pdf
878 * application/pdf
878 * image/png
879 * image/png
879 * image/jpeg
880 * image/jpeg
880 * image/svg+xml
881 * image/svg+xml
881
882
882 Parameters
883 Parameters
883 ----------
884 ----------
884 obj : object
885 obj : object
885 The Python object whose format data will be computed.
886 The Python object whose format data will be computed.
886
887
887 Returns
888 Returns
888 -------
889 -------
889 format_dict : dict
890 format_dict : dict
890 A dictionary of key/value pairs, one or each format that was
891 A dictionary of key/value pairs, one or each format that was
891 generated for the object. The keys are the format types, which
892 generated for the object. The keys are the format types, which
892 will usually be MIME type strings and the values and JSON'able
893 will usually be MIME type strings and the values and JSON'able
893 data structure containing the raw data for the representation in
894 data structure containing the raw data for the representation in
894 that format.
895 that format.
895 include : list or tuple, optional
896 include : list or tuple, optional
896 A list of format type strings (MIME types) to include in the
897 A list of format type strings (MIME types) to include in the
897 format data dict. If this is set *only* the format types included
898 format data dict. If this is set *only* the format types included
898 in this list will be computed.
899 in this list will be computed.
899 exclude : list or tuple, optional
900 exclude : list or tuple, optional
900 A list of format type string (MIME types) to exclue in the format
901 A list of format type string (MIME types) to exclue in the format
901 data dict. If this is set all format types will be computed,
902 data dict. If this is set all format types will be computed,
902 except for those included in this argument.
903 except for those included in this argument.
903 """
904 """
904 from IPython.core.interactiveshell import InteractiveShell
905 from IPython.core.interactiveshell import InteractiveShell
905
906
906 InteractiveShell.instance().display_formatter.format(
907 InteractiveShell.instance().display_formatter.format(
907 obj,
908 obj,
908 include,
909 include,
909 exclude
910 exclude
910 )
911 )
911
912
General Comments 0
You need to be logged in to leave comments. Login now