]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Fix: correctly handle dict data with webhook (#9674)
authorshamoon <4887959+shamoon@users.noreply.github.com>
Wed, 16 Apr 2025 07:07:08 +0000 (00:07 -0700)
committerGitHub <noreply@github.com>
Wed, 16 Apr 2025 07:07:08 +0000 (00:07 -0700)
src/documents/signals/handlers.py
src/documents/tests/test_workflows.py

index ae15992ed10ed4cd7faab23c37d3170c3c48ebb3..16b3a01ea798ee82a5599b5e9f0b5ef0d772d925 100644 (file)
@@ -622,20 +622,30 @@ def send_webhook(
     as_json: bool = False,
 ):
     try:
+        post_args = {
+            "url": url,
+            "headers": headers,
+            "files": files,
+        }
         if as_json:
-            httpx.post(
-                url,
-                json=data,
-                files=files,
-                headers=headers,
-            ).raise_for_status()
+            post_args["json"] = data
+        elif isinstance(data, dict):
+            post_args["data"] = data
         else:
-            httpx.post(
-                url,
-                content=data,
-                files=files,
-                headers=headers,
-            ).raise_for_status()
+            post_args["content"] = data
+
+        httpx.post(
+            **post_args,
+        ).raise_for_status()
+        logger.info(
+            f"Webhook sent to {url}",
+        )
+    except Exception as e:
+        logger.error(
+            f"Failed attempt sending webhook to {url}: {e}",
+        )
+        raise e
+
         logger.info(
             f"Webhook sent to {url}",
         )
index 3006594cc4d7ecaf325d1c23f85ad8aae320902c..1c0c4449c66a98a7033e54ef1c39860a93450996 100644 (file)
@@ -2614,7 +2614,7 @@ class TestWorkflows(
             )
 
             mock_post.assert_called_once_with(
-                "http://paperless-ngx.com",
+                url="http://paperless-ngx.com",
                 content="Test message",
                 headers={},
                 files=None,
@@ -2623,6 +2623,20 @@ class TestWorkflows(
             expected_str = "Webhook sent to http://paperless-ngx.com"
             self.assertIn(expected_str, cm.output[0])
 
+            # with dict
+            send_webhook(
+                url="http://paperless-ngx.com",
+                data={"message": "Test message"},
+                headers={},
+                files=None,
+            )
+            mock_post.assert_called_with(
+                url="http://paperless-ngx.com",
+                data={"message": "Test message"},
+                headers={},
+                files=None,
+            )
+
     @mock.patch("httpx.post")
     def test_workflow_webhook_send_webhook_retry(self, mock_http):
         mock_http.return_value.raise_for_status = mock.Mock(