15
15
16
16
from influxdb_client import WritePrecision , WriteService
17
17
from influxdb_client .client .abstract_client import AbstractClient
18
- from influxdb_client .client .write .point import Point , DEFAULT_WRITE_PRECISION , _ESCAPE_KEY
18
+ from influxdb_client .client .write .dataframe_serializer import data_frame_to_list_of_points
19
+ from influxdb_client .client .write .point import Point , DEFAULT_WRITE_PRECISION
19
20
from influxdb_client .rest import ApiException
20
21
21
22
logger = logging .getLogger (__name__ )
@@ -253,9 +254,10 @@ def _serialize(self, record, write_precision, payload, **kwargs):
253
254
self ._serialize (record .to_line_protocol (), record .write_precision , payload , ** kwargs )
254
255
255
256
elif isinstance (record , dict ):
256
- self ._serialize (Point .from_dict (record , write_precision = write_precision ), write_precision , payload , ** kwargs )
257
+ self ._serialize (Point .from_dict (record , write_precision = write_precision ), write_precision , payload ,
258
+ ** kwargs )
257
259
elif 'DataFrame' in type (record ).__name__ :
258
- _data = self . _data_frame_to_list_of_points (record , precision = write_precision , ** kwargs )
260
+ _data = data_frame_to_list_of_points (record , self . _point_settings , ** kwargs )
259
261
self ._serialize (_data , write_precision , payload , ** kwargs )
260
262
261
263
elif isinstance (record , list ):
@@ -281,7 +283,7 @@ def _write_batching(self, bucket, org, data,
281
283
precision , ** kwargs )
282
284
283
285
elif 'DataFrame' in type (data ).__name__ :
284
- self ._write_batching (bucket , org , self . _data_frame_to_list_of_points (data , precision , ** kwargs ),
286
+ self ._write_batching (bucket , org , data_frame_to_list_of_points (data , self . _point_settings , ** kwargs ),
285
287
precision , ** kwargs )
286
288
287
289
elif isinstance (data , list ):
@@ -303,57 +305,6 @@ def _append_default_tag(self, key, val, record):
303
305
for item in record :
304
306
self ._append_default_tag (key , val , item )
305
307
306
- def _itertuples (self , data_frame ):
307
- cols = [data_frame .iloc [:, k ] for k in range (len (data_frame .columns ))]
308
- return zip (data_frame .index , * cols )
309
-
310
- def _data_frame_to_list_of_points (self , data_frame , precision , ** kwargs ):
311
- from ..extras import pd , np
312
- if not isinstance (data_frame , pd .DataFrame ):
313
- raise TypeError ('Must be DataFrame, but type was: {0}.'
314
- .format (type (data_frame )))
315
-
316
- if 'data_frame_measurement_name' not in kwargs :
317
- raise TypeError ('"data_frame_measurement_name" is a Required Argument' )
318
-
319
- if isinstance (data_frame .index , pd .PeriodIndex ):
320
- data_frame .index = data_frame .index .to_timestamp ()
321
- else :
322
- data_frame .index = pd .to_datetime (data_frame .index )
323
-
324
- if data_frame .index .tzinfo is None :
325
- data_frame .index = data_frame .index .tz_localize ('UTC' )
326
-
327
- measurement_name = kwargs .get ('data_frame_measurement_name' )
328
- data_frame_tag_columns = kwargs .get ('data_frame_tag_columns' )
329
- data_frame_tag_columns = set (data_frame_tag_columns or [])
330
-
331
- tags = []
332
- fields = []
333
-
334
- if self ._point_settings .defaultTags :
335
- for key , value in self ._point_settings .defaultTags .items ():
336
- data_frame [key ] = value
337
- data_frame_tag_columns .add (key )
338
-
339
- for index , (key , value ) in enumerate (data_frame .dtypes .items ()):
340
- key = str (key ).translate (_ESCAPE_KEY )
341
-
342
- if key in data_frame_tag_columns :
343
- tags .append (f"{ key } ={{p[{ index + 1 } ].translate(_ESCAPE_KEY)}}" )
344
- elif issubclass (value .type , np .integer ):
345
- fields .append (f"{ key } ={{p[{ index + 1 } ]}}i" )
346
- elif issubclass (value .type , (np .float , np .bool_ )):
347
- fields .append (f"{ key } ={{p[{ index + 1 } ]}}" )
348
- else :
349
- fields .append (f"{ key } =\" {{p[{ index + 1 } ].translate(_ESCAPE_KEY)}}\" " )
350
-
351
- fmt = (f'{ measurement_name } ' , f'{ "," if tags else "" } ' , ',' .join (tags ),
352
- ' ' , ',' .join (fields ), ' {p[0].value}' )
353
- f = eval ("lambda p: f'{}'" .format ('' .join (fmt )))
354
-
355
- return list (map (f , self ._itertuples (data_frame )))
356
-
357
308
def _http (self , batch_item : _BatchItem ):
358
309
359
310
logger .debug ("Write time series data into InfluxDB: %s" , batch_item )
0 commit comments