Skip to content

Commit

Permalink
loop through jobs instead of recursive function
Browse files Browse the repository at this point in the history
  • Loading branch information
kudj committed May 10, 2024
1 parent 40c9583 commit 19ff5d3
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 41 deletions.
91 changes: 50 additions & 41 deletions python-sync-actions/src/component.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ def _process_nested_job(self, parent_result, config, parent_results_list, client
request_parameters: request parameters
"""
results = []
for row in parent_result:
for row in parent_result or [{}]:

parent_results_ext = parent_results_list + [row]

Expand Down Expand Up @@ -228,7 +228,7 @@ def _parse_data(self, data, path) -> list:

return result

def make_call(self) -> tuple[requests.Response, list[dict]]:
def make_call(self) -> tuple[list, list[dict]]:
"""
Make call to the API
Returns:
Expand All @@ -239,46 +239,55 @@ def make_call(self) -> tuple[requests.Response, list[dict]]:
raise ValueError("_JOB_PATH is missing!")
self._client.login()

api_cfg = self._configuration.api
request_cfg = self._configuration.request_parameters
# fix KBC bug
user_params = self._configuration.user_parameters
# evaluate user_params inside the user params itself
user_params = self._fill_in_user_parameters(user_params, user_params)

# build headers
headers = {**api_cfg.default_headers.copy(), **request_cfg.headers.copy()}
new_headers = self._fill_in_user_parameters(headers, user_params)

# build additional parameters
query_parameters = {**api_cfg.default_query_parameters.copy(), **request_cfg.query_parameters.copy()}
query_parameters = self._fill_in_user_parameters(query_parameters, user_params)
ssl_verify = api_cfg.ssl_verification
timeout = api_cfg.timeout
# additional_params = self._build_request_parameters(additional_params_cfg)
request_parameters = {'params': query_parameters,
'headers': new_headers,
'verify': ssl_verify,
'timeout': timeout}

endpoint_path = request_cfg.endpoint_path

# use client to send requests / perform actions
self._final_response = self._client.send_request(method=request_cfg.method, endpoint_path=endpoint_path,
**request_parameters)

headers = dict(self._final_response.headers)

result = self._parse_data(self._final_response.json(), self._configuration.data_path)

if request_cfg.nested_job:
parent_results = []
self._process_nested_job(result, request_cfg.nested_job[0], parent_results, self._client,
request_cfg.method, **request_parameters)
else:
self._final_results = result
parent_results = []

parent_results_list = []

for job in self._configurations:

api_cfg = job.api
request_cfg = job.request_parameters
# fix KBC bug
user_params = job.user_parameters
# evaluate user_params inside the user params itself
user_params = self._fill_in_user_parameters(user_params, user_params)

# build headers
headers = {**api_cfg.default_headers.copy(), **request_cfg.headers.copy()}
new_headers = self._fill_in_user_parameters(headers, user_params)

# build additional parameters
query_parameters = {**api_cfg.default_query_parameters.copy(), **request_cfg.query_parameters.copy()}
query_parameters = self._fill_in_user_parameters(query_parameters, user_params)
ssl_verify = api_cfg.ssl_verification
timeout = api_cfg.timeout
# additional_params = self._build_request_parameters(additional_params_cfg)
request_parameters = {'params': query_parameters,
'headers': new_headers,
'verify': ssl_verify,
'timeout': timeout}

endpoint_results = []
for row in parent_results or [{}]:
parent_results_ext = parent_results_list + [row]

placeholders = PlaceholdersUtils.get_params_for_child_jobs(job.request_parameters.placeholders,
parent_results_ext, self._parent_params)

self._parent_params = placeholders[0]

row_path = self._fill_placeholders(placeholders, job.request_parameters.endpoint_path)

response = self._client.send_request(method=job.request_parameters.method,
endpoint_path=row_path, **request_parameters)

result = self._parse_data(response.json(), job.data_path)

endpoint_results.append(result)

parent_results_list.append(endpoint_results)

return self._final_response, self._final_results
return self._final_response, endpoint_results

@sync_action('load_from_curl')
def load_from_curl(self) -> dict:
Expand Down
5 changes: 5 additions & 0 deletions python-sync-actions/src/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ class ApiConfig(ConfigurationBase):
class ApiRequest(ConfigurationBase):
method: str
endpoint_path: str
placeholders: dict = field(default_factory=dict)
headers: dict = field(default_factory=dict)
query_parameters: dict = field(default_factory=dict)
continue_on_failure: bool = False
Expand Down Expand Up @@ -245,6 +246,9 @@ def build_api_request(configuration: dict) -> List[Tuple[ApiRequest, RequestCont

data_field = endpoint_config.get('dataField')

placeholders = endpoint_config.get('placeholders', {})


if isinstance(data_field, dict):
path = data_field.get('path')
delimiter = data_field.get("delimiter", ".")
Expand All @@ -255,6 +259,7 @@ def build_api_request(configuration: dict) -> List[Tuple[ApiRequest, RequestCont
result_requests.append(
(ApiRequest(method=method,
endpoint_path=endpoint_path,
placeholders=placeholders,
headers=endpoint_config.get('headers', {}),
query_parameters=endpoint_config.get('params', {}),),
request_content,
Expand Down

0 comments on commit 19ff5d3

Please sign in to comment.