|
@@
-2,6
+2,86
b''
|
|
2
|
2
|
7.x Series
|
|
3
|
3
|
============
|
|
4
|
4
|
|
|
|
5
|
.. _version 717:
|
|
|
6
|
|
|
|
7
|
IPython 7.17
|
|
|
8
|
============
|
|
|
9
|
|
|
|
10
|
IPython 7.17 brings a couple of new improvements to API and a couple of user
|
|
|
11
|
facing changes to make the terminal experience more user friendly.
|
|
|
12
|
|
|
|
13
|
:ghpull:`12407` introduces the ability to pass extra argument to the IPython
|
|
|
14
|
debugger class; this is to help a new project from ``kmaork``
|
|
|
15
|
(https://github.com/kmaork/madbg) to feature a fully remote debugger.
|
|
|
16
|
|
|
|
17
|
:ghpull:`12410` finally remove support for 3.6, while the codebase is still
|
|
|
18
|
technically compatible; IPython will not install on Python 3.6.
|
|
|
19
|
|
|
|
20
|
lots of work on the debugger and hidden frames from ``@impact27`` in
|
|
|
21
|
:ghpull:`12437`, :ghpull:`12445`, :ghpull:`12460` and in particular
|
|
|
22
|
:ghpull:`12453` which make the debug magic more robust at handling spaces.
|
|
|
23
|
|
|
|
24
|
Biggest API addition is code transformation which is done before code execution;
|
|
|
25
|
IPython allows a number of hooks to catch non-valid Python syntax (magic, prompt
|
|
|
26
|
stripping...etc). Transformers are usually called many time; typically:
|
|
|
27
|
|
|
|
28
|
- When trying to figure out whether the code is complete and valid (should we
|
|
|
29
|
insert a new line or execute ?)
|
|
|
30
|
- During actual code execution pass before giving the code to Python's
|
|
|
31
|
``exec``.
|
|
|
32
|
|
|
|
33
|
This lead to issues when transformer might have had side effects; or do external
|
|
|
34
|
queries. Starting with IPython 7.17 you can expect your transformer to be called
|
|
|
35
|
less time.
|
|
|
36
|
|
|
|
37
|
Input transformers are now called only once in the execution path of
|
|
|
38
|
`InteractiveShell`, allowing to register transformer that potentially have side
|
|
|
39
|
effects (note that this is not recommended). Internal methods `should_run_async`, and
|
|
|
40
|
`run_cell_async` now take a recommended optional `transformed_cell`, and
|
|
|
41
|
`preprocessing_exc_tuple` parameters that will become mandatory at some point in
|
|
|
42
|
the future; that is to say cells need to be explicitly transformed to be valid
|
|
|
43
|
Python syntax ahead of trying to run them. :ghpull:`12440`;
|
|
|
44
|
|
|
|
45
|
``input_transformers`` can now also have an attribute ``has_side_effects`` set
|
|
|
46
|
to `True`, when this attribute is present; this will prevent the transformers
|
|
|
47
|
from being ran when IPython is trying to guess whether the user input is
|
|
|
48
|
complete. Note that this may means you will need to explicitly execute in some
|
|
|
49
|
case where your transformations are now not ran; but will not affect users with
|
|
|
50
|
no custom extensions.
|
|
|
51
|
|
|
|
52
|
|
|
|
53
|
API Changes
|
|
|
54
|
-----------
|
|
|
55
|
|
|
|
56
|
Change of API and exposed objects automatically detected using `frappuccino
|
|
|
57
|
<https://pypi.org/project/frappuccino/>`_
|
|
|
58
|
|
|
|
59
|
|
|
|
60
|
The following items are new since 7.16.0::
|
|
|
61
|
|
|
|
62
|
+ IPython.core.interactiveshell.InteractiveShell.get_local_scope(self, stack_depth)
|
|
|
63
|
|
|
|
64
|
The following signatures differ since 7.16.0::
|
|
|
65
|
|
|
|
66
|
- IPython.core.interactiveshell.InteractiveShell.run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True)
|
|
|
67
|
+ IPython.core.interactiveshell.InteractiveShell.run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True, *, transformed_cell=None, preprocessing_exc_tuple=None)
|
|
|
68
|
|
|
|
69
|
- IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell)
|
|
|
70
|
+ IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell, *, transformed_cell=None, preprocessing_exc_tuple=None)
|
|
|
71
|
|
|
|
72
|
- IPython.terminal.debugger.TerminalPdb.pt_init(self)
|
|
|
73
|
+ IPython.terminal.debugger.TerminalPdb.pt_init(self, pt_session_options=None)
|
|
|
74
|
|
|
|
75
|
This method was added::
|
|
|
76
|
|
|
|
77
|
+ IPython.core.interactiveshell.InteractiveShell.get_local_scope
|
|
|
78
|
|
|
|
79
|
Which is now also present on subclasses::
|
|
|
80
|
|
|
|
81
|
+ IPython.terminal.embed.InteractiveShellEmbed.get_local_scope
|
|
|
82
|
+ IPython.terminal.interactiveshell.TerminalInteractiveShell.get_local_scope
|
|
|
83
|
|
|
|
84
|
|
|
5
|
85
|
.. _version 716:
|
|
6
|
86
|
|
|
7
|
87
|
IPython 7.16
|