##// END OF EJS Templates
Improve typing and MIME hook API for inspector (#14342)...
Improve typing and MIME hook API for inspector (#14342) Fixes https://github.com/ipython/ipython/issues/14339 ### Additions Adds `InfoDict` type to improve the typing of `info()` result. Adds missing `"subclasses"` to `info_fields` list (these were added to the field list in https://github.com/ipython/ipython/pull/11486 but we forgot to update `info_fields` variable at the time) - the newly added `InfoDict` type will ensure that this won't happen again. Adds `InspectorHookData` dataclass which is passed to the MIME hooks which now should expect a single argument. Having a single dataclass argument enables us to deprecate individual fields, or add new fields without breaking the existing hooks. The old hooks will still work (if any are out there since this mechanism got just added in the previous point version). ### Deletions A comment over `info_fields` gets deleted: - Contrarily to the comment (which is getting deleted in this PR), `info_fields` were not defining the order of display since at least 2015 (https://github.com/ipython/ipython/pull/7903 - I did not feel the need to go further in the history to find when exactly it happened). - Also contrarily to this comment, current Jupyter messaging spec does not define the contents of `info_fields` (I guess this was lost during IPython/Jupyter split), but the newly added `InfoDict` at least properly annotates their type (if you know where I can find the old IPython messaging spec with the descriptions I can add these as doc comments). Unused `cast_unicode` import gets deleted. If someone imported it from here... well they really should not have. ### Deprecations - mime hooks taking two arguments (`obj, info`)

File last commit:

r28480:87ab1c59
r28661:2084e7f3 merge
Show More
py3compat.py
68 lines | 1.6 KiB | text/x-python | PythonLexer
Thomas Kluyver
Python 3 compatibility for identifiers.
r4740 # coding: utf-8
Hugo
Note py3compat is deprecated and will be removed in the future
r24011 """Compatibility tricks for Python 3. Mainly to do with unicode.
This file is deprecated and will be removed in a future version.
"""
Danilo J. S. Bellini
Cleaner PYPY flag (platform module); Comment fixes
r22756 import platform
Matthias Bussonnier
remove some dead code especially wrt py3compat
r27224 import builtins as builtin_mod
Brandon Parsons
Feedback from pull request #1245
r6655
Brandon Parsons
saner default encoding mechanism
r6716 from .encoding import DEFAULT_ENCODING
Thomas Kluyver
Add module for Python 3 compatibility layer.
r4730
def decode(s, encoding=None):
Brandon Parsons
saner default encoding mechanism
r6716 encoding = encoding or DEFAULT_ENCODING
Thomas Kluyver
Add module for Python 3 compatibility layer.
r4730 return s.decode(encoding, "replace")
Matthias Bussonnier
remove some dead code especially wrt py3compat
r27224
Thomas Kluyver
Add module for Python 3 compatibility layer.
r4730 def encode(u, encoding=None):
Brandon Parsons
saner default encoding mechanism
r6716 encoding = encoding or DEFAULT_ENCODING
Thomas Kluyver
Add module for Python 3 compatibility layer.
r4730 return u.encode(encoding, "replace")
Brandon Parsons
pythonw in py3k sets std{in,out,err} to None...
r6651
Thomas Kluyver
Start using py3compat module.
r4731 def cast_unicode(s, encoding=None):
if isinstance(s, bytes):
return decode(s, encoding)
return s
Min RK
add py3compat.buffer_to_bytes_py2...
r19203
MinRK
move safe_unicode to py3compat
r10635 def safe_unicode(e):
"""unicode(e) with various fallbacks. Used for exceptions, which may not be
safe to call unicode() on.
"""
try:
kousik
Code Cleanup: Remove unused unused utility functions from 'IPython/utils/py3compat.py' #11985
r25330 return str(e)
MinRK
move safe_unicode to py3compat
r10635 except UnicodeError:
pass
try:
kousik
Code Cleanup: Remove unused unused utility functions from 'IPython/utils/py3compat.py' #11985
r25330 return repr(e)
MinRK
move safe_unicode to py3compat
r10635 except UnicodeError:
pass
Matthias Bussonnier
remove some dead code especially wrt py3compat
r27224 return "Unrecoverably corrupt evalue"
MinRK
move safe_unicode to py3compat
r10635
Hugo
Remove redundant Python 2 code
r24010 # keep reference to builtin_mod because the kernel overrides that value
# to forward requests to a frontend.
Matthias Bussonnier
remove some dead code especially wrt py3compat
r27224 def input(prompt=""):
Hugo
Remove redundant Python 2 code
r24010 return builtin_mod.input(prompt)
def execfile(fname, glob, loc=None, compiler=None):
loc = loc if (loc is not None) else glob
Matthias Bussonnier
remove some dead code especially wrt py3compat
r27224 with open(fname, "rb") as f:
Hugo
Remove redundant Python 2 code
r24010 compiler = compiler or compile
Matthias Bussonnier
remove some dead code especially wrt py3compat
r27224 exec(compiler(f.read(), fname, "exec"), glob, loc)
Hugo
Remove redundant Python 2 code
r24010
Danilo J. S. Bellini
Cleaner PYPY flag (platform module); Comment fixes
r22756 PYPY = platform.python_implementation() == "PyPy"
Scott Sanderson
BUG: Fix pprint failure on non-string __qualname__ or __name__....
r21803
Matthias Bussonnier
please linter
r28480
Matthias Bussonnier
Reintroduce compatibility functions for a few release;...
r25402 # Cython still rely on that as a Dec 28 2019
# See https://github.com/cython/cython/pull/3291 and
# https://github.com/ipython/ipython/issues/12068
def no_code(x, encoding=None):
Matthias Bussonnier
remove some dead code especially wrt py3compat
r27224 return x
Matthias Bussonnier
Reintroduce compatibility functions for a few release;...
r25402
Matthias Bussonnier
remove some dead code especially wrt py3compat
r27224
unicode_to_str = cast_bytes_py2 = no_code