Skip to content

Commit 43d9cca

Browse files
committed
Fix for [sc-99081] using jon path
1 parent 7475df5 commit 43d9cca

4 files changed

Lines changed: 16 additions & 16 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
jsonpath_ng

python-lib/dku_utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import json
22
import copy
3+
from jsonpath_ng.ext import parse
34

45

56
def get_dku_key_values(endpoint_query_string):
@@ -84,3 +85,12 @@ def format_template(template, **kwargs):
8485
def is_string(data):
8586
data_type = type(data).__name__
8687
return data_type in ["str", "unicode"]
88+
89+
90+
def extract_key_using_json_path(json_dictionary, json_path):
91+
matches = parse(json_path).find(json_dictionary)
92+
if matches:
93+
res = matches[0].value
94+
return res
95+
else:
96+
return None

python-lib/pagination.py

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from safe_logger import SafeLogger
2-
from dku_utils import get_value_from_path
2+
from dku_utils import get_value_from_path, extract_key_using_json_path
33

44

55
logger = SafeLogger("api-connect plugin Pagination")
@@ -32,7 +32,7 @@ def configure_paging(self, config=None, skip_key=None, limit_key=None, total_key
3232
self.pagination_type = config.get("pagination_type", pagination_type)
3333
if self.pagination_type == "next_page":
3434
self.next_page_key = config.get("next_page_key", next_page_key)
35-
self.next_page_key = None if self.next_page_key == [''] else self.next_page_key
35+
self.next_page_key = None if self.next_page_key == '' else self.next_page_key
3636
elif self.pagination_type in ["offset", "page"]:
3737
self.skip_key = config.get("skip_key", skip_key)
3838

@@ -80,8 +80,8 @@ def update_next_page(self, data, response_links=None):
8080
self.is_last_batch_empty = True
8181
else:
8282
batch_size = 1
83-
if self.next_page_key and (len(self.next_page_key) > 0):
84-
self.next_page_url = self.get_from_path(data, self.next_page_key)
83+
if self.next_page_key:
84+
self.next_page_url = extract_key_using_json_path(data, self.next_page_key)
8585
if self.skip_key:
8686
self.skip = data.get(self.skip_key)
8787
if self.limit_key:
@@ -92,17 +92,6 @@ def update_next_page(self, data, response_links=None):
9292
if self.total:
9393
self.remaining_records = self.total - self.records_to_skip
9494

95-
def get_from_path(self, dictionary, path):
96-
if isinstance(path, list):
97-
edge = dictionary
98-
for key in path:
99-
edge = edge.get(key)
100-
if edge is None:
101-
return None
102-
return edge
103-
else:
104-
return dictionary.get(path)
105-
10695
def has_next_page(self):
10796
if self.is_last_batch_empty:
10897
logger.info("has_next_page:last was batch empty -> False")

python-lib/rest_api_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def __init__(self, credential, endpoint, custom_key_values={}):
6060

6161
self.requests_kwargs.update({"params": self.params})
6262
self.pagination = Pagination()
63-
next_page_url_key = endpoint.get("next_page_url_key", "").split('.')
63+
next_page_url_key = endpoint.get("next_page_url_key", "")
6464
top_key = endpoint.get("top_key")
6565
skip_key = endpoint.get("skip_key")
6666
pagination_type = endpoint.get("pagination_type", "na")

0 commit comments

Comments
 (0)