From f3a0a1f41f3667fef0ca4b807f81295be3397220 Mon Sep 17 00:00:00 2001 From: Daniele Nicolodi Date: Wed, 4 Dec 2024 22:12:55 +0100 Subject: [PATCH] Remove egg and wininst support PyPI does not accept these distribution types since August 2023 and there are no modern build backends that produce these, thus they are most likely not used anymore. egg support has only very minimal test coverage and had a fairly obvious although likely inconsequential bug in reporting the target Python version. wininst support has no tests. --- changelog/1195.removal.txt | 2 + docs/internal/twine.rst | 1 - docs/internal/twine.wininst.rst | 4 -- tests/fixtures/twine-3.3.0-py3.9.egg | Bin 65898 -> 0 bytes tests/test_package.py | 12 +++--- twine/package.py | 16 ++------ twine/wininst.py | 59 --------------------------- 7 files changed, 12 insertions(+), 82 deletions(-) create mode 100644 changelog/1195.removal.txt delete mode 100644 docs/internal/twine.wininst.rst delete mode 100644 tests/fixtures/twine-3.3.0-py3.9.egg delete mode 100644 twine/wininst.py diff --git a/changelog/1195.removal.txt b/changelog/1195.removal.txt new file mode 100644 index 00000000..88dbe6bc --- /dev/null +++ b/changelog/1195.removal.txt @@ -0,0 +1,2 @@ +- Remove support for ``egg`` and ``wininst` distribution types. These are not + accepted by PyPI and not produced by any modern build-backeds. diff --git a/docs/internal/twine.rst b/docs/internal/twine.rst index 43265de8..a2ba3950 100644 --- a/docs/internal/twine.rst +++ b/docs/internal/twine.rst @@ -15,4 +15,3 @@ twine package twine.settings twine.utils twine.wheel - twine.wininst diff --git a/docs/internal/twine.wininst.rst b/docs/internal/twine.wininst.rst deleted file mode 100644 index 68da6723..00000000 --- a/docs/internal/twine.wininst.rst +++ /dev/null @@ -1,4 +0,0 @@ -twine.wininst module -==================== - -.. automodule:: twine.wininst diff --git a/tests/fixtures/twine-3.3.0-py3.9.egg b/tests/fixtures/twine-3.3.0-py3.9.egg deleted file mode 100644 index d0088a5e11d5ba5cfd9f071d0c655bf3bf1beeb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65898 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 aj|~-GL4yal@1qbcARYW;SaI?Fum1(v#kBVT diff --git a/tests/test_package.py b/tests/test_package.py index 37125741..61f4b1d2 100644 --- a/tests/test_package.py +++ b/tests/test_package.py @@ -463,12 +463,14 @@ def test_malformed_from_file(monkeypatch): assert "Invalid distribution file" in err.value.args[0] -def test_package_from_egg(): - filename = "tests/fixtures/twine-3.3.0-py3.9.egg" - package_file.PackageFile.from_filename(filename, comment=None) - - def test_package_from_sdist(): filename = "tests/fixtures/twine-1.5.0.tar.gz" p = package_file.PackageFile.from_filename(filename, comment=None) assert p.python_version == "source" + + +def test_package_from_unrecognized_file_error(): + filename = "twine/package.py" + with pytest.raises(exceptions.InvalidDistribution) as err: + package_file.PackageFile.from_filename(filename, comment=None) + assert "Unknown distribution format" in err.value.args[0] diff --git a/twine/package.py b/twine/package.py index 2c3a8f7d..3705e2d8 100644 --- a/twine/package.py +++ b/twine/package.py @@ -44,19 +44,14 @@ from twine import exceptions from twine import wheel -from twine import wininst DIST_TYPES = { - "bdist_wheel": wheel.Wheel, - "bdist_wininst": wininst.WinInst, - "bdist_egg": pkginfo.BDist, + "wheel": wheel.Wheel, "sdist": pkginfo.SDist, } DIST_EXTENSIONS = { - ".whl": "bdist_wheel", - ".exe": "bdist_wininst", - ".egg": "bdist_egg", + ".whl": "wheel", ".tar.bz2": "sdist", ".tar.gz": "sdist", ".zip": "sdist", @@ -157,13 +152,8 @@ def from_filename(cls, filename: str, comment: Optional[str]) -> "PackageFile": ) raise exceptions.InvalidDistribution(msg) - if dtype == "bdist_egg": - (dist,) = importlib_metadata.Distribution.discover(path=[filename]) - py_version = dist.metadata["Version"] - elif dtype == "bdist_wheel": + if dtype == "wheel": py_version = cast(wheel.Wheel, meta).py_version - elif dtype == "bdist_wininst": - py_version = cast(wininst.WinInst, meta).py_version elif dtype == "sdist": py_version = "source" else: diff --git a/twine/wininst.py b/twine/wininst.py deleted file mode 100644 index 42f0d9be..00000000 --- a/twine/wininst.py +++ /dev/null @@ -1,59 +0,0 @@ -import os -import re -import zipfile -from typing import Optional - -from pkginfo import distribution - -from twine import exceptions - -wininst_file_re = re.compile(r".*py(?P\d+\.\d+)\.exe$") - - -class WinInst(distribution.Distribution): - def __init__(self, filename: str, metadata_version: Optional[str] = None) -> None: - self.filename = filename - self.metadata_version = metadata_version - self.extractMetadata() - - @property - def py_version(self) -> str: - m = wininst_file_re.match(self.filename) - if m is None: - return "any" - else: - return m.group("pyver") - - def read(self) -> bytes: - fqn = os.path.abspath(os.path.normpath(self.filename)) - if not os.path.exists(fqn): - raise exceptions.InvalidDistribution("No such file: %s" % fqn) - - if fqn.endswith(".exe"): - archive = zipfile.ZipFile(fqn) - names = archive.namelist() - - def read_file(name: str) -> bytes: - return archive.read(name) - - else: - raise exceptions.InvalidDistribution( - "Not a known archive format for file: %s" % fqn - ) - - try: - tuples = [ - x.split("/") for x in names if x.endswith((".egg-info", "PKG-INFO")) - ] - schwarz = sorted((len(x), x) for x in tuples) - for path in [x[1] for x in schwarz]: - candidate = "/".join(path) - data = read_file(candidate) - if b"Metadata-Version" in data: - return data - finally: - archive.close() - - raise exceptions.InvalidDistribution( - "No PKG-INFO/.egg-info in archive: %s" % fqn - )