chore: adapt webhook preview

This commit is contained in:
David 2024-07-22 16:24:23 +02:00
parent 82979379f1
commit 9ed2271d12
No known key found for this signature in database
GPG key ID: AB15A6AF1101390D
3 changed files with 34 additions and 72 deletions

View file

@ -79,12 +79,27 @@ frappe.webhook = {
};
frappe.ui.form.on("Webhook", {
onload: (frm) => {
frm.preview_fields = frm.doc.__onload.preview_fields;
},
refresh: (frm) => {
frappe.webhook.set_fieldname_select(frm);
frm.set_query(
"background_jobs_queue",
"frappe.integrations.doctype.webhook.webhook.get_all_queues"
);
if (frm.doc.webhook_doctype) {
frm.add_custom_button(__("Preview"), () => {
const args = {
doc: frm.doc,
doctype: frm.doc.webhook_doctype,
preview_fields: frm.preview_fields,
};
let dialog = new frappe.views.RenderPreviewer(args);
return dialog;
});
}
},
request_structure: (frm) => {
@ -98,17 +113,6 @@ frappe.ui.form.on("Webhook", {
enable_security: (frm) => {
frm.toggle_reqd("webhook_secret", frm.doc.enable_security);
},
preview_document: (frm) => {
frappe.call({
method: "generate_preview",
doc: frm.doc,
callback: (r) => {
frm.refresh_field("meets_condition");
frm.refresh_field("preview_request_body");
},
});
},
});
frappe.ui.form.on("Webhook Data", {

View file

@ -30,13 +30,7 @@
"webhook_headers",
"sb_webhook_data",
"webhook_data",
"webhook_json",
"preview_tab",
"preview_document",
"column_break_26",
"meets_condition",
"section_break_28",
"preview_request_body"
"webhook_json"
],
"fields": [
{
@ -169,37 +163,6 @@
"options": "POST\nPUT\nDELETE",
"reqd": 1
},
{
"fieldname": "preview_tab",
"fieldtype": "Tab Break",
"label": "Preview"
},
{
"fieldname": "preview_document",
"fieldtype": "Dynamic Link",
"label": "Select Document",
"options": "webhook_doctype"
},
{
"fieldname": "preview_request_body",
"fieldtype": "Code",
"is_virtual": 1,
"label": "Request Body"
},
{
"fieldname": "meets_condition",
"fieldtype": "Data",
"is_virtual": 1,
"label": "Meets Condition?"
},
{
"fieldname": "column_break_26",
"fieldtype": "Column Break"
},
{
"fieldname": "section_break_28",
"fieldtype": "Section Break"
},
{
"default": "0",
"description": "On checking this option, URL will be treated like a jinja template string",
@ -226,7 +189,7 @@
"link_fieldname": "webhook"
}
],
"modified": "2024-03-23 16:04:03.108172",
"modified": "2024-07-22 09:23:32.642172",
"modified_by": "Administrator",
"module": "Integrations",
"name": "Webhook",
@ -250,4 +213,4 @@
"sort_order": "DESC",
"states": [],
"track_changes": 1
}
}

View file

@ -36,9 +36,6 @@ class Webhook(Document):
enable_security: DF.Check
enabled: DF.Check
is_dynamic_url: DF.Check
meets_condition: DF.Data | None
preview_document: DF.DynamicLink | None
preview_request_body: DF.Code | None
request_method: DF.Literal["POST", "PUT", "DELETE"]
request_structure: DF.Literal["", "Form URL-Encoded", "JSON"]
request_url: DF.SmallText
@ -59,6 +56,15 @@ class Webhook(Document):
webhook_secret: DF.Password | None
# end: auto-generated types
def onload(self):
self.set_onload(
"preview_fields",
[
{"label": _("Meets Condition?"), "fieldtype": "Data", "method": "preview_meets_condition"},
{"label": _("Request Body"), "fieldtype": "Code", "method": "preview_request_body"},
],
)
def validate(self):
self.validate_docevent()
self.validate_condition()
@ -119,35 +125,24 @@ class Webhook(Document):
frappe.throw(_("Invalid Webhook Secret"))
@frappe.whitelist()
def generate_preview(self):
# This function doesn't need to do anything specific as virtual fields
# get evaluated automatically.
pass
@property
def meets_condition(self):
def preview_meets_condition(self, preview_document):
if not self.condition:
return _("Yes")
if not (self.preview_document and self.webhook_doctype):
return _("Select a document to check if it meets conditions.")
try:
doc = frappe.get_cached_doc(self.webhook_doctype, self.preview_document)
doc = frappe.get_cached_doc(self.webhook_doctype, preview_document)
met_condition = frappe.safe_eval(self.condition, eval_locals=get_context(doc))
except Exception as e:
frappe.local.message_log = []
return _("Failed to evaluate conditions: {}").format(e)
return _("Yes") if met_condition else _("No")
@property
def preview_request_body(self):
if not (self.preview_document and self.webhook_doctype):
return _("Select a document to preview request data")
@frappe.whitelist()
def preview_request_body(self, preview_document):
try:
doc = frappe.get_cached_doc(self.webhook_doctype, self.preview_document)
doc = frappe.get_cached_doc(self.webhook_doctype, preview_document)
return frappe.as_json(get_webhook_data(doc, self))
except Exception as e:
frappe.local.message_log = []
return _("Failed to compute request body: {}").format(e)