diff options
Diffstat (limited to 'coverage')
-rw-r--r-- | coverage/backward.py | 34 | ||||
-rw-r--r-- | coverage/execfile.py | 8 |
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; " |