@@ -77,53 +77,7 @@ def _wait_time(self):
7777
7878 return wait_for
7979
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-
103- def _get_session_params (self ):
104- parameters = deepcopy (self .kwargs )
105- parameters .pop ("output_format" , None )
106- parameters .pop (
107- "format" , None
108- ) # For some unknownn reasons, even if "format" is not included in the cli params for feeds endpoint, it is being populated thus we need to remove it. Happens only if using CLI.
109- headers = {}
110- if self .kwargs .get ("output_format" , OutputFormat .JSONL .value ) == OutputFormat .CSV .value :
111- parameters ["headers" ] = int (bool (self .kwargs .get ("headers" , False )))
112- headers ["accept" ] = HEADER_ACCEPT_KEY_CSV_FORMAT
113-
114- header_api_key = parameters .pop ("X-Api-Key" , None )
115- if header_api_key :
116- headers ["X-Api-Key" ] = header_api_key
117-
118- return {"parameters" : parameters , "headers" : headers }
119-
12080 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 )
12781
12882 with Client (verify = self .api .verify_ssl , proxy = self .api .proxy_url , timeout = None ) as session :
12983 if self .product in [
@@ -138,15 +92,30 @@ def _make_request(self):
13892 patch_data = self .kwargs .copy ()
13993 patch_data .update (self .api .extra_request_params )
14094 return session .patch (url = self .url , json = patch_data )
95+ elif self .product in FEEDS_PRODUCTS_LIST :
96+ parameters = deepcopy (self .kwargs )
97+ parameters .pop ("output_format" , None )
98+ parameters .pop (
99+ "format" , None
100+ ) # For some unknownn reasons, even if "format" is not included in the cli params for feeds endpoint, it is being populated thus we need to remove it. Happens only if using CLI.
101+ headers = {}
102+ if self .kwargs .get ("output_format" , OutputFormat .JSONL .value ) == OutputFormat .CSV .value :
103+ parameters ["headers" ] = int (bool (self .kwargs .get ("headers" , False )))
104+ headers ["accept" ] = HEADER_ACCEPT_KEY_CSV_FORMAT
105+
106+ header_api_key = parameters .pop ("X-Api-Key" , None )
107+ if header_api_key :
108+ headers ["X-Api-Key" ] = header_api_key
109+
110+ return session .get (url = self .url , params = parameters , headers = headers , ** self .api .extra_request_params )
141111 else :
142112 return session .get (url = self .url , params = self .kwargs , ** self .api .extra_request_params )
143113
144114 def _get_results (self ):
145115 wait_for = self ._wait_time ()
146116 if self .api .rate_limit and (wait_for is None or self .product == "account-information" ):
147117 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
118+ if data .status_code == 503 : # pragma: no cover
150119 sleeptime = 60
151120 log .info (
152121 "503 encountered for [%s] - sleeping [%s] seconds before retrying request." ,
@@ -166,15 +135,12 @@ def _get_results(self):
166135 def data (self ):
167136 if self ._data is None :
168137 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 )
138+ self .setStatus (results .status_code , results )
171139 if (
172140 self .kwargs .get ("format" , "json" ) == "json"
173141 and self .product not in FEEDS_PRODUCTS_LIST # Special handling of feeds products' data to preserve the result in jsonline format
174142 ):
175143 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
178144 else :
179145 self ._data = results .text
180146 limit_exceeded , message = self .check_limit_exceeded ()
@@ -189,10 +155,6 @@ def data(self):
189155 return self ._data
190156
191157 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-
196158 if self .kwargs .get ("format" , "json" ) == "json" and self .product not in FEEDS_PRODUCTS_LIST :
197159 if "response" in self ._data and "limit_exceeded" in self ._data ["response" ] and self ._data ["response" ]["limit_exceeded" ] is True :
198160 return True , self ._data ["response" ]["message" ]
@@ -210,7 +172,7 @@ def status(self):
210172
211173 def setStatus (self , code , response = None ):
212174 self ._status = code
213- if code == 200 or ( self . product in FEEDS_PRODUCTS_LIST and code == 206 ) :
175+ if code == 200 :
214176 return
215177
216178 reason = None
@@ -249,7 +211,7 @@ def response(self):
249211 return self ._response
250212
251213 def items (self ):
252- return self .response ().items () if isinstance ( self . response (), dict ) else self . response ()
214+ return self .response ().items ()
253215
254216 def emails (self ):
255217 """Find and returns all emails mentioned in the response"""
0 commit comments