From patchwork Sun Apr 22 01:59:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Emil Velikov via arch-projects X-Patchwork-Id: 496 Return-Path: Delivered-To: patchwork@archlinux.org Received: from apollo.archlinux.org (localhost [127.0.0.1]) by apollo.archlinux.org (Postfix) with ESMTP id 5238E3741E0D for ; Sun, 22 Apr 2018 01:59:29 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on apollo.archlinux.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED=0.1, DKIM_VALID=-0.1,DKIM_VALID_AU=-0.1,MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_MED=-2.3 autolearn=ham autolearn_force=no version=3.4.1 X-Spam-BL-Results: [127.0.0.10] [127.0.9.2] [127.0.0.10] Received: from orion.archlinux.org (orion.archlinux.org [IPv6:2a01:4f8:160:6087::1]) by apollo.archlinux.org (Postfix) with ESMTPS for ; Sun, 22 Apr 2018 01:59:29 +0000 (UTC) Received: from orion.archlinux.org (localhost [127.0.0.1]) by orion.archlinux.org (Postfix) with ESMTP id 02FF59FCD5506; Sun, 22 Apr 2018 01:59:22 +0000 (UTC) Received: from luna.archlinux.org (luna.archlinux.org [IPv6:2a01:4f8:160:3033::2]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by orion.archlinux.org (Postfix) with ESMTPS; Sun, 22 Apr 2018 01:59:21 +0000 (UTC) Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1]) by luna.archlinux.org (Postfix) with ESMTP id 54C862C7AD; Sun, 22 Apr 2018 01:59:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=archlinux.org; s=luna2; t=1524362360; bh=hXRhc9Zi1ZZQYqhw/BsT6lmEdEFk8BrEJy1pmM1Ks8k=; h=Date:In-Reply-To:References:To:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc; b=StwbUEcu12/ceaH3lCmu82wRGNHi8qhdGbBcaY9gRUD6FxrDuiO0gQcDGgn5zIXRg t41Q7dWD+O+KRedJLGDndYDw53uiqa4smptk/GCLCGm+UwgFS1K5T1mu9Yj05bYLqA tgYft/C8etRJOA7QWKHgzUsnd5KkYulvAQghbSMfqZiAbJgC/6SxlmSA+ehJS8K+g0 bNxU7aRF6TskvXwU6jtbzgnlIV3aR6JQNLOHhkrIAG/4CG0iqZ6UEijToTTngebEL+ LMJuaRpuJ8kwHqJ3IfdmcOeOLdsh4z56QlPOMWbBqdFZ/O2J0cs46J5DS34RN2uwnT Azf3wTE7UY5fxP7Yf9GfFpLvrgFaOK6mxaUsnIuoATuQesMWEDYZAE6BcVwJJvmyHl A/DD9JJmZ+sgs0HLqczbTjwQOcJI0kMbQKQKIy0rFy2afEdgcdbLXMTBFzYVHZke2k 8FGnErd3643PKaqCsKzFPYQw5QTGFFTGvLKiJHbzfoa8TKh70+rpukn/oXQWJNbDd0 udNm+FYvZbuErXOL2ybWSqmD+TuOuzV7nZoslvdbfCuNQckqFpTMisk2AYekJUKJSZ gJTdNxwpqwpFzsH4vovfoS3rH4/ET2/SA7g1S4/NOIY63M1U6UFQhPeYuC+DqUu/f8 t+gSqgQR5GO+ox1kc5ybK0sw= Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1]) by luna.archlinux.org (Postfix) with ESMTP id 8C6FB2C6B5 for ; Sun, 22 Apr 2018 01:59:18 +0000 (UTC) Received: from orion.archlinux.org (orion.archlinux.org [88.198.91.70]) by luna.archlinux.org (Postfix) with ESMTPS for ; Sun, 22 Apr 2018 01:59:18 +0000 (UTC) Received: from orion.archlinux.org (localhost [127.0.0.1]) by orion.archlinux.org (Postfix) with ESMTP id 177939FCD54FA for ; Sun, 22 Apr 2018 01:59:11 +0000 (UTC) Received: from genki.is (genki.is [159.203.135.224]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by orion.archlinux.org (Postfix) with ESMTPS for ; Sun, 22 Apr 2018 01:59:10 +0000 (UTC) Received: from localhost (c-73-47-239-165.hsd1.nh.comcast.net [73.47.239.165]) by genki.is (Postfix) with ESMTPSA id B6F6641D5A; Sun, 22 Apr 2018 01:59:06 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 genki.is B6F6641D5A Date: Sat, 21 Apr 2018 21:59:09 -0400 Message-Id: In-Reply-To: References: To: arch-projects@archlinux.org Subject: [arch-projects] [archweb] [PATCH 1/2] mirrorlist: Accept GET parameters as filters X-BeenThere: arch-projects@archlinux.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: Arch Linux projects development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Genki Sky via arch-projects Reply-To: Arch Linux projects development discussion Cc: =?unknown-8bit?q?Genki_Sky_=3Csky=40genki=2Eis=3E=2C_Johannes_L=C3=B6thb?= =?unknown-8bit?q?erg_=3Cjohannes=40kyriasis=2Ecom=3E?= Errors-To: arch-projects-bounces@archlinux.org Sender: "arch-projects" This fixes a regression. Originally request.REQUEST was used, but django 1.9 removed this. In its stead, request.POST was used unconditionally. However, this results in any GET request returning *all* mirrors, rather than filtering as requested in the parameters. This patch uses POST or GET based on the request method. This fixes the behavior of the [mirror-filter-form], and any scripts depending on the generated URL format. Accordingly, make test_mirrorlist_filter() test both the success and failure cases, rather than just success. [mirror-filter-form]: https://www.archlinux.org/mirrorlist/ Signed-off-by: Genki Sky --- mirrors/tests/__init__.py | 11 ++++++----- mirrors/tests/test_mirrorlist.py | 16 ++++++++++++++-- mirrors/views/mirrorlist.py | 3 ++- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/mirrors/tests/__init__.py b/mirrors/tests/__init__.py index fb6c10d..a1d3c2c 100644 --- a/mirrors/tests/__init__.py +++ b/mirrors/tests/__init__.py @@ -1,12 +1,13 @@ from mirrors.models import MirrorUrl, MirrorProtocol, Mirror -def create_mirror_url(): - mirror = Mirror.objects.create(name='mirror1', +def create_mirror_url(name='mirror1', country='US', + protocol='http', url='https://archlinux.org'): + mirror = Mirror.objects.create(name=name, admin_email='admin@archlinux.org') - mirror_protocol = MirrorProtocol.objects.create(protocol='http') - mirror_url = MirrorUrl.objects.create(url='https://archlinux.org', + mirror_protocol = MirrorProtocol.objects.create(protocol=protocol) + mirror_url = MirrorUrl.objects.create(url=url, protocol=mirror_protocol, mirror=mirror, - country='US') + country=country) return mirror_url diff --git a/mirrors/tests/test_mirrorlist.py b/mirrors/tests/test_mirrorlist.py index 5590a96..1ad3d8d 100644 --- a/mirrors/tests/test_mirrorlist.py +++ b/mirrors/tests/test_mirrorlist.py @@ -30,9 +30,21 @@ def test_mirrorlist_all_https(self): # TODO: test 200 case def test_mirrorlist_filter(self): - response = self.client.get('/mirrorlist/?country=all&protocol=http&ip_version=4') + jp_mirror_url = create_mirror_url( + name='jp_mirror', + country='JP', + protocol='https', + url='https://wikipedia.jp') + + # First test that we correctly see the above mirror. + response = self.client.get('/mirrorlist/?country=JP&protocol=https') self.assertEqual(response.status_code, 200) - self.assertIn(self.mirror_url.hostname, response.content) + self.assertIn(jp_mirror_url.hostname, response.content) + + # Now confirm that the US mirror did not show up. + self.assertNotIn(self.mirror_url.hostname, response.content) + + jp_mirror_url.delete() def test_generate(self): response = self.client.get('/mirrorlist/?country=all&protocol=http&ip_version=4') diff --git a/mirrors/views/mirrorlist.py b/mirrors/views/mirrorlist.py index 35d59e8..45c0181 100644 --- a/mirrors/views/mirrorlist.py +++ b/mirrors/views/mirrorlist.py @@ -55,7 +55,8 @@ def as_div(self): @csrf_exempt def generate_mirrorlist(request): if request.method == 'POST' or len(request.GET) > 0: - form = MirrorlistForm(data=request.POST) + data = request.POST if request.method == 'POST' else request.GET + form = MirrorlistForm(data=data) if form.is_valid(): countries = form.cleaned_data['country'] protocols = form.cleaned_data['protocol']