diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2021-05-01 14:15:50 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2021-05-01 16:24:37 -0400 |
commit | 7db98362f368ac569edf66228d52cbc64a6d69aa (patch) | |
tree | 491c7c3736ca60ceeda3d29e3f4186954e3e572a | |
parent | 775c14a764ff3fd32bcd25d91f4c0f635722ed50 (diff) | |
download | python-coveragepy-git-7db98362f368ac569edf66228d52cbc64a6d69aa.tar.gz |
refactor: remove yet more unneeded backward.py shims
Gone are:
- PYC_MAGIC_NUMBER
- code_object
- SimpleNamespace
-rw-r--r-- | coverage/backward.py | 29 | ||||
-rw-r--r-- | coverage/execfile.py | 17 | ||||
-rw-r--r-- | coverage/html.py | 7 | ||||
-rw-r--r-- | coverage/inorout.py | 4 | ||||
-rw-r--r-- | tests/test_api.py | 4 |
5 files changed, 16 insertions, 45 deletions
diff --git a/coverage/backward.py b/coverage/backward.py index 26d8d0e5..1169ff46 100644 --- a/coverage/backward.py +++ b/coverage/backward.py @@ -20,35 +20,6 @@ except Exception: import imp importlib_util_find_spec = None -# What is the .pyc magic number for this version of Python? -try: - PYC_MAGIC_NUMBER = importlib.util.MAGIC_NUMBER -except AttributeError: - PYC_MAGIC_NUMBER = imp.get_magic() - - -def code_object(fn): - """Get the code object from a function.""" - try: - return fn.func_code - except AttributeError: - return fn.__code__ - - -try: - from types import SimpleNamespace -except ImportError: - # The code from https://docs.python.org/3/library/types.html#types.SimpleNamespace - class SimpleNamespace: - """Python implementation of SimpleNamespace, for Python 2.""" - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - def __repr__(self): - keys = sorted(self.__dict__) - items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys) - return "{}({})".format(type(self).__name__, ", ".join(items)) - def format_local_datetime(dt): """Return a string with local timezone representing the date. diff --git a/coverage/execfile.py b/coverage/execfile.py index 32bb8223..600b2278 100644 --- a/coverage/execfile.py +++ b/coverage/execfile.py @@ -3,6 +3,8 @@ """Execute files of Python code.""" +import importlib.machinery +import importlib.util import inspect import marshal import os @@ -11,7 +13,7 @@ import sys import types from coverage import env -from coverage.backward import PYC_MAGIC_NUMBER, imp, importlib_util_find_spec +from coverage.backward import imp, importlib_util_find_spec from coverage.files import canonical_filename, python_reported_file from coverage.misc import CoverageException, ExceptionDuringRun, NoCode, NoSource, isolate_module from coverage.phystokens import compile_unicode @@ -20,6 +22,8 @@ from coverage.python import get_python_source os = isolate_module(os) +PYC_MAGIC_NUMBER = importlib.util.MAGIC_NUMBER + class DummyLoader(object): """A shim for the pep302 __loader__, emulating pkgutil.ImpLoader. @@ -182,14 +186,9 @@ class PyRunner(object): raise NoSource("Can't find '__main__' module in '%s'" % self.arg0) # Make a spec. I don't know if this is the right way to do it. - try: - import importlib.machinery - except ImportError: - pass - else: - try_filename = python_reported_file(try_filename) - self.spec = importlib.machinery.ModuleSpec("__main__", None, origin=try_filename) - self.spec.has_location = True + try_filename = python_reported_file(try_filename) + self.spec = importlib.machinery.ModuleSpec("__main__", None, origin=try_filename) + self.spec.has_location = True self.package = "" self.loader = DummyLoader("__main__") else: diff --git a/coverage/html.py b/coverage/html.py index 0093342a..aea1aa25 100644 --- a/coverage/html.py +++ b/coverage/html.py @@ -8,9 +8,10 @@ import json import os import re import shutil +import types import coverage -from coverage.backward import SimpleNamespace, format_local_datetime +from coverage.backward import format_local_datetime from coverage.data import add_data_to_hash from coverage.files import flat_rootname from coverage.misc import CoverageException, ensure_dir, file_be_gone, Hasher, isolate_module @@ -129,7 +130,7 @@ class HtmlDataGeneration(object): contexts_label = "{} ctx".format(len(contexts)) context_list = contexts - lines.append(SimpleNamespace( + lines.append(types.SimpleNamespace( tokens=tokens, number=lineno, category=category, @@ -141,7 +142,7 @@ class HtmlDataGeneration(object): long_annotations=long_annotations, )) - file_data = SimpleNamespace( + file_data = types.SimpleNamespace( relative_filename=fr.relative_filename(), nums=analysis.numbers, lines=lines, diff --git a/coverage/inorout.py b/coverage/inorout.py index 532634eb..554d34c4 100644 --- a/coverage/inorout.py +++ b/coverage/inorout.py @@ -13,7 +13,7 @@ import sysconfig import traceback from coverage import env -from coverage.backward import code_object, importlib_util_find_spec +from coverage.backward import importlib_util_find_spec from coverage.disposition import FileDisposition, disposition_init from coverage.files import TreeMatcher, FnmatchMatcher, ModuleMatcher from coverage.files import prep_patterns, find_python_files, canonical_filename @@ -162,7 +162,7 @@ def add_stdlib_paths(paths): # objects still have the file names. So dig into one to find # the path to exclude. The "filename" might be synthetic, # don't be fooled by those. - structseq_file = code_object(_structseq.structseq_new).co_filename + structseq_file = _structseq.structseq_new.__code__.co_filename if not structseq_file.startswith("<"): paths.add(canonical_path(structseq_file)) diff --git a/tests/test_api.py b/tests/test_api.py index 6eff06fe..42ef986d 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -17,7 +17,7 @@ import pytest import coverage from coverage import env -from coverage.backward import code_object, import_local_file +from coverage.backward import import_local_file from coverage.data import line_counts from coverage.files import abs_file, relative_filename from coverage.misc import CoverageException @@ -269,7 +269,7 @@ class ApiTest(CoverageTest): def f1(): a = 1 # pylint: disable=unused-variable - one_line_number = code_object(f1).co_firstlineno + 1 + one_line_number = f1.__code__.co_firstlineno + 1 lines = [] def run_one_function(f): |