Skip to content

Commit f1d3346

Browse files
wip
1 parent 81f69f4 commit f1d3346

File tree

3 files changed

+72
-3
lines changed

3 files changed

+72
-3
lines changed

influxdb_client_3/__init__.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from influxdb_client_3.write_client.client.write_api import WriteApi as _WriteApi, SYNCHRONOUS, ASYNCHRONOUS, \
1515
PointSettings, DefaultWriteOptions, WriteType
1616
from influxdb_client_3.write_client.domain.write_precision import WritePrecision
17+
from influxdb_client_3.write_client.rest import ApiException
1718

1819
polars = importlib.util.find_spec("polars") is not None
1920

@@ -467,6 +468,20 @@ async def query_async(self, query: str, language: str = "sql", mode: str = "all"
467468
except ArrowException as e:
468469
raise InfluxDB3ClientQueryError(f"Error while executing query: {e}")
469470

471+
def get_server_version(self) -> str:
472+
version = None
473+
(resp_body, _, header) = self._client.api_client.call_api(resource_path="/ping", method="GET", response_type=object)
474+
475+
for key, value in header.items():
476+
if key.lower() == "x-influxdb-version":
477+
version = value
478+
break
479+
480+
if version is None and isinstance(resp_body, dict):
481+
version = resp_body['version'] if version is None else version
482+
483+
return version
484+
470485
def close(self):
471486
"""Close the client and clean up resources."""
472487
self._write_api.close()

tests/test_influxdb_client_3.py

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
1+
import re
12
import unittest
23
from unittest.mock import patch
34

4-
from influxdb_client_3 import InfluxDBClient3, WritePrecision, DefaultWriteOptions, Point, WriteOptions, WriteType
5+
from pytest_httpserver import HTTPServer
6+
7+
from influxdb_client_3 import InfluxDBClient3, WritePrecision, DefaultWriteOptions, Point, WriteOptions, WriteType, \
8+
ApiException
59
from influxdb_client_3.exceptions import InfluxDB3ClientQueryError
610
from tests.util import asyncio_run
711
from tests.util.mocks import ConstantFlightServer, ConstantData, ErrorFlightServer
812

913

14+
def http_server():
15+
httpserver = HTTPServer()
16+
httpserver.start()
17+
return httpserver
18+
19+
1020
class TestInfluxDBClient3(unittest.TestCase):
1121

1222
@patch('influxdb_client_3._InfluxDBClient')
@@ -226,6 +236,46 @@ async def test_async_query_with_arrow_error(self):
226236
await c.query_async("SELECT * FROM my_data")
227237
self.assertIn("Error while executing query", str(err.exception))
228238

239+
def test_get_version_header_success(self):
240+
server = http_server()
241+
server.expect_request(re.compile(".*")).respond_with_json(
242+
headers={"X-Influxdb-Version": "1.8.2"},
243+
response_json={"version": "3.0"}
244+
)
245+
version = InfluxDBClient3(
246+
host=f'http://{server.host}:{server.port}', org="ORG", database="DB", token="TOKEN"
247+
).get_server_version()
248+
assert version == "1.8.2"
249+
250+
def test_get_version_in_body_success(self):
251+
server = http_server()
252+
server.expect_request('/ping').respond_with_json(
253+
response_json={"version": "3.0"},
254+
)
255+
version = InfluxDBClient3(
256+
host=f'http://{server.host}:{server.port}', org="ORG", database="DB", token="TOKEN"
257+
).get_server_version()
258+
assert version == "3.0"
259+
260+
def test_get_version_empty(self):
261+
server = http_server()
262+
server.expect_request("/ping").respond_with_data(
263+
headers={"abc": "1.8.2"},
264+
)
265+
266+
version = InfluxDBClient3(
267+
host=f'http://{server.host}:{server.port}', org="ORG", database="DB", token="TOKEN"
268+
).get_server_version()
269+
assert version is None
270+
271+
def test_get_version_fail(self):
272+
server = http_server()
273+
server.expect_request("/ping").respond_with_json(
274+
response_json={"error": "error"},
275+
status=400
276+
)
277+
with self.assertRaises(ApiException):
278+
InfluxDBClient3(
279+
host=f'http://{server.host}:{server.port}', org="ORG", database="DB", token="TOKEN"
280+
).get_server_version()
229281

230-
if __name__ == '__main__':
231-
unittest.main()

tests/test_influxdb_client_3_integration.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,3 +274,7 @@ async def test_verify_query_async(self):
274274
result_list = result.to_pylist()
275275
for item in data:
276276
assert lp_to_py_object(item) in result_list, f"original lp data \"{item}\" should be in result list"
277+
278+
def test_get_server_version(self):
279+
version = self.client.get_server_version()
280+
assert version is not None

0 commit comments

Comments
 (0)