From c554010a7b198652c22efdb8f933a7d6b77da190 Mon Sep 17 00:00:00 2001 From: Joseph Jackson Date: Fri, 10 Sep 2021 16:44:51 -0500 Subject: [PATCH 1/2] Decoupling error handling for Document Creation Fixes AuthorizeNet/sdk-python#148 --- authorizenet/apicontrollersbase.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/authorizenet/apicontrollersbase.py b/authorizenet/apicontrollersbase.py index bab6e0f..beea36c 100644 --- a/authorizenet/apicontrollersbase.py +++ b/authorizenet/apicontrollersbase.py @@ -143,13 +143,18 @@ def execute(self): self._httpResponse = self._httpResponse.text[3:] #strip BOM self.afterexecute() try: - self._response = apicontractsv1.CreateFromDocument(self._httpResponse) + self._response = apicontractsv1.CreateFromDocument(self._httpResponse) + except (pyxb.exceptions_.PyXBException, pyxb.exceptions_.PyXBError) as e: + error_details = e.details() + raise e( + 'Validation Error Creating Document: At %s, with Arguments: %s, details:', + type(e), e.args, str(error_details)) + try: #objectify code xmlResponse= self._response.toxml(encoding=constants.xml_encoding, element_name=self.getrequesttype()) xmlResponse = xmlResponse.replace(constants.nsNamespace1, b'') xmlResponse = xmlResponse.replace(constants.nsNamespace2, b'') self._mainObject = objectify.fromstring(xmlResponse) - except Exception as objectifyexception: anetLogger.error( 'Create Document Exception: %s, %s', type(objectifyexception), objectifyexception.args ) responseString = self._httpResponse From 3a47aeb7b4ff27e75912fee6fc531121540b3033 Mon Sep 17 00:00:00 2001 From: Joseph Jackson Date: Wed, 17 May 2023 11:23:46 -0600 Subject: [PATCH 2/2] Adding defensive error handling to avoid exceptions if the http request status code is 200 --- authorizenet/apicontrollersbase.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/authorizenet/apicontrollersbase.py b/authorizenet/apicontrollersbase.py index beea36c..cb0fe82 100644 --- a/authorizenet/apicontrollersbase.py +++ b/authorizenet/apicontrollersbase.py @@ -146,9 +146,15 @@ def execute(self): self._response = apicontractsv1.CreateFromDocument(self._httpResponse) except (pyxb.exceptions_.PyXBException, pyxb.exceptions_.PyXBError) as e: error_details = e.details() - raise e( - 'Validation Error Creating Document: At %s, with Arguments: %s, details:', - type(e), e.args, str(error_details)) + try: + raise e( + 'Validation Error Creating Document: At %s, with Arguments: %s, details:', + type(e), e.args, str(error_details)) + except TypeError: + anetLogger.error( + 'Validation Error Creating Document: At %s, with Arguments: %s, details:', + type(e), e.args + ) try: #objectify code xmlResponse= self._response.toxml(encoding=constants.xml_encoding, element_name=self.getrequesttype())