diff options
author | jelle van der Waa <jelle@vdwaa.nl> | 2018-05-07 21:44:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-07 21:44:29 +0200 |
commit | b94a36e7c62fe9be8d35d0e85088798a28ba6d61 (patch) | |
tree | 34c84a632895ec4d19db3c1ed55a5863dabdcdc4 | |
parent | cb3e81fe588f68fbb230f2ae013bd8496dd2a88f (diff) | |
parent | cf0ac9320d1472448c97f1c7d260fad0f3074491 (diff) | |
download | archweb-b94a36e7c62fe9be8d35d0e85088798a28ba6d61.tar.gz archweb-b94a36e7c62fe9be8d35d0e85088798a28ba6d61.zip |
Merge pull request #105 from kyrias/mirror-list-tier
mirrors: Allow listing mirrors in only a specific tier
-rw-r--r-- | mirrors/tests/test_mirrorlist.py | 10 | ||||
-rw-r--r-- | mirrors/urls.py | 1 | ||||
-rw-r--r-- | mirrors/views/__init__.py | 7 |
3 files changed, 17 insertions, 1 deletions
diff --git a/mirrors/tests/test_mirrorlist.py b/mirrors/tests/test_mirrorlist.py index 9e208125..0fe6815e 100644 --- a/mirrors/tests/test_mirrorlist.py +++ b/mirrors/tests/test_mirrorlist.py @@ -1,6 +1,7 @@ from django.test import TestCase from mirrors.tests import create_mirror_url +from mirrors.models import Mirror class MirrorListTest(TestCase): @@ -14,6 +15,15 @@ class MirrorListTest(TestCase): response = self.client.get('/mirrorlist/') self.assertEqual(response.status_code, 200) + def test_mirrorlist_tier(self): + response = self.client.get('/mirrorlist/tier/1/') + self.assertEqual(response.status_code, 200) + + def test_mirrorlist_tier(self): + last_tier = Mirror.TIER_CHOICES[-1][0] + response = self.client.get('/mirrorlist/tier/{}/'.format(last_tier + 1)) + self.assertEqual(response.status_code, 404) + def test_mirrorlist_all(self): response = self.client.get('/mirrorlist/all/') self.assertEqual(response.status_code, 200) diff --git a/mirrors/urls.py b/mirrors/urls.py index f979c86e..f046af94 100644 --- a/mirrors/urls.py +++ b/mirrors/urls.py @@ -5,6 +5,7 @@ from .views.api import status_json, mirror_details_json, locations_json urlpatterns = [ url(r'^$', mirrors, name='mirror-list'), + url(r'^tier/(?P<tier>\d+)/$', mirrors, name='mirror-list-tier'), url(r'^status/$', status, name='mirror-status'), url(r'^status/json/$', status_json, name='mirror-status-json'), url(r'^status/tier/(?P<tier>\d+)/$', status, name='mirror-status-tier'), diff --git a/mirrors/views/__init__.py b/mirrors/views/__init__.py index 01e8519d..d7a45824 100644 --- a/mirrors/views/__init__.py +++ b/mirrors/views/__init__.py @@ -14,8 +14,13 @@ from ..models import (Mirror, MirrorUrl, MirrorProtocol, MirrorLog, from ..utils import get_mirror_statuses, get_mirror_errors -def mirrors(request): +def mirrors(request, tier=None): mirror_list = Mirror.objects.select_related().order_by('tier', 'name') + if tier is not None: + tier = int(tier) + if tier not in [t[0] for t in Mirror.TIER_CHOICES]: + raise Http404 + mirror_list = mirror_list.filter(tier=tier) protos = MirrorUrl.objects.values_list( 'mirror_id', 'protocol__protocol').order_by( 'mirror_id', 'protocol__protocol').distinct() |