Fix assertion rewriting on Python 3.10

Fixes https://github.com/pytest-dev/pytest/issues/8539

This seems to have been the result of https://bugs.python.org/issue43798
This commit is contained in:
hauntsaninja 2021-04-11 15:38:32 -07:00 committed by Taiju Yamada
parent da7ca9e732
commit fef682a53b
3 changed files with 16 additions and 4 deletions

View File

@ -222,6 +222,7 @@ Samuele Pedroni
Sankt Petersbug Sankt Petersbug
Segev Finer Segev Finer
Serhii Mozghovyi Serhii Mozghovyi
Shantanu Jain
Simon Gomizelj Simon Gomizelj
Skylar Downes Skylar Downes
Srinivas Reddy Thatiparthy Srinivas Reddy Thatiparthy

View File

@ -0,0 +1 @@
Fixed assertion rewriting on Python 3.10.

View File

@ -652,12 +652,9 @@ class AssertionRewriter(ast.NodeVisitor):
if not mod.body: if not mod.body:
# Nothing to do. # Nothing to do.
return return
# Insert some special imports at the top of the module but after any # Insert some special imports at the top of the module but after any
# docstrings and __future__ imports. # docstrings and __future__ imports.
aliases = [
ast.alias(six.moves.builtins.__name__, "@py_builtins"),
ast.alias("_pytest.assertion.rewrite", "@pytest_ar"),
]
doc = getattr(mod, "docstring", None) doc = getattr(mod, "docstring", None)
expect_docstring = doc is None expect_docstring = doc is None
if doc is not None and self.is_rewrite_disabled(doc): if doc is not None and self.is_rewrite_disabled(doc):
@ -684,6 +681,19 @@ class AssertionRewriter(ast.NodeVisitor):
pos += 1 pos += 1
else: else:
lineno = item.lineno lineno = item.lineno
if sys.version_info >= (3, 10):
aliases = [
ast.alias(six.moves.builtins.__name__, "@py_builtins", lineno=lineno, col_offset=0),
ast.alias(
"_pytest.assertion.rewrite", "@pytest_ar",
lineno=lineno, col_offset=0
),
]
else:
aliases = [
ast.alias(six.moves.builtins.__name__, "@py_builtins"),
ast.alias("_pytest.assertion.rewrite", "@pytest_ar"),
]
imports = [ imports = [
ast.Import([alias], lineno=lineno, col_offset=0) for alias in aliases ast.Import([alias], lineno=lineno, col_offset=0) for alias in aliases
] ]