fix: error handling

This commit is contained in:
Saqib Ansari
2020-12-14 18:59:01 +05:30
committed by Saurabh
parent 08f082089e
commit 554ce04e0d

View File

@@ -308,14 +308,17 @@ def make_einvoice(invoice):
"Errors: ", json.dumps(errors, indent=4)
])
frappe.log_error(title="E Invoice Validation Failed", message=message)
if len(errors) > 1:
li = ['<li>'+ d +'</li>' for d in errors]
frappe.throw("<ul style='padding-left: 20px'>{}</ul>".format(''.join(li)), title=_('E Invoice Validation Failed'))
else:
frappe.throw(errors[0], title=_('E Invoice Validation Failed'))
throw_error_list(errors, _('E Invoice Validation Failed'))
return einvoice
def throw_error_list(errors, title):
if len(errors) > 1:
li = ['<li>'+ d +'</li>' for d in errors]
frappe.throw("<ul style='padding-left: 20px'>{}</ul>".format(''.join(li)), title=title)
else:
frappe.throw(errors[0], title=title)
def validate_einvoice(validations, einvoice, errors=[]):
for fieldname, field_validation in validations.items():
value = einvoice.get(fieldname, None)
@@ -406,6 +409,7 @@ class GSPConnector():
"response": json.dumps(res, indent=4) if res else None
})
request_log.insert(ignore_permissions=True)
frappe.db.commit()
def fetch_auth_token(self):
headers = {
@@ -487,11 +491,11 @@ class GSPConnector():
Contact ERPNext support to resolve the issue.')
else:
self.log_error(res)
raise RequestFailed
except RequestFailed:
self.raise_error()
errors = self.sanitize_error_message(res.get('message'))
self.raise_error(errors=errors)
except Exception:
self.log_error(data)
@@ -506,11 +510,11 @@ class GSPConnector():
if res.get('success'):
return res.get('result')
else:
self.log_error(res)
raise RequestFailed
except RequestFailed:
self.raise_error()
errors = self.sanitize_error_message(res.get('message'))
self.raise_error(errors=errors)
except Exception:
self.log_error()
@@ -536,11 +540,11 @@ class GSPConnector():
self.update_invoice()
else:
self.log_error(res)
raise RequestFailed
except RequestFailed:
self.raise_error()
errors = self.sanitize_error_message(res.get('message'))
self.raise_error(errors=errors)
except Exception:
self.log_error(data)
@@ -577,11 +581,11 @@ class GSPConnector():
self.update_invoice()
else:
self.log_error(res)
raise RequestFailed
except RequestFailed:
self.raise_error()
errors = self.sanitize_error_message(res.get('message'))
self.raise_error(errors=errors)
except Exception:
self.log_error(data)
@@ -608,15 +612,37 @@ class GSPConnector():
self.update_invoice()
else:
self.log_error(res)
raise RequestFailed
except RequestFailed:
self.raise_error()
errors = self.sanitize_error_message(res.get('message'))
self.raise_error(errors=errors)
except Exception:
self.log_error(data)
self.raise_error(True)
def sanitize_error_message(self, message):
'''
message = '2174 : For inter-state transaction, CGST and SGST amounts are not applicable; only IGST amount is applicable,
3095 : Supplier GSTIN is inactive'
we search for string between ':' to extract error messages
errors = [
': For inter-state transaction, CGST and SGST amounts are not applicable; only IGST amount is applicable, 3095 ',
': Test'
]
then we trim down the message by looping over errors
'''
errors = re.findall(': [^:]+', message)
for idx, e in enumerate(errors):
# remove colons
errors[idx] = errors[idx].replace(':', '').strip()
# if not last
if idx != len(errors) - 1:
# remove last 7 chars eg: ', 3095 '
errors[idx] = errors[idx][:-6]
return errors
def log_error(self, data={}):
if not isinstance(data, dict):
@@ -625,23 +651,27 @@ class GSPConnector():
seperator = "--" * 50
err_tb = traceback.format_exc()
err_msg = str(sys.exc_info()[1])
data = json.dumps(data, default=str, indent=4)
data = json.dumps(data, indent=4)
message = "\n".join([
"Error", err_msg, seperator,
"Data:", data, seperator,
"Exception:", err_tb
])
frappe.log_error(title="E Invoicing Error", message=message)
frappe.log_error(title=_('E Invoice Request Failed'), message=message)
def raise_error(self, raise_exception=False):
link_to_error_list = '<a href="desk#List/Error Log/List?method=E Invoice Request Failed">Error Log</a>'
frappe.msgprint(
_('An error occurred while making e-invoicing request. Please check {} for more information.').format(link_to_error_list),
title=_('E Invoice Request Failed'),
raise_exception=raise_exception,
indicator='red'
)
def raise_error(self, raise_exception=False, errors=[]):
title = _('E Invoice Request Failed')
if errors:
throw_error_list(errors, title)
else:
link_to_error_list = '<a href="desk#List/Error Log/List?method=E Invoice Request Failed">Error Log</a>'
frappe.msgprint(
_('An error occurred while making e-invoicing request. Please check {} for more information.').format(link_to_error_list),
title=title,
raise_exception=raise_exception,
indicator='red'
)
def set_einvoice_data(self, res):
enc_signed_invoice = res.get('SignedInvoice')