From 2adeb8bb5c2a12a080d7a528e35e5df9ffe7785f Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Wed, 30 Nov 2022 18:44:40 -0500 Subject: fix: when checking source existence for remapping, zipfiles are ok --- coverage/python.py | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'coverage/python.py') diff --git a/coverage/python.py b/coverage/python.py index c8b8e774..b3232085 100644 --- a/coverage/python.py +++ b/coverage/python.py @@ -9,7 +9,7 @@ import zipimport from coverage import env from coverage.exceptions import CoverageException, NoSource -from coverage.files import canonical_filename, relative_filename +from coverage.files import canonical_filename, relative_filename, zip_location from coverage.misc import contract, expensive, isolate_module, join_regex from coverage.parser import PythonParser from coverage.phystokens import source_token_lines, source_encoding @@ -79,19 +79,18 @@ def get_zip_bytes(filename): an empty string if the file is empty. """ - markers = ['.zip'+os.sep, '.egg'+os.sep, '.pex'+os.sep] - for marker in markers: - if marker in filename: - parts = filename.split(marker) - try: - zi = zipimport.zipimporter(parts[0]+marker[:-1]) - except zipimport.ZipImportError: - continue - try: - data = zi.get_data(parts[1]) - except OSError: - continue - return data + zipfile_inner = zip_location(filename) + if zipfile_inner is not None: + zipfile, inner = zipfile_inner + try: + zi = zipimport.zipimporter(zipfile) + except zipimport.ZipImportError: + return None + try: + data = zi.get_data(inner) + except OSError: + return None + return data return None -- cgit v1.2.1