Skip to content

Commit 1a66a43

Browse files
committed
chore: improve error message when the client cannot find org by name
1 parent 64a401e commit 1a66a43

File tree

3 files changed

+31
-4
lines changed

3 files changed

+31
-4
lines changed

influxdb_client/client/exceptions.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010
class InfluxDBError(Exception):
1111
"""Raised when a server error occurs."""
1212

13-
def __init__(self, response: HTTPResponse):
13+
def __init__(self, response: HTTPResponse = None, message: str = None):
1414
"""Initialize the InfluxDBError handler."""
1515
if response is not None:
1616
self.response = response
1717
self.message = self._get_message(response)
1818
self.retry_after = response.getheader('Retry-After')
1919
else:
2020
self.response = None
21-
self.message = 'no response'
21+
self.message = message or 'no response'
2222
self.retry_after = None
2323
super().__init__(self.message)
2424

influxdb_client/client/util/helpers.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,13 @@ def get_org_query_param(org, client, required_id=False):
3232
_org = _org.id
3333
if required_id and _org and not _is_id(_org):
3434
try:
35-
return client.organizations_api().find_organizations(org=_org)[0].id
35+
organizations = client.organizations_api().find_organizations(org=_org)
36+
if len(organizations) < 1:
37+
from influxdb_client.client.exceptions import InfluxDBError
38+
message = f"The client cannot find organization with name: '{_org}' " \
39+
"to determine their ID. Are you using token with sufficient permission?"
40+
raise InfluxDBError(response=None, message=message)
41+
return organizations[0].id
3642
except ApiException:
3743
return None
3844

tests/test_Helpers.py

+22-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
from influxdb_client import InfluxDBClient, Organization
1+
import pytest
2+
3+
from influxdb_client import InfluxDBClient, Organization, PermissionResource, Permission
24
# noinspection PyProtectedMember
5+
from influxdb_client.client.exceptions import InfluxDBError
36
from influxdb_client.client.util.helpers import get_org_query_param, _is_id
47
from tests.base_test import BaseTest
58

@@ -36,3 +39,21 @@ def test_both_none(self):
3639
self.client = InfluxDBClient(url=self.client.url, token="my-token")
3740
org = get_org_query_param(None, self.client)
3841
self.assertIsNone(org)
42+
43+
def test_not_permission_to_read_org(self):
44+
# Create Token without permission to read Organizations
45+
resource = PermissionResource(type="buckets", org_id=self.find_my_org().id)
46+
authorization = self.client \
47+
.authorizations_api() \
48+
.create_authorization(org_id=self.find_my_org().id,
49+
permissions=[Permission(resource=resource, action="read"),
50+
Permission(resource=resource, action="write")])
51+
self.client.close()
52+
53+
# Initialize client without permission to read Organizations
54+
self.client = InfluxDBClient(url=self.client.url, token=authorization.token)
55+
56+
with pytest.raises(InfluxDBError) as e:
57+
get_org_query_param("my-org", self.client, required_id=True)
58+
assert "The client cannot find organization with name: 'my-org' to determine their ID. Are you using token " \
59+
"with sufficient permission?" in f"{e.value} "

0 commit comments

Comments
 (0)