Return None if the decorator threadlocal store doesn't have flow or credentials.
Reviewed in https://codereview.appspot.com/12377044/.
diff --git a/oauth2client/appengine.py b/oauth2client/appengine.py
index e055216..5cd3f4b 100644
--- a/oauth2client/appengine.py
+++ b/oauth2client/appengine.py
@@ -575,16 +575,31 @@
self._tls.credentials = credentials
def get_credentials(self):
- return self._tls.credentials
+ """A thread local Credentials object.
+
+ Returns:
+ A client.Credentials object, or None if credentials hasn't been set in
+ this thread yet, which may happen when calling has_credentials inside
+ oauth_aware.
+ """
+ return getattr(self._tls, 'credentials', None)
+
+ credentials = property(get_credentials, set_credentials)
def set_flow(self, flow):
self._tls.flow = flow
def get_flow(self):
- return self._tls.flow
+ """A thread local Flow object.
+
+ Returns:
+ A credentials.Flow object, or None if the flow hasn't been set in this
+ thread yet, which happens in _create_flow() since Flows are created
+ lazily.
+ """
+ return getattr(self._tls, 'flow', None)
flow = property(get_flow, set_flow)
- credentials = property(get_credentials, set_credentials)
@util.positional(4)