Skip to content

Commit 2595f77

Browse files
committed
Add /downloads/latest/prerelease redirect
1 parent 48cf05a commit 2595f77

File tree

4 files changed

+25
-0
lines changed

4 files changed

+25
-0
lines changed

downloads/managers.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ def latest_python3(self, minor_version: int | None = None):
3535
pattern = rf"^Python 3\.{minor_version}\."
3636
return self.python3().filter(name__regex=pattern).order_by("-release_date")
3737

38+
def latest_prerelease(self):
39+
return self.python3().filter(pre_release=True).order_by("-release_date")
40+
3841
def latest_pymanager(self):
3942
return self.pymanager().filter(is_latest=True)
4043

@@ -52,5 +55,8 @@ def latest_python2(self):
5255
def latest_python3(self, minor_version: int | None = None):
5356
return self.get_queryset().latest_python3(minor_version).first()
5457

58+
def latest_prerelease(self):
59+
return self.get_queryset().latest_prerelease().first()
60+
5561
def latest_pymanager(self):
5662
return self.get_queryset().latest_pymanager().first()

downloads/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,7 @@ def purge_fastly_download_pages(sender, instance, **kwargs):
298298
match = re.match(r'^3\.(\d+)', version)
299299
if match:
300300
purge_url(f'/downloads/latest/python3.{match.group(1)}/')
301+
purge_url('/downloads/latest/prerelease/')
301302
purge_url('/downloads/latest/pymanager/')
302303
purge_url('/downloads/macos/')
303304
purge_url('/downloads/source/')

downloads/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
re_path(r'latest/python2/?$', views.DownloadLatestPython2.as_view(), name='download_latest_python2'),
77
re_path(r'latest/python3/?$', views.DownloadLatestPython3.as_view(), name='download_latest_python3'),
88
re_path(r'latest/python3\.(?P<minor>\d+)/?$', views.DownloadLatestPython3x.as_view(), name='download_latest_python3x'),
9+
re_path(r'latest/prerelease/?$', views.DownloadLatestPrerelease.as_view(), name='download_latest_prerelease'),
910
re_path(r'latest/pymanager/?$', views.DownloadLatestPyManager.as_view(), name='download_latest_pymanager'),
1011
re_path(r'latest/?$', views.DownloadLatestPython3.as_view(), name='download_latest_python3'),
1112
path('operating-systems/', views.DownloadFullOSList.as_view(), name='download_full_os_list'),

downloads/views.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,23 @@ def get_redirect_url(self, **kwargs):
6666
return reverse('downloads:download')
6767

6868

69+
class DownloadLatestPrerelease(RedirectView):
70+
"""Redirect to latest Python 3 prerelease"""
71+
72+
permanent = False
73+
74+
def get_redirect_url(self, **kwargs):
75+
try:
76+
latest_prerelease = Release.objects.latest_prerelease()
77+
except Release.DoesNotExist:
78+
latest_prerelease = None
79+
80+
if latest_prerelease:
81+
return latest_prerelease.get_absolute_url()
82+
else:
83+
return reverse("downloads:download")
84+
85+
6986
class DownloadLatestPyManager(RedirectView):
7087
""" Redirect to latest Python install manager release """
7188
permanent = False

0 commit comments

Comments
 (0)