imported patch docs
diff --git a/docs/epy/oauth2client.appengine-pysrc.html b/docs/epy/oauth2client.appengine-pysrc.html
index b7f00b2..de55125 100644
--- a/docs/epy/oauth2client.appengine-pysrc.html
+++ b/docs/epy/oauth2client.appengine-pysrc.html
@@ -130,7 +130,7 @@
<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-name">scope</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">scope</tt><tt class="py-op">)</tt> </tt>
<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt> <tt class="py-op">=</tt> <tt class="py-name">scope</tt> </tt>
<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> </tt>
-<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-26" class="py-name" targets="Class oauth2client.appengine.AppAssertionCredentials=oauth2client.appengine.AppAssertionCredentials-class.html"><a title="oauth2client.appengine.AppAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-26', 'AppAssertionCredentials', 'link-26');">AppAssertionCredentials</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name" targets="Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.crypt.Signer.__init__()=oauth2client.crypt.Signer-class.html#__init__,Method oauth2client.crypt.Verifier.__init__()=oauth2client.crypt.Verifier-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.errors.BatchError.__init__
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-26" class="py-name" targets="Class oauth2client.appengine.AppAssertionCredentials=oauth2client.appengine.AppAssertionCredentials-class.html"><a title="oauth2client.appengine.AppAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-26', 'AppAssertionCredentials', 'link-26');">AppAssertionCredentials</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name" targets="Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.crypt.Signer.__init__()=oauth2client.crypt.Signer-class.html#__init__,Method oauth2client.crypt.Verifier.__init__()=oauth2client.crypt.Verifier-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.errors.BatchError.__init__
apiclient.errors.HttpError.__init__
apiclient.errors.UnexpectedBodyError.__init__
apiclient.errors.UnexpectedMethodError.__init__
@@ -141,6 +141,7 @@
apiclient.http.HttpRequestMock.__init__
apiclient.http.MediaFileUpload.__init__
apiclient.http.MediaInMemoryUpload.__init__
+apiclient.http.MediaIoBaseUpload.__init__
apiclient.http.MediaUploadProgress.__init__
apiclient.http.RequestMockBuilder.__init__
apiclient.model.JsonModel.__init__
@@ -161,6 +162,8 @@
oauth2client.crypt.Verifier.__init__
oauth2client.django_orm.Storage.__init__
oauth2client.file.Storage.__init__
+oauth2client.locked_file.LockedFile.__init__
+oauth2client.locked_file._Opener.__init__
oauth2client.multistore_file._MultiStore._Storage.__init__
oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-27', '__init__', 'link-27');">__init__</a></tt><tt class="py-op">(</tt> </tt>
<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
@@ -249,9 +252,10 @@
<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">cred</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"> <tt class="py-name">cred</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-name">cred</tt> <tt class="py-op">=</tt> <tt class="py-name">cred</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method apiclient.http.HttpRequest.to_json()=apiclient.http.HttpRequest-class.html#to_json,Method apiclient.http.MediaFileUpload.to_json()=apiclient.http.MediaFileUpload-class.html#to_json,Method apiclient.http.MediaInMemoryUpload.to_json()=apiclient.http.MediaInMemoryUpload-class.html#to_json,Method apiclient.http.MediaUpload.to_json()=apiclient.http.MediaUpload-class.html#to_json,Method oauth2client.client.Credentials.to_json()=oauth2client.client.Credentials-class.html#to_json,Method oauth2client.client.OAuth2Credentials.to_json()=oauth2client.client.OAuth2Credentials-class.html#to_json"><a title="apiclient.http.HttpRequest.to_json
+<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-name">cred</tt> <tt class="py-op">=</tt> <tt class="py-name">cred</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method apiclient.http.HttpRequest.to_json()=apiclient.http.HttpRequest-class.html#to_json,Method apiclient.http.MediaFileUpload.to_json()=apiclient.http.MediaFileUpload-class.html#to_json,Method apiclient.http.MediaInMemoryUpload.to_json()=apiclient.http.MediaInMemoryUpload-class.html#to_json,Method apiclient.http.MediaIoBaseUpload.to_json()=apiclient.http.MediaIoBaseUpload-class.html#to_json,Method apiclient.http.MediaUpload.to_json()=apiclient.http.MediaUpload-class.html#to_json,Method oauth2client.client.Credentials.to_json()=oauth2client.client.Credentials-class.html#to_json,Method oauth2client.client.OAuth2Credentials.to_json()=oauth2client.client.OAuth2Credentials-class.html#to_json"><a title="apiclient.http.HttpRequest.to_json
apiclient.http.MediaFileUpload.to_json
apiclient.http.MediaInMemoryUpload.to_json
+apiclient.http.MediaIoBaseUpload.to_json
apiclient.http.MediaUpload.to_json
oauth2client.client.Credentials.to_json
oauth2client.client.OAuth2Credentials.to_json" class="py-name" href="#" onclick="return doclink('link-42', 'to_json', 'link-42');">to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
@@ -333,6 +337,7 @@
<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name" targets="Method oauth2client.client.MemoryCache.set()=oauth2client.client.MemoryCache-class.html#set"><a title="oauth2client.client.MemoryCache.set" class="py-name" href="#" onclick="return doclink('link-56', 'set', 'link-56');">set</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">,</tt> <tt class="py-name">credential</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="apiclient.http.HttpRequest.to_json
apiclient.http.MediaFileUpload.to_json
apiclient.http.MediaInMemoryUpload.to_json
+apiclient.http.MediaIoBaseUpload.to_json
apiclient.http.MediaUpload.to_json
oauth2client.client.Credentials.to_json
oauth2client.client.OAuth2Credentials.to_json" class="py-name" href="#" onclick="return doclink('link-57', 'to_json', 'link-42');">to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
@@ -352,6 +357,7 @@
<a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name"><a title="oauth2client.client.MemoryCache.set" class="py-name" href="#" onclick="return doclink('link-60', 'set', 'link-56');">set</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">,</tt> <tt id="link-61" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials" class="py-name" href="#" onclick="return doclink('link-61', 'credentials', 'link-43');">credentials</a></tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="apiclient.http.HttpRequest.to_json
apiclient.http.MediaFileUpload.to_json
apiclient.http.MediaInMemoryUpload.to_json
+apiclient.http.MediaIoBaseUpload.to_json
apiclient.http.MediaUpload.to_json
oauth2client.client.Credentials.to_json
oauth2client.client.OAuth2Credentials.to_json" class="py-name" href="#" onclick="return doclink('link-62', 'to_json', 'link-42');">to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
@@ -599,12 +605,13 @@
<a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"><tt class="py-docstring"> decorator.</tt> </tt>
<a name="L457"></a><tt class="py-lineno">457</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
<a name="L458"></a><tt class="py-lineno">458</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"> <tt class="py-name">client_type</tt><tt class="py-op">,</tt> <tt class="py-name">client_info</tt> <tt class="py-op">=</tt> <tt id="link-98" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-98', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-99" class="py-name" targets="Function oauth2client.clientsecrets.loadfile()=oauth2client.clientsecrets-module.html#loadfile"><a title="oauth2client.clientsecrets.loadfile" class="py-name" href="#" onclick="return doclink('link-99', 'loadfile', 'link-99');">loadfile</a></tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">)</tt> </tt>
-<a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client_type</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt id="link-100" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-100', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-101" class="py-name" targets="Variable oauth2client.clientsecrets.TYPE_WEB=oauth2client.clientsecrets-module.html#TYPE_WEB"><a title="oauth2client.clientsecrets.TYPE_WEB" class="py-name" href="#" onclick="return doclink('link-101', 'TYPE_WEB', 'link-101');">TYPE_WEB</a></tt><tt class="py-op">,</tt> <tt id="link-102" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-102', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-103" class="py-name" targets="Variable oauth2client.clientsecrets.TYPE_INSTALLED=oauth2client.clientsecrets-module.html#TYPE_INSTALLED"><a title="oauth2client.clientsecrets.TYPE_INSTALLED" class="py-name" href="#" onclick="return doclink('link-103', 'TYPE_INSTALLED', 'link-103');">TYPE_INSTALLED</a></tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-104" class="py-name" targets="Class oauth2client.appengine.InvalidClientSecretsError=oauth2client.appengine.InvalidClientSecretsError-class.html,Class oauth2client.clientsecrets.InvalidClientSecretsError=oauth2client.clientsecrets.InvalidClientSecretsError-class.html"><a title="oauth2client.appengine.InvalidClientSecretsError
-oauth2client.clientsecrets.InvalidClientSecretsError" class="py-name" href="#" onclick="return doclink('link-104', 'InvalidClientSecretsError', 'link-104');">InvalidClientSecretsError</a></tt><tt class="py-op">(</tt><tt class="py-string">'OAuth2Decorator doesn\'t support this OAuth 2.0 flow.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-105" class="py-name" targets="Class oauth2client.appengine.OAuth2DecoratorFromClientSecrets=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html"><a title="oauth2client.appengine.OAuth2DecoratorFromClientSecrets" class="py-name" href="#" onclick="return doclink('link-105', 'OAuth2DecoratorFromClientSecrets', 'link-105');">OAuth2DecoratorFromClientSecrets</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name"><a title="apiclient.errors.BatchError.__init__
+<a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"> <tt class="py-name">client_type</tt><tt class="py-op">,</tt> <tt class="py-name">client_info</tt> <tt class="py-op">=</tt> <tt id="link-98" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-98', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-99" class="py-name" targets="Function oauth2client.clientsecrets.loadfile()=oauth2client.clientsecrets-module.html#loadfile"><a title="oauth2client.clientsecrets.loadfile" class="py-name" href="#" onclick="return doclink('link-99', 'loadfile', 'link-99');">loadfile</a></tt><tt class="py-op">(</tt><tt id="link-100" class="py-name" targets="Method oauth2client.locked_file.LockedFile.filename()=oauth2client.locked_file.LockedFile-class.html#filename,Method oauth2client.locked_file._Opener.filename()=oauth2client.locked_file._Opener-class.html#filename"><a title="oauth2client.locked_file.LockedFile.filename
+oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-100', 'filename', 'link-100');">filename</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">client_type</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt id="link-101" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-101', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-102" class="py-name" targets="Variable oauth2client.clientsecrets.TYPE_WEB=oauth2client.clientsecrets-module.html#TYPE_WEB"><a title="oauth2client.clientsecrets.TYPE_WEB" class="py-name" href="#" onclick="return doclink('link-102', 'TYPE_WEB', 'link-102');">TYPE_WEB</a></tt><tt class="py-op">,</tt> <tt id="link-103" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-103', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-104" class="py-name" targets="Variable oauth2client.clientsecrets.TYPE_INSTALLED=oauth2client.clientsecrets-module.html#TYPE_INSTALLED"><a title="oauth2client.clientsecrets.TYPE_INSTALLED" class="py-name" href="#" onclick="return doclink('link-104', 'TYPE_INSTALLED', 'link-104');">TYPE_INSTALLED</a></tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-105" class="py-name" targets="Class oauth2client.appengine.InvalidClientSecretsError=oauth2client.appengine.InvalidClientSecretsError-class.html,Class oauth2client.clientsecrets.InvalidClientSecretsError=oauth2client.clientsecrets.InvalidClientSecretsError-class.html"><a title="oauth2client.appengine.InvalidClientSecretsError
+oauth2client.clientsecrets.InvalidClientSecretsError" class="py-name" href="#" onclick="return doclink('link-105', 'InvalidClientSecretsError', 'link-105');">InvalidClientSecretsError</a></tt><tt class="py-op">(</tt><tt class="py-string">'OAuth2Decorator doesn\'t support this OAuth 2.0 flow.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-106" class="py-name" targets="Class oauth2client.appengine.OAuth2DecoratorFromClientSecrets=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html"><a title="oauth2client.appengine.OAuth2DecoratorFromClientSecrets" class="py-name" href="#" onclick="return doclink('link-106', 'OAuth2DecoratorFromClientSecrets', 'link-106');">OAuth2DecoratorFromClientSecrets</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name"><a title="apiclient.errors.BatchError.__init__
apiclient.errors.HttpError.__init__
apiclient.errors.UnexpectedBodyError.__init__
apiclient.errors.UnexpectedMethodError.__init__
@@ -615,6 +622,7 @@
apiclient.http.HttpRequestMock.__init__
apiclient.http.MediaFileUpload.__init__
apiclient.http.MediaInMemoryUpload.__init__
+apiclient.http.MediaIoBaseUpload.__init__
apiclient.http.MediaUploadProgress.__init__
apiclient.http.RequestMockBuilder.__init__
apiclient.model.JsonModel.__init__
@@ -635,16 +643,18 @@
oauth2client.crypt.Verifier.__init__
oauth2client.django_orm.Storage.__init__
oauth2client.file.Storage.__init__
+oauth2client.locked_file.LockedFile.__init__
+oauth2client.locked_file._Opener.__init__
oauth2client.multistore_file._MultiStore._Storage.__init__
-oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-106', '__init__', 'link-27');">__init__</a></tt><tt class="py-op">(</tt> </tt>
+oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-107', '__init__', 'link-27');">__init__</a></tt><tt class="py-op">(</tt> </tt>
<a name="L464"></a><tt class="py-lineno">464</tt> <tt class="py-line"> <tt class="py-name">client_info</tt><tt class="py-op">[</tt><tt class="py-string">'client_id'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
<a name="L465"></a><tt class="py-lineno">465</tt> <tt class="py-line"> <tt class="py-name">client_info</tt><tt class="py-op">[</tt><tt class="py-string">'client_secret'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
<a name="L466"></a><tt class="py-lineno">466</tt> <tt class="py-line"> <tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
<a name="L467"></a><tt class="py-lineno">467</tt> <tt class="py-line"> <tt class="py-name">client_info</tt><tt class="py-op">[</tt><tt class="py-string">'auth_uri'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
<a name="L468"></a><tt class="py-lineno">468</tt> <tt class="py-line"> <tt class="py-name">client_info</tt><tt class="py-op">[</tt><tt class="py-string">'token_uri'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
<a name="L469"></a><tt class="py-lineno">469</tt> <tt class="py-line"> <tt class="py-name">message</tt><tt class="py-op">)</tt> </tt>
-<a name="L470"></a><tt class="py-lineno">470</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-107" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-107', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-108" class="py-name"><a title="oauth2client.appengine.InvalidClientSecretsError
-oauth2client.clientsecrets.InvalidClientSecretsError" class="py-name" href="#" onclick="return doclink('link-108', 'InvalidClientSecretsError', 'link-104');">InvalidClientSecretsError</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L470"></a><tt class="py-lineno">470</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt id="link-108" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-108', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-109" class="py-name"><a title="oauth2client.appengine.InvalidClientSecretsError
+oauth2client.clientsecrets.InvalidClientSecretsError" class="py-name" href="#" onclick="return doclink('link-109', 'InvalidClientSecretsError', 'link-105');">InvalidClientSecretsError</a></tt><tt class="py-op">:</tt> </tt>
<a name="L471"></a><tt class="py-lineno">471</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
<a name="L472"></a><tt class="py-lineno">472</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">message</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
<a name="L473"></a><tt class="py-lineno">473</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_message</tt> <tt class="py-op">=</tt> <tt class="py-name">message</tt> </tt>
@@ -667,7 +677,8 @@
<a name="L490"></a><tt class="py-lineno">490</tt> <tt class="py-line"><tt class="py-docstring"> Returns: An OAuth2Decorator</tt> </tt>
<a name="L491"></a><tt class="py-lineno">491</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
<a name="L492"></a><tt class="py-lineno">492</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-109" class="py-name"><a title="oauth2client.appengine.OAuth2DecoratorFromClientSecrets" class="py-name" href="#" onclick="return doclink('link-109', 'OAuth2DecoratorFromClientSecrets', 'link-105');">OAuth2DecoratorFromClientSecrets</a></tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-name">scope</tt><tt class="py-op">,</tt> <tt class="py-name">message</tt><tt class="py-op">)</tt> </tt>
+<a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-110" class="py-name"><a title="oauth2client.appengine.OAuth2DecoratorFromClientSecrets" class="py-name" href="#" onclick="return doclink('link-110', 'OAuth2DecoratorFromClientSecrets', 'link-106');">OAuth2DecoratorFromClientSecrets</a></tt><tt class="py-op">(</tt><tt id="link-111" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
+oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-111', 'filename', 'link-100');">filename</a></tt><tt class="py-op">,</tt> <tt class="py-name">scope</tt><tt class="py-op">,</tt> <tt class="py-name">message</tt><tt class="py-op">)</tt> </tt>
</div><a name="L494"></a><tt class="py-lineno">494</tt> <tt class="py-line"> </tt>
<a name="OAuth2Handler"></a><div id="OAuth2Handler-def"><a name="L495"></a><tt class="py-lineno">495</tt> <tt class="py-line"> </tt>
<a name="L496"></a><tt class="py-lineno">496</tt> <a class="py-toggle" href="#" id="OAuth2Handler-toggle" onclick="return toggle('OAuth2Handler');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Handler-class.html">OAuth2Handler</a><tt class="py-op">(</tt><tt class="py-base-class">webapp</tt><tt class="py-op">.</tt><tt class="py-base-class">RequestHandler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
@@ -675,59 +686,59 @@
<a name="L498"></a><tt class="py-lineno">498</tt> <tt class="py-line"> </tt>
<a name="L499"></a><tt class="py-lineno">499</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">login_required</tt> </tt>
<a name="OAuth2Handler.get"></a><div id="OAuth2Handler.get-def"><a name="L500"></a><tt class="py-lineno">500</tt> <a class="py-toggle" href="#" id="OAuth2Handler.get-toggle" onclick="return toggle('OAuth2Handler.get');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Handler-class.html#get">get</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Handler.get-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Handler.get-expanded"><a name="L501"></a><tt class="py-lineno">501</tt> <tt class="py-line"> <tt class="py-name">error</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-110" class="py-name"><a title="apiclient.http.HttpMock.request
-apiclient.http.HttpMockSequence.request
-apiclient.model.BaseModel.request
-apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-110', 'request', 'link-73');">request</a></tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.appengine.OAuth2Handler.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-111', 'get', 'link-52');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'error'</tt><tt class="py-op">)</tt> </tt>
-<a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">error</tt><tt class="py-op">:</tt> </tt>
-<a name="L503"></a><tt class="py-lineno">503</tt> <tt class="py-line"> <tt class="py-name">errormsg</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name"><a title="apiclient.http.HttpMock.request
+</div><div id="OAuth2Handler.get-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Handler.get-expanded"><a name="L501"></a><tt class="py-lineno">501</tt> <tt class="py-line"> <tt class="py-name">error</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name"><a title="apiclient.http.HttpMock.request
apiclient.http.HttpMockSequence.request
apiclient.model.BaseModel.request
apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-112', 'request', 'link-73');">request</a></tt><tt class="py-op">.</tt><tt id="link-113" class="py-name"><a title="apiclient.schema.Schemas.get
oauth2client.appengine.OAuth2Handler.get
oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-113', 'get', 'link-52');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'error_description'</tt><tt class="py-op">,</tt> <tt class="py-name">error</tt><tt class="py-op">)</tt> </tt>
-<a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-114" class="py-name"><a title="apiclient.model.BaseModel.response
-apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-114', 'response', 'link-69');">response</a></tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt class="py-name">write</tt><tt class="py-op">(</tt> </tt>
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-113', 'get', 'link-52');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'error'</tt><tt class="py-op">)</tt> </tt>
+<a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">error</tt><tt class="py-op">:</tt> </tt>
+<a name="L503"></a><tt class="py-lineno">503</tt> <tt class="py-line"> <tt class="py-name">errormsg</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-114" class="py-name"><a title="apiclient.http.HttpMock.request
+apiclient.http.HttpMockSequence.request
+apiclient.model.BaseModel.request
+apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-114', 'request', 'link-73');">request</a></tt><tt class="py-op">.</tt><tt id="link-115" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.appengine.OAuth2Handler.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-115', 'get', 'link-52');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'error_description'</tt><tt class="py-op">,</tt> <tt class="py-name">error</tt><tt class="py-op">)</tt> </tt>
+<a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="apiclient.model.BaseModel.response
+apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-116', 'response', 'link-69');">response</a></tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt class="py-name">write</tt><tt class="py-op">(</tt> </tt>
<a name="L505"></a><tt class="py-lineno">505</tt> <tt class="py-line"> <tt class="py-string">'The authorization request failed: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">errormsg</tt><tt class="py-op">)</tt> </tt>
<a name="L506"></a><tt class="py-lineno">506</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
<a name="L507"></a><tt class="py-lineno">507</tt> <tt class="py-line"> <tt class="py-name">user</tt> <tt class="py-op">=</tt> <tt class="py-name">users</tt><tt class="py-op">.</tt><tt class="py-name">get_current_user</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L508"></a><tt class="py-lineno">508</tt> <tt class="py-line"> <tt class="py-name">flow</tt> <tt class="py-op">=</tt> <tt class="py-name">pickle</tt><tt class="py-op">.</tt><tt id="link-115" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-115', 'loads', 'link-28');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">memcache</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="apiclient.schema.Schemas.get
+<a name="L508"></a><tt class="py-lineno">508</tt> <tt class="py-line"> <tt class="py-name">flow</tt> <tt class="py-op">=</tt> <tt class="py-name">pickle</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-117', 'loads', 'link-28');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">memcache</tt><tt class="py-op">.</tt><tt id="link-118" class="py-name"><a title="apiclient.schema.Schemas.get
oauth2client.appengine.OAuth2Handler.get
oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-116', 'get', 'link-52');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">user</tt><tt class="py-op">.</tt><tt class="py-name">user_id</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L509"></a><tt class="py-lineno">509</tt> <tt class="py-line"> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-117" class="py-name"><a title="oauth2client.appengine.OAUTH2CLIENT_NAMESPACE" class="py-name" href="#" onclick="return doclink('link-117', 'OAUTH2CLIENT_NAMESPACE', 'link-25');">OAUTH2CLIENT_NAMESPACE</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-118', 'get', 'link-52');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">user</tt><tt class="py-op">.</tt><tt class="py-name">user_id</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L509"></a><tt class="py-lineno">509</tt> <tt class="py-line"> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-119" class="py-name"><a title="oauth2client.appengine.OAUTH2CLIENT_NAMESPACE" class="py-name" href="#" onclick="return doclink('link-119', 'OAUTH2CLIENT_NAMESPACE', 'link-25');">OAUTH2CLIENT_NAMESPACE</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
<a name="L510"></a><tt class="py-lineno">510</tt> <tt class="py-line"> <tt class="py-comment"># This code should be ammended with application specific error</tt> </tt>
<a name="L511"></a><tt class="py-lineno">511</tt> <tt class="py-line"> <tt class="py-comment"># handling. The following cases should be considered:</tt> </tt>
<a name="L512"></a><tt class="py-lineno">512</tt> <tt class="py-line"> <tt class="py-comment"># 1. What if the flow doesn't exist in memcache? Or is corrupt?</tt> </tt>
<a name="L513"></a><tt class="py-lineno">513</tt> <tt class="py-line"> <tt class="py-comment"># 2. What if the step2_exchange fails?</tt> </tt>
<a name="L514"></a><tt class="py-lineno">514</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">flow</tt><tt class="py-op">:</tt> </tt>
-<a name="L515"></a><tt class="py-lineno">515</tt> <tt class="py-line"> <tt id="link-118" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials" class="py-name" href="#" onclick="return doclink('link-118', 'credentials', 'link-43');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">flow</tt><tt class="py-op">.</tt><tt id="link-119" class="py-name" targets="Method oauth2client.client.OAuth2WebServerFlow.step2_exchange()=oauth2client.client.OAuth2WebServerFlow-class.html#step2_exchange"><a title="oauth2client.client.OAuth2WebServerFlow.step2_exchange" class="py-name" href="#" onclick="return doclink('link-119', 'step2_exchange', 'link-119');">step2_exchange</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-120" class="py-name"><a title="apiclient.http.HttpMock.request
+<a name="L515"></a><tt class="py-lineno">515</tt> <tt class="py-line"> <tt id="link-120" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials" class="py-name" href="#" onclick="return doclink('link-120', 'credentials', 'link-43');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">flow</tt><tt class="py-op">.</tt><tt id="link-121" class="py-name" targets="Method oauth2client.client.OAuth2WebServerFlow.step2_exchange()=oauth2client.client.OAuth2WebServerFlow-class.html#step2_exchange"><a title="oauth2client.client.OAuth2WebServerFlow.step2_exchange" class="py-name" href="#" onclick="return doclink('link-121', 'step2_exchange', 'link-121');">step2_exchange</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-122" class="py-name"><a title="apiclient.http.HttpMock.request
apiclient.http.HttpMockSequence.request
apiclient.model.BaseModel.request
-apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-120', 'request', 'link-73');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
-<a name="L516"></a><tt class="py-lineno">516</tt> <tt class="py-line"> <tt id="link-121" class="py-name"><a title="oauth2client.appengine.StorageByKeyName" class="py-name" href="#" onclick="return doclink('link-121', 'StorageByKeyName', 'link-76');">StorageByKeyName</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L517"></a><tt class="py-lineno">517</tt> <tt class="py-line"> <tt id="link-122" class="py-name"><a title="oauth2client.appengine.CredentialsModel" class="py-name" href="#" onclick="return doclink('link-122', 'CredentialsModel', 'link-77');">CredentialsModel</a></tt><tt class="py-op">,</tt> <tt class="py-name">user</tt><tt class="py-op">.</tt><tt class="py-name">user_id</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'credentials'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-123" class="py-name"><a title="oauth2client.client.Storage.put" class="py-name" href="#" onclick="return doclink('link-123', 'put', 'link-59');">put</a></tt><tt class="py-op">(</tt><tt id="link-124" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials" class="py-name" href="#" onclick="return doclink('link-124', 'credentials', 'link-43');">credentials</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L518"></a><tt class="py-lineno">518</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">redirect</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-125" class="py-name"><a title="apiclient.http.HttpMock.request
+apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-122', 'request', 'link-73');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
+<a name="L516"></a><tt class="py-lineno">516</tt> <tt class="py-line"> <tt id="link-123" class="py-name"><a title="oauth2client.appengine.StorageByKeyName" class="py-name" href="#" onclick="return doclink('link-123', 'StorageByKeyName', 'link-76');">StorageByKeyName</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L517"></a><tt class="py-lineno">517</tt> <tt class="py-line"> <tt id="link-124" class="py-name"><a title="oauth2client.appengine.CredentialsModel" class="py-name" href="#" onclick="return doclink('link-124', 'CredentialsModel', 'link-77');">CredentialsModel</a></tt><tt class="py-op">,</tt> <tt class="py-name">user</tt><tt class="py-op">.</tt><tt class="py-name">user_id</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'credentials'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-125" class="py-name"><a title="oauth2client.client.Storage.put" class="py-name" href="#" onclick="return doclink('link-125', 'put', 'link-59');">put</a></tt><tt class="py-op">(</tt><tt id="link-126" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials" class="py-name" href="#" onclick="return doclink('link-126', 'credentials', 'link-43');">credentials</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L518"></a><tt class="py-lineno">518</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">redirect</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-127" class="py-name"><a title="apiclient.http.HttpMock.request
apiclient.http.HttpMockSequence.request
apiclient.model.BaseModel.request
-apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-125', 'request', 'link-73');">request</a></tt><tt class="py-op">.</tt><tt id="link-126" class="py-name"><a title="apiclient.schema.Schemas.get
+apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-127', 'request', 'link-73');">request</a></tt><tt class="py-op">.</tt><tt id="link-128" class="py-name"><a title="apiclient.schema.Schemas.get
oauth2client.appengine.OAuth2Handler.get
oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-126', 'get', 'link-52');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'state'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-128', 'get', 'link-52');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'state'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
<a name="L519"></a><tt class="py-lineno">519</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
<a name="L520"></a><tt class="py-lineno">520</tt> <tt class="py-line"> <tt class="py-comment"># TODO Add error handling here.</tt> </tt>
<a name="L521"></a><tt class="py-lineno">521</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
</div></div><a name="L522"></a><tt class="py-lineno">522</tt> <tt class="py-line"> </tt>
<a name="L523"></a><tt class="py-lineno">523</tt> <tt class="py-line"> </tt>
-<a name="L524"></a><tt class="py-lineno">524</tt> <tt class="py-line"><tt id="link-127" class="py-name" targets="Variable oauth2client.appengine.application=oauth2client.appengine-module.html#application"><a title="oauth2client.appengine.application" class="py-name" href="#" onclick="return doclink('link-127', 'application', 'link-127');">application</a></tt> <tt class="py-op">=</tt> <tt class="py-name">webapp</tt><tt class="py-op">.</tt><tt class="py-name">WSGIApplication</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-op">(</tt><tt class="py-string">'/oauth2callback'</tt><tt class="py-op">,</tt> <tt id="link-128" class="py-name" targets="Class oauth2client.appengine.OAuth2Handler=oauth2client.appengine.OAuth2Handler-class.html"><a title="oauth2client.appengine.OAuth2Handler" class="py-name" href="#" onclick="return doclink('link-128', 'OAuth2Handler', 'link-128');">OAuth2Handler</a></tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L524"></a><tt class="py-lineno">524</tt> <tt class="py-line"><tt id="link-129" class="py-name" targets="Variable oauth2client.appengine.application=oauth2client.appengine-module.html#application"><a title="oauth2client.appengine.application" class="py-name" href="#" onclick="return doclink('link-129', 'application', 'link-129');">application</a></tt> <tt class="py-op">=</tt> <tt class="py-name">webapp</tt><tt class="py-op">.</tt><tt class="py-name">WSGIApplication</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-op">(</tt><tt class="py-string">'/oauth2callback'</tt><tt class="py-op">,</tt> <tt id="link-130" class="py-name" targets="Class oauth2client.appengine.OAuth2Handler=oauth2client.appengine.OAuth2Handler-class.html"><a title="oauth2client.appengine.OAuth2Handler" class="py-name" href="#" onclick="return doclink('link-130', 'OAuth2Handler', 'link-130');">OAuth2Handler</a></tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
<a name="main"></a><div id="main-def"><a name="L525"></a><tt class="py-lineno">525</tt> <tt class="py-line"> </tt>
<a name="L526"></a><tt class="py-lineno">526</tt> <tt class="py-line"> </tt>
<a name="L527"></a><tt class="py-lineno">527</tt> <a class="py-toggle" href="#" id="main-toggle" onclick="return toggle('main');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine-module.html#main">main</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="main-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="main-expanded"><a name="L528"></a><tt class="py-lineno">528</tt> <tt class="py-line"> <tt class="py-name">run_wsgi_app</tt><tt class="py-op">(</tt><tt id="link-129" class="py-name"><a title="oauth2client.appengine.application" class="py-name" href="#" onclick="return doclink('link-129', 'application', 'link-127');">application</a></tt><tt class="py-op">)</tt> </tt>
+</div><div id="main-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="main-expanded"><a name="L528"></a><tt class="py-lineno">528</tt> <tt class="py-line"> <tt class="py-name">run_wsgi_app</tt><tt class="py-op">(</tt><tt id="link-131" class="py-name"><a title="oauth2client.appengine.application" class="py-name" href="#" onclick="return doclink('link-131', 'application', 'link-129');">application</a></tt><tt class="py-op">)</tt> </tt>
</div><a name="L529"></a><tt class="py-lineno">529</tt> <tt class="py-line"> </tt><script type="text/javascript">
<!--
expandto(location.href);
@@ -758,7 +769,7 @@
<table border="0" cellpadding="0" cellspacing="0" width="100%%">
<tr>
<td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Tue Jun 5 09:03:11 2012
+ Generated by Epydoc 3.0.1 on Thu Jun 14 08:01:59 2012
</td>
<td align="right" class="footer">
<a target="mainFrame" href="http://epydoc.sourceforge.net"