From 0cbdae9411d4bd5e4e920e0d2bc9883ade8bc4c1 Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Tue, 4 Mar 2025 09:59:03 +0100 Subject: [PATCH] _get_events helper: clarify edge-cases In b76e474ef1a4, the event-navigation was changed into the next/prev idiom (I think completely, i.e. also from the .html files, but did not check) but the elif structure and error message did not fully reflect that (it still talked about digest_order/id, but nav is now one of the primary methods) I briefly considered removing the lookup-by-digest-order-only, but I figure it may come in handy at some point (if only for users to directly edit the url) and did not check whether this is actually unused. --- issues/views.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/issues/views.py b/issues/views.py index 7b9ccfa..7f69b2b 100644 --- a/issues/views.py +++ b/issues/views.py @@ -344,6 +344,9 @@ def _get_event(issue, event_pk, digest_order, nav): return Event.objects.filter(issue=issue).order_by("digest_order").last() if nav in ["prev", "next"]: + if digest_order is None: + raise Http404("Cannot look up with '%s' without digest_order" % nav) + if nav == "prev": result = Event.objects.filter( issue=issue, digest_order__lt=digest_order).order_by("-digest_order").first() @@ -356,7 +359,7 @@ def _get_event(issue, event_pk, digest_order, nav): raise Http404("Cannot look up with '%s'" % nav) - if event_pk is not None: + elif event_pk is not None: # we match on both internal and external id, trying internal first try: return Event.objects.get(pk=event_pk) @@ -366,7 +369,7 @@ def _get_event(issue, event_pk, digest_order, nav): elif digest_order is not None: return Event.objects.get(issue=issue, digest_order=digest_order) else: - raise ValueError("either event_pk or digest_order must be provided") + raise Http404("Either event_pk, nav, or digest_order must be provided") @atomic_for_request_method