@@ -47,6 +47,8 @@ class InfluxDBClient(object):
47
47
:type username: str
48
48
:param password: password of the user, defaults to 'root'
49
49
:type password: str
50
+ :param token: token for access. Overrides username/password
51
+ :type token: str
50
52
:param pool_size: urllib3 connection pool size, defaults to 10.
51
53
:type pool_size: int
52
54
:param database: database name to connect to, defaults to None
@@ -101,6 +103,7 @@ def __init__(self,
101
103
port = 8086 ,
102
104
username = 'root' ,
103
105
password = 'root' ,
106
+ token = None ,
104
107
database = None ,
105
108
ssl = False ,
106
109
verify_ssl = False ,
@@ -125,6 +128,7 @@ def __init__(self,
125
128
self ._database = database
126
129
self ._timeout = timeout
127
130
self ._retries = retries
131
+ self ._token = token
128
132
129
133
self ._verify_ssl = verify_ssl
130
134
@@ -134,7 +138,7 @@ def __init__(self,
134
138
if not session :
135
139
session = requests .Session ()
136
140
137
- self ._session = session
141
+ self ._session = self . setup_authenticaiton ( session , self . _token , self . _username , self . _password )
138
142
adapter = _SocketOptionsAdapter (
139
143
pool_connections = int (pool_size ),
140
144
pool_maxsize = int (pool_size ),
@@ -258,6 +262,16 @@ def from_dsn(cls, dsn, **kwargs):
258
262
259
263
return cls (** init_args )
260
264
265
+ def setup_authenticaiton (self , session , token = None , username = None , password = None ):
266
+
267
+ if token :
268
+ session .headers .update ({"Authorization" : f"Token { token } " })
269
+ return session
270
+
271
+ session .auth = (username , password )
272
+
273
+ return session
274
+
261
275
def switch_database (self , database ):
262
276
"""Change the client's database.
263
277
@@ -266,16 +280,22 @@ def switch_database(self, database):
266
280
"""
267
281
self ._database = database
268
282
269
- def switch_user (self , username , password ):
270
- """Change the client's username .
283
+ def switch_user (self , token = None , username = None , password = None ):
284
+ """Change the client's user .
271
285
286
+ :param token: the token of the user to switch to
287
+ :type token: str
272
288
:param username: the username to switch to
273
289
:type username: str
274
290
:param password: the password for the username
275
291
:type password: str
276
292
"""
277
- self ._username = username
278
- self ._password = password
293
+ if token :
294
+ self ._session .headers .update ({"Authorization" : f"Token { token } " })
295
+ self ._session .auth = None
296
+
297
+ self ._session .auth = (username , password )
298
+ self ._session .headers .pop ("Authorization" , None )
279
299
280
300
def request (self , url , method = 'GET' , params = None , data = None , stream = False ,
281
301
expected_response_code = 200 , headers = None ):
@@ -336,14 +356,9 @@ def request(self, url, method='GET', params=None, data=None, stream=False,
336
356
_try = 0
337
357
while retry :
338
358
try :
339
- if "Authorization" in headers :
340
- auth = (None , None )
341
- else :
342
- auth = (self ._username , self ._password )
343
359
response = self ._session .request (
344
360
method = method ,
345
361
url = url ,
346
- auth = auth if None not in auth else None ,
347
362
params = params ,
348
363
data = data ,
349
364
stream = stream ,
0 commit comments