Fix: Shopify payload operations logging (#19366)
* fix: payload logging for shopify
* fix: remove print statements
diff --git a/erpnext/erpnext_integrations/connectors/shopify_connection.py b/erpnext/erpnext_integrations/connectors/shopify_connection.py
index bd98037..3be08a2 100644
--- a/erpnext/erpnext_integrations/connectors/shopify_connection.py
+++ b/erpnext/erpnext_integrations/connectors/shopify_connection.py
@@ -29,7 +29,8 @@
validate_item(order, shopify_settings)
create_order(order, shopify_settings)
except Exception as e:
- make_shopify_log(status="Error", message=e.message, exception=False)
+ make_shopify_log(status="Error", exception=e)
+
else:
make_shopify_log(status="Success")
@@ -42,9 +43,9 @@
sales_order = get_sales_order(cstr(order['id']))
if sales_order:
create_sales_invoice(order, shopify_settings, sales_order)
- make_shopify_log(status="Success")
- except Exception:
- make_shopify_log(status="Error", exception=True)
+ make_shopify_log(status="Success")
+ except Exception as e:
+ make_shopify_log(status="Error", exception=e, rollback=True)
def prepare_delivery_note(order, request_id=None):
frappe.set_user('Administrator')
@@ -56,8 +57,8 @@
if sales_order:
create_delivery_note(order, shopify_settings, sales_order)
make_shopify_log(status="Success")
- except Exception:
- make_shopify_log(status="Error", exception=True)
+ except Exception as e:
+ make_shopify_log(status="Error", exception=e, rollback=True)
def get_sales_order(shopify_order_id):
sales_order = frappe.db.get_value("Sales Order", filters={"shopify_order_id": shopify_order_id})
@@ -97,7 +98,7 @@
message = 'Following items are exists in order but relevant record not found in Product master'
message += "\n" + ", ".join(product_not_exists)
- make_shopify_log(status="Error", message=message, exception=True)
+ make_shopify_log(status="Error", exception=e, rollback=True)
return ''
diff --git a/erpnext/erpnext_integrations/doctype/shopify_log/shopify_log.py b/erpnext/erpnext_integrations/doctype/shopify_log/shopify_log.py
index 0c821e0..7d3f572 100644
--- a/erpnext/erpnext_integrations/doctype/shopify_log/shopify_log.py
+++ b/erpnext/erpnext_integrations/doctype/shopify_log/shopify_log.py
@@ -12,23 +12,38 @@
pass
-def make_shopify_log(status="Queued", message=None, exception=False):
+def make_shopify_log(status="Queued", exception=None, rollback=False):
# if name not provided by log calling method then fetch existing queued state log
+ make_new = False
+
if not frappe.flags.request_id:
- return
+ make_new = True
- log = frappe.get_doc("Shopify Log", frappe.flags.request_id)
-
- if exception:
+ if rollback:
frappe.db.rollback()
- log = frappe.get_doc({"doctype":"Shopify Log"}).insert(ignore_permissions=True)
- log.message = message if message else ''
+ if make_new:
+ log = frappe.get_doc({"doctype":"Shopify Log"}).insert(ignore_permissions=True)
+ else:
+ log = log = frappe.get_doc("Shopify Log", frappe.flags.request_id)
+
+ log.message = get_message(exception)
log.traceback = frappe.get_traceback()
log.status = status
log.save(ignore_permissions=True)
frappe.db.commit()
+def get_message(exception):
+ message = None
+
+ if hasattr(exception, 'message'):
+ message = exception.message
+ elif hasattr(exception, '__str__'):
+ message = e.__str__()
+ else:
+ message = "Something went wrong while syncing"
+ return message
+
def dump_request_data(data, event="create/order"):
event_mapper = {
"orders/create": get_webhook_address(connector_name='shopify_connection', method="sync_sales_order", exclude_uri=True),
@@ -43,11 +58,11 @@
}).insert(ignore_permissions=True)
frappe.db.commit()
- frappe.enqueue(method=event_mapper[event], queue='short', timeout=300, is_async=True,
+ frappe.enqueue(method=event_mapper[event], queue='short', timeout=300, is_async=True,
**{"order": data, "request_id": log.name})
@frappe.whitelist()
def resync(method, name, request_data):
frappe.db.set_value("Shopify Log", name, "status", "Queued", update_modified=False)
- frappe.enqueue(method=method, queue='short', timeout=300, is_async=True,
+ frappe.enqueue(method=method, queue='short', timeout=300, is_async=True,
**{"order": json.loads(request_data), "request_id": name})
diff --git a/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py b/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py
index e2f6d49..a4332b1 100644
--- a/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py
+++ b/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py
@@ -30,13 +30,9 @@
# url = get_shopify_url('admin/webhooks.json', self)
created_webhooks = [d.method for d in self.webhooks]
url = get_shopify_url('admin/api/2019-04/webhooks.json', self)
- print('url', url)
for method in webhooks:
- print('method', method)
session = get_request_session()
- print('session', session)
try:
- print(get_header(self))
d = session.post(url, data=json.dumps({
"webhook": {
"topic": method,
@@ -44,7 +40,6 @@
"format": "json"
}
}), headers=get_header(self))
- print('d', d.json())
d.raise_for_status()
self.update_webhook_table(method, d.json())
except Exception as e:
@@ -67,7 +62,6 @@
self.remove(d)
def update_webhook_table(self, method, res):
- print('update')
self.append("webhooks", {
"webhook_id": res['webhook']['id'],
"method": method
@@ -75,7 +69,6 @@
def get_shopify_url(path, settings):
if settings.app_type == "Private":
- print(settings.api_key, settings.get_password('password'), settings.shopify_url, path)
return 'https://{}:{}@{}/{}'.format(settings.api_key, settings.get_password('password'), settings.shopify_url, path)
else:
return 'https://{}/{}'.format(settings.shopify_url, path)