Skip to content

Commit 3609dc3

Browse files
authored
Merge pull request #2 from Pitastic/check_for_version
Implement version check
2 parents c94b316 + 71f0fdb commit 3609dc3

File tree

2 files changed

+57
-19
lines changed

2 files changed

+57
-19
lines changed

influxdb_client/client/bucket_api.py

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,17 @@ def create_bucket(self, bucket=None, bucket_name=None, org_id=None, retention_ru
3030
:param str, Organization org: specifies the organization for create the bucket;
3131
Take the ``ID``, ``Name`` or ``Organization``.
3232
If not specified the default value from ``InfluxDBClient.org`` is used.
33-
:return: Bucket or the request thread when falling back.
33+
:return: Bucket
3434
If the method is called asynchronously,
35-
returns also the request thread.
35+
returns the request thread.
3636
"""
37+
if self._buckets_service._is_below_v2():
38+
# Fall back to v1 API if buckets are not supported
39+
warnings.warn("InfluxDB versions below v2.0 are deprecated. " + \
40+
"Falling back to CREATE DATABASE statement", DeprecationWarning)
41+
database_name = bucket_name if bucket_name is not None else bucket
42+
return self._create_database(database=database_name)
43+
3744
if retention_rules is None:
3845
retention_rules = []
3946

@@ -55,19 +62,13 @@ def create_bucket(self, bucket=None, bucket_name=None, org_id=None, retention_ru
5562
client=self._influxdb_client,
5663
required_id=True))
5764

58-
try:
59-
return self._buckets_service.post_buckets(post_bucket_request=bucket)
60-
except ApiException:
61-
# Fall back to v1 API if buckets are not supported
62-
database_name = bucket_name if bucket_name is not None else bucket
63-
return self.create_database(database=database_name, retention_rules=retention_rules)
65+
return self._buckets_service.post_buckets(post_bucket_request=bucket)
6466

65-
def create_database(self, database=None, retention_rules=None):
67+
def _create_database(self, database=None):
6668
"""Create a database at the v1 api (legacy).
6769
6870
:param database_name: name of the new database
69-
:param retention_rules: retention rules array or single BucketRetentionRules
70-
:return: Tuple (response body, status code, header dict)
71+
:return: tuple(response body, status code, header dict)
7172
"""
7273
if database is None:
7374
raise ValueError("Invalid value for `database`, must be defined.")
@@ -114,24 +115,26 @@ def delete_bucket(self, bucket):
114115
"""Delete a bucket. Delete a database via v1 API as fallback.
115116
116117
:param bucket: bucket id or Bucket
117-
:return: Bucket or the request thread when falling back
118+
:return: Bucket
118119
"""
119120
if isinstance(bucket, Bucket):
120121
bucket_id = bucket.id
121122
else:
122123
bucket_id = bucket
123124

124-
try:
125-
return self._buckets_service.delete_buckets_id(bucket_id=bucket_id)
126-
except ApiException:
127-
return self.delete_database(database=bucket_id)
125+
if self._buckets_service._is_below_v2():
126+
# Fall back to v1 API if buckets are not supported
127+
warnings.warn("InfluxDB versions below v2.0 are deprecated. " + \
128+
"Falling back to DROP DATABASE statement", DeprecationWarning)
129+
return self._delete_database(database=bucket_id)
128130

129-
def delete_database(self, database=None):
131+
return self._buckets_service.delete_buckets_id(bucket_id=bucket_id)
132+
133+
def _delete_database(self, database=None):
130134
"""Delete a database at the v1 api (legacy).
131135
132136
:param database_name: name of the database to delete
133-
:param retention_rules: retention rules array or single BucketRetentionRules
134-
:return: Tuple (response body, status code, header dict)
137+
:return: tuple(response body, status code, header dict)
135138
"""
136139
if database is None:
137140
raise ValueError("Invalid value for `database`, must be defined.")

influxdb_client/service/_base_service.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ def __init__(self, api_client=None):
99
raise ValueError("Invalid value for `api_client`, must be defined.")
1010
self.api_client = api_client
1111
self._build_type = None
12+
self._build_version = None
1213

1314
def _check_operation_params(self, operation_id, supported_params, local_params):
1415
supported_params.append('async_req')
@@ -35,6 +36,16 @@ async def _is_cloud_instance_async(self) -> bool:
3536
self._build_type = await self.build_type_async()
3637
return 'cloud' in self._build_type.lower()
3738

39+
def _is_below_v2(self) -> bool:
40+
if self._build_version is None:
41+
self._build_version = self.build_version()
42+
return self._build_version < '2'
43+
44+
async def _is_below_v2_async(self) -> bool:
45+
if self._build_version is None:
46+
self._build_version = await self.build_version()
47+
return self._build_version < '2'
48+
3849
def build_type(self) -> str:
3950
"""
4051
Return the build type of the connected InfluxDB Server.
@@ -59,6 +70,30 @@ async def build_type_async(self) -> str:
5970
response = await ping_service.get_ping_async(_return_http_data_only=False)
6071
return self.response_header(response, header_name='X-Influxdb-Build')
6172

73+
def build_version(self) -> str:
74+
"""
75+
Return the version number of the connected InfluxDB Server.
76+
77+
:return: Version number of InfluxDB build.
78+
"""
79+
from influxdb_client import PingService
80+
ping_service = PingService(self.api_client)
81+
82+
response = ping_service.get_ping_with_http_info(_return_http_data_only=False)
83+
return self.response_header(response, header_name='X-Influxdb-Version')
84+
85+
async def build_version_async(self) -> str:
86+
"""
87+
Return the version number of the connected InfluxDB Server.
88+
89+
:return: Version number of InfluxDB build.
90+
"""
91+
from influxdb_client import PingService
92+
ping_service = PingService(self.api_client)
93+
94+
response = await ping_service.get_ping_async(_return_http_data_only=False)
95+
return self.response_header(response, header_name='X-Influxdb-Version')
96+
6297
def response_header(self, response, header_name='X-Influxdb-Version') -> str:
6398
if response is not None and len(response) >= 3:
6499
if header_name in response[2]:

0 commit comments

Comments
 (0)