From bd0c1dd1a23087c4014bba8d0e5b5c2e15e10345 Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@nibio.no>
Date: Wed, 6 Mar 2024 13:55:46 +0100
Subject: [PATCH] Handle 404 when requesting trying to display a message that
 doesn't exist in VIPSLogic

---
 vips_messages/models.py |  9 +++++++--
 vips_messages/views.py  | 15 +++++++++------
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/vips_messages/models.py b/vips_messages/models.py
index 7916ab2d..db68ec07 100755
--- a/vips_messages/models.py
+++ b/vips_messages/models.py
@@ -102,7 +102,9 @@ class Message:
     @staticmethod
     def get_message(message_id, current_language=settings.VIPSLOGIC_LANGUAGE_CODE):
         message_json = Message.get_message_as_json(message_id)
-        return Message.get_instance_from_dict(message_json, current_language)
+        if message_json is not None:
+            return Message.get_instance_from_dict(message_json, current_language)
+        return None
     
     @staticmethod
     def get_messages_by_tag(tag_id, current_language=settings.VIPSLOGIC_LANGUAGE_CODE):
@@ -138,7 +140,10 @@ class Message:
     @staticmethod
     def get_message_as_json(message_id):
         request_result = requests.get("%s://%s/rest/message/%s" % (settings.VIPSLOGIC_PROTOCOL, settings.VIPSLOGIC_SERVER_NAME,message_id))
-        return request_result.json()
+        if request_result.status_code == 200:
+            return request_result.json()
+        return None
+        
     
     @staticmethod
     def get_instance_from_dict(the_dict,current_language=settings.VIPSLOGIC_LANGUAGE_CODE):
diff --git a/vips_messages/views.py b/vips_messages/views.py
index 54e0d2e9..67e20382 100755
--- a/vips_messages/views.py
+++ b/vips_messages/views.py
@@ -23,7 +23,7 @@ import json
 
 from django.shortcuts import render
 from django.utils import translation
-from django.http import HttpResponse
+from django.http import HttpResponse, Http404
 
 from vips_messages.models import Message
 from vips_messages.forms import MessagePublishedDateFilterForm
@@ -57,11 +57,14 @@ def index(request):
     return render(request, 'messages/index.html', context)
 
 def detail(request, message_id):
-    context = {
-               #'message' : get_object_or_404(Message, pk=message_id)
-               'message': Message.get_message(message_id, translation.get_language())
-               }
-    return render(request, 'messages/detail.html', context)
+    message = Message.get_message(message_id, translation.get_language())
+    if message is not None:
+        context = {
+                #'message' : get_object_or_404(Message, pk=message_id)
+                'message': Message.get_message(message_id, translation.get_language())
+                }
+        return render(request, 'messages/detail.html', context)
+    raise Http404("This page does not exist")
 
 # Send messages as JSON
 # TODO: Skip intermediary Python object, get json directly from VIPSLogic
-- 
GitLab