From 1c7122789135db82c6cd4a12bf6f0ddf5507fc41 2021-11-23 22:11:58 From: Matthias Bussonnier Date: 2021-11-23 22:11:58 Subject: [PATCH] Merge pull request #13288 from Carreau/sometyping some typing --- diff --git a/IPython/core/interactiveshell.py b/IPython/core/interactiveshell.py index 0dec753..de9691f 100644 --- a/IPython/core/interactiveshell.py +++ b/IPython/core/interactiveshell.py @@ -82,14 +82,17 @@ from warnings import warn from logging import error import IPython.core.hooks -from typing import List as ListType, Tuple, Optional -from ast import AST +from typing import List as ListType, Tuple, Optional, Callable +from ast import AST, stmt + # NoOpContext is deprecated, but ipykernel imports it from here. # See https://github.com/ipython/ipykernel/issues/157 # (2016, let's try to remove than in IPython 8.0) from IPython.utils.contexts import NoOpContext +sphinxify: Optional[Callable] + try: import docrepr.sphinxify as sphx @@ -207,14 +210,20 @@ def _ast_asyncify(cell:str, wrapper_name:str) -> ast.Module: is updated only on `local()` calls. """ - from ast import Expr, Await, Return + from ast import Expr, Await, Return, stmt, FunctionDef, Try, AsyncFunctionDef if sys.version_info >= (3,8): return ast.parse(cell) tree = ast.parse(_asyncify(cell)) function_def = tree.body[0] + if sys.version_info > (3, 8): + assert isinstance(function_def, FunctionDef), function_def + else: + assert isinstance(function_def, (FunctionDef, AsyncFunctionDef)), function_def + function_def.name = wrapper_name try_block = function_def.body[0] + assert isinstance(try_block, Try) lastexpr = try_block.body[-1] if isinstance(lastexpr, (Expr, Await)): try_block.body[-1] = Return(lastexpr.value) @@ -312,7 +321,7 @@ class ExecutionResult(object): """ execution_count = None error_before_exec = None - error_in_exec = None + error_in_exec: Optional[BaseException] = None info = None result = None @@ -3278,8 +3287,14 @@ class InteractiveShell(SingletonConfigurable): ast.fix_missing_locations(node) return node - async def run_ast_nodes(self, nodelist:ListType[AST], cell_name:str, interactivity='last_expr', - compiler=compile, result=None): + async def run_ast_nodes( + self, + nodelist: ListType[stmt], + cell_name: str, + interactivity="last_expr", + compiler=compile, + result=None, + ): """Run a sequence of AST nodes. The execution mode depends on the interactivity parameter. @@ -3318,6 +3333,7 @@ class InteractiveShell(SingletonConfigurable): if not nodelist: return + if interactivity == 'last_expr_or_assign': if isinstance(nodelist[-1], _assign_nodes): asg = nodelist[-1] diff --git a/mypy.ini b/mypy.ini index 998aed5..7c1be49 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,4 +1,4 @@ [mypy] -python_version = 3.6 +python_version = 3.8 ignore_missing_imports = True follow_imports = silent