@@ -293,26 +293,36 @@ def sign_request(self, req, endpoint):
293
293
294
294
295
295
class BearerTokenAccount (BaseAccount ):
296
- def __init__ (self , token , expired_hours = 5 ):
296
+ def __init__ (self , token , expired_hours = 5 , get_bearer_token_fun = None ):
297
297
self ._token = token
298
298
self ._last_modified_time = None
299
299
self ._expired_time = timedelta (hours = expired_hours )
300
+ self ._get_bearer_token = get_bearer_token_fun or self .get_bearer_token
300
301
301
- def _check_bearer_token (self ):
302
+ @staticmethod
303
+ def get_bearer_token ():
302
304
from cupid import context
303
305
304
306
cupid_context = context ()
305
307
if cupid_context is None :
306
308
return
307
309
310
+ return cupid_context .get_bearer_token ()
311
+
312
+ def _check_bearer_token (self ):
308
313
t = datetime .now ()
309
314
if self ._last_modified_time is None :
310
- token = cupid_context .get_bearer_token ()
315
+ token = self ._get_bearer_token ()
316
+ if token is None :
317
+ return
311
318
if token != self ._token :
312
319
self ._token = token
313
320
self ._last_modified_time = datetime .now ()
314
321
elif (t - self ._last_modified_time ) > self ._expired_time :
315
- self ._token = cupid_context .get_bearer_token ()
322
+ token = self ._get_bearer_token ()
323
+ if token is None :
324
+ return
325
+ self ._token = token
316
326
self ._last_modified_time = datetime .now ()
317
327
318
328
@property
@@ -321,5 +331,8 @@ def token(self):
321
331
322
332
def sign_request (self , req , endpoint ):
323
333
self ._check_bearer_token ()
334
+ url = req .url [len (endpoint ):]
335
+ url_components = urlparse (unquote (url ), allow_fragments = False )
336
+ self ._build_canonical_str (url_components , req )
324
337
req .headers ['x-odps-bearer-token' ] = self ._token
325
338
LOG .debug ('headers after signing: ' + repr (req .headers ))
0 commit comments