Skip to content

Instantly share code, notes, and snippets.

@jaraco
Created June 26, 2024 14:18
Show Gist options
  • Save jaraco/22c22564a9fe6fdb137ef0a217511030 to your computer and use it in GitHub Desktop.
Save jaraco/22c22564a9fe6fdb137ef0a217511030 to your computer and use it in GitHub Desktop.
diff --git a/twine/package.py b/twine/package.py
index 0845105..9361ba9 100644
--- a/twine/package.py
+++ b/twine/package.py
@@ -18,6 +18,7 @@ import logging
import os
import re
import subprocess
+import typing
import warnings
from typing import (
Any,
@@ -73,12 +74,17 @@ def _safe_name(name: str) -> str:
return re.sub("[^A-Za-z0-9.]+", "-", name)
+class CheckedDistribution(pkginfo.Distribution, typing.Protocol):
+ name: str
+ version: str
+
+
class PackageFile:
def __init__(
self,
filename: str,
comment: Optional[str],
- metadata: pkginfo.Distribution,
+ metadata: CheckedDistribution,
python_version: Optional[str],
filetype: Optional[str],
) -> None:
@@ -88,7 +94,7 @@ class PackageFile:
self.metadata = metadata
self.python_version = python_version
self.filetype = filetype
- self.safe_name = _safe_name(cast(str, metadata.name))
+ self.safe_name = _safe_name(metadata.name)
self.signed_filename = self.filename + ".asc"
self.signed_basefilename = self.basefilename + ".asc"
self.gpg_signature: Optional[Tuple[str, bytes]] = None
@@ -156,7 +162,9 @@ class PackageFile:
else:
py_version = None
- return cls(filename, comment, meta, py_version, dtype)
+ return cls(
+ filename, comment, cast(CheckedDistribution, meta), py_version, dtype
+ )
@staticmethod
def _is_unknown_metadata_version(
diff --git a/twine/repository.py b/twine/repository.py
index 32c5470..bf3078e 100644
--- a/twine/repository.py
+++ b/twine/repository.py
@@ -128,22 +128,21 @@ class Repository:
def _upload(self, package: package_file.PackageFile) -> requests.Response:
data = package.metadata_dictionary()
- data.update(
- {
- # action
- ":action": "file_upload",
- "protocol_version": "1",
- }
- )
+ data.update({
+ # action
+ ":action": "file_upload",
+ "protocol_version": "1",
+ })
data_to_send = self._convert_data_to_list_of_tuples(data)
print(f"Uploading {package.basefilename}")
with open(package.filename, "rb") as fp:
- data_to_send.append(
- ("content", (package.basefilename, fp, "application/octet-stream"))
- )
+ data_to_send.append((
+ "content",
+ (package.basefilename, fp, "application/octet-stream"),
+ ))
encoder = requests_toolbelt.MultipartEncoder(data_to_send)
with rich.progress.Progress(
@@ -223,7 +222,7 @@ class Repository:
releases = {}
self._releases_json_data[safe_name] = releases
- packages = releases.get(cast(str, package.metadata.version), [])
+ packages = releases.get(package.metadata.version, [])
for uploaded_package in packages:
if uploaded_package["filename"] == package.basefilename:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment