@@ -53,8 +53,6 @@ def __init__(
5353 self ._response = None
5454 self ._items_list = None
5555 self ._data = None
56- self ._limit_exceeded = None
57- self ._limit_exceeded_message = None
5856
5957 def _wait_time (self ):
6058 if not self .api .rate_limit or not self .product in self .api .limits :
@@ -77,29 +75,6 @@ def _wait_time(self):
7775
7876 return wait_for
7977
80- def _get_feeds_results_generator (self , parameters , headers ):
81- with Client (verify = self .api .verify_ssl , proxy = self .api .proxy_url , timeout = None ) as session :
82- status_code = None
83- while status_code != 200 :
84- resp_data = session .get (url = self .url , params = parameters , headers = headers , ** self .api .extra_request_params )
85- status_code = resp_data .status_code
86- self .setStatus (status_code , resp_data )
87-
88- # Check limit exceeded here
89- if "response" in resp_data .text and "limit_exceeded" in resp_data .text :
90- self ._limit_exceeded = True
91- self ._limit_exceeded_message = "limit exceeded"
92-
93- yield resp_data
94-
95- if self ._limit_exceeded :
96- raise ServiceException (503 , "Limit Exceeded{}" .format (self ._limit_exceeded_message ))
97-
98- if not self .kwargs .get ("sessionID" ):
99- # we'll only do iterative request for queries that has sessionID.
100- # Otherwise, we will have an infinite request if sessionID was not provided but the required data asked is more than the maximum (1 hour of data)
101- break
102-
10378 def _get_session_params (self ):
10479 parameters = deepcopy (self .kwargs )
10580 parameters .pop ("output_format" , None )
@@ -118,12 +93,6 @@ def _get_session_params(self):
11893 return {"parameters" : parameters , "headers" : headers }
11994
12095 def _make_request (self ):
121- if self .product in FEEDS_PRODUCTS_LIST :
122- session_params = self ._get_session_params ()
123- parameters = session_params .get ("parameters" )
124- headers = session_params .get ("headers" )
125-
126- return self ._get_feeds_results_generator (parameters = parameters , headers = headers )
12796
12897 with Client (verify = self .api .verify_ssl , proxy = self .api .proxy_url , timeout = None ) as session :
12998 if self .product in [
@@ -138,15 +107,19 @@ def _make_request(self):
138107 patch_data = self .kwargs .copy ()
139108 patch_data .update (self .api .extra_request_params )
140109 return session .patch (url = self .url , json = patch_data )
110+ elif self .product in FEEDS_PRODUCTS_LIST :
111+ session_params = self ._get_session_params ()
112+ parameters = session_params .get ("parameters" )
113+ headers = session_params .get ("headers" )
114+ return session .get (url = self .url , params = parameters , headers = headers , ** self .api .extra_request_params )
141115 else :
142116 return session .get (url = self .url , params = self .kwargs , ** self .api .extra_request_params )
143117
144118 def _get_results (self ):
145119 wait_for = self ._wait_time ()
146120 if self .api .rate_limit and (wait_for is None or self .product == "account-information" ):
147121 data = self ._make_request ()
148- status_code = data .status_code if self .product not in FEEDS_PRODUCTS_LIST else 200
149- if status_code == 503 : # pragma: no cover
122+ if data .status_code == 503 : # pragma: no cover
150123 sleeptime = 60
151124 log .info (
152125 "503 encountered for [%s] - sleeping [%s] seconds before retrying request." ,
@@ -166,40 +139,27 @@ def _get_results(self):
166139 def data (self ):
167140 if self ._data is None :
168141 results = self ._get_results ()
169- status_code = results .status_code if self .product not in FEEDS_PRODUCTS_LIST else 200
170- self .setStatus (status_code , results )
171- if (
172- self .kwargs .get ("format" , "json" ) == "json"
173- and self .product not in FEEDS_PRODUCTS_LIST # Special handling of feeds products' data to preserve the result in jsonline format
174- ):
142+ self .setStatus (results .status_code , results )
143+ if self .kwargs .get ("format" , "json" ) == "json" :
175144 self ._data = results .json ()
176- elif self .product in FEEDS_PRODUCTS_LIST :
177- self ._data = results # Uses generator to handle large data results from feeds endpoint
178145 else :
179146 self ._data = results .text
180- limit_exceeded , message = self .check_limit_exceeded ()
181147
182- if limit_exceeded :
183- self ._limit_exceeded = True
184- self ._limit_exceeded_message = message
148+ self .check_limit_exceeded ()
185149
186- if self ._limit_exceeded is True :
187- raise ServiceException (503 , "Limit Exceeded{}" .format (self ._limit_exceeded_message ))
188- else :
189- return self ._data
150+ return self ._data
190151
191152 def check_limit_exceeded (self ):
192- if self .product in FEEDS_PRODUCTS_LIST :
193- # bypass here as this is handled in generator already
194- return False , ""
195-
196- if self .kwargs .get ("format" , "json" ) == "json" and self .product not in FEEDS_PRODUCTS_LIST :
197- if "response" in self ._data and "limit_exceeded" in self ._data ["response" ] and self ._data ["response" ]["limit_exceeded" ] is True :
198- return True , self ._data ["response" ]["message" ]
199- # TODO: handle html, xml response errors better.
153+ limit_exceeded , reason = False , ""
154+ if isinstance (self ._data , dict ) and (
155+ "response" in self ._data and "limit_exceeded" in self ._data ["response" ] and self ._data ["response" ]["limit_exceeded" ] is True
156+ ):
157+ limit_exceeded , reason = True , self ._data ["response" ]["message" ]
200158 elif "response" in self ._data and "limit_exceeded" in self ._data :
201- return True , "limit exceeded"
202- return False , ""
159+ limit_exceeded = True
160+
161+ if limit_exceeded :
162+ raise ServiceException (503 , f"Limit Exceeded { reason } " )
203163
204164 @property
205165 def status (self ):
@@ -249,7 +209,7 @@ def response(self):
249209 return self ._response
250210
251211 def items (self ):
252- return self .response ().items () if isinstance ( self . response (), dict ) else self . response ()
212+ return self .response ().items ()
253213
254214 def emails (self ):
255215 """Find and returns all emails mentioned in the response"""
0 commit comments