summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjelle van der Waa <jelle@vdwaa.nl>2018-05-07 21:44:29 +0200
committerGitHub <noreply@github.com>2018-05-07 21:44:29 +0200
commitb94a36e7c62fe9be8d35d0e85088798a28ba6d61 (patch)
tree34c84a632895ec4d19db3c1ed55a5863dabdcdc4
parentcb3e81fe588f68fbb230f2ae013bd8496dd2a88f (diff)
parentcf0ac9320d1472448c97f1c7d260fad0f3074491 (diff)
downloadarchweb-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.py10
-rw-r--r--mirrors/urls.py1
-rw-r--r--mirrors/views/__init__.py7
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()