diff --git a/changelog/1192.bug.txt b/changelog/1192.bug.txt new file mode 100644 index 00000000..57111e43 --- /dev/null +++ b/changelog/1192.bug.txt @@ -0,0 +1 @@ +- Fix python_version metadata extraction for bdist_egg distributions. diff --git a/tests/test_package.py b/tests/test_package.py index be3d9540..df814ecc 100644 --- a/tests/test_package.py +++ b/tests/test_package.py @@ -465,4 +465,5 @@ def test_malformed_from_file(monkeypatch): def test_package_from_egg(): filename = "tests/fixtures/twine-3.3.0-py3.9.egg" - package_file.PackageFile.from_filename(filename, comment=None) + p = package_file.PackageFile.from_filename(filename, comment=None) + assert p.python_version == "3.9" diff --git a/twine/package.py b/twine/package.py index 8bcec211..1d6e2efc 100644 --- a/twine/package.py +++ b/twine/package.py @@ -62,6 +62,21 @@ ".zip": "sdist", } +# Match the regualr expression used by ``pkg_resources``, extended to +# include the file extension and the end-of-string anchor. +egg_filename_re = re.compile( + r""" + (?P[^-]+) ( + -(?P[^-]+) ( + -py(?P[^-]+) ( + -(?P.+) + )? + )? + )?\.egg$ + """, + re.VERBOSE | re.IGNORECASE, +) + MetadataValue = Union[Optional[str], Sequence[str], Tuple[str, bytes]] logger = logging.getLogger(__name__) @@ -159,8 +174,9 @@ def from_filename(cls, filename: str, comment: Optional[str]) -> "PackageFile": py_version: Optional[str] if dtype == "bdist_egg": - (dist,) = importlib_metadata.Distribution.discover(path=[filename]) - py_version = dist.metadata["Version"] + m = egg_filename_re.match(os.path.basename(filename)) + assert m is not None, "for mypy" + py_version = m.group("pyver") elif dtype == "bdist_wheel": py_version = cast(wheel.Wheel, meta).py_version elif dtype == "bdist_wininst":