Skip to content

Commit 66cb745

Browse files
committed
Sort Simple API detail page releases
Assisted By: Claude Opus 4.6
1 parent 8c12432 commit 66cb745

2 files changed

Lines changed: 8 additions & 2 deletions

File tree

pulp_python/app/pypi/views.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import packaging_legacy.version
23
from datetime import datetime, timedelta, timezone
34
from itertools import chain
45
from pathlib import PurePath
@@ -404,14 +405,18 @@ def retrieve(self, request, path, package):
404405
if not releases:
405406
return HttpResponseNotFound(f"{normalized} does not exist.")
406407

408+
sorted_releases = sorted(
409+
releases.values(),
410+
key=lambda r: (packaging_legacy.version.parse(r["version"]), r["filename"]),
411+
)
407412
media_type = request.accepted_renderer.media_type
408413
headers = {"X-PyPI-Last-Serial": str(PYPI_SERIAL_CONSTANT)}
409414

410415
if media_type == PYPI_SIMPLE_V1_JSON:
411-
detail_data = write_simple_detail_json(normalized, releases.values())
416+
detail_data = write_simple_detail_json(normalized, sorted_releases)
412417
return Response(detail_data, headers=headers)
413418
else:
414-
detail_data = write_simple_detail(normalized, releases.values())
419+
detail_data = write_simple_detail(normalized, sorted_releases)
415420
kwargs = {"content_type": media_type, "headers": headers}
416421
return HttpResponse(detail_data, **kwargs)
417422

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ dependencies = [
3131
"bandersnatch>=6.6.0,<6.7",
3232
"pypi-simple>=1.8.0,<2.0",
3333
"pypi-attestations==0.0.28", # API is not stable
34+
"packaging_legacy",
3435
]
3536

3637
[project.urls]

0 commit comments

Comments
 (0)