##// END OF EJS Templates
Fix test for Python 3.7+...
Matthias Bussonnier -
Show More
@@ -90,13 +90,31 b' class CachingCompiler(codeop.Compile):'
90 # stdlib that call it outside our control go through our codepath
90 # stdlib that call it outside our control go through our codepath
91 # (otherwise we'd lose our tracebacks).
91 # (otherwise we'd lose our tracebacks).
92 linecache.checkcache = check_linecache_ipython
92 linecache.checkcache = check_linecache_ipython
93
94
95 def _fix_module_ds(self, module):
96 """
97 Starting in python 3.7 the AST for mule have changed, and if
98 the first expressions encountered is a string it is attached to the
99 `docstring` attribute of the `Module` ast node.
100
101 This breaks IPython, as if this string is the only expression, IPython
102 will not return it as the result of the current cell.
103 """
104 from ast import Str, Expr, Module, fix_missing_locations
105 docstring = getattr(module, 'docstring', None)
106 if not docstring:
107 return module
108 new_body=[Expr(Str(docstring, lineno=1, col_offset=0), lineno=1, col_offset=0)]
109 new_body.extend(module.body)
110 return fix_missing_locations(Module(new_body))
93
111
94 def ast_parse(self, source, filename='<unknown>', symbol='exec'):
112 def ast_parse(self, source, filename='<unknown>', symbol='exec'):
95 """Parse code to an AST with the current compiler flags active.
113 """Parse code to an AST with the current compiler flags active.
96
114
97 Arguments are exactly the same as ast.parse (in the standard library),
115 Arguments are exactly the same as ast.parse (in the standard library),
98 and are passed to the built-in compile function."""
116 and are passed to the built-in compile function."""
99 return compile(source, filename, symbol, self.flags | PyCF_ONLY_AST, 1)
117 return self._fix_module_ds(compile(source, filename, symbol, self.flags | PyCF_ONLY_AST, 1))
100
118
101 def reset_compiler_flags(self):
119 def reset_compiler_flags(self):
102 """Reset compiler flags to default state."""
120 """Reset compiler flags to default state."""
@@ -2865,7 +2865,6 b' class InteractiveShell(SingletonConfigurable):'
2865 """
2865 """
2866 if not nodelist:
2866 if not nodelist:
2867 return
2867 return
2868
2869 if interactivity == 'last_expr_or_assign':
2868 if interactivity == 'last_expr_or_assign':
2870 if isinstance(nodelist[-1], _assign_nodes):
2869 if isinstance(nodelist[-1], _assign_nodes):
2871 asg = nodelist[-1]
2870 asg = nodelist[-1]
@@ -2895,7 +2894,6 b' class InteractiveShell(SingletonConfigurable):'
2895 to_run_exec, to_run_interactive = [], nodelist
2894 to_run_exec, to_run_interactive = [], nodelist
2896 else:
2895 else:
2897 raise ValueError("Interactivity was %r" % interactivity)
2896 raise ValueError("Interactivity was %r" % interactivity)
2898
2899 try:
2897 try:
2900 for i, node in enumerate(to_run_exec):
2898 for i, node in enumerate(to_run_exec):
2901 mod = ast.Module([node])
2899 mod = ast.Module([node])
General Comments 0
You need to be logged in to leave comments. Login now