Skip to content

Commit 9bd8f1a

Browse files
committed
Publish free-threaded Windows ZIP artifacts
Recognize the Windows free-threaded t version marker when listing release files. Give each free-threaded Windows embeddable ZIP architecture-distinct metadata so generated slugs do not collide and the files stay non-download-button artifacts. Add pytest coverage for prerelease and final release metadata generation.
1 parent 6e6f19d commit 9bd8f1a

2 files changed

Lines changed: 114 additions & 1 deletion

File tree

add_to_pydotorg.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,33 @@ def get_file_descriptions(
128128
rx(r"-embed-arm64\.zip$"),
129129
("Windows embeddable package (ARM64)", "windows", False, ""),
130130
),
131+
(
132+
rx(r"\dt-amd64\.zip$"),
133+
(
134+
"Windows free-threaded 64-bit embeddable package",
135+
"windows",
136+
False,
137+
"",
138+
),
139+
),
140+
(
141+
rx(r"\dt-arm64\.zip$"),
142+
(
143+
"Windows free-threaded ARM64 embeddable package",
144+
"windows",
145+
False,
146+
"",
147+
),
148+
),
149+
(
150+
rx(r"\dt-win32\.zip$"),
151+
(
152+
"Windows free-threaded 32-bit embeddable package",
153+
"windows",
154+
False,
155+
"",
156+
),
157+
),
131158
(
132159
rx(r"-arm64\.exe$"),
133160
("Windows installer (ARM64)", "windows", False, "Experimental"),
@@ -262,6 +289,7 @@ def list_files(
262289
) -> Generator[tuple[str, str, str, bool, str], None, None]:
263290
"""List all of the release's download files."""
264291
reldir = base_version(release)
292+
version_prefixes = (release + "-", release + ".", release + "t-")
265293
for rfile in sorted(os.listdir(path.join(ftp_root, reldir))):
266294
if not path.isfile(path.join(ftp_root, reldir, rfile)):
267295
continue
@@ -275,7 +303,7 @@ def list_files(
275303
print(f" File {reldir}/{rfile} has wrong prefix")
276304
continue
277305

278-
if not rest.startswith((release + "-", release + ".")):
306+
if not rest.startswith(version_prefixes):
279307
print(f" File {reldir}/{rfile} has a different version")
280308
continue
281309

tests/test_add_to_pydotorg.py

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,27 @@ def test_list_files(fs: FakeFilesystem) -> None:
213213
"",
214214
),
215215
("python-3.14.0b3.exe", "Windows installer (32-bit)", "windows", False, ""),
216+
(
217+
"python-3.14.0b3t-amd64.zip",
218+
"Windows free-threaded 64-bit embeddable package",
219+
"windows",
220+
False,
221+
"",
222+
),
223+
(
224+
"python-3.14.0b3t-arm64.zip",
225+
"Windows free-threaded ARM64 embeddable package",
226+
"windows",
227+
False,
228+
"",
229+
),
230+
(
231+
"python-3.14.0b3t-win32.zip",
232+
"Windows free-threaded 32-bit embeddable package",
233+
"windows",
234+
False,
235+
"",
236+
),
216237
(
217238
"windows-3.14.0b3.json",
218239
"Windows release manifest",
@@ -221,3 +242,67 @@ def test_list_files(fs: FakeFilesystem) -> None:
221242
"Install with 'py install 3.14'",
222243
),
223244
]
245+
246+
247+
def test_list_files_accepts_final_free_threaded_windows_names(
248+
fs: FakeFilesystem,
249+
) -> None:
250+
fake_ftp_root = "/fake_ftp_root"
251+
release_dir = Path(fake_ftp_root) / "3.14.0"
252+
fs.create_dir(release_dir)
253+
fs.create_file(release_dir / "python-3.14.0t-amd64.zip")
254+
255+
files = list(add_to_pydotorg.list_files(fake_ftp_root, "3.14.0"))
256+
257+
assert files == [
258+
(
259+
"python-3.14.0t-amd64.zip",
260+
"Windows free-threaded 64-bit embeddable package",
261+
"windows",
262+
False,
263+
"",
264+
)
265+
]
266+
267+
268+
def test_free_threaded_windows_zip_file_dicts_have_unique_metadata(
269+
fs: FakeFilesystem,
270+
) -> None:
271+
fake_ftp_root = "/fake_ftp_root"
272+
release = "3.14.0b3"
273+
release_dir = Path(fake_ftp_root) / "3.14.0"
274+
fs.create_dir(release_dir)
275+
files = [
276+
"python-3.14.0b3t-amd64.zip",
277+
"python-3.14.0b3t-arm64.zip",
278+
"python-3.14.0b3t-win32.zip",
279+
]
280+
for rfile in files:
281+
fs.create_file(release_dir / rfile)
282+
283+
file_dicts = []
284+
for (
285+
rfile,
286+
name,
287+
_os_slug,
288+
download_button,
289+
description,
290+
) in add_to_pydotorg.list_files(
291+
fake_ftp_root,
292+
release,
293+
):
294+
file_dicts.append(
295+
add_to_pydotorg.build_file_dict(
296+
fake_ftp_root,
297+
release,
298+
rfile,
299+
1,
300+
name,
301+
2,
302+
download_button,
303+
description,
304+
)
305+
)
306+
307+
assert len({file_dict["slug"] for file_dict in file_dicts}) == len(files)
308+
assert {file_dict["download_button"] for file_dict in file_dicts} == {False}

0 commit comments

Comments
 (0)