From 82f5c040df51c2729b91da3425591701800f988d Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Wed, 5 Aug 2020 13:05:39 +0200
Subject: [PATCH] Simplify URL template generation for week select and make it
 more resilient

---
 aleksis/apps/alsijil/urls.py  |  6 ++++++
 aleksis/apps/alsijil/util.py  |  9 ---------
 aleksis/apps/alsijil/views.py | 14 ++++++--------
 3 files changed, 12 insertions(+), 17 deletions(-)
 delete mode 100644 aleksis/apps/alsijil/util.py

diff --git a/aleksis/apps/alsijil/urls.py b/aleksis/apps/alsijil/urls.py
index 49ccfd90c..7e7139c6c 100644
--- a/aleksis/apps/alsijil/urls.py
+++ b/aleksis/apps/alsijil/urls.py
@@ -11,7 +11,13 @@ urlpatterns = [
     ),
     path("week/", views.week_view, name="week_view"),
     path("week/<int:year>/<int:week>/", views.week_view, name="week_view_by_week"),
+    path("week/year/cw/", views.week_view, name="week_view_placeholders"),
     path("week/<str:type_>/<int:id_>/", views.week_view, name="week_view"),
+    path(
+        "week/year/cw/<str:type_>/<int:id_>/",
+        views.week_view,
+        name="week_view_placeholders",
+    ),
     path(
         "week/<int:year>/<int:week>/<str:type_>/<int:id_>/",
         views.week_view,
diff --git a/aleksis/apps/alsijil/util.py b/aleksis/apps/alsijil/util.py
deleted file mode 100644
index da3580592..000000000
--- a/aleksis/apps/alsijil/util.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from typing import List
-
-
-def append_if_all(iterable: List, *args) -> List:
-    """Append args to a list if all args are true-like."""
-    if all(args):
-        for a in args:
-            iterable.append(a)
-    return iterable
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index f97509307..9c90ede28 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -13,7 +13,6 @@ from django_tables2 import SingleTableView
 from reversion.views import RevisionMixin
 from rules.contrib.views import PermissionRequiredMixin
 
-from aleksis.apps.alsijil.util import append_if_all
 from aleksis.apps.chronos.managers import TimetableType
 from aleksis.apps.chronos.models import LessonPeriod
 from aleksis.apps.chronos.util.chronos_helpers import get_el_by_pk
@@ -308,16 +307,15 @@ def week_view(
     week_next = wanted_week + 1
     args_prev = [week_prev.year, week_prev.week]
     args_next = [week_next.year, week_next.week]
-    args_dest = [wanted_week.year, wanted_week.week]
-    append_if_all(args_prev, type_, id_)
-    append_if_all(args_next, type_, id_)
-    append_if_all(args_dest, type_, id_)
+    args_dest = []
+    if type_ and id_:
+        args_prev += [type_.value, id_]
+        args_next += [type_.value, id_]
+        args_dest += [type_.value, id_]
 
     context["week_select"] = {
         "year": wanted_week.year,
-        "dest": reverse("week_view_by_week", args=args_dest)
-        .replace(str(wanted_week.year), "year")
-        .replace(str(wanted_week.week), "cw"),
+        "dest": reverse("week_view_placeholders", args=args_dest),
     }
 
     context["url_prev"] = reverse("week_view_by_week", args=args_prev)
-- 
GitLab