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}",
)
)
mock_post.assert_called_once_with(
- "http://paperless-ngx.com",
+ url="http://paperless-ngx.com",
content="Test message",
headers={},
files=None,
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(