Skip to content

Commit 90a7c62

Browse files
committed
Auto fallback when buckets not supported
1 parent d13debe commit 90a7c62

File tree

1 file changed

+16
-19
lines changed

1 file changed

+16
-19
lines changed

influxdb_client/client/bucket_api.py

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
A bucket belongs to an organization.
66
"""
77
import warnings
8-
8+
from influxdb_client.rest import ApiException
99
from influxdb_client import BucketsService, Bucket, PostBucketRequest, PatchBucketRequest
1010
from influxdb_client.client.util.helpers import get_org_query_param
1111

@@ -20,20 +20,19 @@ def __init__(self, influxdb_client):
2020

2121
def create_bucket(self, bucket=None, bucket_name=None, org_id=None, retention_rules=None,
2222
description=None, org=None) -> Bucket:
23-
"""Create a bucket.
23+
"""Create a bucket. Database creation via v1 API as fallback.
2424
2525
:param Bucket|PostBucketRequest bucket: bucket to create
2626
:param bucket_name: bucket name
2727
:param description: bucket description
2828
:param org_id: org_id
29-
:param bucket_name: bucket name
3029
:param retention_rules: retention rules array or single BucketRetentionRules
3130
:param str, Organization org: specifies the organization for create the bucket;
3231
Take the ``ID``, ``Name`` or ``Organization``.
3332
If not specified the default value from ``InfluxDBClient.org`` is used.
34-
:return: Bucket
33+
:return: Bucket or the request thread when falling back.
3534
If the method is called asynchronously,
36-
returns the request thread.
35+
returns also the request thread.
3736
"""
3837
if retention_rules is None:
3938
retention_rules = []
@@ -56,7 +55,12 @@ def create_bucket(self, bucket=None, bucket_name=None, org_id=None, retention_ru
5655
client=self._influxdb_client,
5756
required_id=True))
5857

59-
return self._buckets_service.post_buckets(post_bucket_request=bucket)
58+
try:
59+
return self._buckets_service.post_buckets(post_bucket_request=bucket)
60+
except ApiException as ex:
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)
6064

6165
def create_database(self, database=None, retention_rules=None):
6266
"""Create a database at the v1 api (legacy).
@@ -67,16 +71,6 @@ def create_database(self, database=None, retention_rules=None):
6771
if database is None:
6872
raise ValueError("Invalid value for `database`, must be defined.")
6973

70-
if retention_rules is None:
71-
retention_rules = []
72-
73-
rules = []
74-
75-
if isinstance(retention_rules, list):
76-
rules.extend(retention_rules)
77-
else:
78-
rules.append(retention_rules)
79-
8074
# Hedaer and local_var_params for standard procedures only
8175
header_params = {}
8276
header_params['Accept'] = self._influxdb_client.api_client.select_header_accept(
@@ -116,17 +110,20 @@ def update_bucket(self, bucket: Bucket) -> Bucket:
116110
return self._buckets_service.patch_buckets_id(bucket_id=bucket.id, patch_bucket_request=request)
117111

118112
def delete_bucket(self, bucket):
119-
"""Delete a bucket.
113+
"""Delete a bucket. Delete a database via v1 API as fallback.
120114
121115
:param bucket: bucket id or Bucket
122-
:return: Bucket
116+
:return: Bucket or the request thread when falling back
123117
"""
124118
if isinstance(bucket, Bucket):
125119
bucket_id = bucket.id
126120
else:
127121
bucket_id = bucket
128122

129-
return self._buckets_service.delete_buckets_id(bucket_id=bucket_id)
123+
try:
124+
return self._buckets_service.delete_buckets_id(bucket_id=bucket_id)
125+
except ApiException as ex:
126+
return self.delete_database(database=bucket_id)
130127

131128
def delete_database(self, database=None):
132129
"""Delete a database at the v1 api (legacy).

0 commit comments

Comments
 (0)