Skip to content

Commit 38a9cb7

Browse files
committed
Merge branch 'feature/sc-124815-use-requests-session' into release/1.1.3
2 parents b71599d + 11e7f13 commit 38a9cb7

2 files changed

Lines changed: 14 additions & 7 deletions

File tree

python-lib/rest_api_client.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class RestAPIClientError(ValueError):
1717

1818
class RestAPIClient(object):
1919

20-
def __init__(self, credential, endpoint, custom_key_values={}):
20+
def __init__(self, credential, endpoint, custom_key_values={}, session=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
@@ -91,7 +91,7 @@ def __init__(self, credential, endpoint, custom_key_values={}):
9191
self.requests_kwargs.update({"json": get_dku_key_values(key_value_body)})
9292
self.metadata = {}
9393
self.call_number = 0
94-
self.session = requests.Session()
94+
self.session = session or requests.Session()
9595

9696
def set_login(self, credential):
9797
login_type = credential.get("login_type", "no_auth")
@@ -132,19 +132,23 @@ def request(self, method, url, can_raise_exeption=True, **kwargs):
132132
raise RestAPIClientError("The api-connect plugin is stuck in a loop. Please check the pagination parameters.")
133133
request_start_time = time.time()
134134
self.time_last_request = request_start_time
135+
error_message = None
135136
try:
136137
response = self.request_with_redirect_retry(method, url, **kwargs)
137-
request_finish_time = time.time()
138138
except Exception as err:
139139
self.pagination.is_last_batch_empty = True
140140
error_message = "Error: {}".format(err)
141141
if can_raise_exeption:
142142
raise RestAPIClientError(error_message)
143-
else:
144-
return {"error": error_message}
143+
144+
request_finish_time = time.time()
145145
self.set_metadata("request_duration", request_finish_time - request_start_time)
146146
self.set_metadata("status_code", response.status_code)
147147
self.set_metadata("response_headers", "{}".format(response.headers))
148+
149+
if error_message:
150+
return {"error": error_message}
151+
148152
if response.status_code >= 400:
149153
error_message = "Error {}: {}".format(response.status_code, response.content)
150154
self.pagination.is_last_batch_empty = True

python-lib/rest_api_recipe_session.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from dku_constants import DKUConstants
66
import copy
77
import json
8+
import requests
9+
810

911
logger = SafeLogger("api-connect plugin", forbidden_keys=DKUConstants.FORBIDDEN_KEYS)
1012

@@ -38,6 +40,7 @@ def get_column_to_parameter_dict(parameter_columns, parameter_renamings):
3840
def process_dataframe(self, input_parameters_dataframe, is_raw_output):
3941
results = []
4042
time_last_request = None
43+
session = requests.Session()
4144
for index, input_parameters_row in input_parameters_dataframe.iterrows():
4245
rows_count = 0
4346
self.initial_parameter_columns = {}
@@ -52,7 +55,7 @@ def process_dataframe(self, input_parameters_dataframe, is_raw_output):
5255
updated_endpoint_parameters,
5356
self.custom_key_values
5457
))
55-
self.client = RestAPIClient(self.credential_parameters, updated_endpoint_parameters, custom_key_values=self.custom_key_values)
58+
self.client = RestAPIClient(self.credential_parameters, updated_endpoint_parameters, custom_key_values=self.custom_key_values, session=session)
5659
self.client.time_last_request = time_last_request
5760
while self.client.has_more_data():
5861
page_results = self.retrieve_next_page(is_raw_output)
@@ -76,7 +79,7 @@ def retrieve_next_page(self, is_raw_output):
7679
if self.can_raise:
7780
raise DataikuException(error_message)
7881
else:
79-
return [{"error": error_message}]
82+
return self.format_page_rows([{"error": error_message}], is_raw_output, metadata)
8083
page_rows.extend(self.format_page_rows(data_rows, is_raw_output, metadata))
8184
else:
8285
# Todo: check api_response key is free and add something overwise

0 commit comments

Comments
 (0)