@@ -201,7 +201,7 @@ def switch_user(self, username, password):
201
201
self ._password = password
202
202
203
203
def request (self , url , method = 'GET' , params = None , data = None ,
204
- expected_response_code = 200 , headers = None , chunked = False ):
204
+ expected_response_code = 200 , headers = None , stream = True ):
205
205
"""Make a HTTP request to the InfluxDB API.
206
206
207
207
:param url: the path of the HTTP request, e.g. write, query, etc.
@@ -250,7 +250,7 @@ def request(self, url, method='GET', params=None, data=None,
250
250
proxies = self ._proxies ,
251
251
verify = self ._verify_ssl ,
252
252
timeout = self ._timeout ,
253
- stream = chunked
253
+ stream = stream
254
254
)
255
255
break
256
256
except (requests .exceptions .ConnectionError ,
@@ -316,17 +316,33 @@ def write(self, data, params=None, expected_response_code=204,
316
316
317
317
@staticmethod
318
318
def _read_chunked_response (response , raise_errors = True ):
319
+ result_set = {}
319
320
for line in response .iter_lines ():
320
321
if isinstance (line , bytes ):
321
322
line = line .decode ('utf-8' )
322
323
data = json .loads (line )
324
+ for result in data .get ('results' , []):
325
+ for _key in result :
326
+ if isinstance (result [_key ], list ):
327
+ result_set .setdefault (
328
+ _key , []).extend (result [_key ])
329
+
330
+ return (ResultSet (result_set , raise_errors = raise_errors ))
331
+
332
+ @staticmethod
333
+ def _read_chunked_response_generator (response , raise_errors = True ):
334
+ for line in response .iter_lines ():
323
335
result_set = {}
336
+ if isinstance (line , bytes ):
337
+ line = line .decode ('utf-8' )
338
+ data = json .loads (line )
324
339
for result in data .get ('results' , []):
325
340
for _key in result :
326
341
if isinstance (result [_key ], list ):
327
342
result_set .setdefault (
328
343
_key , []).extend (result [_key ])
329
344
yield (ResultSet (result_set , raise_errors = raise_errors ))
345
+ result_set = {}
330
346
331
347
def query (self ,
332
348
query ,
@@ -336,7 +352,8 @@ def query(self,
336
352
database = None ,
337
353
raise_errors = True ,
338
354
chunked = False ,
339
- chunk_size = 0 ):
355
+ chunk_size = 0 ,
356
+ stream = False ):
340
357
"""Send a query to InfluxDB.
341
358
342
359
:param query: the actual query string
@@ -393,11 +410,15 @@ def query(self,
393
410
params = params ,
394
411
data = None ,
395
412
expected_response_code = expected_response_code ,
396
- chunked = chunked
413
+ stream = stream
397
414
)
398
415
399
416
if chunked :
400
- return self ._read_chunked_response (response )
417
+ if stream :
418
+ return self ._read_chunked_response_generator (response ,raise_errors )
419
+ else :
420
+ return self ._read_chunked_response (response ,raise_errors )
421
+
401
422
402
423
data = response .json ()
403
424
0 commit comments