@@ -17,7 +17,7 @@ class RestAPIClientError(ValueError):
1717
1818class RestAPIClient (object ):
1919
20- def __init__ (self , credential , endpoint , custom_key_values = {}, session = None ):
20+ def __init__ (self , credential , endpoint , custom_key_values = {}, session = None , behaviour_when_error = None ):
2121 logger .info ("Initialising RestAPIClient, credential={}, endpoint={}" .format (logger .filter_secrets (credential ), endpoint ))
2222
2323 # presets_variables contains all variables available in templates using the {{variable_name}} notation
@@ -57,6 +57,7 @@ def __init__(self, credential, endpoint, custom_key_values={}, session=None):
5757 self .timeout = endpoint .get ("timeout" , - 1 )
5858 if self .timeout > 0 :
5959 self .requests_kwargs .update ({"timeout" : self .timeout })
60+ self .behaviour_when_error = behaviour_when_error or "add-error-column"
6061
6162 self .requests_kwargs .update ({"params" : self .params })
6263 self .pagination = Pagination ()
@@ -89,7 +90,9 @@ def __init__(self, credential, endpoint, custom_key_values={}, session=None):
8990 elif body_format in [DKUConstants .FORM_DATA_BODY_FORMAT ]:
9091 key_value_body = endpoint .get ("key_value_body" , {})
9192 self .requests_kwargs .update ({"json" : get_dku_key_values (key_value_body )})
92- self .metadata = {DKUConstants .REPONSE_ERROR_KEY : None }
93+ self .metadata = {}
94+ if self .behaviour_when_error == "keep-error-column" :
95+ self .metadata = {DKUConstants .REPONSE_ERROR_KEY : None }
9396 self .call_number = 0
9497 self .session = session or requests .Session ()
9598
@@ -147,15 +150,15 @@ def request(self, method, url, can_raise_exeption=True, **kwargs):
147150 self .set_metadata ("response_headers" , "{}" .format (response .headers ))
148151
149152 if error_message :
150- return {DKUConstants .REPONSE_ERROR_KEY : error_message }
153+ return {} if self . behaviour_when_error == "ignore" else { DKUConstants .REPONSE_ERROR_KEY : error_message }
151154
152155 if response .status_code >= 400 :
153156 error_message = "Error {}: {}" .format (response .status_code , response .content )
154157 self .pagination .is_last_batch_empty = True
155158 if can_raise_exeption :
156159 raise RestAPIClientError (error_message )
157160 else :
158- return {DKUConstants .REPONSE_ERROR_KEY : error_message }
161+ return {} if self . behaviour_when_error == "ignore" else { DKUConstants .REPONSE_ERROR_KEY : error_message }
159162 if response .status_code in [204 ]:
160163 self .pagination .update_next_page ({}, response .links )
161164 return self .empty_json_response ()
@@ -168,7 +171,7 @@ def request(self, method, url, can_raise_exeption=True, **kwargs):
168171 logger .error ("response.content={}" .format (response .content ))
169172 if can_raise_exeption :
170173 raise RestAPIClientError ("The API did not return JSON as expected. {}" .format (error_message ))
171- return {DKUConstants .REPONSE_ERROR_KEY : error_message }
174+ return {} if self . behaviour_when_error == "ignore" else { DKUConstants .REPONSE_ERROR_KEY : error_message }
172175
173176 self .pagination .update_next_page (json_response , response .links )
174177 return json_response
0 commit comments