Merge pull request #16602 from resilient-tech/int-req
refactor: Integration Request
This commit is contained in:
commit
ee40bda491
8 changed files with 155 additions and 290 deletions
|
|
@ -190,7 +190,7 @@ class BraintreeSettings(Document):
|
|||
self.data = frappe._dict(data)
|
||||
|
||||
try:
|
||||
self.integration_request = create_request_log(self.data, "Host", "Braintree")
|
||||
self.integration_request = create_request_log(self.data, service_name="Braintree")
|
||||
return self.create_charge_on_braintree()
|
||||
|
||||
except Exception:
|
||||
|
|
|
|||
|
|
@ -1,334 +1,154 @@
|
|||
{
|
||||
"allow_copy": 0,
|
||||
"allow_events_in_timeline": 0,
|
||||
"allow_guest_to_view": 0,
|
||||
"allow_import": 0,
|
||||
"allow_rename": 0,
|
||||
"beta": 0,
|
||||
"creation": "2016-08-04 04:58:40.457416",
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"actions": [],
|
||||
"creation": "2022-03-28 12:25:29.929952",
|
||||
"doctype": "DocType",
|
||||
"document_type": "",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"request_id",
|
||||
"integration_request_service",
|
||||
"is_remote_request",
|
||||
"column_break_5",
|
||||
"request_description",
|
||||
"status",
|
||||
"section_break_8",
|
||||
"url",
|
||||
"request_headers",
|
||||
"data",
|
||||
"response_section",
|
||||
"output",
|
||||
"error",
|
||||
"reference_section",
|
||||
"reference_doctype",
|
||||
"column_break_16",
|
||||
"reference_docname"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "integration_type",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Integration Type",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "\nHost\nRemote\nSubscription Notification",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "integration_request_service",
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Integration Request Service",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
"label": "Service",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"default": "Queued",
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "status",
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 1,
|
||||
"in_standard_filter": 1,
|
||||
"label": "Status",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "\nQueued\nAuthorized\nCompleted\nCancelled\nFailed",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "data",
|
||||
"fieldtype": "Code",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Data",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
"label": "Request Data",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "output",
|
||||
"fieldtype": "Code",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Output",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "error",
|
||||
"fieldtype": "Code",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Error",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "reference_doctype",
|
||||
"fieldtype": "Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Reference Document Type",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"options": "DocType",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"allow_bulk_edit": 0,
|
||||
"allow_in_quick_entry": 0,
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"columns": 0,
|
||||
"fetch_if_empty": 0,
|
||||
"fieldname": "reference_docname",
|
||||
"fieldtype": "Dynamic Link",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_global_search": 0,
|
||||
"in_list_view": 0,
|
||||
"in_standard_filter": 0,
|
||||
"label": "Reference Docname",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"label": "Reference Document Name",
|
||||
"options": "reference_doctype",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 1,
|
||||
"remember_last_selected_value": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"translatable": 0,
|
||||
"unique": 0
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "is_remote_request",
|
||||
"fieldtype": "Check",
|
||||
"label": "Is Remote Request?",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "request_description",
|
||||
"fieldtype": "Data",
|
||||
"label": "Request Description",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "request_id",
|
||||
"fieldtype": "Data",
|
||||
"label": "Request ID",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_5",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "section_break_8",
|
||||
"fieldtype": "Section Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "url",
|
||||
"fieldtype": "Data",
|
||||
"label": "URL",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "response_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Response"
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:doc.reference_doctype",
|
||||
"fieldname": "reference_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Reference"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_16",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "request_headers",
|
||||
"fieldtype": "Code",
|
||||
"label": "Request Headers",
|
||||
"read_only": 1
|
||||
}
|
||||
],
|
||||
"has_web_view": 0,
|
||||
"hide_heading": 0,
|
||||
"hide_toolbar": 0,
|
||||
"idx": 0,
|
||||
"image_view": 0,
|
||||
"in_create": 1,
|
||||
"is_submittable": 0,
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2019-09-05 14:22:27.664645",
|
||||
"links": [],
|
||||
"modified": "2022-04-07 11:32:27.557548",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Integrations",
|
||||
"name": "Integration Request",
|
||||
"name_case": "",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"amend": 0,
|
||||
"cancel": 0,
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"if_owner": 0,
|
||||
"import": 0,
|
||||
"permlevel": 0,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"set_user_permissions": 0,
|
||||
"share": 1,
|
||||
"submit": 0,
|
||||
"write": 1
|
||||
"share": 1
|
||||
}
|
||||
],
|
||||
"quick_entry": 0,
|
||||
"read_only": 0,
|
||||
"read_only_onload": 0,
|
||||
"show_name_in_global_search": 0,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"states": [],
|
||||
"title_field": "integration_request_service",
|
||||
"track_changes": 1,
|
||||
"track_seen": 0,
|
||||
"track_views": 0
|
||||
"track_changes": 1
|
||||
}
|
||||
|
|
@ -182,9 +182,8 @@ class PayPalSettings(Document):
|
|||
kwargs.update(
|
||||
{"token": response.get("TOKEN")[0], "correlation_id": response.get("CORRELATIONID")[0]}
|
||||
)
|
||||
self.integration_request = create_request_log(
|
||||
kwargs, "Remote", "PayPal", response.get("TOKEN")[0]
|
||||
)
|
||||
|
||||
create_request_log(kwargs, service_name="PayPal", name=kwargs["token"])
|
||||
|
||||
return return_url.format(kwargs["token"])
|
||||
|
||||
|
|
@ -463,7 +462,8 @@ def ipn_handler():
|
|||
{
|
||||
"data": json.dumps(frappe.local.form_dict),
|
||||
"doctype": "Integration Request",
|
||||
"integration_type": "Subscription Notification",
|
||||
"request_description": "Subscription Notification",
|
||||
"is_remote_request": 1,
|
||||
"status": "Queued",
|
||||
}
|
||||
).insert(ignore_permissions=True)
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ class PaytmSettings(Document):
|
|||
def get_payment_url(self, **kwargs):
|
||||
"""Return payment url with several params"""
|
||||
# create unique order id by making it equal to the integration request
|
||||
integration_request = create_request_log(kwargs, "Host", "Paytm")
|
||||
integration_request = create_request_log(kwargs, service_name="Paytm")
|
||||
kwargs.update(dict(order_id=integration_request.name))
|
||||
|
||||
return get_url("./integrations/paytm_checkout?{0}".format(urlencode(kwargs)))
|
||||
|
|
|
|||
|
|
@ -196,7 +196,7 @@ class RazorpaySettings(Document):
|
|||
return kwargs
|
||||
|
||||
def get_payment_url(self, **kwargs):
|
||||
integration_request = create_request_log(kwargs, "Host", "Razorpay")
|
||||
integration_request = create_request_log(kwargs, service_name="Razorpay")
|
||||
return get_url("./integrations/razorpay_checkout?token={0}".format(integration_request.name))
|
||||
|
||||
def create_order(self, **kwargs):
|
||||
|
|
@ -206,7 +206,7 @@ class RazorpaySettings(Document):
|
|||
kwargs["amount"] *= 100
|
||||
|
||||
# Create integration log
|
||||
integration_request = create_request_log(kwargs, "Host", "Razorpay")
|
||||
integration_request = create_request_log(kwargs, service_name="Razorpay")
|
||||
|
||||
# Setup payment options
|
||||
payment_options = {
|
||||
|
|
@ -490,7 +490,8 @@ def razorpay_subscription_callback():
|
|||
{
|
||||
"data": json.dumps(frappe.local.form_dict),
|
||||
"doctype": "Integration Request",
|
||||
"integration_type": "Subscription Notification",
|
||||
"request_description": "Subscription Notification",
|
||||
"is_remote_request": 1,
|
||||
"status": "Queued",
|
||||
}
|
||||
).insert(ignore_permissions=True)
|
||||
|
|
|
|||
|
|
@ -200,7 +200,7 @@ class StripeSettings(Document):
|
|||
stripe.default_http_client = stripe.http_client.RequestsClient()
|
||||
|
||||
try:
|
||||
self.integration_request = create_request_log(self.data, "Host", "Stripe")
|
||||
self.integration_request = create_request_log(self.data, service_name="Stripe")
|
||||
return self.create_charge_on_stripe()
|
||||
|
||||
except Exception:
|
||||
|
|
|
|||
|
|
@ -42,22 +42,45 @@ def make_put_request(url, **kwargs):
|
|||
return make_request("PUT", url, **kwargs)
|
||||
|
||||
|
||||
def create_request_log(data, integration_type, service_name, name=None, error=None):
|
||||
if isinstance(data, str):
|
||||
data = json.loads(data)
|
||||
def create_request_log(
|
||||
data,
|
||||
integration_type=None,
|
||||
service_name=None,
|
||||
name=None,
|
||||
error=None,
|
||||
request_headers=None,
|
||||
output=None,
|
||||
**kwargs
|
||||
):
|
||||
"""
|
||||
DEPRECATED: The parameter integration_type will be removed in the next major release.
|
||||
Use is_remote_request instead.
|
||||
"""
|
||||
if integration_type == "Remote":
|
||||
kwargs["is_remote_request"] = 1
|
||||
|
||||
if isinstance(error, str):
|
||||
error = json.loads(error)
|
||||
elif integration_type == "Subscription Notification":
|
||||
kwargs["request_description"] = integration_type
|
||||
|
||||
reference_doctype = reference_docname = None
|
||||
if "reference_doctype" not in kwargs:
|
||||
if isinstance(data, str):
|
||||
data = json.loads(data)
|
||||
|
||||
reference_doctype = data.get("reference_doctype")
|
||||
reference_docname = data.get("reference_docname")
|
||||
|
||||
integration_request = frappe.get_doc(
|
||||
{
|
||||
"doctype": "Integration Request",
|
||||
"integration_type": integration_type,
|
||||
"integration_request_service": service_name,
|
||||
"reference_doctype": data.get("reference_doctype"),
|
||||
"reference_docname": data.get("reference_docname"),
|
||||
"error": json.dumps(error, default=json_handler),
|
||||
"data": json.dumps(data, default=json_handler),
|
||||
"request_headers": get_json(request_headers),
|
||||
"data": get_json(data),
|
||||
"output": get_json(output),
|
||||
"error": get_json(error),
|
||||
"reference_doctype": reference_doctype,
|
||||
"reference_docname": reference_docname,
|
||||
**kwargs,
|
||||
}
|
||||
)
|
||||
|
||||
|
|
@ -70,6 +93,10 @@ def create_request_log(data, integration_type, service_name, name=None, error=No
|
|||
return integration_request
|
||||
|
||||
|
||||
def get_json(obj):
|
||||
return obj if isinstance(obj, str) else frappe.as_json(obj, indent=1)
|
||||
|
||||
|
||||
def get_payment_gateway_controller(payment_gateway):
|
||||
"""Return payment gateway controller"""
|
||||
gateway = frappe.get_doc("Payment Gateway", payment_gateway)
|
||||
|
|
|
|||
17
frappe/patches/v14_0/update_integration_request.py
Normal file
17
frappe/patches/v14_0/update_integration_request.py
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
import frappe
|
||||
|
||||
|
||||
def execute():
|
||||
doctype = "Integration Request"
|
||||
frappe.db.set_value(
|
||||
doctype,
|
||||
{"integration_type": "Remote", "integration_request_service": ("!=", "PayPal")},
|
||||
"is_remote_request",
|
||||
1,
|
||||
)
|
||||
frappe.db.set_value(
|
||||
doctype,
|
||||
{"integration_type": "Subscription Notification"},
|
||||
"request_description",
|
||||
"Subscription Notification",
|
||||
)
|
||||
Loading…
Add table
Reference in a new issue