From 0357ae6f395fb6a55ad3197b527aacdc11a9bdd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20de=20Melo?= Date: Mon, 28 Apr 2014 18:01:25 +0200 Subject: [PATCH 1/6] Added support for OAuth 2 for devices --- oauth2client/__init__.py | 1 + oauth2client/client.py | 94 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 87 insertions(+), 8 deletions(-) diff --git a/oauth2client/__init__.py b/oauth2client/__init__.py index ac84748..89539a5 100644 --- a/oauth2client/__init__.py +++ b/oauth2client/__init__.py @@ -1,5 +1,6 @@ __version__ = "1.2" GOOGLE_AUTH_URI = 'https://accounts.google.com/o/oauth2/auth' +GOOGLE_DEVICE_URI = 'https://accounts.google.com/o/oauth2/device/code' GOOGLE_REVOKE_URI = 'https://accounts.google.com/o/oauth2/revoke' GOOGLE_TOKEN_URI = 'https://accounts.google.com/o/oauth2/token' diff --git a/oauth2client/client.py b/oauth2client/client.py index 99873e2..d5342c8 100644 --- a/oauth2client/client.py +++ b/oauth2client/client.py @@ -32,6 +32,7 @@ import urllib import urlparse from oauth2client import GOOGLE_AUTH_URI +from oauth2client import GOOGLE_DEVICE_URI from oauth2client import GOOGLE_REVOKE_URI from oauth2client import GOOGLE_TOKEN_URI from oauth2client import util @@ -99,6 +100,10 @@ class NonAsciiHeaderError(Error): """Header names and values must be ASCII strings.""" +class OAuth2DeviceCodeError(Error): + """Error trying to retrieve a device code.""" + + def _abstract(): raise NotImplementedError('You need to override this function') @@ -457,7 +462,7 @@ class OAuth2Credentials(Credentials): h = httplib2.Http() h = credentials.authorize(h) - You can't create a new OAuth subclass of httplib2.Authenication + You can't create a new OAuth subclass of httplib2.Authentication because it never gets passed the absolute URI, which is needed for signing. So instead we have to overload 'request' with a closure that adds in the Authorization header and then calls the original @@ -1074,7 +1079,8 @@ def credentials_from_code(client_id, client_secret, scope, code, redirect_uri='postmessage', http=None, user_agent=None, token_uri=GOOGLE_TOKEN_URI, auth_uri=GOOGLE_AUTH_URI, - revoke_uri=GOOGLE_REVOKE_URI): + revoke_uri=GOOGLE_REVOKE_URI, + device_uri=GOOGLE_DEVICE_URI): """Exchanges an authorization code for an OAuth2Credentials object. Args: @@ -1092,6 +1098,8 @@ def credentials_from_code(client_id, client_secret, scope, code, defaults to Google's endpoints but any OAuth 2.0 provider can be used. revoke_uri: string, URI for revoke endpoint. For convenience defaults to Google's endpoints but any OAuth 2.0 provider can be used. + device_uri: string, URI for device authorization endpoint. For convenience + defaults to Google's endpoints but any OAuth 2.0 provider can be used. Returns: An OAuth2Credentials object. @@ -1103,7 +1111,7 @@ def credentials_from_code(client_id, client_secret, scope, code, flow = OAuth2WebServerFlow(client_id, client_secret, scope, redirect_uri=redirect_uri, user_agent=user_agent, auth_uri=auth_uri, token_uri=token_uri, - revoke_uri=revoke_uri) + revoke_uri=revoke_uri, device_uri=device_uri) credentials = flow.step2_exchange(code, http=http) return credentials @@ -1164,6 +1172,7 @@ class OAuth2WebServerFlow(Flow): auth_uri=GOOGLE_AUTH_URI, token_uri=GOOGLE_TOKEN_URI, revoke_uri=GOOGLE_REVOKE_URI, + device_uri=GOOGLE_DEVICE_URI, **kwargs): """Constructor for OAuth2WebServerFlow. @@ -1186,6 +1195,8 @@ class OAuth2WebServerFlow(Flow): defaults to Google's endpoints but any OAuth 2.0 provider can be used. revoke_uri: string, URI for revoke endpoint. For convenience defaults to Google's endpoints but any OAuth 2.0 provider can be used. + device_uri: string, URI for device authorization endpoint. For convenience + defaults to Google's endpoints but any OAuth 2.0 provider can be used. **kwargs: dict, The keyword arguments are all optional and required parameters for the OAuth calls. """ @@ -1197,6 +1208,7 @@ class OAuth2WebServerFlow(Flow): self.auth_uri = auth_uri self.token_uri = token_uri self.revoke_uri = revoke_uri + self.device_uri = device_uri self.params = { 'access_type': 'offline', 'response_type': 'code', @@ -1232,9 +1244,65 @@ class OAuth2WebServerFlow(Flow): } query_params.update(self.params) return _update_query_params(self.auth_uri, query_params) + + def _extract_codes(self, body): + """Parses the JSON response of a device and user codes request. + + Args: + body: string, the body of a response + """ + d = simplejson.loads(body) + self.device_code = d['device_code'] + self.user_code = d['user_code'] + self.interval = d['interval'] + self.verification_url = d['verification_url'] + if 'expires_in' in d: + self.user_code_expiry = datetime.datetime.now() + datetime.timedelta(seconds=int(d['expires_in'])) + else: + self.user_code_expiry = None + + @util.positional(1) + def step1_get_device_and_user_codes(self, http=None): + """Returns a user code and the verification URL where to enter it + + Returns: + A user code as a string for the user to authorize the application + An URL as a string where the user has to enter the code + """ + if self.device_uri is None: + raise ValueError('The value of device_uri must not be None.') + + body = urllib.urlencode({ + 'client_id': self.client_id, + 'scope': self.scope, + }) + headers = { + 'content-type': 'application/x-www-form-urlencoded', + } + + if self.user_agent is not None: + headers['user-agent'] = self.user_agent + + if http is None: + http = httplib2.Http() + + resp, content = http.request(self.device_uri, method='POST', body=body, + headers=headers) + if resp.status == 200: + self._extract_codes(content) + return self.user_code, self.verification_url + else: + error_msg = 'Invalid response %s.' % resp.status + try: + d = simplejson.loads(content) + if 'error' in d: + error_msg = d['error'] + except Exception: + pass + raise OAuth2DeviceCodeError(error_msg) @util.positional(2) - def step2_exchange(self, code, http=None): + def step2_exchange(self, code=None, http=None): """Exhanges a code for OAuth2Credentials. Args: @@ -1250,6 +1318,12 @@ class OAuth2WebServerFlow(Flow): FlowExchangeError if a problem occured exchanging the code for a refresh_token. """ + + if not code: + if self.device_code: + code = self.device_code + else: + raise ValueError('code can only be None when the step1_get_device_and_user_codes method has been previously successfully called') if not (isinstance(code, str) or isinstance(code, unicode)): if 'code' not in code: @@ -1261,14 +1335,18 @@ class OAuth2WebServerFlow(Flow): else: code = code['code'] - body = urllib.urlencode({ - 'grant_type': 'authorization_code', + post_data = { 'client_id': self.client_id, 'client_secret': self.client_secret, 'code': code, - 'redirect_uri': self.redirect_uri, 'scope': self.scope, - }) + } + if self.device_code: + post_data['grant_type'] = 'http://oauth.net/grant_type/device/1.0' + else: + post_data['grant_type'] = 'authorization_code' + post_data['redirect_uri'] = self.redirect_uri + body = urllib.urlencode(post_data) headers = { 'content-type': 'application/x-www-form-urlencoded', } From 95efd7e7636358c69578abccc43e7b008bf5aee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20de=20Melo?= Date: Mon, 28 Apr 2014 19:13:02 +0200 Subject: [PATCH 2/6] Allows to use another device_uri --- oauth2client/client.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/oauth2client/client.py b/oauth2client/client.py index d5342c8..a4637c5 100644 --- a/oauth2client/client.py +++ b/oauth2client/client.py @@ -1122,7 +1122,8 @@ def credentials_from_clientsecrets_and_code(filename, scope, code, message = None, redirect_uri='postmessage', http=None, - cache=None): + cache=None, + device_uri=None): """Returns OAuth2Credentials from a clientsecrets file and an auth code. Will create the right kind of Flow based on the contents of the clientsecrets @@ -1154,7 +1155,7 @@ def credentials_from_clientsecrets_and_code(filename, scope, code, invalid. """ flow = flow_from_clientsecrets(filename, scope, message=message, cache=cache, - redirect_uri=redirect_uri) + redirect_uri=redirect_uri, device_uri=device_uri) credentials = flow.step2_exchange(code, http=http) return credentials @@ -1255,7 +1256,8 @@ class OAuth2WebServerFlow(Flow): self.device_code = d['device_code'] self.user_code = d['user_code'] self.interval = d['interval'] - self.verification_url = d['verification_url'] + # some providers respond with 'verification_url', others with 'verification_uri' + self.verification_url = d.get('verification_url') or d.get('verification_uri') if 'expires_in' in d: self.user_code_expiry = datetime.datetime.now() + datetime.timedelta(seconds=int(d['expires_in'])) else: @@ -1288,6 +1290,8 @@ class OAuth2WebServerFlow(Flow): resp, content = http.request(self.device_uri, method='POST', body=body, headers=headers) + print resp + print content if resp.status == 200: self._extract_codes(content) return self.user_code, self.verification_url @@ -1390,7 +1394,7 @@ class OAuth2WebServerFlow(Flow): @util.positional(2) def flow_from_clientsecrets(filename, scope, redirect_uri=None, - message=None, cache=None): + message=None, cache=None, device_uri=None): """Create a Flow from a clientsecrets file. Will create the right kind of Flow based on the contents of the clientsecrets @@ -1428,6 +1432,8 @@ def flow_from_clientsecrets(filename, scope, redirect_uri=None, revoke_uri = client_info.get('revoke_uri') if revoke_uri is not None: constructor_kwargs['revoke_uri'] = revoke_uri + if device_uri is not None: + constructor_kwargs['device_uri'] = device_uri return OAuth2WebServerFlow( client_info['client_id'], client_info['client_secret'], scope, **constructor_kwargs) From 56e32298eaaf37701fec92ae1c49a9b537e3afc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20de=20Melo?= Date: Tue, 29 Apr 2014 14:46:48 +0200 Subject: [PATCH 3/6] remove prints --- oauth2client/client.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/oauth2client/client.py b/oauth2client/client.py index a4637c5..b07f602 100644 --- a/oauth2client/client.py +++ b/oauth2client/client.py @@ -596,7 +596,7 @@ class OAuth2Credentials(Credentials): """Set the Storage for the credential. Args: - store: Storage, an implementation of Stroage object. + store: Storage, an implementation of Storage object. This is needed to store the latest access_token if it has expired and been refreshed. This implementation uses locking to check for updates before updating the @@ -1290,8 +1290,6 @@ class OAuth2WebServerFlow(Flow): resp, content = http.request(self.device_uri, method='POST', body=body, headers=headers) - print resp - print content if resp.status == 200: self._extract_codes(content) return self.user_code, self.verification_url From 2739a1cfe98bbcffb06ce2510fe501afbf06d3c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20de=20Melo?= Date: Wed, 30 Jul 2014 16:27:41 +0200 Subject: [PATCH 4/6] added missing docstrings --- oauth2client/client.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/oauth2client/client.py b/oauth2client/client.py index b07f602..44fbe26 100644 --- a/oauth2client/client.py +++ b/oauth2client/client.py @@ -1143,6 +1143,7 @@ def credentials_from_clientsecrets_and_code(filename, scope, code, http: httplib2.Http, optional http instance to use to do the fetch cache: An optional cache service client that implements get() and set() methods. See clientsecrets.loadfile() for details. + device_uri: string, OAuth 2.0 device authorization endpoint Returns: An OAuth2Credentials object. @@ -1308,9 +1309,9 @@ class OAuth2WebServerFlow(Flow): """Exhanges a code for OAuth2Credentials. Args: - code: string or dict, either the code as a string, or a dictionary - of the query parameters to the redirect_uri, which contains - the code. + code: string or dict or None, either the code as a string, None in case + of OAuth2 fir devices, or a dictionary of the query parameters to the + redirect_uri, which contains the code. http: httplib2.Http, optional http instance to use to do the fetch Returns: @@ -1325,7 +1326,7 @@ class OAuth2WebServerFlow(Flow): if self.device_code: code = self.device_code else: - raise ValueError('code can only be None when the step1_get_device_and_user_codes method has been previously successfully called') + raise ValueError('code can only be None when the step1_get_device_and_user_codes method has been successfully called before') if not (isinstance(code, str) or isinstance(code, unicode)): if 'code' not in code: @@ -1410,6 +1411,8 @@ def flow_from_clientsecrets(filename, scope, redirect_uri=None, provided then clientsecrets.InvalidClientSecretsError will be raised. cache: An optional cache service client that implements get() and set() methods. See clientsecrets.loadfile() for details. + device_uri: string, URI for device authorization endpoint. For convenience + defaults to Google's endpoints but any OAuth 2.0 provider can be used. Returns: A Flow object. From fc6ad8fb48491ac11adc9c49ee442b65b36aa31b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20de=20Melo?= Date: Wed, 30 Jul 2014 18:19:45 +0200 Subject: [PATCH 5/6] added an OAuth2 for devices sample script --- samples/oauth2_for_devices.py | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 samples/oauth2_for_devices.py diff --git a/samples/oauth2_for_devices.py b/samples/oauth2_for_devices.py new file mode 100644 index 0000000..f926558 --- /dev/null +++ b/samples/oauth2_for_devices.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- + +# See: https://developers.google.com/accounts/docs/OAuth2ForDevices + +import httplib2 +from oauth2client import GOOGLE_DEVICE_URI +from oauth2client.client import OAuth2WebServerFlow +from googleapiclient.discovery import build + +CLIENT_ID = "some+client+id" +CLIENT_SECRET = "some+client+secret" +SCOPES = ("https://www.googleapis.com/auth/youtube",) + +kwargs = { + 'redirect_uri': ["urn:ietf:wg:oauth:2.0:oob", "oob"], + 'auth_uri': "https://accounts.google.com/o/oauth2/auth", + 'token_uri': "https://accounts.google.com/o/oauth2/token", + 'device_uri': GOOGLE_DEVICE_URI +} +flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, " ".join(SCOPES), + **kwargs) + +# Step 1: get user code and verification URL +# https://developers.google.com/accounts/docs/OAuth2ForDevices#obtainingacode +user_code, verification_url = flow.step1_get_device_and_user_codes() +print "Enter the following code at %s: %s" % (verification_url, user_code) +print "Then press Enter." +raw_input() + +# Step 2: get credentials +# https://developers.google.com/accounts/docs/OAuth2ForDevices#obtainingatoken +credentials = flow.step2_exchange() +print "Access token:", credentials.access_token +print "Refresh token:", credentials.refresh_token + +# Get YouTube service +# https://developers.google.com/accounts/docs/OAuth2ForDevices#callinganapi +youtube = build("youtube", "v3", http=credentials.authorize(httplib2.Http())) + From 49a4e758a7450fb8583b0c8b89270d0774fcef7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20de=20Melo?= Date: Wed, 30 Jul 2014 18:22:01 +0200 Subject: [PATCH 6/6] updated doc --- docs/epy/api-objects.txt | 148 +- docs/epy/class-tree.html | 6 +- docs/epy/help.html | 2 +- docs/epy/identifier-index.html | 523 ++- docs/epy/module-tree.html | 3 +- docs/epy/oauth2client-module.html | 47 +- docs/epy/oauth2client-pysrc.html | 9 +- docs/epy/oauth2client.anyjson-module.html | 2 +- docs/epy/oauth2client.anyjson-pysrc.html | 2 +- docs/epy/oauth2client.appengine-module.html | 2 +- docs/epy/oauth2client.appengine-pysrc.html | 1768 ++++----- ...pengine.AppAssertionCredentials-class.html | 211 +- ...ient.appengine.CredentialsModel-class.html | 6 +- ...t.appengine.CredentialsNDBModel-class.html | 8 +- ...ppengine.CredentialsNDBProperty-class.html | 6 +- ...t.appengine.CredentialsProperty-class.html | 12 +- ...lient.appengine.FlowNDBProperty-class.html | 6 +- ...h2client.appengine.FlowProperty-class.html | 14 +- ...ngine.InvalidClientSecretsError-class.html | 36 +- ...appengine.InvalidXsrfTokenError-class.html | 36 +- ...lient.appengine.OAuth2Decorator-class.html | 38 +- ...Auth2DecoratorFromClientSecrets-class.html | 44 +- ...ent.appengine.SiteXsrfSecretKey-class.html | 6 +- ....appengine.SiteXsrfSecretKeyNDB-class.html | 8 +- ...ient.appengine.StorageByKeyName-class.html | 24 +- docs/epy/oauth2client.client-module.html | 291 +- docs/epy/oauth2client.client-pysrc.html | 3382 ++++++++++------- ...t.client.AccessTokenCredentials-class.html | 37 +- ...ent.AccessTokenCredentialsError-class.html | 38 +- ....client.AccessTokenRefreshError-class.html | 38 +- ...licationDefaultCredentialsError-class.html | 209 + ...ent.client.AssertionCredentials-class.html | 78 +- ...oauth2client.client.Credentials-class.html | 26 +- docs/epy/oauth2client.client.Error-class.html | 40 +- docs/epy/oauth2client.client.Flow-class.html | 8 +- ...client.client.FlowExchangeError-class.html | 42 +- ...client.client.GoogleCredentials-class.html | 650 ++++ ...oauth2client.client.MemoryCache-class.html | 20 +- ...ient.client.NonAsciiHeaderError-class.html | 42 +- ...client.client.OAuth2Credentials-class.html | 130 +- ...nt.client.OAuth2DeviceCodeError-class.html | 209 + ...ient.client.OAuth2WebServerFlow-class.html | 133 +- ...t.SignedJwtAssertionCredentials-class.html | 82 +- .../oauth2client.client.Storage-class.html | 24 +- ...2client.client.TokenRevokeError-class.html | 42 +- ...t.UnknownClientSecretsFlowError-class.html | 42 +- ...ient.client.VerifyJwtTokenError-class.html | 44 +- .../oauth2client.clientsecrets-module.html | 2 +- .../epy/oauth2client.clientsecrets-pysrc.html | 2 +- ...auth2client.clientsecrets.Error-class.html | 40 +- ...crets.InvalidClientSecretsError-class.html | 42 +- docs/epy/oauth2client.crypt-module.html | 2 +- docs/epy/oauth2client.crypt-pysrc.html | 29 +- ...h2client.crypt.AppIdentityError-class.html | 40 +- docs/epy/oauth2client.django_orm-module.html | 2 +- docs/epy/oauth2client.django_orm-pysrc.html | 45 +- ...ent.django_orm.CredentialsField-class.html | 18 +- ...uth2client.django_orm.FlowField-class.html | 18 +- ...oauth2client.django_orm.Storage-class.html | 36 +- docs/epy/oauth2client.file-module.html | 2 +- docs/epy/oauth2client.file-pysrc.html | 2 +- ...redentialsFileSymbolicLinkError-class.html | 40 +- docs/epy/oauth2client.file.Storage-class.html | 32 +- docs/epy/oauth2client.gce-module.html | 2 +- docs/epy/oauth2client.gce-pysrc.html | 207 +- ...ent.gce.AppAssertionCredentials-class.html | 215 +- .../oauth2client.keyring_storage-module.html | 2 +- .../oauth2client.keyring_storage-pysrc.html | 2 +- ...2client.keyring_storage.Storage-class.html | 28 +- docs/epy/oauth2client.locked_file-module.html | 2 +- docs/epy/oauth2client.locked_file-pysrc.html | 2 +- ...ked_file.AlreadyLockedException-class.html | 40 +- ...redentialsFileSymbolicLinkError-class.html | 40 +- ...h2client.locked_file.LockedFile-class.html | 20 +- ...auth2client.locked_file._Opener-class.html | 20 +- ...client.locked_file._PosixOpener-class.html | 22 +- .../oauth2client.multistore_file-module.html | 2 +- .../oauth2client.multistore_file-pysrc.html | 2 +- ...th2client.multistore_file.Error-class.html | 40 +- ..._file.NewerCredentialStoreError-class.html | 42 +- ...ent.multistore_file._MultiStore-class.html | 10 +- ...store_file._MultiStore._Storage-class.html | 32 +- docs/epy/oauth2client.old_run-module.html | 2 +- docs/epy/oauth2client.old_run-pysrc.html | 2 +- .../oauth2client.service_account-module.html | 188 + .../oauth2client.service_account-pysrc.html | 269 ++ ...ount._ServiceAccountCredentials-class.html | 645 ++++ docs/epy/oauth2client.tools-module.html | 4 +- docs/epy/oauth2client.tools-pysrc.html | 6 +- ...ent.tools.ClientRedirectHandler-class.html | 78 +- ...ient.tools.ClientRedirectServer-class.html | 60 +- docs/epy/oauth2client.util-module.html | 2 +- docs/epy/oauth2client.util-pysrc.html | 2 +- docs/epy/oauth2client.xsrfutil-module.html | 2 +- docs/epy/oauth2client.xsrfutil-pysrc.html | 2 +- docs/epy/redirect.html | 2 +- docs/epy/toc-everything.html | 63 +- docs/epy/toc-oauth2client-module.html | 3 +- docs/epy/toc-oauth2client.client-module.html | 49 +- ...c-oauth2client.service_account-module.html | 40 + docs/epy/toc.html | 3 +- docs/epy/uml_class_diagram_for_oauth2cl.gif | Bin 13796 -> 17356 bytes .../epy/uml_class_diagram_for_oauth2cl_10.gif | Bin 19388 -> 16849 bytes .../epy/uml_class_diagram_for_oauth2cl_11.gif | Bin 13805 -> 12924 bytes .../epy/uml_class_diagram_for_oauth2cl_12.gif | Bin 1691 -> 1540 bytes .../epy/uml_class_diagram_for_oauth2cl_13.gif | Bin 3092 -> 2813 bytes .../epy/uml_class_diagram_for_oauth2cl_14.gif | Bin 9778 -> 8676 bytes .../epy/uml_class_diagram_for_oauth2cl_15.gif | Bin 13632 -> 13109 bytes .../epy/uml_class_diagram_for_oauth2cl_16.gif | Bin 10093 -> 8701 bytes .../epy/uml_class_diagram_for_oauth2cl_17.gif | Bin 9835 -> 8404 bytes .../epy/uml_class_diagram_for_oauth2cl_18.gif | Bin 15974 -> 8938 bytes .../epy/uml_class_diagram_for_oauth2cl_19.gif | Bin 5558 -> 19375 bytes docs/epy/uml_class_diagram_for_oauth2cl_2.gif | Bin 1732 -> 1577 bytes .../epy/uml_class_diagram_for_oauth2cl_20.gif | Bin 8402 -> 4835 bytes .../epy/uml_class_diagram_for_oauth2cl_21.gif | Bin 634 -> 7190 bytes .../epy/uml_class_diagram_for_oauth2cl_22.gif | Bin 9591 -> 580 bytes .../epy/uml_class_diagram_for_oauth2cl_23.gif | Bin 3108 -> 8237 bytes .../epy/uml_class_diagram_for_oauth2cl_24.gif | Bin 9654 -> 17641 bytes .../epy/uml_class_diagram_for_oauth2cl_25.gif | Bin 14777 -> 2780 bytes .../epy/uml_class_diagram_for_oauth2cl_26.gif | Bin 10698 -> 8276 bytes .../epy/uml_class_diagram_for_oauth2cl_27.gif | Bin 20484 -> 13853 bytes .../epy/uml_class_diagram_for_oauth2cl_28.gif | Bin 4749 -> 8452 bytes .../epy/uml_class_diagram_for_oauth2cl_29.gif | Bin 9488 -> 11532 bytes docs/epy/uml_class_diagram_for_oauth2cl_3.gif | Bin 3133 -> 2999 bytes .../epy/uml_class_diagram_for_oauth2cl_30.gif | Bin 10302 -> 24347 bytes .../epy/uml_class_diagram_for_oauth2cl_31.gif | Bin 9624 -> 4351 bytes .../epy/uml_class_diagram_for_oauth2cl_32.gif | Bin 8402 -> 8158 bytes .../epy/uml_class_diagram_for_oauth2cl_33.gif | Bin 9823 -> 8862 bytes .../epy/uml_class_diagram_for_oauth2cl_34.gif | Bin 8888 -> 8262 bytes .../epy/uml_class_diagram_for_oauth2cl_35.gif | Bin 5129 -> 7190 bytes .../epy/uml_class_diagram_for_oauth2cl_36.gif | Bin 5008 -> 8391 bytes .../epy/uml_class_diagram_for_oauth2cl_37.gif | Bin 9241 -> 7591 bytes .../epy/uml_class_diagram_for_oauth2cl_38.gif | Bin 9868 -> 4458 bytes .../epy/uml_class_diagram_for_oauth2cl_39.gif | Bin 7996 -> 4329 bytes docs/epy/uml_class_diagram_for_oauth2cl_4.gif | Bin 2867 -> 2670 bytes .../epy/uml_class_diagram_for_oauth2cl_40.gif | Bin 13796 -> 8579 bytes .../epy/uml_class_diagram_for_oauth2cl_41.gif | Bin 8571 -> 8960 bytes .../epy/uml_class_diagram_for_oauth2cl_42.gif | Bin 9269 -> 7187 bytes .../epy/uml_class_diagram_for_oauth2cl_43.gif | Bin 9868 -> 17356 bytes .../epy/uml_class_diagram_for_oauth2cl_44.gif | Bin 5591 -> 7359 bytes .../epy/uml_class_diagram_for_oauth2cl_45.gif | Bin 4719 -> 7879 bytes .../epy/uml_class_diagram_for_oauth2cl_46.gif | Bin 7339 -> 8960 bytes .../epy/uml_class_diagram_for_oauth2cl_47.gif | Bin 8402 -> 5000 bytes .../epy/uml_class_diagram_for_oauth2cl_48.gif | Bin 9810 -> 4125 bytes .../epy/uml_class_diagram_for_oauth2cl_49.gif | Bin 2495 -> 6178 bytes docs/epy/uml_class_diagram_for_oauth2cl_5.gif | Bin 4362 -> 3812 bytes .../epy/uml_class_diagram_for_oauth2cl_50.gif | Bin 8226 -> 7190 bytes .../epy/uml_class_diagram_for_oauth2cl_51.gif | Bin 24682 -> 8463 bytes .../epy/uml_class_diagram_for_oauth2cl_52.gif | Bin 21761 -> 2317 bytes .../epy/uml_class_diagram_for_oauth2cl_53.gif | Bin 0 -> 7012 bytes .../epy/uml_class_diagram_for_oauth2cl_54.gif | Bin 0 -> 25395 bytes .../epy/uml_class_diagram_for_oauth2cl_55.gif | Bin 0 -> 20152 bytes .../epy/uml_class_diagram_for_oauth2cl_56.gif | Bin 0 -> 17786 bytes docs/epy/uml_class_diagram_for_oauth2cl_6.gif | Bin 2592 -> 2575 bytes docs/epy/uml_class_diagram_for_oauth2cl_7.gif | Bin 4684 -> 4085 bytes docs/epy/uml_class_diagram_for_oauth2cl_8.gif | Bin 9242 -> 7849 bytes docs/epy/uml_class_diagram_for_oauth2cl_9.gif | Bin 9070 -> 7713 bytes 157 files changed, 7580 insertions(+), 3498 deletions(-) create mode 100644 docs/epy/oauth2client.client.ApplicationDefaultCredentialsError-class.html create mode 100644 docs/epy/oauth2client.client.GoogleCredentials-class.html create mode 100644 docs/epy/oauth2client.client.OAuth2DeviceCodeError-class.html create mode 100644 docs/epy/oauth2client.service_account-module.html create mode 100644 docs/epy/oauth2client.service_account-pysrc.html create mode 100644 docs/epy/oauth2client.service_account._ServiceAccountCredentials-class.html create mode 100644 docs/epy/toc-oauth2client.service_account-module.html create mode 100644 docs/epy/uml_class_diagram_for_oauth2cl_53.gif create mode 100644 docs/epy/uml_class_diagram_for_oauth2cl_54.gif create mode 100644 docs/epy/uml_class_diagram_for_oauth2cl_55.gif create mode 100644 docs/epy/uml_class_diagram_for_oauth2cl_56.gif diff --git a/docs/epy/api-objects.txt b/docs/epy/api-objects.txt index 731b02f..6c5d3d5 100644 --- a/docs/epy/api-objects.txt +++ b/docs/epy/api-objects.txt @@ -1,6 +1,7 @@ oauth2client oauth2client-module.html oauth2client.GOOGLE_REVOKE_URI oauth2client-module.html#GOOGLE_REVOKE_URI oauth2client.GOOGLE_TOKEN_URI oauth2client-module.html#GOOGLE_TOKEN_URI +oauth2client.GOOGLE_DEVICE_URI oauth2client-module.html#GOOGLE_DEVICE_URI oauth2client.GOOGLE_AUTH_URI oauth2client-module.html#GOOGLE_AUTH_URI oauth2client.anyjson oauth2client.anyjson-module.html oauth2client.appengine oauth2client.appengine-module.html @@ -15,22 +16,36 @@ oauth2client.appengine.ndb oauth2client.appengine-module.html#ndb oauth2client.appengine.oauth2decorator_from_clientsecrets oauth2client.appengine-module.html#oauth2decorator_from_clientsecrets oauth2client.appengine._parse_state_value oauth2client.appengine-module.html#_parse_state_value oauth2client.client oauth2client.client-module.html +oauth2client.client._get_well_known_file oauth2client.client-module.html#_get_well_known_file oauth2client.client._extract_id_token oauth2client.client-module.html#_extract_id_token oauth2client.client.HAS_CRYPTO oauth2client.client-module.html#HAS_CRYPTO -oauth2client.client._cached_http oauth2client.client-module.html#_cached_http +oauth2client.client._get_environment oauth2client.client-module.html#_get_environment +oauth2client.client.AUTHORIZED_USER oauth2client.client-module.html#AUTHORIZED_USER +oauth2client.client._get_application_default_credential_GCE oauth2client.client-module.html#_get_application_default_credential_GCE +oauth2client.client._get_application_default_credential_from_file oauth2client.client-module.html#_get_application_default_credential_from_file +oauth2client.client._get_application_default_credential_GAE oauth2client.client-module.html#_get_application_default_credential_GAE oauth2client.client.ID_TOKEN_VERIFICATON_CERTS oauth2client.client-module.html#ID_TOKEN_VERIFICATON_CERTS -oauth2client.client.credentials_from_clientsecrets_and_code oauth2client.client-module.html#credentials_from_clientsecrets_and_code -oauth2client.client.flow_from_clientsecrets oauth2client.client-module.html#flow_from_clientsecrets +oauth2client.client.credentials_from_code oauth2client.client-module.html#credentials_from_code +oauth2client.client._raise_exception_for_missing_fields oauth2client.client-module.html#_raise_exception_for_missing_fields oauth2client.client._update_query_params oauth2client.client-module.html#_update_query_params oauth2client.client.EXPIRY_FORMAT oauth2client.client-module.html#EXPIRY_FORMAT oauth2client.client.logger oauth2client.client-module.html#logger +oauth2client.client._env_name oauth2client.client-module.html#_env_name +oauth2client.client.AccessTokenInfo oauth2client.client-module.html#AccessTokenInfo oauth2client.client._abstract oauth2client.client-module.html#_abstract oauth2client.client.clean_headers oauth2client.client-module.html#clean_headers +oauth2client.client._get_environment_variable_file oauth2client.client-module.html#_get_environment_variable_file oauth2client.client.OOB_CALLBACK_URN oauth2client.client-module.html#OOB_CALLBACK_URN +oauth2client.client._raise_exception_for_reading_json oauth2client.client-module.html#_raise_exception_for_reading_json oauth2client.client._parse_exchange_token_response oauth2client.client-module.html#_parse_exchange_token_response -oauth2client.client.credentials_from_code oauth2client.client-module.html#credentials_from_code +oauth2client.client.credentials_from_clientsecrets_and_code oauth2client.client-module.html#credentials_from_clientsecrets_and_code oauth2client.client.HAS_OPENSSL oauth2client.client-module.html#HAS_OPENSSL +oauth2client.client.GOOGLE_APPLICATION_CREDENTIALS oauth2client.client-module.html#GOOGLE_APPLICATION_CREDENTIALS +oauth2client.client._cached_http oauth2client.client-module.html#_cached_http oauth2client.client.verify_id_token oauth2client.client-module.html#verify_id_token +oauth2client.client.flow_from_clientsecrets oauth2client.client-module.html#flow_from_clientsecrets +oauth2client.client.save_to_well_known_file oauth2client.client-module.html#save_to_well_known_file +oauth2client.client.SERVICE_ACCOUNT oauth2client.client-module.html#SERVICE_ACCOUNT oauth2client.client._urlsafe_b64decode oauth2client.client-module.html#_urlsafe_b64decode oauth2client.client.REFRESH_STATUS_CODES oauth2client.client-module.html#REFRESH_STATUS_CODES oauth2client.clientsecrets oauth2client.clientsecrets-module.html @@ -82,6 +97,9 @@ oauth2client.multistore_file.get_credential_storage_custom_key oauth2client.mult oauth2client.old_run oauth2client.old_run-module.html oauth2client.old_run.run oauth2client.old_run-module.html#run oauth2client.old_run.FLAGS oauth2client.old_run-module.html#FLAGS +oauth2client.service_account oauth2client.service_account-module.html +oauth2client.service_account._urlsafe_b64encode oauth2client.service_account-module.html#_urlsafe_b64encode +oauth2client.service_account._get_private_key oauth2client.service_account-module.html#_get_private_key oauth2client.tools oauth2client.tools-module.html oauth2client.tools.argparser oauth2client.tools-module.html#argparser oauth2client.tools.run oauth2client.tools-module.html#run @@ -106,26 +124,33 @@ oauth2client.xsrfutil.DELIMITER oauth2client.xsrfutil-module.html#DELIMITER oauth2client.xsrfutil.generate_token oauth2client.xsrfutil-module.html#generate_token oauth2client.appengine.AppAssertionCredentials oauth2client.appengine.AppAssertionCredentials-class.html oauth2client.appengine.AppAssertionCredentials.from_json oauth2client.appengine.AppAssertionCredentials-class.html#from_json -oauth2client.client.OAuth2Credentials.authorize oauth2client.client.OAuth2Credentials-class.html#authorize +oauth2client.appengine.AppAssertionCredentials.serialization_data oauth2client.appengine.AppAssertionCredentials-class.html#serialization_data oauth2client.client.OAuth2Credentials.revoke oauth2client.client.OAuth2Credentials-class.html#revoke oauth2client.client.OAuth2Credentials.set_store oauth2client.client.OAuth2Credentials-class.html#set_store +oauth2client.client.OAuth2Credentials.authorize oauth2client.client.OAuth2Credentials-class.html#authorize oauth2client.client.OAuth2Credentials.to_json oauth2client.client.OAuth2Credentials-class.html#to_json oauth2client.client.OAuth2Credentials.apply oauth2client.client.OAuth2Credentials-class.html#apply oauth2client.client.Credentials.new_from_json oauth2client.client.Credentials-class.html#new_from_json oauth2client.appengine.AppAssertionCredentials.__init__ oauth2client.appengine.AppAssertionCredentials-class.html#__init__ oauth2client.client.OAuth2Credentials._generate_refresh_request_headers oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers oauth2client.client.Credentials._to_json oauth2client.client.Credentials-class.html#_to_json -oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS +oauth2client.client.AssertionCredentials._generate_assertion oauth2client.client.AssertionCredentials-class.html#_generate_assertion oauth2client.client.OAuth2Credentials.__getstate__ oauth2client.client.OAuth2Credentials-class.html#__getstate__ +oauth2client.client.GoogleCredentials.from_stream oauth2client.client.GoogleCredentials-class.html#from_stream oauth2client.client.OAuth2Credentials.__setstate__ oauth2client.client.OAuth2Credentials-class.html#__setstate__ +oauth2client.client.OAuth2Credentials._expires_in oauth2client.client.OAuth2Credentials-class.html#_expires_in oauth2client.appengine.AppAssertionCredentials._refresh oauth2client.appengine.AppAssertionCredentials-class.html#_refresh oauth2client.client.AssertionCredentials._revoke oauth2client.client.AssertionCredentials-class.html#_revoke -oauth2client.client.AssertionCredentials._generate_assertion oauth2client.client.AssertionCredentials-class.html#_generate_assertion +oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS +oauth2client.appengine.AppAssertionCredentials.create_scoped oauth2client.appengine.AppAssertionCredentials-class.html#create_scoped oauth2client.client.OAuth2Credentials._do_revoke oauth2client.client.OAuth2Credentials-class.html#_do_revoke oauth2client.client.AssertionCredentials._generate_refresh_request_body oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body +oauth2client.client.GoogleCredentials.get_application_default oauth2client.client.GoogleCredentials-class.html#get_application_default oauth2client.client.OAuth2Credentials._updateFromCredential oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential oauth2client.client.OAuth2Credentials._do_refresh_request oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request +oauth2client.appengine.AppAssertionCredentials.create_scoped_required oauth2client.appengine.AppAssertionCredentials-class.html#create_scoped_required oauth2client.client.OAuth2Credentials.refresh oauth2client.client.OAuth2Credentials-class.html#refresh +oauth2client.client.OAuth2Credentials.get_access_token oauth2client.client.OAuth2Credentials-class.html#get_access_token oauth2client.client.OAuth2Credentials.access_token_expired oauth2client.client.OAuth2Credentials-class.html#access_token_expired oauth2client.appengine.CredentialsModel oauth2client.appengine.CredentialsModel-class.html oauth2client.appengine.CredentialsModel.credentials oauth2client.appengine.CredentialsModel-class.html#credentials @@ -214,24 +239,27 @@ oauth2client.client.OAuth2Credentials.to_json oauth2client.client.OAuth2Credenti oauth2client.client.OAuth2Credentials.apply oauth2client.client.OAuth2Credentials-class.html#apply oauth2client.client.Credentials.new_from_json oauth2client.client.Credentials-class.html#new_from_json oauth2client.client.AccessTokenCredentials.__init__ oauth2client.client.AccessTokenCredentials-class.html#__init__ +oauth2client.client.OAuth2Credentials._generate_refresh_request_headers oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers oauth2client.client.Credentials._to_json oauth2client.client.Credentials-class.html#_to_json oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS oauth2client.client.OAuth2Credentials.__getstate__ oauth2client.client.OAuth2Credentials-class.html#__getstate__ oauth2client.client.OAuth2Credentials.__setstate__ oauth2client.client.OAuth2Credentials-class.html#__setstate__ +oauth2client.client.OAuth2Credentials._expires_in oauth2client.client.OAuth2Credentials-class.html#_expires_in oauth2client.client.AccessTokenCredentials._refresh oauth2client.client.AccessTokenCredentials-class.html#_refresh -oauth2client.client.OAuth2Credentials._generate_refresh_request_headers oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers oauth2client.client.AccessTokenCredentials._revoke oauth2client.client.AccessTokenCredentials-class.html#_revoke oauth2client.client.OAuth2Credentials._do_revoke oauth2client.client.OAuth2Credentials-class.html#_do_revoke oauth2client.client.OAuth2Credentials._generate_refresh_request_body oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_body oauth2client.client.OAuth2Credentials._updateFromCredential oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential oauth2client.client.OAuth2Credentials._do_refresh_request oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request oauth2client.client.OAuth2Credentials.refresh oauth2client.client.OAuth2Credentials-class.html#refresh +oauth2client.client.OAuth2Credentials.get_access_token oauth2client.client.OAuth2Credentials-class.html#get_access_token oauth2client.client.OAuth2Credentials.access_token_expired oauth2client.client.OAuth2Credentials-class.html#access_token_expired oauth2client.client.AccessTokenCredentialsError oauth2client.client.AccessTokenCredentialsError-class.html oauth2client.client.AccessTokenRefreshError oauth2client.client.AccessTokenRefreshError-class.html +oauth2client.client.ApplicationDefaultCredentialsError oauth2client.client.ApplicationDefaultCredentialsError-class.html oauth2client.client.AssertionCredentials oauth2client.client.AssertionCredentials-class.html -oauth2client.client.OAuth2Credentials.from_json oauth2client.client.OAuth2Credentials-class.html#from_json oauth2client.client.OAuth2Credentials.authorize oauth2client.client.OAuth2Credentials-class.html#authorize +oauth2client.client.GoogleCredentials.serialization_data oauth2client.client.GoogleCredentials-class.html#serialization_data oauth2client.client.OAuth2Credentials.revoke oauth2client.client.OAuth2Credentials-class.html#revoke oauth2client.client.OAuth2Credentials.set_store oauth2client.client.OAuth2Credentials-class.html#set_store oauth2client.client.OAuth2Credentials.to_json oauth2client.client.OAuth2Credentials-class.html#to_json @@ -240,17 +268,24 @@ oauth2client.client.Credentials.new_from_json oauth2client.client.Credentials-cl oauth2client.client.AssertionCredentials.__init__ oauth2client.client.AssertionCredentials-class.html#__init__ oauth2client.client.OAuth2Credentials._generate_refresh_request_headers oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers oauth2client.client.Credentials._to_json oauth2client.client.Credentials-class.html#_to_json -oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS +oauth2client.client.AssertionCredentials._generate_assertion oauth2client.client.AssertionCredentials-class.html#_generate_assertion oauth2client.client.OAuth2Credentials.__getstate__ oauth2client.client.OAuth2Credentials-class.html#__getstate__ +oauth2client.client.GoogleCredentials.from_stream oauth2client.client.GoogleCredentials-class.html#from_stream oauth2client.client.OAuth2Credentials.__setstate__ oauth2client.client.OAuth2Credentials-class.html#__setstate__ +oauth2client.client.OAuth2Credentials._expires_in oauth2client.client.OAuth2Credentials-class.html#_expires_in oauth2client.client.OAuth2Credentials._refresh oauth2client.client.OAuth2Credentials-class.html#_refresh oauth2client.client.AssertionCredentials._revoke oauth2client.client.AssertionCredentials-class.html#_revoke -oauth2client.client.AssertionCredentials._generate_assertion oauth2client.client.AssertionCredentials-class.html#_generate_assertion +oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS +oauth2client.client.GoogleCredentials.create_scoped oauth2client.client.GoogleCredentials-class.html#create_scoped oauth2client.client.OAuth2Credentials._do_revoke oauth2client.client.OAuth2Credentials-class.html#_do_revoke oauth2client.client.AssertionCredentials._generate_refresh_request_body oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body +oauth2client.client.GoogleCredentials.get_application_default oauth2client.client.GoogleCredentials-class.html#get_application_default oauth2client.client.OAuth2Credentials._updateFromCredential oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential oauth2client.client.OAuth2Credentials._do_refresh_request oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request +oauth2client.client.GoogleCredentials.create_scoped_required oauth2client.client.GoogleCredentials-class.html#create_scoped_required oauth2client.client.OAuth2Credentials.refresh oauth2client.client.OAuth2Credentials-class.html#refresh +oauth2client.client.OAuth2Credentials.get_access_token oauth2client.client.OAuth2Credentials-class.html#get_access_token +oauth2client.client.OAuth2Credentials.from_json oauth2client.client.OAuth2Credentials-class.html#from_json oauth2client.client.OAuth2Credentials.access_token_expired oauth2client.client.OAuth2Credentials-class.html#access_token_expired oauth2client.client.Credentials oauth2client.client.Credentials-class.html oauth2client.client.Credentials.authorize oauth2client.client.Credentials-class.html#authorize @@ -265,6 +300,35 @@ oauth2client.client.Credentials.refresh oauth2client.client.Credentials-class.ht oauth2client.client.Error oauth2client.client.Error-class.html oauth2client.client.Flow oauth2client.client.Flow-class.html oauth2client.client.FlowExchangeError oauth2client.client.FlowExchangeError-class.html +oauth2client.client.GoogleCredentials oauth2client.client.GoogleCredentials-class.html +oauth2client.client.OAuth2Credentials.authorize oauth2client.client.OAuth2Credentials-class.html#authorize +oauth2client.client.GoogleCredentials.serialization_data oauth2client.client.GoogleCredentials-class.html#serialization_data +oauth2client.client.OAuth2Credentials.revoke oauth2client.client.OAuth2Credentials-class.html#revoke +oauth2client.client.OAuth2Credentials.set_store oauth2client.client.OAuth2Credentials-class.html#set_store +oauth2client.client.OAuth2Credentials.to_json oauth2client.client.OAuth2Credentials-class.html#to_json +oauth2client.client.OAuth2Credentials.apply oauth2client.client.OAuth2Credentials-class.html#apply +oauth2client.client.Credentials.new_from_json oauth2client.client.Credentials-class.html#new_from_json +oauth2client.client.GoogleCredentials.__init__ oauth2client.client.GoogleCredentials-class.html#__init__ +oauth2client.client.OAuth2Credentials._generate_refresh_request_headers oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers +oauth2client.client.Credentials._to_json oauth2client.client.Credentials-class.html#_to_json +oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS +oauth2client.client.OAuth2Credentials.__getstate__ oauth2client.client.OAuth2Credentials-class.html#__getstate__ +oauth2client.client.GoogleCredentials.from_stream oauth2client.client.GoogleCredentials-class.html#from_stream +oauth2client.client.OAuth2Credentials.__setstate__ oauth2client.client.OAuth2Credentials-class.html#__setstate__ +oauth2client.client.OAuth2Credentials._expires_in oauth2client.client.OAuth2Credentials-class.html#_expires_in +oauth2client.client.OAuth2Credentials._refresh oauth2client.client.OAuth2Credentials-class.html#_refresh +oauth2client.client.OAuth2Credentials._revoke oauth2client.client.OAuth2Credentials-class.html#_revoke +oauth2client.client.GoogleCredentials.create_scoped oauth2client.client.GoogleCredentials-class.html#create_scoped +oauth2client.client.OAuth2Credentials._do_revoke oauth2client.client.OAuth2Credentials-class.html#_do_revoke +oauth2client.client.OAuth2Credentials._generate_refresh_request_body oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_body +oauth2client.client.GoogleCredentials.get_application_default oauth2client.client.GoogleCredentials-class.html#get_application_default +oauth2client.client.OAuth2Credentials._updateFromCredential oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential +oauth2client.client.OAuth2Credentials._do_refresh_request oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request +oauth2client.client.GoogleCredentials.create_scoped_required oauth2client.client.GoogleCredentials-class.html#create_scoped_required +oauth2client.client.OAuth2Credentials.refresh oauth2client.client.OAuth2Credentials-class.html#refresh +oauth2client.client.OAuth2Credentials.get_access_token oauth2client.client.OAuth2Credentials-class.html#get_access_token +oauth2client.client.OAuth2Credentials.from_json oauth2client.client.OAuth2Credentials-class.html#from_json +oauth2client.client.OAuth2Credentials.access_token_expired oauth2client.client.OAuth2Credentials-class.html#access_token_expired oauth2client.client.MemoryCache oauth2client.client.MemoryCache-class.html oauth2client.client.MemoryCache.set oauth2client.client.MemoryCache-class.html#set oauth2client.client.MemoryCache.get oauth2client.client.MemoryCache-class.html#get @@ -280,28 +344,34 @@ oauth2client.client.OAuth2Credentials.to_json oauth2client.client.OAuth2Credenti oauth2client.client.OAuth2Credentials.apply oauth2client.client.OAuth2Credentials-class.html#apply oauth2client.client.Credentials.new_from_json oauth2client.client.Credentials-class.html#new_from_json oauth2client.client.OAuth2Credentials.__init__ oauth2client.client.OAuth2Credentials-class.html#__init__ +oauth2client.client.OAuth2Credentials._generate_refresh_request_headers oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers oauth2client.client.Credentials._to_json oauth2client.client.Credentials-class.html#_to_json oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS oauth2client.client.OAuth2Credentials.__getstate__ oauth2client.client.OAuth2Credentials-class.html#__getstate__ oauth2client.client.OAuth2Credentials.__setstate__ oauth2client.client.OAuth2Credentials-class.html#__setstate__ +oauth2client.client.OAuth2Credentials._expires_in oauth2client.client.OAuth2Credentials-class.html#_expires_in oauth2client.client.OAuth2Credentials._refresh oauth2client.client.OAuth2Credentials-class.html#_refresh -oauth2client.client.OAuth2Credentials._generate_refresh_request_headers oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers oauth2client.client.OAuth2Credentials._revoke oauth2client.client.OAuth2Credentials-class.html#_revoke oauth2client.client.OAuth2Credentials._do_revoke oauth2client.client.OAuth2Credentials-class.html#_do_revoke oauth2client.client.OAuth2Credentials._generate_refresh_request_body oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_body oauth2client.client.OAuth2Credentials._updateFromCredential oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential oauth2client.client.OAuth2Credentials._do_refresh_request oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request oauth2client.client.OAuth2Credentials.refresh oauth2client.client.OAuth2Credentials-class.html#refresh +oauth2client.client.OAuth2Credentials.get_access_token oauth2client.client.OAuth2Credentials-class.html#get_access_token oauth2client.client.OAuth2Credentials.access_token_expired oauth2client.client.OAuth2Credentials-class.html#access_token_expired +oauth2client.client.OAuth2DeviceCodeError oauth2client.client.OAuth2DeviceCodeError-class.html oauth2client.client.OAuth2WebServerFlow oauth2client.client.OAuth2WebServerFlow-class.html +oauth2client.client.OAuth2WebServerFlow._extract_codes oauth2client.client.OAuth2WebServerFlow-class.html#_extract_codes +oauth2client.client.OAuth2WebServerFlow.step1_get_device_and_user_codes oauth2client.client.OAuth2WebServerFlow-class.html#step1_get_device_and_user_codes oauth2client.client.OAuth2WebServerFlow.step2_exchange oauth2client.client.OAuth2WebServerFlow-class.html#step2_exchange oauth2client.client.OAuth2WebServerFlow.step1_get_authorize_url oauth2client.client.OAuth2WebServerFlow-class.html#step1_get_authorize_url oauth2client.client.OAuth2WebServerFlow.__init__ oauth2client.client.OAuth2WebServerFlow-class.html#__init__ oauth2client.client.SignedJwtAssertionCredentials oauth2client.client.SignedJwtAssertionCredentials-class.html oauth2client.client.SignedJwtAssertionCredentials.from_json oauth2client.client.SignedJwtAssertionCredentials-class.html#from_json -oauth2client.client.OAuth2Credentials.authorize oauth2client.client.OAuth2Credentials-class.html#authorize +oauth2client.client.GoogleCredentials.serialization_data oauth2client.client.GoogleCredentials-class.html#serialization_data oauth2client.client.OAuth2Credentials.revoke oauth2client.client.OAuth2Credentials-class.html#revoke oauth2client.client.OAuth2Credentials.set_store oauth2client.client.OAuth2Credentials-class.html#set_store +oauth2client.client.OAuth2Credentials.authorize oauth2client.client.OAuth2Credentials-class.html#authorize oauth2client.client.OAuth2Credentials.to_json oauth2client.client.OAuth2Credentials-class.html#to_json oauth2client.client.OAuth2Credentials.apply oauth2client.client.OAuth2Credentials-class.html#apply oauth2client.client.Credentials.new_from_json oauth2client.client.Credentials-class.html#new_from_json @@ -311,15 +381,21 @@ oauth2client.client.Credentials._to_json oauth2client.client.Credentials-class.h oauth2client.client.SignedJwtAssertionCredentials.MAX_TOKEN_LIFETIME_SECS oauth2client.client.SignedJwtAssertionCredentials-class.html#MAX_TOKEN_LIFETIME_SECS oauth2client.client.SignedJwtAssertionCredentials._generate_assertion oauth2client.client.SignedJwtAssertionCredentials-class.html#_generate_assertion oauth2client.client.OAuth2Credentials.__getstate__ oauth2client.client.OAuth2Credentials-class.html#__getstate__ +oauth2client.client.GoogleCredentials.from_stream oauth2client.client.GoogleCredentials-class.html#from_stream oauth2client.client.OAuth2Credentials.__setstate__ oauth2client.client.OAuth2Credentials-class.html#__setstate__ +oauth2client.client.OAuth2Credentials._expires_in oauth2client.client.OAuth2Credentials-class.html#_expires_in oauth2client.client.OAuth2Credentials._refresh oauth2client.client.OAuth2Credentials-class.html#_refresh oauth2client.client.AssertionCredentials._revoke oauth2client.client.AssertionCredentials-class.html#_revoke oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS +oauth2client.client.GoogleCredentials.create_scoped oauth2client.client.GoogleCredentials-class.html#create_scoped oauth2client.client.OAuth2Credentials._do_revoke oauth2client.client.OAuth2Credentials-class.html#_do_revoke oauth2client.client.AssertionCredentials._generate_refresh_request_body oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body +oauth2client.client.GoogleCredentials.get_application_default oauth2client.client.GoogleCredentials-class.html#get_application_default oauth2client.client.OAuth2Credentials._updateFromCredential oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential oauth2client.client.OAuth2Credentials._do_refresh_request oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request +oauth2client.client.GoogleCredentials.create_scoped_required oauth2client.client.GoogleCredentials-class.html#create_scoped_required oauth2client.client.OAuth2Credentials.refresh oauth2client.client.OAuth2Credentials-class.html#refresh +oauth2client.client.OAuth2Credentials.get_access_token oauth2client.client.OAuth2Credentials-class.html#get_access_token oauth2client.client.OAuth2Credentials.access_token_expired oauth2client.client.OAuth2Credentials-class.html#access_token_expired oauth2client.client.Storage oauth2client.client.Storage-class.html oauth2client.client.Storage.acquire_lock oauth2client.client.Storage-class.html#acquire_lock @@ -373,26 +449,33 @@ oauth2client.file.Storage.release_lock oauth2client.file.Storage-class.html#rele oauth2client.client.Storage.delete oauth2client.client.Storage-class.html#delete oauth2client.gce.AppAssertionCredentials oauth2client.gce.AppAssertionCredentials-class.html oauth2client.gce.AppAssertionCredentials.from_json oauth2client.gce.AppAssertionCredentials-class.html#from_json -oauth2client.client.OAuth2Credentials.authorize oauth2client.client.OAuth2Credentials-class.html#authorize +oauth2client.gce.AppAssertionCredentials.serialization_data oauth2client.gce.AppAssertionCredentials-class.html#serialization_data oauth2client.client.OAuth2Credentials.revoke oauth2client.client.OAuth2Credentials-class.html#revoke oauth2client.client.OAuth2Credentials.set_store oauth2client.client.OAuth2Credentials-class.html#set_store +oauth2client.client.OAuth2Credentials.authorize oauth2client.client.OAuth2Credentials-class.html#authorize oauth2client.client.OAuth2Credentials.to_json oauth2client.client.OAuth2Credentials-class.html#to_json oauth2client.client.OAuth2Credentials.apply oauth2client.client.OAuth2Credentials-class.html#apply oauth2client.client.Credentials.new_from_json oauth2client.client.Credentials-class.html#new_from_json oauth2client.gce.AppAssertionCredentials.__init__ oauth2client.gce.AppAssertionCredentials-class.html#__init__ oauth2client.client.OAuth2Credentials._generate_refresh_request_headers oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers oauth2client.client.Credentials._to_json oauth2client.client.Credentials-class.html#_to_json -oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS +oauth2client.client.AssertionCredentials._generate_assertion oauth2client.client.AssertionCredentials-class.html#_generate_assertion oauth2client.client.OAuth2Credentials.__getstate__ oauth2client.client.OAuth2Credentials-class.html#__getstate__ +oauth2client.client.GoogleCredentials.from_stream oauth2client.client.GoogleCredentials-class.html#from_stream oauth2client.client.OAuth2Credentials.__setstate__ oauth2client.client.OAuth2Credentials-class.html#__setstate__ +oauth2client.client.OAuth2Credentials._expires_in oauth2client.client.OAuth2Credentials-class.html#_expires_in oauth2client.gce.AppAssertionCredentials._refresh oauth2client.gce.AppAssertionCredentials-class.html#_refresh oauth2client.client.AssertionCredentials._revoke oauth2client.client.AssertionCredentials-class.html#_revoke -oauth2client.client.AssertionCredentials._generate_assertion oauth2client.client.AssertionCredentials-class.html#_generate_assertion +oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS +oauth2client.gce.AppAssertionCredentials.create_scoped oauth2client.gce.AppAssertionCredentials-class.html#create_scoped oauth2client.client.OAuth2Credentials._do_revoke oauth2client.client.OAuth2Credentials-class.html#_do_revoke oauth2client.client.AssertionCredentials._generate_refresh_request_body oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body +oauth2client.client.GoogleCredentials.get_application_default oauth2client.client.GoogleCredentials-class.html#get_application_default oauth2client.client.OAuth2Credentials._updateFromCredential oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential oauth2client.client.OAuth2Credentials._do_refresh_request oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request +oauth2client.gce.AppAssertionCredentials.create_scoped_required oauth2client.gce.AppAssertionCredentials-class.html#create_scoped_required oauth2client.client.OAuth2Credentials.refresh oauth2client.client.OAuth2Credentials-class.html#refresh +oauth2client.client.OAuth2Credentials.get_access_token oauth2client.client.OAuth2Credentials-class.html#get_access_token oauth2client.client.OAuth2Credentials.access_token_expired oauth2client.client.OAuth2Credentials-class.html#access_token_expired oauth2client.keyring_storage.Storage oauth2client.keyring_storage.Storage-class.html oauth2client.keyring_storage.Storage.acquire_lock oauth2client.keyring_storage.Storage-class.html#acquire_lock @@ -456,6 +539,39 @@ oauth2client.client.Storage.get oauth2client.client.Storage-class.html#get oauth2client.client.Storage.put oauth2client.client.Storage-class.html#put oauth2client.multistore_file._MultiStore._Storage.release_lock oauth2client.multistore_file._MultiStore._Storage-class.html#release_lock oauth2client.client.Storage.delete oauth2client.client.Storage-class.html#delete +oauth2client.service_account._ServiceAccountCredentials oauth2client.service_account._ServiceAccountCredentials-class.html +oauth2client.client.OAuth2Credentials.authorize oauth2client.client.OAuth2Credentials-class.html#authorize +oauth2client.service_account._ServiceAccountCredentials.serialization_data oauth2client.service_account._ServiceAccountCredentials-class.html#serialization_data +oauth2client.client.OAuth2Credentials.revoke oauth2client.client.OAuth2Credentials-class.html#revoke +oauth2client.client.OAuth2Credentials.set_store oauth2client.client.OAuth2Credentials-class.html#set_store +oauth2client.client.OAuth2Credentials.to_json oauth2client.client.OAuth2Credentials-class.html#to_json +oauth2client.client.OAuth2Credentials.apply oauth2client.client.OAuth2Credentials-class.html#apply +oauth2client.client.Credentials.new_from_json oauth2client.client.Credentials-class.html#new_from_json +oauth2client.service_account._ServiceAccountCredentials.__init__ oauth2client.service_account._ServiceAccountCredentials-class.html#__init__ +oauth2client.client.OAuth2Credentials._generate_refresh_request_headers oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers +oauth2client.client.Credentials._to_json oauth2client.client.Credentials-class.html#_to_json +oauth2client.service_account._ServiceAccountCredentials.MAX_TOKEN_LIFETIME_SECS oauth2client.service_account._ServiceAccountCredentials-class.html#MAX_TOKEN_LIFETIME_SECS +oauth2client.service_account._ServiceAccountCredentials.service_account_email oauth2client.service_account._ServiceAccountCredentials-class.html#service_account_email +oauth2client.service_account._ServiceAccountCredentials._generate_assertion oauth2client.service_account._ServiceAccountCredentials-class.html#_generate_assertion +oauth2client.client.OAuth2Credentials.__getstate__ oauth2client.client.OAuth2Credentials-class.html#__getstate__ +oauth2client.client.GoogleCredentials.from_stream oauth2client.client.GoogleCredentials-class.html#from_stream +oauth2client.client.OAuth2Credentials.__setstate__ oauth2client.client.OAuth2Credentials-class.html#__setstate__ +oauth2client.client.OAuth2Credentials._expires_in oauth2client.client.OAuth2Credentials-class.html#_expires_in +oauth2client.client.OAuth2Credentials._refresh oauth2client.client.OAuth2Credentials-class.html#_refresh +oauth2client.client.OAuth2Credentials._updateFromCredential oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential +oauth2client.client.AssertionCredentials._revoke oauth2client.client.AssertionCredentials-class.html#_revoke +oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS +oauth2client.service_account._ServiceAccountCredentials.create_scoped oauth2client.service_account._ServiceAccountCredentials-class.html#create_scoped +oauth2client.client.OAuth2Credentials._do_revoke oauth2client.client.OAuth2Credentials-class.html#_do_revoke +oauth2client.client.AssertionCredentials._generate_refresh_request_body oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body +oauth2client.client.GoogleCredentials.get_application_default oauth2client.client.GoogleCredentials-class.html#get_application_default +oauth2client.service_account._ServiceAccountCredentials.sign_blob oauth2client.service_account._ServiceAccountCredentials-class.html#sign_blob +oauth2client.client.OAuth2Credentials._do_refresh_request oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request +oauth2client.service_account._ServiceAccountCredentials.create_scoped_required oauth2client.service_account._ServiceAccountCredentials-class.html#create_scoped_required +oauth2client.client.OAuth2Credentials.refresh oauth2client.client.OAuth2Credentials-class.html#refresh +oauth2client.client.OAuth2Credentials.get_access_token oauth2client.client.OAuth2Credentials-class.html#get_access_token +oauth2client.client.OAuth2Credentials.from_json oauth2client.client.OAuth2Credentials-class.html#from_json +oauth2client.client.OAuth2Credentials.access_token_expired oauth2client.client.OAuth2Credentials-class.html#access_token_expired oauth2client.tools.ClientRedirectHandler oauth2client.tools.ClientRedirectHandler-class.html oauth2client.tools.ClientRedirectHandler.do_GET oauth2client.tools.ClientRedirectHandler-class.html#do_GET oauth2client.tools.ClientRedirectHandler.log_message oauth2client.tools.ClientRedirectHandler-class.html#log_message diff --git a/docs/epy/class-tree.html b/docs/epy/class-tree.html index 8b029a0..680bc39 100644 --- a/docs/epy/class-tree.html +++ b/docs/epy/class-tree.html @@ -104,10 +104,10 @@
  • oauth2client.clientsecrets.Error: Base error for this module.
  • -
  • oauth2client.multistore_file.Error: +
  • oauth2client.client.Error: Base error for this module.
  • -
  • oauth2client.client.Error: +
  • oauth2client.multistore_file.Error: Base error for this module.
  • oauth2client.appengine.InvalidClientSecretsError: @@ -173,7 +173,7 @@ - + - @@ -341,25 +373,33 @@ - + + + + + + - + - @@ -367,22 +407,24 @@ (in oauth2client.multistore_file) + + + + + - - - - - - +
    @@ -535,26 +577,32 @@ make_signed_jwt()
    (in oauth2client.crypt) -MAX_TOKEN_LIFETIME_SECS
    -(in SignedJwtAssertionCredentials) -message_if_missing()
    -(in oauth2client.tools) - - -make_value_from_datastore()
    -(in CredentialsProperty) MAX_TOKEN_LIFETIME_SECS
    (in oauth2client.crypt) META
    (in oauth2client.gce) +make_value_from_datastore()
    +(in CredentialsProperty) +MAX_TOKEN_LIFETIME_SECS
    +(in _ServiceAccountCredentials) +multistore_file
    +(in oauth2client) + + make_value_from_datastore()
    (in FlowProperty) MemoryCache
    (in oauth2client.client) -multistore_file
    -(in oauth2client) +  + + +MAX_TOKEN_LIFETIME_SECS
    +(in SignedJwtAssertionCredentials) +message_if_missing()
    +(in oauth2client.tools) +  @@ -583,29 +631,37 @@ + + + + + - + - + - @@ -613,19 +669,12 @@ (in oauth2client.crypt) - - - - - -

    P

    @@ -710,53 +759,83 @@ + + + + + - - + - - + + - + + + + + + - - + + - - + + - - + + + + + + + + + + + +

    T

    @@ -856,89 +935,97 @@ __getstate__()
    (in OAuth2Credentials) -_decode_credential_from_json()
    -(in _MultiStore) -_parse_exchange_token_response()
    -(in oauth2client.client) +_display_error_message()
    +(in OAuth2Decorator) +_multistores
    +(in oauth2client.multistore_file) __init__()
    (in AppAssertionCredentials) -_delete_credential()
    -(in _MultiStore) -_parse_pem_key()
    -(in oauth2client.crypt) +_do_refresh_request()
    +(in OAuth2Credentials) +_multistores_lock
    +(in oauth2client.multistore_file) __init__()
    (in OAuth2Decorator) -_delete_entity()
    -(in StorageByKeyName) -_parse_state_value()
    -(in oauth2client.appengine) +_do_revoke()
    +(in OAuth2Credentials) +_Opener
    +(in oauth2client.locked_file) __init__()
    (in OAuth2DecoratorFromClientSecrets) -_display_error_message()
    -(in OAuth2Decorator) -_posix_lockfile()
    -(in _PosixOpener) +_env_name
    +(in oauth2client.client) +_parse_exchange_token_response()
    +(in oauth2client.client) __init__()
    (in StorageByKeyName) -_do_refresh_request()
    +_expires_in()
    (in OAuth2Credentials) -_PosixOpener
    -(in oauth2client.locked_file) +_parse_pem_key()
    +(in oauth2client.crypt) __init__()
    (in AccessTokenCredentials) -_do_revoke()
    -(in OAuth2Credentials) -_refresh()
    -(in AppAssertionCredentials) +_extract_codes()
    +(in OAuth2WebServerFlow) +_parse_state_value()
    +(in oauth2client.appengine) __init__()
    (in AssertionCredentials) _extract_id_token()
    (in oauth2client.client) -_refresh()
    -(in AccessTokenCredentials) +_posix_lockfile()
    +(in _PosixOpener) + + +__init__()
    +(in GoogleCredentials) +_FcntlOpener
    +(in oauth2client.locked_file) +_PosixOpener
    +(in oauth2client.locked_file) __init__()
    (in MemoryCache) -_FcntlOpener
    -(in oauth2client.locked_file) -_refresh()
    -(in OAuth2Credentials) +_from_base_type()
    +(in CredentialsNDBProperty) +_raise_exception_for_missing_fields()
    +(in oauth2client.client) __init__()
    (in OAuth2Credentials) -_from_base_type()
    -(in CredentialsNDBProperty) -_refresh()
    -(in AppAssertionCredentials) +_generate_assertion()
    +(in AssertionCredentials) +_raise_exception_for_reading_json()
    +(in oauth2client.client) __init__()
    (in OAuth2WebServerFlow) -_generate_assertion()
    -(in AssertionCredentials) -_refresh_data_cache()
    -(in _MultiStore) +_generate_assertion()
    +(in SignedJwtAssertionCredentials) +_refresh()
    +(in AppAssertionCredentials) __init__()
    (in SignedJwtAssertionCredentials) -_generate_assertion()
    -(in SignedJwtAssertionCredentials) -_revoke()
    +_generate_assertion()
    +(in _ServiceAccountCredentials) +_refresh()
    (in AccessTokenCredentials) @@ -946,167 +1033,201 @@ (in CredentialsField) _generate_new_xsrf_secret_key()
    (in oauth2client.appengine) -_revoke()
    -(in AssertionCredentials) +_refresh()
    +(in OAuth2Credentials) __init__()
    (in FlowField) _generate_refresh_request_body()
    (in AssertionCredentials) -_revoke()
    -(in OAuth2Credentials) +_refresh()
    +(in AppAssertionCredentials) __init__()
    (in Storage) _generate_refresh_request_body()
    (in OAuth2Credentials) -_safe_html()
    -(in oauth2client.appengine) +_refresh_data_cache()
    +(in _MultiStore) __init__()
    (in Storage) _generate_refresh_request_headers()
    (in OAuth2Credentials) -_Storage
    -(in _MultiStore) +_revoke()
    +(in AccessTokenCredentials) __init__()
    (in AppAssertionCredentials) _get_all_credential_keys()
    (in _MultiStore) -_to_base_type()
    -(in CredentialsNDBProperty) +_revoke()
    +(in AssertionCredentials) __init__()
    (in Storage) -_get_credential()
    -(in _MultiStore) -_to_json()
    -(in Credentials) +_get_application_default_credential_from_file()
    +(in oauth2client.client) +_revoke()
    +(in OAuth2Credentials) __init__()
    (in LockedFile) -_get_entity()
    -(in StorageByKeyName) -_unlock()
    -(in _MultiStore) +_get_application_default_credential_GAE()
    +(in oauth2client.client) +_safe_html()
    +(in oauth2client.appengine) __init__()
    (in _Opener) +_get_application_default_credential_GCE()
    +(in oauth2client.client) +_ServiceAccountCredentials
    +(in oauth2client.service_account) + + +__init__()
    +(in _Storage) +_get_credential()
    +(in _MultiStore) +_Storage
    +(in _MultiStore) + + +__init__()
    +(in _MultiStore) +_get_entity()
    +(in StorageByKeyName) +_to_base_type()
    +(in CredentialsNDBProperty) + + +__init__()
    +(in _ServiceAccountCredentials) +_get_environment()
    +(in oauth2client.client) +_to_json()
    +(in Credentials) + + +__metaclass__
    +(in CredentialsField) +_get_environment_variable_file()
    +(in oauth2client.client) +_unlock()
    +(in _MultiStore) + + +__metaclass__
    +(in FlowField) _get_kind()
    (in CredentialsNDBModel) _update_credential()
    (in _MultiStore) -__init__()
    -(in _Storage) +__setstate__()
    +(in OAuth2Credentials) _get_kind()
    (in SiteXsrfSecretKeyNDB) _update_query_params()
    (in oauth2client.client) -__init__()
    -(in _MultiStore) +_abstract()
    +(in oauth2client.client) _get_multistore()
    (in oauth2client.multistore_file) _updateFromCredential()
    (in OAuth2Credentials) -__metaclass__
    -(in CredentialsField) -_get_storage()
    -(in _MultiStore) +_add_query_parameter()
    +(in oauth2client.util) +_get_private_key()
    +(in oauth2client.service_account) _urlsafe_b64decode()
    (in oauth2client.client) -__metaclass__
    -(in FlowField) -_is_ndb()
    -(in StorageByKeyName) +_build_state_value()
    +(in oauth2client.appengine) +_get_storage()
    +(in _MultiStore) _urlsafe_b64decode()
    (in oauth2client.crypt) -__setstate__()
    -(in OAuth2Credentials) -_json_encode()
    -(in oauth2client.crypt) +_cached_http
    +(in oauth2client.client) +_get_well_known_file()
    +(in oauth2client.client) _urlsafe_b64encode()
    (in oauth2client.crypt) -_abstract()
    -(in oauth2client.client) -_loadfile()
    -(in oauth2client.clientsecrets) +_CLIENT_SECRETS_MESSAGE
    +(in oauth2client.tools) +_is_ndb()
    +(in StorageByKeyName) +_urlsafe_b64encode()
    +(in oauth2client.service_account) + + +_create_file_if_needed()
    +(in Storage) +_json_encode()
    +(in oauth2client.crypt) _validate()
    (in CredentialsNDBProperty) -_add_query_parameter()
    -(in oauth2client.util) -_lock()
    +_create_file_if_needed()
    (in _MultiStore) +_loadfile()
    +(in oauth2client.clientsecrets) _validate()
    (in FlowNDBProperty) -_build_state_value()
    -(in oauth2client.appengine) -_locked_json_read()
    +_create_flow()
    +(in OAuth2Decorator) +_lock()
    (in _MultiStore) _validate_clientsecrets()
    (in oauth2client.clientsecrets) -_cached_http
    -(in oauth2client.client) -_locked_json_write()
    +_decode_credential_from_json()
    +(in _MultiStore) +_locked_json_read()
    (in _MultiStore) _validate_file()
    (in Storage) -_CLIENT_SECRETS_MESSAGE
    -(in oauth2client.tools) -_MultiStore
    -(in oauth2client.multistore_file) +_delete_credential()
    +(in _MultiStore) +_locked_json_write()
    +(in _MultiStore) _Win32Opener
    (in oauth2client.locked_file) -_create_file_if_needed()
    -(in Storage) -_multistores
    +_delete_entity()
    +(in StorageByKeyName) +_MultiStore
    (in oauth2client.multistore_file) _write()
    (in _MultiStore) - -_create_file_if_needed()
    -(in _MultiStore) -_multistores_lock
    -(in oauth2client.multistore_file) -  - - -_create_flow()
    -(in OAuth2Decorator) -_Opener
    -(in oauth2client.locked_file) -  - @@ -1136,7 +1257,7 @@