From 1d55c49a9ae0e816af0442ab026ee2df57fa490c Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Sat, 23 Jun 2018 07:55:42 -0700 Subject: [PATCH] Fix `ImportWarning` triggered by explicit relative imports --- changelog/3061.bugfix.rst | 1 + src/_pytest/assertion/rewrite.py | 10 ++++++++++ 2 files changed, 11 insertions(+) create mode 100644 changelog/3061.bugfix.rst diff --git a/changelog/3061.bugfix.rst b/changelog/3061.bugfix.rst new file mode 100644 index 000000000..1bdd1064e --- /dev/null +++ b/changelog/3061.bugfix.rst @@ -0,0 +1 @@ +Fix ``ImportWarning`` triggered by explicit relative imports in assertion-rewritten package modules. diff --git a/src/_pytest/assertion/rewrite.py b/src/_pytest/assertion/rewrite.py index eceed611f..92f4ab10d 100644 --- a/src/_pytest/assertion/rewrite.py +++ b/src/_pytest/assertion/rewrite.py @@ -45,6 +45,14 @@ else: return ast.Call(a, b, c, None, None) +if sys.version_info >= (3, 4): + from importlib.util import spec_from_file_location +else: + + def spec_from_file_location(*_, **__): + return None + + class AssertionRewritingHook(object): """PEP302 Import hook which rewrites asserts.""" @@ -213,6 +221,8 @@ class AssertionRewritingHook(object): # Normally, this attribute is 3.2+. mod.__cached__ = pyc mod.__loader__ = self + # Normally, this attribute is 3.4+ + mod.__spec__ = spec_from_file_location(name, co.co_filename, loader=self) py.builtin.exec_(co, mod.__dict__) except: # noqa if name in sys.modules: