Skip to content

Commit bc48b17

Browse files
Tapanhazbednar
andauthored
fix: write polars dataframe (#113)
* fix: write polars dataframe * docs: update CHANGELOG.md * chore: add tests * docs: Update CHANGELOG.md --------- Co-authored-by: Jakub Bednář <[email protected]>
1 parent 0303b3f commit bc48b17

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## 0.10.0 [unreleased]
44

5+
### Bug Fixes
6+
7+
1. [#113](https://github.com/InfluxCommunity/influxdb3-python/pull/113): Fix import error of `PolarsDataframeSerializer` in batching mode
8+
59
## 0.9.0 [2024-09-13]
610

711
### Features

influxdb_client_3/write_client/client/write_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ def _write_batching(self, bucket, org, data,
461461
precision, **kwargs)
462462

463463
elif 'polars' in str(type(data)):
464-
from influxdb_client_3.write_client.client.write.dataframe_serializer import PolarsDataframeSerializer
464+
from influxdb_client_3.write_client.client.write.polars_dataframe_serializer import PolarsDataframeSerializer
465465
serializer = PolarsDataframeSerializer(data,
466466
self._point_settings, precision,
467467
self._write_options.batch_size, **kwargs)

tests/test_polars.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import unittest
33
from unittest.mock import Mock
44

5-
from influxdb_client_3 import PointSettings, InfluxDBClient3
5+
from influxdb_client_3 import PointSettings, InfluxDBClient3, write_client_options, WriteOptions
66
from influxdb_client_3.write_client import WriteService
77
from influxdb_client_3.write_client.client.write.polars_dataframe_serializer import polars_data_frame_to_list_of_points
88

@@ -61,3 +61,31 @@ def test_write_polars(self):
6161
actual = self.client._write_api._write_service.post_write.call_args[1]['body']
6262
self.assertEqual(b'measurement temperature=22.4 1722470400000000000\n'
6363
b'measurement temperature=21.8 1722474000000000000', actual)
64+
65+
def test_write_polars_batching(self):
66+
import polars as pl
67+
df = pl.DataFrame({
68+
"time": pl.Series(["2024-08-01 00:00:00", "2024-08-01 01:00:00"]).str.to_datetime(time_unit='ns'),
69+
"temperature": [22.4, 21.8],
70+
})
71+
self.client = InfluxDBClient3(
72+
host="localhost",
73+
org="my_org",
74+
database="my_db",
75+
token="my_token", write_client_options=write_client_options(
76+
write_options=WriteOptions(batch_size=2)
77+
)
78+
)
79+
self.client._write_api._write_options = WriteOptions(batch_size=2)
80+
self.client._write_api._write_service = Mock(spec=WriteService)
81+
82+
self.client.write(
83+
database="database",
84+
record=df,
85+
data_frame_measurement_name="measurement",
86+
data_frame_timestamp_column="time",
87+
)
88+
89+
actual = self.client._write_api._write_service.post_write.call_args[1]['body']
90+
self.assertEqual(b'measurement temperature=22.4 1722470400000000000\n'
91+
b'measurement temperature=21.8 1722474000000000000', actual)

0 commit comments

Comments
 (0)