Skip to content
This repository was archived by the owner on May 5, 2025. It is now read-only.

Commit 487b860

Browse files
authored
Merge pull request #51 from sserrata/token-caching
Add support for caching access tokens
2 parents b4bc342 + e50ff92 commit 487b860

File tree

4 files changed

+30
-9
lines changed

4 files changed

+30
-9
lines changed

pancloud/adapters/adapter.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,14 @@ def remove_profile(self, profile=None):
4545
pass
4646

4747
@abstractmethod
48-
def write_credentials(self, credentials=None, profile=None):
48+
def write_credentials(self, credentials=None, profile=None,
49+
cache_token=None):
4950
"""Write credentials.
5051
5152
Write credentials to store.
5253
5354
Args:
55+
cache_token (bool): If ``True``, stores ``access_token`` in token store. Defaults to ``True``.
5456
credentials (class): Read-only credentials.
5557
profile (str): Credentials profile. Defaults to ``'default'``.
5658

pancloud/adapters/tinydb_adapter.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,14 @@ def remove_profile(self, profile=None):
6464
with self.db:
6565
return self.db.remove(self.query.profile == profile)
6666

67-
def write_credentials(self, credentials=None, profile=None):
67+
def write_credentials(self, credentials=None, profile=None,
68+
cache_token=None):
6869
"""Write credentials.
6970
7071
Write credentials to credentials file. Performs ``upsert``.
7172
7273
Args:
74+
cache_token (bool): If ``True``, stores ``access_token`` in token store. Defaults to ``True``.
7375
credentials (class): Read-only credentials.
7476
profile (str): Credentials profile. Defaults to ``'default'``.
7577
@@ -83,6 +85,8 @@ def write_credentials(self, credentials=None, profile=None):
8385
'client_secret': credentials.client_secret,
8486
'refresh_token': credentials.refresh_token
8587
}
88+
if cache_token:
89+
d.update({'access_token': credentials.access_token})
8690
with self.lock:
8791
return self.db.upsert(
8892
d, self.query.profile == profile

pancloud/credentials.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
class Credentials(object):
2929
"""An Application Framework credentials object."""
3030

31-
def __init__(self, auth_base_url=None, client_id=None, client_secret=None,
32-
instance_id=None, profile=None, redirect_uri=None,
33-
region=None, refresh_token=None, scope=None,
34-
storage_adapter=None, token_url=None, token_revoke_url=None,
35-
**kwargs):
31+
def __init__(self, auth_base_url=None, cache_token=True,
32+
client_id=None, client_secret=None, instance_id=None,
33+
profile=None, redirect_uri=None, region=None,
34+
refresh_token=None, scope=None, storage_adapter=None,
35+
token_url=None, token_revoke_url=None, **kwargs):
3636
"""Persist Session() and credentials attributes.
3737
3838
Built on top of the ``Requests`` library, ``Credentials`` is an
@@ -65,6 +65,7 @@ def __init__(self, auth_base_url=None, client_id=None, client_secret=None,
6565
"""
6666
self.access_token_ = None
6767
self.auth_base_url = auth_base_url or BASE_URL
68+
self.cache_token_ = cache_token
6869
self.client_id_ = client_id
6970
self.client_secret_ = client_secret
7071
self.environ = os.environ
@@ -106,6 +107,10 @@ def access_token(self):
106107
"""Get access_token"""
107108
return self.access_token_
108109

110+
@property
111+
def cache_token(self):
112+
return self.cache_token_
113+
109114
@property
110115
def client_id(self):
111116
"""Get client_id"""
@@ -239,7 +244,11 @@ def get_credentials(self):
239244
class: Read-only credentials.
240245
241246
"""
242-
access_token = self.access_token_
247+
if self.cache_token:
248+
access_token = self._resolve_credential(
249+
'access_token') or self.access_token_
250+
else:
251+
access_token = self.access_token_
243252
client_id = self.client_id_ or self._resolve_credential(
244253
'client_id')
245254
client_secret = self.client_secret_ or self._resolve_credential(
@@ -358,5 +367,6 @@ def write_credentials(self):
358367
"""
359368
c = self.get_credentials()
360369
return self.storage().write_credentials(
361-
credentials=c, profile=self.profile
370+
credentials=c, profile=self.profile,
371+
cache_token=self.cache_token_
362372
)

pancloud/httpclient.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,11 @@ def request(self, **kwargs):
253253

254254
# Prepare and send the Request() and return Response()
255255
try:
256+
if credentials:
257+
if credentials.cache_token:
258+
h = self._apply_credentials(
259+
k['headers'], credentials)
260+
k['headers'] = h
256261
r = self._send_request(
257262
enforce_json, method, raise_for_status, url, **k
258263
)

0 commit comments

Comments
 (0)