From 67f4cb67c8fcedc7706e57f4df8239cec7a4b5a1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Felix=20Sch=C3=A4fer?= <felix@thegcat.net>
Date: Sat, 5 Feb 2022 00:34:33 +0100
Subject: [PATCH] Gracefully handle known error responses #4

---
 pretix_matrix_inviter/tasks.py | 39 ++++++++++++++++++++++------------
 1 file changed, 26 insertions(+), 13 deletions(-)

diff --git a/pretix_matrix_inviter/tasks.py b/pretix_matrix_inviter/tasks.py
index ce19901..1a3f737 100644
--- a/pretix_matrix_inviter/tasks.py
+++ b/pretix_matrix_inviter/tasks.py
@@ -49,23 +49,36 @@ def matrix_inviter_invite(
         )
         r.raise_for_status()
     except (requests.ConnectionError, requests.HTTPError) as e:
-        try:
-            self.retry()
-        except MaxRetriesExceededError:
+        if r.status_code in (400, 403):
+            response_dump = r.json()
             order.log_action(
                 "pretix_matrix_inviter.error",
                 data={
                     "matrix_id": user_matrix_id,
                     "matrix_room": room_matrix_id,
-                    "error": "HTTP Code {}".format(r.status_code),
+                    "error": "HTTP Code {} ({})".format(
+                        r.status_code, response_dump["error"]
+                    ),
                 },
             )
-            raise e
-
-    order.log_action(
-        "pretix_matrix_inviter.invite_sent",
-        data={
-            "matrix_id": user_matrix_id,
-            "matrix_room": room_matrix_id,
-        },
-    )
+        else:
+            try:
+                self.retry()
+            except MaxRetriesExceededError:
+                order.log_action(
+                    "pretix_matrix_inviter.error",
+                    data={
+                        "matrix_id": user_matrix_id,
+                        "matrix_room": room_matrix_id,
+                        "error": "HTTP Code {}".format(r.status_code),
+                    },
+                )
+                raise e
+    else:
+        order.log_action(
+            "pretix_matrix_inviter.invite_sent",
+            data={
+                "matrix_id": user_matrix_id,
+                "matrix_room": room_matrix_id,
+            },
+        )
-- 
GitLab