From 16aefeaef42346ffb5f3696f1bd207cb19c9584f Mon Sep 17 00:00:00 2001 From: Dave O'Connor Date: Wed, 1 Oct 2025 17:01:13 -0700 Subject: [PATCH 1/2] Made name of library views redirect more intuitive (#1939) --- config/urls.py | 4 ++-- core/views.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/urls.py b/config/urls.py index df6f8da2..44539afe 100755 --- a/config/urls.py +++ b/config/urls.py @@ -26,7 +26,7 @@ RedirectToDocsView, RedirectToHTMLDocsView, RedirectToHTMLToolsView, - RedirectToLibraryView, + RedirectToLibrariesView, RedirectToReleaseView, RedirectToToolsView, StaticContentTemplateView, @@ -404,7 +404,7 @@ ), re_path( r"^doc/libs/(?P[^/]+)/?$", - RedirectToLibraryView.as_view(), + RedirectToLibrariesView.as_view(), name="redirect-to-library-page", ), re_path( diff --git a/core/views.py b/core/views.py index 98d2eaa8..908ece26 100644 --- a/core/views.py +++ b/core/views.py @@ -891,7 +891,7 @@ def get(self, request, requested_version): return HttpResponseRedirect(new_path) -class RedirectToLibraryView(BaseRedirectView): +class RedirectToLibrariesView(BaseRedirectView): """View to redirect to a versioned libraries page.""" def get(self, request, requested_version): From d7c485111d3975860b4a480450a97dc7bbf950bb Mon Sep 17 00:00:00 2001 From: Dave O'Connor Date: Wed, 1 Oct 2025 17:01:39 -0700 Subject: [PATCH 2/2] Added support for /lib/{LIBRARY} to redirect to library detail page (#1939) --- config/urls.py | 6 ++++++ core/tests/test_views.py | 15 +++++++++++++++ core/views.py | 18 +++++++++++++++++- libraries/utils.py | 2 +- 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/config/urls.py b/config/urls.py index 44539afe..05f0a2fa 100755 --- a/config/urls.py +++ b/config/urls.py @@ -34,6 +34,7 @@ BoostDevelopmentView, ModernizedDocsView, QRCodeView, + RedirectToLibraryDetailView, ) from libraries.api import LibrarySearchView from libraries.views import ( @@ -381,6 +382,11 @@ ), ] + [ + re_path( + r"^lib/(?P[^/]+)/?$", + RedirectToLibraryDetailView.as_view(), + name="redirect-to-library-view", + ), # Redirects for old boost.org urls. re_path( r"^libs/(?P[^/]+)/(?P.*)/?$", diff --git a/core/tests/test_views.py b/core/tests/test_views.py index ad159d9c..4c9f560a 100644 --- a/core/tests/test_views.py +++ b/core/tests/test_views.py @@ -329,3 +329,18 @@ def test_qrc_logs_plausible_error_but_still_redirects(tp, caplog): tp.response_302(res) assert res["Location"] == "/library/" assert any("Plausible event post failed" in r.message for r in caplog.records) + + +def test_redirect_to_library_detail_view(tp): + """Test that /lib// redirects to library detail page with prioritized version.""" + response = tp.get("redirect-to-library-view", library_slug="algorithm") + tp.response_302(response) + assert response["Location"] == "/library/latest/algorithm/" + + +def test_redirect_to_library_detail_view_with_cookie(tp): + """Test that /lib// redirects using version from cookie.""" + tp.client.cookies["boost_version"] = "boost-1-86-0" + response = tp.get("redirect-to-library-view", library_slug="algorithm") + tp.response_302(response) + assert response["Location"] == "/library/1.86.0/algorithm/" diff --git a/core/views.py b/core/views.py index 908ece26..e6316572 100644 --- a/core/views.py +++ b/core/views.py @@ -30,8 +30,9 @@ from libraries.constants import LATEST_RELEASE_URL_PATH_STR from libraries.utils import ( legacy_path_transform, - get_prioritized_library_view, generate_canonical_library_uri, + get_prioritized_library_view, + get_prioritized_version, ) from versions.models import Version @@ -891,6 +892,21 @@ def get(self, request, requested_version): return HttpResponseRedirect(new_path) +class RedirectToLibraryDetailView(BaseRedirectView): + """View to redirect to a library's detail page""" + + def get(self, request, library_slug): + return redirect( + reverse( + "library-detail", + kwargs={ + "library_slug": library_slug, + "version_slug": get_prioritized_version(request), + }, + ) + ) + + class RedirectToLibrariesView(BaseRedirectView): """View to redirect to a versioned libraries page.""" diff --git a/libraries/utils.py b/libraries/utils.py index db8781d6..ea5da767 100644 --- a/libraries/utils.py +++ b/libraries/utils.py @@ -124,7 +124,7 @@ def get_prioritized_version(request): """ url_version = get_version_from_url(request) cookie_version = get_version_from_cookie(request) - default_version = None + default_version = LATEST_RELEASE_URL_PATH_STR return url_version or cookie_version or default_version