summaryrefslogtreecommitdiff
path: root/coverage
diff options
context:
space:
mode:
Diffstat (limited to 'coverage')
-rw-r--r--coverage/backward.py34
-rw-r--r--coverage/execfile.py8
2 files changed, 35 insertions, 7 deletions
diff --git a/coverage/backward.py b/coverage/backward.py
index 98407e38..a7888a24 100644
--- a/coverage/backward.py
+++ b/coverage/backward.py
@@ -135,7 +135,7 @@ except KeyError:
BUILTINS = sys.modules['builtins']
-# imp was deprecated in Python 3.4
+# imp was deprecated in Python 3.3
try:
import importlib, importlib.util
imp = None
@@ -144,12 +144,40 @@ except ImportError:
# we only want to use importlib if it has everything we need.
try:
- importlib.util.find_spec
+ importlib_util_find_spec = importlib.util.find_spec
except Exception:
import imp
- importlib = None
+ importlib_util_find_spec = None
try:
PYC_MAGIC_NUMBER = importlib.util.MAGIC_NUMBER
except AttributeError:
PYC_MAGIC_NUMBER = imp.get_magic()
+
+
+def import_local_file(modname):
+ """Import a local file as a module.
+
+ Opens a file in the current directory named `modname`.py, imports it
+ as `modname`, and returns the module object.
+
+ """
+ try:
+ from importlib.machinery import SourceFileLoader
+ except ImportError:
+ SourceFileLoader = None
+
+ modfile = modname + '.py'
+ if SourceFileLoader:
+ mod = SourceFileLoader(modname, modfile).load_module()
+ else:
+ for suff in imp.get_suffixes():
+ if suff[0] == '.py':
+ break
+
+ with open(modfile, 'r') as f:
+ # pylint: disable=W0631
+ # (Using possibly undefined loop variable 'suff')
+ mod = imp.load_module(modname, f, modfile, suff)
+
+ return mod
diff --git a/coverage/execfile.py b/coverage/execfile.py
index bc8fdaa2..b7877b6a 100644
--- a/coverage/execfile.py
+++ b/coverage/execfile.py
@@ -3,11 +3,11 @@
import marshal, os, sys, types
from coverage.backward import open_python_source, BUILTINS
-from coverage.backward import PYC_MAGIC_NUMBER, imp, importlib
+from coverage.backward import PYC_MAGIC_NUMBER, imp, importlib_util_find_spec
from coverage.misc import ExceptionDuringRun, NoCode, NoSource
-if importlib:
+if importlib_util_find_spec:
def find_module(modulename):
"""Find the module named `modulename`.
@@ -16,7 +16,7 @@ if importlib:
"""
# pylint: disable=no-member
try:
- spec = importlib.util.find_spec(modulename)
+ spec = importlib_util_find_spec(modulename)
except ImportError as err:
raise NoSource(str(err))
if not spec:
@@ -25,7 +25,7 @@ if importlib:
packagename = spec.name
if pathname.endswith("__init__.py"):
mod_main = modulename + ".__main__"
- spec = importlib.util.find_spec(mod_main)
+ spec = importlib_util_find_spec(mod_main)
if not spec:
raise NoSource(
"No module named %s; "