diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index ae15992ed..16b3a01ea 100644 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -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}", ) diff --git a/src/documents/tests/test_workflows.py b/src/documents/tests/test_workflows.py index 3006594cc..1c0c4449c 100644 --- a/src/documents/tests/test_workflows.py +++ b/src/documents/tests/test_workflows.py @@ -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(