8000 Adding 'latest' redirect views for latest releases · pythonanywhere/pythondotorg@c1ef235 · GitHub
[go: up one dir, main page]

Skip to content

Commit c1ef235

Browse files
committed
Adding 'latest' redirect views for latest releases
1 parent 05c5318 commit c1ef235

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

downloads/tests/test_views.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
User = get_user_model()
1212

13+
1314
class DownloadViewsTests(BaseDownloadTests):
1415
def test_download_full_os_list(self):
1516
url = reverse('download:download_full_os_list')
@@ -36,6 +37,18 @@ def test_download(self):
3637
self.assertEqual(response.status_code, 200)
3738

3839

40+
def test_latest_redirects(self):
41+
latest_python2 = Release.objects.released().python2().latest()
42+
url = reverse('download:download_latest_python2')
43+
response = self.client.get(url)
44+
self.assertRedirects(response, latest_python2.get_absolute_url())
45+
46+
latest_python3 = Release.objects.released().python3().latest()
47+
url = reverse('download:download_latest_python3')
48+
response = self.client.get(url)
49+
self.assertRedirects(response, latest_python3.get_absolute_url())
50+
51+
3952
class DownloadApiViewsTest(BaseDownloadTests):
4053
def setUp(self):
4154
super().setUp()

downloads/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from . import views
33

44
urlpatterns = patterns('',
5+
url(r'latest/python2/?$', views.DownloadLatestPython2.as_view(), name='download_latest_python2'),
6+
url(r'latest/python3/?$', views.DownloadLatestPython3.as_view(), name='download_latest_python3'),
57
url(r'operating-systems/$', views.DownloadFullOSList.as_view(), name='download_full_os_list'),
68
url(r'release/(?P<release_slug>[-_\w]+)/$', views.DownloadReleaseDetail.as_view(), name='download_release_detail'),
79
url(r'(?P<slug>[-_\w]+)/$', views.DownloadOSList.as_view(), name='download_os_list'),

downloads/views.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,41 @@
1-
from django.views.generic import DetailView, TemplateView, ListView
1+
from django.core.urlresolvers import reverse
2+
from django.views.generic import DetailView, TemplateView, ListView, RedirectView
23
from django.http import Http404
4+
35
from .models import OS, Release
46

57

8+
class DownloadLatestPython2(RedirectView):
9+
""" Redirec to latest Python 2 release """
10+
permanent = False
11+
12+
def get_redirect_url(self, **kwargs):
13+
try:
14+
latest_python2 = Release.objects.released().python2().latest()
15+
except Release.DoesNotExist:
16+
latest_python2 = None
17+
18+
if latest_python2:
19+
return latest_python2.get_absolute_url()
20+
else:
21+
return reverse('download')
22+
23+
class DownloadLatestPython3(RedirectView):
24+
""" Redirec to latest Python 3 release """
25+
permanent = False
26+
27+
def get_redirect_url(self, **kwargs):
28+
try:
29+
latest_python3 = Release.objects.released().python3().latest()
30+
except Release.DoesNotExist:
31+
latest_python3 = None
32+
33+
if latest_python3:
34+
return latest_python3.get_absolute_url()
35+
else:
36+
return reverse('download')
37+
38+
639
class DownloadBase(object):
740
""" Include latest releases in all views """
841
def get_context_data(self, **kwargs):

0 commit comments

Comments
 (0)
0