Call set_store on creds retrieved from cache.
Reviewed in https://codereview.appspot.com/12534043/.
Fixes bug #292.
diff --git a/oauth2client/appengine.py b/oauth2client/appengine.py
index 2234cf8..e055216 100644
--- a/oauth2client/appengine.py
+++ b/oauth2client/appengine.py
@@ -440,20 +440,20 @@
Returns:
oauth2client.Credentials
"""
+ credentials = None
if self._cache:
json = self._cache.get(self._key_name)
if json:
- return Credentials.new_from_json(json)
-
- credentials = None
- entity = self._get_entity()
- if entity is not None:
- credentials = getattr(entity, self._property_name)
- if credentials and hasattr(credentials, 'set_store'):
- credentials.set_store(self)
+ credentials = Credentials.new_from_json(json)
+ if credentials is None:
+ entity = self._get_entity()
+ if entity is not None:
+ credentials = getattr(entity, self._property_name)
if self._cache:
self._cache.set(self._key_name, credentials.to_json())
+ if credentials and hasattr(credentials, 'set_store'):
+ credentials.set_store(self)
return credentials
def locked_put(self, credentials):
diff --git a/tests/test_oauth2client_appengine.py b/tests/test_oauth2client_appengine.py
index b99bd8c..79657e0 100644
--- a/tests/test_oauth2client_appengine.py
+++ b/tests/test_oauth2client_appengine.py
@@ -323,6 +323,22 @@
self.assertEqual(None, credentials)
self.assertEqual(None, memcache.get('foo'))
+ def test_get_and_put_set_store_on_cache_retrieval(self):
+ storage = StorageByKeyName(
+ CredentialsModel, 'foo', 'credentials', cache=memcache)
+
+ self.assertEqual(None, storage.get())
+ self.credentials.set_store(storage)
+ storage.put(self.credentials)
+ # Pre-bug 292 old_creds wouldn't have storage, and the _refresh wouldn't
+ # be able to store the updated cred back into the storage.
+ old_creds = storage.get()
+ self.assertEqual(old_creds.access_token, 'foo')
+ old_creds.invalid = True
+ old_creds._refresh(_http_request)
+ new_creds = storage.get()
+ self.assertEqual(new_creds.access_token, 'bar')
+
def test_get_and_put_ndb(self):
# Start empty
storage = StorageByKeyName(