From e488f9557580be0eaca87dfa6ba102860b0a8430 Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Thu, 9 Apr 2026 11:08:53 +0700 Subject: [PATCH 01/13] ci: fix build --- tests/test_FluxCSVParser.py | 18 +++++++++--------- tests/test_WriteApi.py | 3 ++- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/tests/test_FluxCSVParser.py b/tests/test_FluxCSVParser.py index ae9adcec..ad0be88b 100644 --- a/tests/test_FluxCSVParser.py +++ b/tests/test_FluxCSVParser.py @@ -251,17 +251,17 @@ def test_pandas_column_datatype(self): response_metadata_mode=FluxResponseMetadataMode.full) df = list(parser.generator())[0] self.assertEqual(13, df.dtypes.__len__()) - self.assertEqual('object', df.dtypes['result'].name) + assert df.dtypes['result'].name in ['str', 'object'] self.assertEqual('int64', df.dtypes['table'].name) - self.assertIn('datetime64[ns,', df.dtypes['_start'].name) - self.assertIn('datetime64[ns,', df.dtypes['_stop'].name) - self.assertEqual('object', df.dtypes['_field'].name) - self.assertEqual('object', df.dtypes['_measurement'].name) - self.assertEqual('object', df.dtypes['host'].name) - self.assertEqual('object', df.dtypes['region'].name) + assert True in ['datetime64[us,' in df.dtypes['_start'].name, 'datetime64[ns,' in df.dtypes['_start'].name] + assert True in ['datetime64[us,' in df.dtypes['_stop'].name, 'datetime64[ns,' in df.dtypes['_start'].name] + assert df.dtypes['_field'].name in ['str', 'object'] + assert df.dtypes['_measurement'].name in ['str', 'object'] + assert df.dtypes['host'].name in ['str', 'object'] + assert df.dtypes['region'].name in ['str', 'object'] self.assertEqual('int64', df.dtypes['value1'].name) self.assertEqual('int64', df.dtypes['value2'].name) - self.assertEqual('object', df.dtypes['value3'].name) + assert df.dtypes['value3'].name in ['str', 'object'] self.assertEqual('bool', df.dtypes['value4'].name) self.assertEqual('float64', df.dtypes['value5'].name) @@ -384,7 +384,7 @@ def test_pandas_null_string_types(self): parser = self._parse(data=data, serialization_mode=FluxSerializationMode.dataFrame, response_metadata_mode=FluxResponseMetadataMode.full) df = list(parser.generator())[0] - self.assertEqual('object', df.dtypes['value'].name) + assert df.dtypes['value'].name in ['str', 'object'] def test_pandas_null_string_types_extension_types(self): data = "#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,string,string,string,string,string\n" \ diff --git a/tests/test_WriteApi.py b/tests/test_WriteApi.py index b2cc7ca7..73832db6 100644 --- a/tests/test_WriteApi.py +++ b/tests/test_WriteApi.py @@ -532,7 +532,8 @@ def test_redirect(self): Retry.DEFAULT.remove_headers_on_redirect = Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT self.influxdb_client.close() - self.influxdb_client = InfluxDBClient(url="http://localhost", token="my-token", org="my-org") + retries = Retry(redirect=1, remove_headers_on_redirect=[]) + self.influxdb_client = InfluxDBClient(url="http://localhost", token="my-token", org="my-org", retries=retries) httpretty.register_uri(httpretty.POST, uri="http://localhost2/api/v2/write", status=204) httpretty.register_uri(httpretty.POST, uri="http://localhost/api/v2/write", status=301, From 2c75954865185d42b21af45d49ff1a457cae6341 Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Fri, 10 Apr 2026 05:47:29 +0700 Subject: [PATCH 02/13] Revert "fix: test_pandas_column_datatype data type" This reverts commit 7ffa6dd31ce42dbd89f0f0a94c96f302c9c2247a. --- tests/test_FluxCSVParser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_FluxCSVParser.py b/tests/test_FluxCSVParser.py index ad0be88b..c1f862dd 100644 --- a/tests/test_FluxCSVParser.py +++ b/tests/test_FluxCSVParser.py @@ -384,7 +384,7 @@ def test_pandas_null_string_types(self): parser = self._parse(data=data, serialization_mode=FluxSerializationMode.dataFrame, response_metadata_mode=FluxResponseMetadataMode.full) df = list(parser.generator())[0] - assert df.dtypes['value'].name in ['str', 'object'] + self.assertEqual('object', df.dtypes['value'].name) def test_pandas_null_string_types_extension_types(self): data = "#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,string,string,string,string,string\n" \ From 1fb19088415bc925ff846242ec00ab0f06372ea4 Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Fri, 10 Apr 2026 05:47:29 +0700 Subject: [PATCH 03/13] Revert "fix: test_pandas_column_datatype data type" This reverts commit a14392cdb9b24745d465227e3631258a24e31577. --- tests/test_FluxCSVParser.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/test_FluxCSVParser.py b/tests/test_FluxCSVParser.py index c1f862dd..ca156dbe 100644 --- a/tests/test_FluxCSVParser.py +++ b/tests/test_FluxCSVParser.py @@ -251,10 +251,12 @@ def test_pandas_column_datatype(self): response_metadata_mode=FluxResponseMetadataMode.full) df = list(parser.generator())[0] self.assertEqual(13, df.dtypes.__len__()) + assert df.dtypes['result'].name in ['str', 'object'] + self.assertEqual('int64', df.dtypes['table'].name) - assert True in ['datetime64[us,' in df.dtypes['_start'].name, 'datetime64[ns,' in df.dtypes['_start'].name] - assert True in ['datetime64[us,' in df.dtypes['_stop'].name, 'datetime64[ns,' in df.dtypes['_start'].name] + self.assertIn('datetime64[us,', df.dtypes['_start'].name) + self.assertIn('datetime64[us,', df.dtypes['_stop'].name) assert df.dtypes['_field'].name in ['str', 'object'] assert df.dtypes['_measurement'].name in ['str', 'object'] assert df.dtypes['host'].name in ['str', 'object'] From 053259cd1bfc0a440d8b4adfb4b950c997375795 Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Fri, 10 Apr 2026 05:47:30 +0700 Subject: [PATCH 04/13] Revert "fix: test_pandas_column_datatype data type" This reverts commit 594dac0ccbcd59be7bc13a656e39d958acd8048e. --- tests/test_FluxCSVParser.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/tests/test_FluxCSVParser.py b/tests/test_FluxCSVParser.py index ca156dbe..fd7e9b76 100644 --- a/tests/test_FluxCSVParser.py +++ b/tests/test_FluxCSVParser.py @@ -251,19 +251,17 @@ def test_pandas_column_datatype(self): response_metadata_mode=FluxResponseMetadataMode.full) df = list(parser.generator())[0] self.assertEqual(13, df.dtypes.__len__()) - - assert df.dtypes['result'].name in ['str', 'object'] - + self.assertEqual('str', df.dtypes['result'].name) self.assertEqual('int64', df.dtypes['table'].name) self.assertIn('datetime64[us,', df.dtypes['_start'].name) self.assertIn('datetime64[us,', df.dtypes['_stop'].name) - assert df.dtypes['_field'].name in ['str', 'object'] - assert df.dtypes['_measurement'].name in ['str', 'object'] - assert df.dtypes['host'].name in ['str', 'object'] - assert df.dtypes['region'].name in ['str', 'object'] + self.assertEqual('str', df.dtypes['_field'].name) + self.assertEqual('str', df.dtypes['_measurement'].name) + self.assertEqual('str', df.dtypes['host'].name) + self.assertEqual('str', df.dtypes['region'].name) self.assertEqual('int64', df.dtypes['value1'].name) self.assertEqual('int64', df.dtypes['value2'].name) - assert df.dtypes['value3'].name in ['str', 'object'] + self.assertEqual('str', df.dtypes['value3'].name) self.assertEqual('bool', df.dtypes['value4'].name) self.assertEqual('float64', df.dtypes['value5'].name) From 0b1d66744ee3dcd6176472dc3beae93d09f7bfd2 Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Fri, 10 Apr 2026 05:47:30 +0700 Subject: [PATCH 05/13] Revert "fix: test redirect" This reverts commit a869b1a048f21d0b567c2a171040e2537f9a58f6. --- tests/test_WriteApi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_WriteApi.py b/tests/test_WriteApi.py index 73832db6..ea559330 100644 --- a/tests/test_WriteApi.py +++ b/tests/test_WriteApi.py @@ -532,7 +532,7 @@ def test_redirect(self): Retry.DEFAULT.remove_headers_on_redirect = Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT self.influxdb_client.close() - retries = Retry(redirect=1, remove_headers_on_redirect=[]) + retries = Retry(redirect=2) self.influxdb_client = InfluxDBClient(url="http://localhost", token="my-token", org="my-org", retries=retries) httpretty.register_uri(httpretty.POST, uri="http://localhost2/api/v2/write", status=204) From 884c07909a9ca0f72ab07a44262b2d1d9064af18 Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Fri, 10 Apr 2026 05:47:30 +0700 Subject: [PATCH 06/13] Revert "fix: test_pandas_column_datatype data type" This reverts commit 8056943041b32614f5eefd290a1adaeaad49e31f. --- tests/test_FluxCSVParser.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_FluxCSVParser.py b/tests/test_FluxCSVParser.py index fd7e9b76..86dca752 100644 --- a/tests/test_FluxCSVParser.py +++ b/tests/test_FluxCSVParser.py @@ -256,12 +256,12 @@ def test_pandas_column_datatype(self): self.assertIn('datetime64[us,', df.dtypes['_start'].name) self.assertIn('datetime64[us,', df.dtypes['_stop'].name) self.assertEqual('str', df.dtypes['_field'].name) - self.assertEqual('str', df.dtypes['_measurement'].name) - self.assertEqual('str', df.dtypes['host'].name) - self.assertEqual('str', df.dtypes['region'].name) + self.assertEqual('object', df.dtypes['_measurement'].name) + self.assertEqual('object', df.dtypes['host'].name) + self.assertEqual('object', df.dtypes['region'].name) self.assertEqual('int64', df.dtypes['value1'].name) self.assertEqual('int64', df.dtypes['value2'].name) - self.assertEqual('str', df.dtypes['value3'].name) + self.assertEqual('object', df.dtypes['value3'].name) self.assertEqual('bool', df.dtypes['value4'].name) self.assertEqual('float64', df.dtypes['value5'].name) From ac3015a7432ecc14e5fd576133a8774cce7afa7f Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Fri, 10 Apr 2026 05:47:30 +0700 Subject: [PATCH 07/13] Revert "fix: test_pandas_column_datatype data type" This reverts commit eb24cae7770666c51071047b9a05a5fa6b992079. --- tests/test_FluxCSVParser.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_FluxCSVParser.py b/tests/test_FluxCSVParser.py index 86dca752..ae9adcec 100644 --- a/tests/test_FluxCSVParser.py +++ b/tests/test_FluxCSVParser.py @@ -251,11 +251,11 @@ def test_pandas_column_datatype(self): response_metadata_mode=FluxResponseMetadataMode.full) df = list(parser.generator())[0] self.assertEqual(13, df.dtypes.__len__()) - self.assertEqual('str', df.dtypes['result'].name) + self.assertEqual('object', df.dtypes['result'].name) self.assertEqual('int64', df.dtypes['table'].name) - self.assertIn('datetime64[us,', df.dtypes['_start'].name) - self.assertIn('datetime64[us,', df.dtypes['_stop'].name) - self.assertEqual('str', df.dtypes['_field'].name) + self.assertIn('datetime64[ns,', df.dtypes['_start'].name) + self.assertIn('datetime64[ns,', df.dtypes['_stop'].name) + self.assertEqual('object', df.dtypes['_field'].name) self.assertEqual('object', df.dtypes['_measurement'].name) self.assertEqual('object', df.dtypes['host'].name) self.assertEqual('object', df.dtypes['region'].name) From 7169bb62fa3ecc08d703c3e6558409393885dd7e Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Fri, 10 Apr 2026 05:47:31 +0700 Subject: [PATCH 08/13] Revert "fix: test redirect" This reverts commit cf8eb717f2f66ce2617d9e0fe95b3e96838b756a. --- tests/test_WriteApi.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_WriteApi.py b/tests/test_WriteApi.py index ea559330..b2cc7ca7 100644 --- a/tests/test_WriteApi.py +++ b/tests/test_WriteApi.py @@ -532,8 +532,7 @@ def test_redirect(self): Retry.DEFAULT.remove_headers_on_redirect = Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT self.influxdb_client.close() - retries = Retry(redirect=2) - self.influxdb_client = InfluxDBClient(url="http://localhost", token="my-token", org="my-org", retries=retries) + self.influxdb_client = InfluxDBClient(url="http://localhost", token="my-token", org="my-org") httpretty.register_uri(httpretty.POST, uri="http://localhost2/api/v2/write", status=204) httpretty.register_uri(httpretty.POST, uri="http://localhost/api/v2/write", status=301, From a8a5fa3b7a0abfe7f3b2a35a29f18815a2f6f509 Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Fri, 10 Apr 2026 05:47:31 +0700 Subject: [PATCH 09/13] Revert "[EMPTY] trigger CI" This reverts commit 2dd0497265b4986addfb67732e8ce4b282c889bf. --- influxdb_client/client/exceptions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/influxdb_client/client/exceptions.py b/influxdb_client/client/exceptions.py index bfa453e2..2910f040 100644 --- a/influxdb_client/client/exceptions.py +++ b/influxdb_client/client/exceptions.py @@ -34,7 +34,7 @@ def _get_message(self, response): try: return json.loads(response.data)["message"] except Exception as e: - logging.debug(f"Cannot parse error response to JSON: {response.data}, {e}") + logger.debug(f"Cannot parse error response to JSON: {response.data}, {e}") return response.data # Header From 65a786340d6a7c7b1b6a283eef8a3595f7576f0f Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Fri, 10 Apr 2026 05:47:31 +0700 Subject: [PATCH 10/13] Revert "fix: use logger instead of logging" This reverts commit f629376c5530083b53585536357849aa4528ea19. --- influxdb_client/client/exceptions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/influxdb_client/client/exceptions.py b/influxdb_client/client/exceptions.py index 2910f040..bfa453e2 100644 --- a/influxdb_client/client/exceptions.py +++ b/influxdb_client/client/exceptions.py @@ -34,7 +34,7 @@ def _get_message(self, response): try: return json.loads(response.data)["message"] except Exception as e: - logger.debug(f"Cannot parse error response to JSON: {response.data}, {e}") + logging.debug(f"Cannot parse error response to JSON: {response.data}, {e}") return response.data # Header From 071719b36fc2c314279dbe0c953a7f6130007138 Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Sat, 11 Apr 2026 09:15:25 +0700 Subject: [PATCH 11/13] fix: create pandas dataframe with backward capabilities --- influxdb_client/client/flux_csv_parser.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/influxdb_client/client/flux_csv_parser.py b/influxdb_client/client/flux_csv_parser.py index 99e68094..e8dd7368 100644 --- a/influxdb_client/client/flux_csv_parser.py +++ b/influxdb_client/client/flux_csv_parser.py @@ -251,6 +251,15 @@ def _prepare_data_frame(self): # We have to create temporary DataFrame because we want to preserve default column values _temp_df = pd.DataFrame(self._data_frame_values) + # This is for backward compatibles reason + # In newer Pandas versions 'string' type will be 'str', in older versions 'string' will be 'object' + # In newer Pandas versions 'time' will be 'datetime64[us, UTC]', in older versions 'time' will be 'datetime64[ns, UTC]' + for column in _temp_df.columns: + if _temp_df[column].dtype.name == 'str': + _temp_df[column] = _temp_df[column].astype(object) + if _temp_df[column].dtype.name == 'datetime64[us, UTC]': + _temp_df[column] = _temp_df[column].astype('datetime64[ns, UTC]') + self._data_frame_values = [] # Custom DataFrame index From a1b368dd432d5ea1448a56a37dba769e9c212c7f Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Sat, 11 Apr 2026 09:17:14 +0700 Subject: [PATCH 12/13] test: support redirect in urllib3 newer versions --- tests/test_WriteApi.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_WriteApi.py b/tests/test_WriteApi.py index b2cc7ca7..73832db6 100644 --- a/tests/test_WriteApi.py +++ b/tests/test_WriteApi.py @@ -532,7 +532,8 @@ def test_redirect(self): Retry.DEFAULT.remove_headers_on_redirect = Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT self.influxdb_client.close() - self.influxdb_client = InfluxDBClient(url="http://localhost", token="my-token", org="my-org") + retries = Retry(redirect=1, remove_headers_on_redirect=[]) + self.influxdb_client = InfluxDBClient(url="http://localhost", token="my-token", org="my-org", retries=retries) httpretty.register_uri(httpretty.POST, uri="http://localhost2/api/v2/write", status=204) httpretty.register_uri(httpretty.POST, uri="http://localhost/api/v2/write", status=301, From 587b36a6bf6741747dcb348eb966ef590838309c Mon Sep 17 00:00:00 2001 From: NguyenHoangSon96 Date: Sat, 11 Apr 2026 09:26:28 +0700 Subject: [PATCH 13/13] chore: fix code style --- influxdb_client/client/flux_csv_parser.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/influxdb_client/client/flux_csv_parser.py b/influxdb_client/client/flux_csv_parser.py index e8dd7368..a4fe60dc 100644 --- a/influxdb_client/client/flux_csv_parser.py +++ b/influxdb_client/client/flux_csv_parser.py @@ -253,7 +253,8 @@ def _prepare_data_frame(self): _temp_df = pd.DataFrame(self._data_frame_values) # This is for backward compatibles reason # In newer Pandas versions 'string' type will be 'str', in older versions 'string' will be 'object' - # In newer Pandas versions 'time' will be 'datetime64[us, UTC]', in older versions 'time' will be 'datetime64[ns, UTC]' + # In newer Pandas versions 'time' will be 'datetime64[us, UTC]', in older versions 'time' + # will be 'datetime64[ns, UTC]' for column in _temp_df.columns: if _temp_df[column].dtype.name == 'str': _temp_df[column] = _temp_df[column].astype(object)