Skip to content

Commit faca8dc

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

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
@@ -4,6 +4,7 @@
44
from pathlib import PurePath
55
from urllib.parse import urljoin, urlparse, urlunsplit
66

7+
import packaging_legacy.version
78
from django.contrib.sessions.models import Session
89
from django.core.exceptions import ObjectDoesNotExist
910
from django.db import transaction
@@ -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>=23.0,<24",
3435
]
3536

3637
[project.urls]

0 commit comments

Comments
 (0)