Skip to content

Commit fac9308

Browse files
author
Rohan Bansal
committed
feat: add conditional triggers for Webhook
1 parent e0ddc49 commit fac9308

3 files changed

Lines changed: 531 additions & 350 deletions

File tree

frappe/integrations/doctype/webhook/__init__.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from __future__ import unicode_literals
66
import frappe
77

8+
89
def run_webhooks(doc, method):
910
'''Run webhooks for this method'''
1011
if frappe.flags.in_import or frappe.flags.in_patch or frappe.flags.in_install:
@@ -13,13 +14,13 @@ def run_webhooks(doc, method):
1314
if frappe.flags.webhooks_executed is None:
1415
frappe.flags.webhooks_executed = {}
1516

16-
if frappe.flags.webhooks == None:
17+
if frappe.flags.webhooks is None:
1718
# load webhooks from cache
1819
webhooks = frappe.cache().get_value('webhooks')
19-
if webhooks==None:
20+
if webhooks is None:
2021
# query webhooks
2122
webhooks_list = frappe.get_all('Webhook',
22-
fields=["name", "webhook_docevent", "webhook_doctype"])
23+
fields=["name", "`condition`", "webhook_docevent", "webhook_doctype"])
2324

2425
# make webhooks map for cache
2526
webhooks = {}
@@ -37,7 +38,7 @@ def run_webhooks(doc, method):
3738
return
3839

3940
def _webhook_request(webhook):
40-
if not webhook.name in frappe.flags.webhooks_executed.get(doc.name, []):
41+
if webhook.name not in frappe.flags.webhooks_executed.get(doc.name, []):
4142
frappe.enqueue("frappe.integrations.doctype.webhook.webhook.enqueue_webhook",
4243
enqueue_after_commit=True, doc=doc, webhook=webhook)
4344

@@ -55,5 +56,7 @@ def _webhook_request(webhook):
5556

5657
for webhook in webhooks_for_doc:
5758
event = method if method in event_list else None
58-
if event and webhook.webhook_docevent == event:
59-
_webhook_request(webhook)
59+
60+
if webhook.condition and frappe.safe_eval(webhook.condition, None, {"doc": doc}):
61+
if event and webhook.webhook_docevent == event:
62+
_webhook_request(webhook)

0 commit comments

Comments
 (0)