diff --git a/frappe/integrations/doctype/webhook/webhook.py b/frappe/integrations/doctype/webhook/webhook.py index 3f1b60d903..22abcf9a99 100644 --- a/frappe/integrations/doctype/webhook/webhook.py +++ b/frappe/integrations/doctype/webhook/webhook.py @@ -8,6 +8,7 @@ import hashlib import hmac import json from time import sleep +from typing import Dict, Optional from urllib.parse import urlparse import requests @@ -80,8 +81,8 @@ def get_context(doc): return {"doc": doc, "utils": get_safe_globals().get("frappe").get("utils")} -def enqueue_webhook(doc, webhook): - webhook = frappe.get_doc("Webhook", webhook.get("name")) +def enqueue_webhook(doc, webhook) -> None: + webhook: Webhook = frappe.get_doc("Webhook", webhook.get("name")) headers = get_webhook_headers(doc, webhook) data = get_webhook_data(doc, webhook) @@ -98,6 +99,11 @@ def enqueue_webhook(doc, webhook): frappe.logger().debug({"webhook_success": r.text}) log_request(webhook.request_url, headers, data, r) break + + except requests.exceptions.ReadTimeout as e: + frappe.logger().debug({"webhook_error": e, "try": i + 1}) + log_request(webhook.request_url, headers, data) + except Exception as e: frappe.logger().debug({"webhook_error": e, "try": i + 1}) log_request(webhook.request_url, headers, data, r) @@ -108,7 +114,7 @@ def enqueue_webhook(doc, webhook): webhook.log_error("Webhook failed") -def log_request(url, headers, data, res): +def log_request(url: str, headers: Dict, data: Dict, res: Optional[requests.Response] = None): request_log = frappe.get_doc( { "doctype": "Webhook Request Log",