@@ -11,9 +11,6 @@ def __init__(self, config=None, skip_key=None, limit_key=None, total_key=None, n
1111 self .next_page_key = None
1212 self .next_page_url_base = None
1313 self .skip_key = None
14- self .limit_key = None
15- self .total_key = None
16- self .total = None
1714 self .next_page_url = None
1815 self .remaining_records = None
1916 self .records_to_skip = None
@@ -26,10 +23,10 @@ def __init__(self, config=None, skip_key=None, limit_key=None, total_key=None, n
2623 self .next_page_number = None
2724 self .params_must_be_blanked = False
2825 self .data_is_list = None
26+ self .update_next_page = None
2927
3028 def configure_paging (self , config = None , skip_key = None , limit_key = None , total_key = None , next_page_key = None , next_page_url_base = None , url = None , pagination_type = "na" ):
3129 config = {} if config is None else config
32- self .limit_key = config .get ("limit_key" , limit_key )
3330 self .pagination_type = config .get ("pagination_type" , pagination_type )
3431 if self .pagination_type == "next_page" :
3532 self .next_page_key = config .get ("next_page_key" , next_page_key )
@@ -39,9 +36,15 @@ def configure_paging(self, config=None, skip_key=None, limit_key=None, total_key
3936 self .next_page_url_base = next_page_url_base
4037 elif self .pagination_type in ["offset" , "page" ]:
4138 self .skip_key = config .get ("skip_key" , skip_key )
42- logger .info ("configure_paging: self.limit_key='{}', self. pagination_type='{}', self.next_page_key='{}', self.next_page_url_base='{}', self.skip_key='{}'" .format (
43- self . limit_key , self .pagination_type , self .next_page_key , self .next_page_url_base , self .skip_key
39+ logger .info ("configure_paging: self.pagination_type='{}', self.next_page_key='{}', self.next_page_url_base='{}', self.skip_key='{}'" .format (
40+ self .pagination_type , self .next_page_key , self .next_page_url_base , self .skip_key
4441 ))
42+ if self .pagination_type == "next_page" :
43+ self .update_next_page = self .update_next_page_link
44+ elif self .pagination_type == "offset" :
45+ self .update_next_page = self .update_next_page_offset
46+ elif self .pagination_type == "page" :
47+ self .update_next_page = self .update_next_page_per_page
4548
4649 def reset_paging (self , counting_key = None , url = None ):
4750 self .remaining_records = 0
@@ -62,19 +65,10 @@ def set_counting_key(self, counting_key):
6265 self .counting_key = counting_key
6366 logger .info ("set_counting_key: counting_key set to {}" .format (self .counting_key ))
6467
65- def update_next_page (self , data , response_links = None ):
66- response_links = response_links or {}
67- next_link = response_links .get ('next' , {})
68- next_page_url = next_link .get ("url" )
68+ def update_next_page_offset (self , data , response_links = None ):
6969 self .is_first_batch = False
7070 self .counter += 1
7171 self .next_page_number = self .next_page_number + 1
72- if next_page_url :
73- self .next_page_url = next_page_url
74- self .params_must_be_blanked = True
75- logger .info ("update_next_page:next_link={}, next_page_url={}, params_must_be_blanked={}, next_page_number={}, counter={}" .format (
76- next_link , self .next_page_url , self .params_must_be_blanked , self .next_page_number , self .counter
77- ))
7872 self .data_is_list = False
7973 if isinstance (data , list ):
8074 self .data_is_list = True
@@ -95,6 +89,58 @@ def update_next_page(self, data, response_links=None):
9589 self .is_last_batch_empty = True
9690 else :
9791 batch_size = 1
92+ if self .skip_key :
93+ self .skip = data .get (self .skip_key )
94+ logger .info ("update_next_page:skip=data[{}]={}" .format (self .skip_key , self .skip ))
95+ self .records_to_skip = self .records_to_skip + batch_size
96+ logger .info ("update_next_page:records_to_skip={}, batch_size={}" .format (self .records_to_skip , batch_size ))
97+
98+
99+ def update_next_page_per_page (self , data , response_links = None ):
100+ self .is_first_batch = False
101+ self .counter += 1
102+ self .next_page_number = self .next_page_number + 1
103+ self .data_is_list = False
104+ if isinstance (data , list ):
105+ self .data_is_list = True
106+ batch_size = len (data )
107+ self .records_to_skip = self .records_to_skip + batch_size
108+ if batch_size == 0 :
109+ self .is_last_batch_empty = True
110+ logger .info ("update_next_page:update_next_page:data is list:batch_size={}, records_to_skip={}, is_last_batch_empty={}" .format (
111+ batch_size , self .records_to_skip , self .is_last_batch_empty
112+ ))
113+ return
114+ elif self .counting_key :
115+ extracted_data = get_value_from_path (data , self .counting_key .split ("." ), can_raise = False )
116+ if extracted_data :
117+ batch_size = len (extracted_data )
118+ else :
119+ batch_size = 0
120+ self .is_last_batch_empty = True
121+ else :
122+ batch_size = 1
123+ if self .skip_key :
124+ self .skip = data .get (self .skip_key )
125+ logger .info ("update_next_page:skip=data[{}]={}" .format (self .skip_key , self .skip ))
126+ self .records_to_skip = self .records_to_skip + batch_size
127+ logger .info ("update_next_page:records_to_skip={}, batch_size={}" .format (self .records_to_skip , batch_size ))
128+
129+
130+ def update_next_page_link (self , data , response_links = None ):
131+ response_links = response_links or {}
132+ next_link = response_links .get ('next' , {})
133+ next_page_url = next_link .get ("url" )
134+ self .is_first_batch = False
135+ self .counter += 1
136+ # self.next_page_number = self.next_page_number + 1
137+ if next_page_url :
138+ self .next_page_url = next_page_url
139+ self .params_must_be_blanked = True
140+ logger .info ("update_next_page:next_link={}, next_page_url={}, params_must_be_blanked={}, next_page_number={}, counter={}" .format (
141+ next_link , self .next_page_url , self .params_must_be_blanked , self .next_page_number , self .counter
142+ ))
143+ self .data_is_list = False
98144 if self .next_page_key :
99145 next_page_path = extract_key_using_json_path (data , self .next_page_key )
100146 if self .next_page_url_base and next_page_path :
@@ -104,22 +150,6 @@ def update_next_page(self, data, response_links=None):
104150 logger .info ("update_next_page:next_page_url_base={}, next_page_path={}, next_page_url={}" .format (
105151 self .next_page_url_base , next_page_path , self .next_page_url
106152 ))
107- if self .skip_key :
108- self .skip = data .get (self .skip_key )
109- logger .info ("update_next_page:skip=data[{}]={}" .format (self .skip_key , self .skip ))
110- if self .limit_key :
111- self .limit = data .get (self .limit_key )
112- logger .info ("update_next_page:limit=data[{}]={}" .format (self .limit_key , self .limit ))
113- if self .total_key :
114- self .total = data .get (self .total_key )
115- logger .info ("update_next_page:total=data[{}]={}" .format (self .total_key , self .total ))
116- self .records_to_skip = self .records_to_skip + batch_size
117- logger .info ("update_next_page:records_to_skip={}, batch_size={}" .format (self .records_to_skip , batch_size ))
118- if self .total :
119- self .remaining_records = self .total - self .records_to_skip
120- logger .info ("update_next_page:remaining_records={}, total={}, records_to_skip={}" .format (
121- self .remaining_records , self .total , self .records_to_skip
122- ))
123153
124154 def has_next_page (self ):
125155 if self .is_last_batch_empty :
0 commit comments