Selaa lähdekoodia

Merge pull request #16602 from resilient-tech/int-req

refactor: Integration Request
version-14
mergify[bot] 3 vuotta sitten
committed by GitHub
vanhempi
commit
ee40bda491
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
8 muutettua tiedostoa jossa 156 lisäystä ja 291 poistoa
  1. +1
    -1
      frappe/integrations/doctype/braintree_settings/braintree_settings.py
  2. +90
    -270
      frappe/integrations/doctype/integration_request/integration_request.json
  3. +4
    -4
      frappe/integrations/doctype/paypal_settings/paypal_settings.py
  4. +1
    -1
      frappe/integrations/doctype/paytm_settings/paytm_settings.py
  5. +4
    -3
      frappe/integrations/doctype/razorpay_settings/razorpay_settings.py
  6. +1
    -1
      frappe/integrations/doctype/stripe_settings/stripe_settings.py
  7. +38
    -11
      frappe/integrations/utils.py
  8. +17
    -0
      frappe/patches/v14_0/update_integration_request.py

+ 1
- 1
frappe/integrations/doctype/braintree_settings/braintree_settings.py Näytä tiedosto

@@ -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:


+ 90
- 270
frappe/integrations/doctype/integration_request/integration_request.json Näytä tiedosto

@@ -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
}

+ 4
- 4
frappe/integrations/doctype/paypal_settings/paypal_settings.py Näytä tiedosto

@@ -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)


+ 1
- 1
frappe/integrations/doctype/paytm_settings/paytm_settings.py Näytä tiedosto

@@ -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)))


+ 4
- 3
frappe/integrations/doctype/razorpay_settings/razorpay_settings.py Näytä tiedosto

@@ -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)


+ 1
- 1
frappe/integrations/doctype/stripe_settings/stripe_settings.py Näytä tiedosto

@@ -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:


+ 38
- 11
frappe/integrations/utils.py Näytä tiedosto

@@ -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)

if isinstance(error, str):
error = json.loads(error)
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

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
- 0
frappe/patches/v14_0/update_integration_request.py Näytä tiedosto

@@ -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",
)

Ladataan…
Peruuta
Tallenna