From 2292e5762795d3f5464aa08955677387caa612bd Mon Sep 17 00:00:00 2001 From: Jitka Halova Date: Tue, 14 Jul 2026 17:49:05 +0200 Subject: [PATCH] Sort Simple API detail page releases Assisted By: Claude Opus 4.6 --- pulp_python/app/pypi/views.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pulp_python/app/pypi/views.py b/pulp_python/app/pypi/views.py index e228d88d..b7dc6b76 100644 --- a/pulp_python/app/pypi/views.py +++ b/pulp_python/app/pypi/views.py @@ -21,6 +21,7 @@ from drf_spectacular.utils import extend_schema from dynaconf import settings from packaging.utils import canonicalize_name +from packaging.version import Version from rest_framework.exceptions import NotAcceptable from rest_framework.renderers import BrowsableAPIRenderer, JSONRenderer, TemplateHTMLRenderer from rest_framework.response import Response @@ -404,14 +405,17 @@ def retrieve(self, request, path, package): if not releases: return HttpResponseNotFound(f"{normalized} does not exist.") + sorted_releases = sorted( + releases.values(), key=lambda r: (Version(r["version"]), r["filename"]) + ) media_type = request.accepted_renderer.media_type headers = {"X-PyPI-Last-Serial": str(PYPI_SERIAL_CONSTANT)} if media_type == PYPI_SIMPLE_V1_JSON: - detail_data = write_simple_detail_json(normalized, releases.values()) + detail_data = write_simple_detail_json(normalized, sorted_releases) return Response(detail_data, headers=headers) else: - detail_data = write_simple_detail(normalized, releases.values()) + detail_data = write_simple_detail(normalized, sorted_releases) kwargs = {"content_type": media_type, "headers": headers} return HttpResponse(detail_data, **kwargs)