From 6e9724347c04be1b85e58a9b936c1110a02016a5 Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Sat, 10 Apr 2021 13:45:00 +0300 Subject: Create basic redirect app --- pydis_site/apps/redirect/__init__.py | 0 pydis_site/apps/redirect/apps.py | 7 +++++++ pydis_site/apps/redirect/migrations/__init__.py | 0 3 files changed, 7 insertions(+) create mode 100644 pydis_site/apps/redirect/__init__.py create mode 100644 pydis_site/apps/redirect/apps.py create mode 100644 pydis_site/apps/redirect/migrations/__init__.py (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/__init__.py b/pydis_site/apps/redirect/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pydis_site/apps/redirect/apps.py b/pydis_site/apps/redirect/apps.py new file mode 100644 index 00000000..9b70d169 --- /dev/null +++ b/pydis_site/apps/redirect/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class RedirectConfig(AppConfig): + """AppConfig instance for Redirect app.""" + + name = 'redirect' diff --git a/pydis_site/apps/redirect/migrations/__init__.py b/pydis_site/apps/redirect/migrations/__init__.py new file mode 100644 index 00000000..e69de29b -- cgit v1.2.3 From 1d33f1134e49fb14d662556d5de6232d0a5acb39 Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Sat, 10 Apr 2021 13:45:26 +0300 Subject: Add redirect app to settings and add resources redirections config --- pydis_site/settings.py | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/settings.py b/pydis_site/settings.py index d409bb21..bc7ff1f3 100644 --- a/pydis_site/settings.py +++ b/pydis_site/settings.py @@ -87,6 +87,7 @@ INSTALLED_APPS = [ 'pydis_site.apps.resources', 'pydis_site.apps.content', 'pydis_site.apps.events', + 'pydis_site.apps.redirect', 'django.contrib.admin', 'django.contrib.auth', @@ -290,3 +291,12 @@ EVENTS_PAGES_PATH = Path(BASE_DIR, "pydis_site", "templates", "events", "pages") # Path for content pages CONTENT_PAGES_PATH = Path(BASE_DIR, "pydis_site", "apps", "content", "resources") + +# Define redirections here so these can be used for URLs and tests. +# Format: "original-path/": ("route:name", "redirection_route_name", ("testing", "args")) +REDIRECTIONS = { + "pages/resources/": ("resources:index", "resources_index_redirect", ()), + "pages/resources//": ( + "resources:resources", "resources_resources_redirect", ("reading",) + ), +} -- cgit v1.2.3 From ffa2e8441aa9205697e400110202a88c3117a9fe Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Sat, 10 Apr 2021 13:47:01 +0300 Subject: Create URLs file for redirection app that dynamically generates routes --- pydis_site/apps/redirect/urls.py | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 pydis_site/apps/redirect/urls.py (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/urls.py b/pydis_site/apps/redirect/urls.py new file mode 100644 index 00000000..2442b4ad --- /dev/null +++ b/pydis_site/apps/redirect/urls.py @@ -0,0 +1,9 @@ +from django.conf import settings +from django.urls import path +from django.views.generic import RedirectView + +app_name = "redirect" +urlpatterns = [ + path(original, RedirectView.as_view(pattern_name=redirect_route), name=name) + for original, (redirect_route, name, _) in settings.REDIRECTIONS.items() +] -- cgit v1.2.3 From a29c22b94bbde761e90b56f0e9b21cc2da2cacc5 Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Sat, 10 Apr 2021 13:48:28 +0300 Subject: Include redirect app URLs to home app URLs --- pydis_site/apps/home/urls.py | 1 + 1 file changed, 1 insertion(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/home/urls.py b/pydis_site/apps/home/urls.py index 3c716875..e475c491 100644 --- a/pydis_site/apps/home/urls.py +++ b/pydis_site/apps/home/urls.py @@ -6,6 +6,7 @@ from .views import HomeView app_name = 'home' urlpatterns = [ path('', HomeView.as_view(), name='home'), + path('', include('pydis_site.apps.redirect.urls')), path('admin/', admin.site.urls), path('resources/', include('pydis_site.apps.resources.urls')), path('pages/', include('pydis_site.apps.content.urls')), -- cgit v1.2.3 From dcff50f75c121a1683f8be245a3267107abdbdb7 Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Sat, 10 Apr 2021 13:49:12 +0300 Subject: Add dynamic tests for redirections --- pydis_site/apps/redirect/tests.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 pydis_site/apps/redirect/tests.py (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/tests.py b/pydis_site/apps/redirect/tests.py new file mode 100644 index 00000000..6d670a82 --- /dev/null +++ b/pydis_site/apps/redirect/tests.py @@ -0,0 +1,20 @@ +from django.conf import settings +from django.test import TestCase +from django.urls import reverse + + +class RedirectTests(TestCase): + def test_redirects(self): + """ + Should redirect to given route based on redirect rules. + + Makes sure that every redirect: + 1. Redirects only once. + 2. Redirects to right URL. + """ + for original_path, (redirect_route, name, args) in settings.REDIRECTIONS.items(): + with self.subTest(original_path=original_path, redirect_route=redirect_route, name=name, args=args): + resp = self.client.get(reverse(f"home:redirect:{name}", args=args), follow=True) + + self.assertEqual(1, len(resp.redirect_chain)) + self.assertRedirects(resp, reverse(f"home:{redirect_route}", args=args)) -- cgit v1.2.3 From a80103e39050165e6f6af8590a858c0737dee09e Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Sat, 10 Apr 2021 13:53:25 +0300 Subject: Add events index redirection --- pydis_site/settings.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/settings.py b/pydis_site/settings.py index bc7ff1f3..f9a5d72f 100644 --- a/pydis_site/settings.py +++ b/pydis_site/settings.py @@ -299,4 +299,7 @@ REDIRECTIONS = { "pages/resources//": ( "resources:resources", "resources_resources_redirect", ("reading",) ), + "pages/events/": ( + "events:index", "events_index_redirect", () + ) } -- cgit v1.2.3 From 3a2635ef50b455b6d846e28971abca60681d9ba4 Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Thu, 15 Apr 2021 16:20:19 +0300 Subject: Create custom RedirectView to support static arguments --- pydis_site/apps/redirect/views.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 pydis_site/apps/redirect/views.py (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/views.py b/pydis_site/apps/redirect/views.py new file mode 100644 index 00000000..9a4bfd65 --- /dev/null +++ b/pydis_site/apps/redirect/views.py @@ -0,0 +1,18 @@ +from django.views.generic import RedirectView + + +class CustomRedirectView(RedirectView): + """Extended RedirectView for manual route args.""" + + permanent = True + static_args = () + + @classmethod + def as_view(cls, **initkwargs): + """Overwrites original as_view to add static args.""" + return super().as_view(**initkwargs) + + def get_redirect_url(self, *args, **kwargs): + """Extends default behaviour to use static args.""" + args = args + self.static_args + return super().get_redirect_url(*args, **kwargs) -- cgit v1.2.3 From a526e3eb1a2b9f2268dc800661ad033d32380fb4 Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Thu, 15 Apr 2021 16:24:38 +0300 Subject: Add missing type annotation to get_redirect_url --- pydis_site/apps/redirect/views.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/views.py b/pydis_site/apps/redirect/views.py index 9a4bfd65..f0dc6825 100644 --- a/pydis_site/apps/redirect/views.py +++ b/pydis_site/apps/redirect/views.py @@ -1,3 +1,5 @@ +import typing as t + from django.views.generic import RedirectView @@ -12,7 +14,7 @@ class CustomRedirectView(RedirectView): """Overwrites original as_view to add static args.""" return super().as_view(**initkwargs) - def get_redirect_url(self, *args, **kwargs): + def get_redirect_url(self, *args, **kwargs) -> t.Optional[str]: """Extends default behaviour to use static args.""" args = args + self.static_args return super().get_redirect_url(*args, **kwargs) -- cgit v1.2.3 From 29e37e5950c3cd57568b8948a82a4b9e15ad693b Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Thu, 15 Apr 2021 16:25:56 +0300 Subject: Migrate URLs generation from Django's own RedirectView -> CustomRedirectView --- pydis_site/apps/redirect/urls.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/urls.py b/pydis_site/apps/redirect/urls.py index 2442b4ad..747c6bf4 100644 --- a/pydis_site/apps/redirect/urls.py +++ b/pydis_site/apps/redirect/urls.py @@ -1,9 +1,17 @@ from django.conf import settings from django.urls import path -from django.views.generic import RedirectView + +from pydis_site.apps.redirect.views import CustomRedirectView app_name = "redirect" urlpatterns = [ - path(original, RedirectView.as_view(pattern_name=redirect_route), name=name) - for original, (redirect_route, name, _) in settings.REDIRECTIONS.items() + path( + original, + CustomRedirectView.as_view( + pattern_name=redirect_route, + static_args=params + ), + name=name + ) + for original, (redirect_route, name, params) in settings.REDIRECTIONS.items() ] -- cgit v1.2.3 From e943d24ffb9979b65cf29c048b7de984a61a3af1 Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Thu, 15 Apr 2021 16:26:30 +0300 Subject: Migrate redirections definition to not include testing args --- pydis_site/settings.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/settings.py b/pydis_site/settings.py index f9a5d72f..4e14ab70 100644 --- a/pydis_site/settings.py +++ b/pydis_site/settings.py @@ -293,13 +293,12 @@ EVENTS_PAGES_PATH = Path(BASE_DIR, "pydis_site", "templates", "events", "pages") CONTENT_PAGES_PATH = Path(BASE_DIR, "pydis_site", "apps", "content", "resources") # Define redirections here so these can be used for URLs and tests. -# Format: "original-path/": ("route:name", "redirection_route_name", ("testing", "args")) +# Format: "original-path/": ( +# "route:name", "redirection_route_name", ("destination", "args") +# ) REDIRECTIONS = { "pages/resources/": ("resources:index", "resources_index_redirect", ()), - "pages/resources//": ( - "resources:resources", "resources_resources_redirect", ("reading",) - ), - "pages/events/": ( - "events:index", "events_index_redirect", () - ) + "pages/resources//": ("resources:resources", "resources_resources_redirect", ()), + "pages/events/": ("events:index", "events_index_redirect", ()), + "pages/code-jams/": ("events:page", "events_code_jams_index_redirect", ("code-jams",)), } -- cgit v1.2.3 From 61c48e9bbce7b3a4e683adb08072619a565b38bf Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Thu, 15 Apr 2021 16:26:47 +0300 Subject: Update redirect app tests to take account recent changes --- pydis_site/apps/redirect/tests.py | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/tests.py b/pydis_site/apps/redirect/tests.py index 6d670a82..a4bab933 100644 --- a/pydis_site/apps/redirect/tests.py +++ b/pydis_site/apps/redirect/tests.py @@ -2,9 +2,13 @@ from django.conf import settings from django.test import TestCase from django.urls import reverse +TESTING_ARGUMENTS = {"resources_resources_redirect": ("reading",)} + class RedirectTests(TestCase): - def test_redirects(self): + """Survival tests for redirects.""" + + def test_redirects(self) -> None: """ Should redirect to given route based on redirect rules. @@ -12,9 +16,28 @@ class RedirectTests(TestCase): 1. Redirects only once. 2. Redirects to right URL. """ - for original_path, (redirect_route, name, args) in settings.REDIRECTIONS.items(): - with self.subTest(original_path=original_path, redirect_route=redirect_route, name=name, args=args): - resp = self.client.get(reverse(f"home:redirect:{name}", args=args), follow=True) + for original_path, (redirect_route, name, static_args) in settings.REDIRECTIONS.items(): + with self.subTest( + original_path=original_path, + redirect_route=redirect_route, + name=name, + static_args=static_args, + args=TESTING_ARGUMENTS.get(name, ()) + ): + resp = self.client.get( + reverse( + f"home:redirect:{name}", + args=TESTING_ARGUMENTS.get(name, ()) + ), + follow=True + ) self.assertEqual(1, len(resp.redirect_chain)) - self.assertRedirects(resp, reverse(f"home:{redirect_route}", args=args)) + self.assertRedirects( + resp, + reverse( + f"home:{redirect_route}", + args=TESTING_ARGUMENTS.get(name, ()) + static_args + ), + status_code=301 + ) -- cgit v1.2.3 From eda65754f268dd5bbcde54690c77f0580293975e Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Thu, 15 Apr 2021 16:27:53 +0300 Subject: Add groups with comments to redirections definition --- pydis_site/settings.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/settings.py b/pydis_site/settings.py index 4e14ab70..babe9e2c 100644 --- a/pydis_site/settings.py +++ b/pydis_site/settings.py @@ -297,8 +297,11 @@ CONTENT_PAGES_PATH = Path(BASE_DIR, "pydis_site", "apps", "content", "resources" # "route:name", "redirection_route_name", ("destination", "args") # ) REDIRECTIONS = { + # Resources "pages/resources/": ("resources:index", "resources_index_redirect", ()), "pages/resources//": ("resources:resources", "resources_resources_redirect", ()), + + # Events "pages/events/": ("events:index", "events_index_redirect", ()), "pages/code-jams/": ("events:page", "events_code_jams_index_redirect", ("code-jams",)), } -- cgit v1.2.3 From bdd4c1a31f8b2f7af8c8d7e28484d5b6dab39381 Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Thu, 15 Apr 2021 16:38:17 +0300 Subject: Add code jam pages redirects --- pydis_site/settings.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/settings.py b/pydis_site/settings.py index babe9e2c..f6ba42cd 100644 --- a/pydis_site/settings.py +++ b/pydis_site/settings.py @@ -304,4 +304,25 @@ REDIRECTIONS = { # Events "pages/events/": ("events:index", "events_index_redirect", ()), "pages/code-jams/": ("events:page", "events_code_jams_index_redirect", ("code-jams",)), + "pages/code-jams/code-jam-1-snakes-bot/": ( + "events:page", "events_code_jams_one_redirect", ("code-jams/1",) + ), + "pages/code-jams/code-jam-2/": ( + "events:page", "events_code_jams_two_redirect", ("code-jams/2",) + ), + "pages/code-jams/code-jam-3/": ( + "events:page", "events_code_jams_three_redirect", ("code-jams/3",) + ), + "pages/code-jams/code-jam-4/": ( + "events:page", "events_code_jams_four_redirect", ("code-jams/4",) + ), + "pages/code-jams/code-jam-5/": ( + "events:page", "events_code_jams_five_redirect", ("code-jams/5",) + ), + "pages/code-jams/code-jam-6/": ( + "events:page", "events_code_jams_five_redirect", ("code-jams/6",) + ), + "pages/code-jams/code-jam-7/": ( + "events:page", "events_code_jams_five_redirect", ("code-jams/7",) + ), } -- cgit v1.2.3 From 1046fc5823e81672fec8ed55c0a974ea95837f0a Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Fri, 16 Apr 2021 16:36:28 +0300 Subject: Migrate redirections from settings.py -> redirects.yaml --- pydis_site/apps/redirect/redirects.yaml | 53 +++++++++++++++++++++++++++++++++ pydis_site/apps/redirect/tests.py | 13 ++++---- pydis_site/apps/redirect/urls.py | 9 +++--- pydis_site/settings.py | 35 +--------------------- 4 files changed, 66 insertions(+), 44 deletions(-) create mode 100644 pydis_site/apps/redirect/redirects.yaml (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/redirects.yaml b/pydis_site/apps/redirect/redirects.yaml new file mode 100644 index 00000000..546e24ae --- /dev/null +++ b/pydis_site/apps/redirect/redirects.yaml @@ -0,0 +1,53 @@ +# Resources +resources_index_redirect: + original_path: pages/resources/ + redirect_route: "resources:index" + +resources_resources_redirect: + original_path: pages/resources// + redirect_route: "resources:resources" + +# Events +events_index_redirect: + original_path: pages/events/ + redirect_route: "events:index" + +events_code_jams_index_redirect: + original_path: pages/code-jams/ + redirect_route: "events:page" + redirect_arguments: ["code-jams"] + +events_code_jams_one_redirect: + original_path: pages/code-jams/code-jam-1-snakes-bot/ + redirect_route: "events:page" + redirect_arguments: ["code-jams/1"] + +events_code_jams_two_redirect: + original_path: pages/code-jams/code-jam-2/ + redirect_route: "events:page" + redirect_arguments: ["code-jams/2"] + +events_code_jams_three_redirect: + original_path: pages/code-jams/code-jam-3/ + redirect_route: "events:page" + redirect_arguments: ["code-jams/3"] + +events_code_jams_four_redirect: + original_path: pages/code-jams/code-jam-4/ + redirect_route: "events:page" + redirect_arguments: ["code-jams/4"] + +events_code_jams_five_redirect: + original_path: pages/code-jams/code-jam-5/ + redirect_route: "events:page" + redirect_arguments: ["code-jams/5"] + +events_code_jams_six_redirect: + original_path: pages/code-jams/code-jam-6/ + redirect_route: "events:page" + redirect_arguments: ["code-jams/6"] + +events_code_jams_seven_redirect: + original_path: pages/code-jams/code-jam-7/ + redirect_route: "events:page" + redirect_arguments: ["code-jams/7"] diff --git a/pydis_site/apps/redirect/tests.py b/pydis_site/apps/redirect/tests.py index a4bab933..ac60d1c8 100644 --- a/pydis_site/apps/redirect/tests.py +++ b/pydis_site/apps/redirect/tests.py @@ -1,3 +1,4 @@ +import yaml from django.conf import settings from django.test import TestCase from django.urls import reverse @@ -16,12 +17,12 @@ class RedirectTests(TestCase): 1. Redirects only once. 2. Redirects to right URL. """ - for original_path, (redirect_route, name, static_args) in settings.REDIRECTIONS.items(): + for name, data in yaml.safe_load(settings.REDIRECTIONS_PATH.read_text()).items(): with self.subTest( - original_path=original_path, - redirect_route=redirect_route, + original_path=data["original_path"], + redirect_route=data["redirect_route"], name=name, - static_args=static_args, + redirect_arguments=tuple(data.get("redirect_arguments", ())), args=TESTING_ARGUMENTS.get(name, ()) ): resp = self.client.get( @@ -36,8 +37,8 @@ class RedirectTests(TestCase): self.assertRedirects( resp, reverse( - f"home:{redirect_route}", - args=TESTING_ARGUMENTS.get(name, ()) + static_args + f"home:{data['redirect_route']}", + args=TESTING_ARGUMENTS.get(name, ()) + tuple(data.get("redirect_arguments", ())) ), status_code=301 ) diff --git a/pydis_site/apps/redirect/urls.py b/pydis_site/apps/redirect/urls.py index 747c6bf4..d94a1ab7 100644 --- a/pydis_site/apps/redirect/urls.py +++ b/pydis_site/apps/redirect/urls.py @@ -1,3 +1,4 @@ +import yaml from django.conf import settings from django.urls import path @@ -6,12 +7,12 @@ from pydis_site.apps.redirect.views import CustomRedirectView app_name = "redirect" urlpatterns = [ path( - original, + data["original_path"], CustomRedirectView.as_view( - pattern_name=redirect_route, - static_args=params + pattern_name=data["redirect_route"], + static_args=tuple(data.get("redirect_arguments", ())) ), name=name ) - for original, (redirect_route, name, params) in settings.REDIRECTIONS.items() + for name, data in yaml.safe_load(settings.REDIRECTIONS_PATH.read_text()).items() ] diff --git a/pydis_site/settings.py b/pydis_site/settings.py index f6ba42cd..65bd8e7a 100644 --- a/pydis_site/settings.py +++ b/pydis_site/settings.py @@ -292,37 +292,4 @@ EVENTS_PAGES_PATH = Path(BASE_DIR, "pydis_site", "templates", "events", "pages") # Path for content pages CONTENT_PAGES_PATH = Path(BASE_DIR, "pydis_site", "apps", "content", "resources") -# Define redirections here so these can be used for URLs and tests. -# Format: "original-path/": ( -# "route:name", "redirection_route_name", ("destination", "args") -# ) -REDIRECTIONS = { - # Resources - "pages/resources/": ("resources:index", "resources_index_redirect", ()), - "pages/resources//": ("resources:resources", "resources_resources_redirect", ()), - - # Events - "pages/events/": ("events:index", "events_index_redirect", ()), - "pages/code-jams/": ("events:page", "events_code_jams_index_redirect", ("code-jams",)), - "pages/code-jams/code-jam-1-snakes-bot/": ( - "events:page", "events_code_jams_one_redirect", ("code-jams/1",) - ), - "pages/code-jams/code-jam-2/": ( - "events:page", "events_code_jams_two_redirect", ("code-jams/2",) - ), - "pages/code-jams/code-jam-3/": ( - "events:page", "events_code_jams_three_redirect", ("code-jams/3",) - ), - "pages/code-jams/code-jam-4/": ( - "events:page", "events_code_jams_four_redirect", ("code-jams/4",) - ), - "pages/code-jams/code-jam-5/": ( - "events:page", "events_code_jams_five_redirect", ("code-jams/5",) - ), - "pages/code-jams/code-jam-6/": ( - "events:page", "events_code_jams_five_redirect", ("code-jams/6",) - ), - "pages/code-jams/code-jam-7/": ( - "events:page", "events_code_jams_five_redirect", ("code-jams/7",) - ), -} +REDIRECTIONS_PATH = Path(BASE_DIR, "pydis_site", "apps", "redirect", "redirects.yaml") -- cgit v1.2.3 From d3d0db3577dcae39c293fcb1e8478070c008a8ff Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Mon, 3 May 2021 20:16:18 +0300 Subject: Implement hacky solution to allow prefix redirects --- pydis_site/apps/redirect/urls.py | 3 ++- pydis_site/apps/redirect/views.py | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/urls.py b/pydis_site/apps/redirect/urls.py index d94a1ab7..6187af17 100644 --- a/pydis_site/apps/redirect/urls.py +++ b/pydis_site/apps/redirect/urls.py @@ -10,7 +10,8 @@ urlpatterns = [ data["original_path"], CustomRedirectView.as_view( pattern_name=data["redirect_route"], - static_args=tuple(data.get("redirect_arguments", ())) + static_args=tuple(data.get("redirect_arguments", ())), + prefix_redirect=data.get("prefix_redirect", False) ), name=name ) diff --git a/pydis_site/apps/redirect/views.py b/pydis_site/apps/redirect/views.py index f0dc6825..21180cdf 100644 --- a/pydis_site/apps/redirect/views.py +++ b/pydis_site/apps/redirect/views.py @@ -8,6 +8,7 @@ class CustomRedirectView(RedirectView): permanent = True static_args = () + prefix_redirect = False @classmethod def as_view(cls, **initkwargs): @@ -16,5 +17,8 @@ class CustomRedirectView(RedirectView): def get_redirect_url(self, *args, **kwargs) -> t.Optional[str]: """Extends default behaviour to use static args.""" - args = args + self.static_args - return super().get_redirect_url(*args, **kwargs) + args = self.static_args + args + tuple(kwargs.values()) + if self.prefix_redirect: + args = ("".join(args),) + + return super().get_redirect_url(*args) -- cgit v1.2.3 From b90037846fecddab6dd6399185e73d1d0e8f1e40 Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Mon, 3 May 2021 20:43:52 +0300 Subject: Add contributing pages prefix redirection and update tests --- pydis_site/apps/redirect/redirects.yaml | 8 ++++++++ pydis_site/apps/redirect/tests.py | 16 ++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/redirects.yaml b/pydis_site/apps/redirect/redirects.yaml index 546e24ae..caaab1f1 100644 --- a/pydis_site/apps/redirect/redirects.yaml +++ b/pydis_site/apps/redirect/redirects.yaml @@ -51,3 +51,11 @@ events_code_jams_seven_redirect: original_path: pages/code-jams/code-jam-7/ redirect_route: "events:page" redirect_arguments: ["code-jams/7"] + +# Guides +# Prefix redirects +guides_pydis_guides_contributing_prefix_redirect: + original_path: pages/contributing// # path:path will be joined together with static arguments. + redirect_route: "content:page_category" + redirect_arguments: ["guides/pydis-guides/contributing/"] # It is important to put / at end in prefix redirect! + prefix_redirect: true diff --git a/pydis_site/apps/redirect/tests.py b/pydis_site/apps/redirect/tests.py index ac60d1c8..0738a143 100644 --- a/pydis_site/apps/redirect/tests.py +++ b/pydis_site/apps/redirect/tests.py @@ -3,7 +3,10 @@ from django.conf import settings from django.test import TestCase from django.urls import reverse -TESTING_ARGUMENTS = {"resources_resources_redirect": ("reading",)} +TESTING_ARGUMENTS = { + "resources_resources_redirect": ("reading",), + "guides_pydis_guides_contributing_prefix_redirect": ("sir-lancebot/env-var-reference",), +} class RedirectTests(TestCase): @@ -33,12 +36,21 @@ class RedirectTests(TestCase): follow=True ) + if data.get("prefix_redirect", False): + expected_args = ( + "".join( + tuple(data.get("redirect_arguments", ())) + TESTING_ARGUMENTS.get(name, ()) + ), + ) + else: + expected_args = TESTING_ARGUMENTS.get(name, ()) + tuple(data.get("redirect_arguments", ())) + self.assertEqual(1, len(resp.redirect_chain)) self.assertRedirects( resp, reverse( f"home:{data['redirect_route']}", - args=TESTING_ARGUMENTS.get(name, ()) + tuple(data.get("redirect_arguments", ())) + args=expected_args ), status_code=301 ) -- cgit v1.2.3 From 96bbc03a85e1cf8ef9dc4714b482c95f2a947223 Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Mon, 3 May 2021 20:44:50 +0300 Subject: Add note about prefix redirects --- pydis_site/apps/redirect/redirects.yaml | 1 + 1 file changed, 1 insertion(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/redirects.yaml b/pydis_site/apps/redirect/redirects.yaml index caaab1f1..46c71bf9 100644 --- a/pydis_site/apps/redirect/redirects.yaml +++ b/pydis_site/apps/redirect/redirects.yaml @@ -54,6 +54,7 @@ events_code_jams_seven_redirect: # Guides # Prefix redirects +# Prefix redirects must be last in each group. guides_pydis_guides_contributing_prefix_redirect: original_path: pages/contributing// # path:path will be joined together with static arguments. redirect_route: "content:page_category" -- cgit v1.2.3 From 8a776ce80bd133784a233db9a94739eab541c5dc Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Mon, 3 May 2021 20:56:52 +0300 Subject: Add code jams helper pages redirects --- pydis_site/apps/redirect/redirects.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/redirects.yaml b/pydis_site/apps/redirect/redirects.yaml index 46c71bf9..6ff02926 100644 --- a/pydis_site/apps/redirect/redirects.yaml +++ b/pydis_site/apps/redirect/redirects.yaml @@ -52,6 +52,21 @@ events_code_jams_seven_redirect: redirect_route: "events:page" redirect_arguments: ["code-jams/7"] +events_code_jams_how_to_use_git_redirect: + original_path: pages/code-jams/using-git/ + redirect_route: "events:page" + redirect_arguments: ["code-jams/using-git"] + +events_code_jams_judging_redirect: + original_path: pages/code-jams/judging/ + redirect_route: "events:page" + redirect_arguments: ["code-jams/judging"] + +events_code_jams_pull_request_redirect: + original_path: pages/code-jams/pull-request/ + redirect_route: "events:page" + redirect_arguments: ["code-jams/pull-request"] + # Guides # Prefix redirects # Prefix redirects must be last in each group. -- cgit v1.2.3 From 4afa4f870751dd06b2112eb69a1471bde5148d6f Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Mon, 3 May 2021 20:59:14 +0300 Subject: Add code jam 6 and 7 rules pages redirects --- pydis_site/apps/redirect/redirects.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/redirects.yaml b/pydis_site/apps/redirect/redirects.yaml index 6ff02926..f7a12818 100644 --- a/pydis_site/apps/redirect/redirects.yaml +++ b/pydis_site/apps/redirect/redirects.yaml @@ -47,11 +47,21 @@ events_code_jams_six_redirect: redirect_route: "events:page" redirect_arguments: ["code-jams/6"] +events_code_jams_six_rules_redirect: + original_path: pages/code-jams/code-jam-6/rules/ + redirect_route: "events:page" + redirect_arguments: ["code-jams/6/rules"] + events_code_jams_seven_redirect: original_path: pages/code-jams/code-jam-7/ redirect_route: "events:page" redirect_arguments: ["code-jams/7"] +events_code_jams_seven_rules_redirect: + original_path: pages/code-jams/code-jam-7/rules/ + redirect_route: "events:page" + redirect_arguments: ["code-jams/7/rules"] + events_code_jams_how_to_use_git_redirect: original_path: pages/code-jams/using-git/ redirect_route: "events:page" -- cgit v1.2.3 From fbb693608d1fb11b3ed16dcb3365ee767bc0d34c Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Mon, 3 May 2021 21:06:11 +0300 Subject: Add HTTP 200 requirement to redirect survival tests --- pydis_site/apps/redirect/tests.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/tests.py b/pydis_site/apps/redirect/tests.py index 0738a143..8c7b3db8 100644 --- a/pydis_site/apps/redirect/tests.py +++ b/pydis_site/apps/redirect/tests.py @@ -19,6 +19,7 @@ class RedirectTests(TestCase): Makes sure that every redirect: 1. Redirects only once. 2. Redirects to right URL. + 3. Resulting page status code is 200. """ for name, data in yaml.safe_load(settings.REDIRECTIONS_PATH.read_text()).items(): with self.subTest( @@ -54,3 +55,4 @@ class RedirectTests(TestCase): ), status_code=301 ) + self.assertEqual(resp.status_code, 200) -- cgit v1.2.3 From beaed3ce3b330379af60ea935755a0aa5e869216 Mon Sep 17 00:00:00 2001 From: ks129 <45097959+ks129@users.noreply.github.com> Date: Mon, 3 May 2021 21:06:25 +0300 Subject: Add game jam pages redirects --- pydis_site/apps/redirect/redirects.yaml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/redirects.yaml b/pydis_site/apps/redirect/redirects.yaml index f7a12818..f77f3df6 100644 --- a/pydis_site/apps/redirect/redirects.yaml +++ b/pydis_site/apps/redirect/redirects.yaml @@ -77,6 +77,31 @@ events_code_jams_pull_request_redirect: redirect_route: "events:page" redirect_arguments: ["code-jams/pull-request"] +events_game_jams_twenty_twenty_index_redirect: + original_path: pages/events/game-jam-2020/ + redirect_route: "events:page" + redirect_arguments: ["game-jams/2020"] + +events_game_jams_twenty_twenty_judging_redirect: + original_path: pages/events/game-jam-2020/judging/ + redirect_route: "events:page" + redirect_arguments: ["game-jams/2020/judging"] + +events_game_jams_twenty_twenty_project_setup_redirect: + original_path: pages/events/game-jam-2020/project-setup/ + redirect_route: "events:page" + redirect_arguments: ["game-jams/2020/project-setup"] + +events_game_jams_twenty_twenty_rules_redirect: + original_path: pages/events/game-jam-2020/rules/ + redirect_route: "events:page" + redirect_arguments: ["game-jams/2020/rules"] + +events_game_jams_twenty_twenty_technical_requirements_redirect: + original_path: pages/events/game-jam-2020/technical-requirements + redirect_route: "events:page" + redirect_arguments: ["game-jams/2020/technical-requirements"] + # Guides # Prefix redirects # Prefix redirects must be last in each group. -- cgit v1.2.3 From 13e778564f315f6f8dec4d0fbdf02633bc3070a0 Mon Sep 17 00:00:00 2001 From: kosayoda Date: Thu, 13 May 2021 16:54:56 +0800 Subject: Add content app redirects. --- pydis_site/apps/redirect/redirects.yaml | 76 ++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/redirects.yaml b/pydis_site/apps/redirect/redirects.yaml index f77f3df6..41e56262 100644 --- a/pydis_site/apps/redirect/redirects.yaml +++ b/pydis_site/apps/redirect/redirects.yaml @@ -1,3 +1,67 @@ +# Root pages +roles_redirect: + original_path: pages/roles/ + redirect_route: "content:page_category" + redirect_arguments: ["server-info/roles"] + +roles_expectations_redirect: + original_path: pages/roles/staff-role-expectations/ + redirect_route: "content:page_category" + redirect_arguments: ["server-info/staff-role-expectations"] + +contributing_redirect: + original_path: pages/contributing/ + redirect_route: "content:page_category" + redirect_arguments: ["guides/pydis-guides/contributing"] + +# Guides +guides_redirect: + original_path: pages/resources/guides/ + redirect_route: "content:page_category" + redirect_arguments: ["guides"] + +# - Python guides +discord_py_redirect: + original_path: pages/resources/guides/discordpy/ + redirect_route: "content:page_category" + redirect_arguments: ["guides/python-guides/discordpy"] + +mutability_redirect: + original_path: pages/resources/guides/core-concepts/mutability/ + redirect_route: "content:page_category" + redirect_arguments: ["guides/python-guides/mutability"] + +function_params_redirect: + original_path: pages/resources/guides/core-concepts/parameters-and-arguments/ + redirect_route: "content:page_category" + redirect_arguments: ["guides/python-guides/parameters-and-arguments"] + +# - Pydis guides +help_channel_redirect: + original_path: pages/resources/guides/help-channels/ + redirect_route: "content:page_category" + redirect_arguments: ["guides/pydis-guides/help-channel-guide"] + +good_questions_redirect: + original_path: pages/resources/guides/asking-good-questions/ + redirect_route: "content:page_category" + redirect_arguments: ["guides/pydis-guides/asking-good-questions"] + +helping_others_redirect: + original_path: pages/resources/guides/helping-others/ + redirect_route: "content:page_category" + redirect_arguments: ["guides/pydis-guides/helping-others"] + +code_review_redirect: + original_path: pages/resources/guides/code-reviews-primer/ + redirect_route: "content:page_category" + redirect_arguments: ["guides/pydis-guides/code-reviews-primer"] + +off-topic_redirect: + original_path: pages/resources/guides/off-topic-etiquette/ + redirect_route: "content:page_category" + redirect_arguments: ["guides/pydis-guides/off-topic-etiquette"] + # Resources resources_index_redirect: original_path: pages/resources/ @@ -102,7 +166,17 @@ events_game_jams_twenty_twenty_technical_requirements_redirect: redirect_route: "events:page" redirect_arguments: ["game-jams/2020/technical-requirements"] -# Guides +# This are overrides for the contributing prefix redirect +security_notice_redirect: + original_path: pages/contributing/security-notice/ + redirect_route: "content:page_category" + redirect_arguments: ["security-notice"] + +sir-lancebot_env_var_redirect: + original_path: pages/contributing/sir-lancebot/sir-lancebot-env-var-reference/ + redirect_route: "content:page_category" + redirect_arguments: ["guides/pydis-guides/contributing/sir-lancebot/env-var-reference"] + # Prefix redirects # Prefix redirects must be last in each group. guides_pydis_guides_contributing_prefix_redirect: -- cgit v1.2.3 From aff95b1fb984a08cd520d0c010fca216f1f6db14 Mon Sep 17 00:00:00 2001 From: kosayoda Date: Thu, 13 May 2021 21:00:15 +0800 Subject: Route navbar links to their new locations. --- pydis_site/templates/base/navbar.html | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/templates/base/navbar.html b/pydis_site/templates/base/navbar.html index 6c8d52a1..9751d569 100644 --- a/pydis_site/templates/base/navbar.html +++ b/pydis_site/templates/base/navbar.html @@ -61,22 +61,22 @@ More -- cgit v1.2.3 From 1395e919b38f8c58c08fe5d4b7d169c96dec9e26 Mon Sep 17 00:00:00 2001 From: kosayoda Date: Thu, 13 May 2021 21:03:13 +0800 Subject: Use temporary redirects for now. --- pydis_site/apps/redirect/views.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/views.py b/pydis_site/apps/redirect/views.py index 21180cdf..9dc9881a 100644 --- a/pydis_site/apps/redirect/views.py +++ b/pydis_site/apps/redirect/views.py @@ -6,7 +6,9 @@ from django.views.generic import RedirectView class CustomRedirectView(RedirectView): """Extended RedirectView for manual route args.""" - permanent = True + # We want temporary redirects for the time being, after this is running on prod and + # stable we can enable permanent redirects. + permanent = False static_args = () prefix_redirect = False -- cgit v1.2.3 From 6b55d7da977b9422c344fdde9da52ed209965a05 Mon Sep 17 00:00:00 2001 From: kosayoda Date: Thu, 13 May 2021 21:23:41 +0800 Subject: Add disclaimer for the redirects app. --- docs/README.md | 4 ++++ pydis_site/apps/redirect/redirects.yaml | 8 ++++++++ 2 files changed, 12 insertions(+) (limited to 'pydis_site') diff --git a/docs/README.md b/docs/README.md index 2e9f15a1..5af383b4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -11,3 +11,7 @@ This directory contains useful documentation for working with and using our site * [Development with Docker](setup.md#development-with-docker) * [Development with `pip`](setup.md#development-with-pip) + +> Note: If you're looking to add redirects to the site, the `redirects` app is **NOT** the way to go. +> Convenience redirects should use our [Cloudflare Worker](https://github.com/python-discord/workers/tree/main/short-urls). +> Ask in the server if you have any questions! diff --git a/pydis_site/apps/redirect/redirects.yaml b/pydis_site/apps/redirect/redirects.yaml index 41e56262..ce789b61 100644 --- a/pydis_site/apps/redirect/redirects.yaml +++ b/pydis_site/apps/redirect/redirects.yaml @@ -1,3 +1,11 @@ +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# The redirects here are for dewikification backwards compatibility +# and SHOULD NOT be used for adding new redirects for convenience. +# +# Convenience redirects should be added using our cloudflare worker +# at https://github.com/python-discord/workers/tree/main/short-urls +# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + # Root pages roles_redirect: original_path: pages/roles/ -- cgit v1.2.3 From f1153e6d4d31184dd28c16ed6c88981ad7c1ef17 Mon Sep 17 00:00:00 2001 From: kosayoda Date: Thu, 13 May 2021 21:55:52 +0800 Subject: Add privacy policy information and link. This should be redirected to the notion page using our cloudflare worker. --- pydis_site/apps/content/resources/privacy.md | 7 +++++++ pydis_site/templates/base/navbar.html | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 pydis_site/apps/content/resources/privacy.md (limited to 'pydis_site') diff --git a/pydis_site/apps/content/resources/privacy.md b/pydis_site/apps/content/resources/privacy.md new file mode 100644 index 00000000..88916b79 --- /dev/null +++ b/pydis_site/apps/content/resources/privacy.md @@ -0,0 +1,7 @@ +--- +title: Privacy Policy +description: Our server's privacy policy. +icon: fab fa-discord +--- + +You should be redirected. If you are not, [please click here](https://www.notion.so/pythondiscord/Python-Discord-Privacy-ee2581fea4854ddcb1ebc06c1dbb9fbd). diff --git a/pydis_site/templates/base/navbar.html b/pydis_site/templates/base/navbar.html index 9751d569..ebafa269 100644 --- a/pydis_site/templates/base/navbar.html +++ b/pydis_site/templates/base/navbar.html @@ -79,7 +79,7 @@ Code of Conduct - + Privacy -- cgit v1.2.3 From 6ad01844102791efec52086338020679370edd08 Mon Sep 17 00:00:00 2001 From: kosayoda Date: Fri, 14 May 2021 00:43:57 +0800 Subject: Make tests expect 302. It's what we're using now for dewikification redirects, this has to be changed back to 301 when we decide to make redirects permanent. --- pydis_site/apps/redirect/tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/redirect/tests.py b/pydis_site/apps/redirect/tests.py index 8c7b3db8..c145ecda 100644 --- a/pydis_site/apps/redirect/tests.py +++ b/pydis_site/apps/redirect/tests.py @@ -53,6 +53,6 @@ class RedirectTests(TestCase): f"home:{data['redirect_route']}", args=expected_args ), - status_code=301 + status_code=302 ) self.assertEqual(resp.status_code, 200) -- cgit v1.2.3