Refresh docs
diff --git a/docs/epy/oauth2client.appengine-pysrc.html b/docs/epy/oauth2client.appengine-pysrc.html
index b0fb0e0..039d605 100644
--- a/docs/epy/oauth2client.appengine-pysrc.html
+++ b/docs/epy/oauth2client.appengine-pysrc.html
@@ -617,7 +617,7 @@
 <a name="L446"></a><tt class="py-lineno">446</tt>  <tt class="py-line"><tt class="py-docstring">        # in API calls</tt> </tt>
 <a name="L447"></a><tt class="py-lineno">447</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
 <a name="L448"></a><tt class="py-lineno">448</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2DecoratorFromClientSecrets.__init__"></a><div id="OAuth2DecoratorFromClientSecrets.__init__-def"><a name="L449"></a><tt class="py-lineno">449</tt> <a class="py-toggle" href="#" id="OAuth2DecoratorFromClientSecrets.__init__-toggle" onclick="return toggle('OAuth2DecoratorFromClientSecrets.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">,</tt> <tt class="py-param">scope</tt><tt class="py-op">,</tt> <tt class="py-param">message</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="OAuth2DecoratorFromClientSecrets.__init__"></a><div id="OAuth2DecoratorFromClientSecrets.__init__-def"><a name="L449"></a><tt class="py-lineno">449</tt> <a class="py-toggle" href="#" id="OAuth2DecoratorFromClientSecrets.__init__-toggle" onclick="return toggle('OAuth2DecoratorFromClientSecrets.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">,</tt> <tt class="py-param">scope</tt><tt class="py-op">,</tt> <tt class="py-param">message</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">cache</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
 </div><div id="OAuth2DecoratorFromClientSecrets.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2DecoratorFromClientSecrets.__init__-expanded"><a name="L450"></a><tt class="py-lineno">450</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor</tt> </tt>
 <a name="L451"></a><tt class="py-lineno">451</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
 <a name="L452"></a><tt class="py-lineno">452</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
@@ -628,15 +628,17 @@
 <a name="L457"></a><tt class="py-lineno">457</tt>  <tt class="py-line"><tt class="py-docstring">        clientsecrets file is missing or invalid. The message may contain HTML and</tt> </tt>
 <a name="L458"></a><tt class="py-lineno">458</tt>  <tt class="py-line"><tt class="py-docstring">        will be presented on the web interface for any method that uses the</tt> </tt>
 <a name="L459"></a><tt class="py-lineno">459</tt>  <tt class="py-line"><tt class="py-docstring">        decorator.</tt> </tt>
-<a name="L460"></a><tt class="py-lineno">460</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L461"></a><tt class="py-lineno">461</tt>  <tt class="py-line">    <tt class="py-keyword">try</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">client_type</tt><tt class="py-op">,</tt> <tt class="py-name">client_info</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="Function oauth2client.clientsecrets.loadfile()=oauth2client.clientsecrets-module.html#loadfile"><a title="oauth2client.clientsecrets.loadfile" class="py-name" href="#" onclick="return doclink('link-103', 'loadfile', 'link-103');">loadfile</a></tt><tt class="py-op">(</tt><tt id="link-104" 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-104', 'filename', 'link-104');">filename</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-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-105" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-105', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-106" 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-106', 'TYPE_WEB', 'link-106');">TYPE_WEB</a></tt><tt class="py-op">,</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" 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-108', 'TYPE_INSTALLED', 'link-108');">TYPE_INSTALLED</a></tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L464"></a><tt class="py-lineno">464</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt id="link-109" 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
+<a name="L460"></a><tt class="py-lineno">460</tt>  <tt class="py-line"><tt class="py-docstring">      cache: An optional cache service client that implements get() and set() </tt> </tt>
+<a name="L461"></a><tt class="py-lineno">461</tt>  <tt class="py-line"><tt class="py-docstring">        methods. See clientsecrets.loadfile() for details.</tt> </tt>
+<a name="L462"></a><tt class="py-lineno">462</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L463"></a><tt class="py-lineno">463</tt>  <tt class="py-line">    <tt class="py-keyword">try</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_type</tt><tt class="py-op">,</tt> <tt class="py-name">client_info</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="Function oauth2client.clientsecrets.loadfile()=oauth2client.clientsecrets-module.html#loadfile"><a title="oauth2client.clientsecrets.loadfile" class="py-name" href="#" onclick="return doclink('link-103', 'loadfile', 'link-103');">loadfile</a></tt><tt class="py-op">(</tt><tt id="link-104" 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-104', 'filename', 'link-104');">filename</a></tt><tt class="py-op">,</tt> <tt class="py-name">cache</tt><tt class="py-op">=</tt><tt class="py-name">cache</tt><tt class="py-op">)</tt> </tt>
+<a name="L465"></a><tt class="py-lineno">465</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-105" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-105', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-106" 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-106', 'TYPE_WEB', 'link-106');">TYPE_WEB</a></tt><tt class="py-op">,</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" 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-108', 'TYPE_INSTALLED', 'link-108');">TYPE_INSTALLED</a></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-keyword">raise</tt> <tt id="link-109" 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-109', 'InvalidClientSecretsError', 'link-109');">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="L465"></a><tt class="py-lineno">465</tt>  <tt class="py-line">      <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-110" 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-110', 'OAuth2DecoratorFromClientSecrets', 'link-110');">OAuth2DecoratorFromClientSecrets</a></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">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="apiclient.errors.BatchError.__init__
+<a name="L467"></a><tt class="py-lineno">467</tt>  <tt class="py-line">      <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-110" 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-110', 'OAuth2DecoratorFromClientSecrets', 'link-110');">OAuth2DecoratorFromClientSecrets</a></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">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
 apiclient.errors.UnexpectedMethodError.__init__
@@ -674,99 +676,103 @@
 oauth2client.locked_file._Opener.__init__
 oauth2client.multistore_file._MultiStore._Storage.__init__
 oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-111', '__init__', 'link-28');">__init__</a></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">'client_id'</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">'client_secret'</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">scope</tt><tt class="py-op">,</tt> </tt>
-<a name="L470"></a><tt class="py-lineno">470</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="L471"></a><tt class="py-lineno">471</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="L472"></a><tt class="py-lineno">472</tt>  <tt class="py-line">                <tt class="py-name">message</tt><tt class="py-op">)</tt> </tt>
-<a name="L473"></a><tt class="py-lineno">473</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt id="link-112" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-112', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-113" class="py-name"><a title="oauth2client.appengine.InvalidClientSecretsError
+<a name="L469"></a><tt class="py-lineno">469</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="L470"></a><tt class="py-lineno">470</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="L471"></a><tt class="py-lineno">471</tt>  <tt class="py-line">                <tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
+<a name="L472"></a><tt class="py-lineno">472</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="L473"></a><tt class="py-lineno">473</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="L474"></a><tt class="py-lineno">474</tt>  <tt class="py-line">                <tt class="py-name">message</tt><tt class="py-op">)</tt> </tt>
+<a name="L475"></a><tt class="py-lineno">475</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt id="link-112" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-112', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-113" class="py-name"><a title="oauth2client.appengine.InvalidClientSecretsError
 oauth2client.clientsecrets.InvalidClientSecretsError" class="py-name" href="#" onclick="return doclink('link-113', 'InvalidClientSecretsError', 'link-109');">InvalidClientSecretsError</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L474"></a><tt class="py-lineno">474</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="L475"></a><tt class="py-lineno">475</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="L476"></a><tt class="py-lineno">476</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>
-<a name="L477"></a><tt class="py-lineno">477</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L478"></a><tt class="py-lineno">478</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-string">"Please configure your application for OAuth 2.0"</tt> </tt>
-</div></div><a name="L479"></a><tt class="py-lineno">479</tt>  <tt class="py-line"> </tt>
-<a name="oauth2decorator_from_clientsecrets"></a><div id="oauth2decorator_from_clientsecrets-def"><a name="L480"></a><tt class="py-lineno">480</tt>  <tt class="py-line"> </tt>
-<a name="L481"></a><tt class="py-lineno">481</tt> <a class="py-toggle" href="#" id="oauth2decorator_from_clientsecrets-toggle" onclick="return toggle('oauth2decorator_from_clientsecrets');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine-module.html#oauth2decorator_from_clientsecrets">oauth2decorator_from_clientsecrets</a><tt class="py-op">(</tt><tt class="py-param">filename</tt><tt class="py-op">,</tt> <tt class="py-param">scope</tt><tt class="py-op">,</tt> <tt class="py-param">message</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="oauth2decorator_from_clientsecrets-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="oauth2decorator_from_clientsecrets-expanded"><a name="L482"></a><tt class="py-lineno">482</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates an OAuth2Decorator populated from a clientsecrets file.</tt> </tt>
-<a name="L483"></a><tt class="py-lineno">483</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L484"></a><tt class="py-lineno">484</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L485"></a><tt class="py-lineno">485</tt>  <tt class="py-line"><tt class="py-docstring">    filename: string, File name of client secrets.</tt> </tt>
-<a name="L486"></a><tt class="py-lineno">486</tt>  <tt class="py-line"><tt class="py-docstring">    scope: string or list of strings, scope(s) of the credentials being</tt> </tt>
-<a name="L487"></a><tt class="py-lineno">487</tt>  <tt class="py-line"><tt class="py-docstring">      requested.</tt> </tt>
-<a name="L488"></a><tt class="py-lineno">488</tt>  <tt class="py-line"><tt class="py-docstring">    message: string, A friendly string to display to the user if the</tt> </tt>
-<a name="L489"></a><tt class="py-lineno">489</tt>  <tt class="py-line"><tt class="py-docstring">      clientsecrets file is missing or invalid. The message may contain HTML and</tt> </tt>
-<a name="L490"></a><tt class="py-lineno">490</tt>  <tt class="py-line"><tt class="py-docstring">      will be presented on the web interface for any method that uses the</tt> </tt>
-<a name="L491"></a><tt class="py-lineno">491</tt>  <tt class="py-line"><tt class="py-docstring">      decorator.</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-docstring">  Returns: An OAuth2Decorator</tt> </tt>
-<a name="L494"></a><tt class="py-lineno">494</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L495"></a><tt class="py-lineno">495</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L496"></a><tt class="py-lineno">496</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-114" class="py-name"><a title="oauth2client.appengine.OAuth2DecoratorFromClientSecrets" class="py-name" href="#" onclick="return doclink('link-114', 'OAuth2DecoratorFromClientSecrets', 'link-110');">OAuth2DecoratorFromClientSecrets</a></tt><tt class="py-op">(</tt><tt id="link-115" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
-oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-115', 'filename', 'link-104');">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="L497"></a><tt class="py-lineno">497</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Handler"></a><div id="OAuth2Handler-def"><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> <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>
-</div><div id="OAuth2Handler-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="OAuth2Handler-expanded"><a name="L500"></a><tt class="py-lineno">500</tt>  <tt class="py-line">  <tt class="py-docstring">"""Handler for the redirect_uri of the OAuth 2.0 dance."""</tt> </tt>
-<a name="L501"></a><tt class="py-lineno">501</tt>  <tt class="py-line"> </tt>
-<a name="L502"></a><tt class="py-lineno">502</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="L503"></a><tt class="py-lineno">503</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="L504"></a><tt class="py-lineno">504</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-116" class="py-name"><a title="apiclient.http.HttpMock.request
+<a name="L476"></a><tt class="py-lineno">476</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="L477"></a><tt class="py-lineno">477</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="L478"></a><tt class="py-lineno">478</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>
+<a name="L479"></a><tt class="py-lineno">479</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L480"></a><tt class="py-lineno">480</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-string">"Please configure your application for OAuth 2.0"</tt> </tt>
+</div></div><a name="L481"></a><tt class="py-lineno">481</tt>  <tt class="py-line"> </tt>
+<a name="oauth2decorator_from_clientsecrets"></a><div id="oauth2decorator_from_clientsecrets-def"><a name="L482"></a><tt class="py-lineno">482</tt>  <tt class="py-line"> </tt>
+<a name="L483"></a><tt class="py-lineno">483</tt> <a class="py-toggle" href="#" id="oauth2decorator_from_clientsecrets-toggle" onclick="return toggle('oauth2decorator_from_clientsecrets');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine-module.html#oauth2decorator_from_clientsecrets">oauth2decorator_from_clientsecrets</a><tt class="py-op">(</tt><tt class="py-param">filename</tt><tt class="py-op">,</tt> <tt class="py-param">scope</tt><tt class="py-op">,</tt>  </tt>
+<a name="L484"></a><tt class="py-lineno">484</tt>  <tt class="py-line">                                       <tt class="py-param">message</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">cache</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="oauth2decorator_from_clientsecrets-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="oauth2decorator_from_clientsecrets-expanded"><a name="L485"></a><tt class="py-lineno">485</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates an OAuth2Decorator populated from a clientsecrets file.</tt> </tt>
+<a name="L486"></a><tt class="py-lineno">486</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L487"></a><tt class="py-lineno">487</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L488"></a><tt class="py-lineno">488</tt>  <tt class="py-line"><tt class="py-docstring">    filename: string, File name of client secrets.</tt> </tt>
+<a name="L489"></a><tt class="py-lineno">489</tt>  <tt class="py-line"><tt class="py-docstring">    scope: string or list of strings, scope(s) of the credentials being</tt> </tt>
+<a name="L490"></a><tt class="py-lineno">490</tt>  <tt class="py-line"><tt class="py-docstring">      requested.</tt> </tt>
+<a name="L491"></a><tt class="py-lineno">491</tt>  <tt class="py-line"><tt class="py-docstring">    message: string, A friendly string to display to the user if the</tt> </tt>
+<a name="L492"></a><tt class="py-lineno">492</tt>  <tt class="py-line"><tt class="py-docstring">      clientsecrets file is missing or invalid. The message may contain HTML and</tt> </tt>
+<a name="L493"></a><tt class="py-lineno">493</tt>  <tt class="py-line"><tt class="py-docstring">      will be presented on the web interface for any method that uses the</tt> </tt>
+<a name="L494"></a><tt class="py-lineno">494</tt>  <tt class="py-line"><tt class="py-docstring">      decorator.</tt> </tt>
+<a name="L495"></a><tt class="py-lineno">495</tt>  <tt class="py-line"><tt class="py-docstring">    cache: An optional cache service client that implements get() and set() </tt> </tt>
+<a name="L496"></a><tt class="py-lineno">496</tt>  <tt class="py-line"><tt class="py-docstring">      methods. See clientsecrets.loadfile() for details.</tt> </tt>
+<a name="L497"></a><tt class="py-lineno">497</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L498"></a><tt class="py-lineno">498</tt>  <tt class="py-line"><tt class="py-docstring">  Returns: An OAuth2Decorator</tt> </tt>
+<a name="L499"></a><tt class="py-lineno">499</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L500"></a><tt class="py-lineno">500</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L501"></a><tt class="py-lineno">501</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-114" class="py-name"><a title="oauth2client.appengine.OAuth2DecoratorFromClientSecrets" class="py-name" href="#" onclick="return doclink('link-114', 'OAuth2DecoratorFromClientSecrets', 'link-110');">OAuth2DecoratorFromClientSecrets</a></tt><tt class="py-op">(</tt><tt id="link-115" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
+oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-115', 'filename', 'link-104');">filename</a></tt><tt class="py-op">,</tt> <tt class="py-name">scope</tt><tt class="py-op">,</tt>  </tt>
+<a name="L502"></a><tt class="py-lineno">502</tt>  <tt class="py-line">    <tt class="py-name">message</tt><tt class="py-op">=</tt><tt class="py-name">message</tt><tt class="py-op">,</tt> <tt class="py-name">cache</tt><tt class="py-op">=</tt><tt class="py-name">cache</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L503"></a><tt class="py-lineno">503</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Handler"></a><div id="OAuth2Handler-def"><a name="L504"></a><tt class="py-lineno">504</tt>  <tt class="py-line"> </tt>
+<a name="L505"></a><tt class="py-lineno">505</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>
+</div><div id="OAuth2Handler-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="OAuth2Handler-expanded"><a name="L506"></a><tt class="py-lineno">506</tt>  <tt class="py-line">  <tt class="py-docstring">"""Handler for the redirect_uri of the OAuth 2.0 dance."""</tt> </tt>
+<a name="L507"></a><tt class="py-lineno">507</tt>  <tt class="py-line"> </tt>
+<a name="L508"></a><tt class="py-lineno">508</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="L509"></a><tt class="py-lineno">509</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="L510"></a><tt class="py-lineno">510</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-116" 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-116', 'request', 'link-77');">request</a></tt><tt class="py-op">.</tt><tt id="link-117" 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-117', 'get', 'link-56');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'error'</tt><tt class="py-op">)</tt> </tt>
-<a name="L505"></a><tt class="py-lineno">505</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="L506"></a><tt class="py-lineno">506</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-118" class="py-name"><a title="apiclient.http.HttpMock.request
+<a name="L511"></a><tt class="py-lineno">511</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="L512"></a><tt class="py-lineno">512</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-118" 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-118', 'request', 'link-77');">request</a></tt><tt class="py-op">.</tt><tt id="link-119" 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-119', 'get', 'link-56');">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="L507"></a><tt class="py-lineno">507</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-120" class="py-name"><a title="apiclient.model.BaseModel.response
+<a name="L513"></a><tt class="py-lineno">513</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-120" class="py-name"><a title="apiclient.model.BaseModel.response
 apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-120', 'response', 'link-73');">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="L508"></a><tt class="py-lineno">508</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="L509"></a><tt class="py-lineno">509</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L510"></a><tt class="py-lineno">510</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="L511"></a><tt class="py-lineno">511</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-121" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-121', 'loads', 'link-29');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">memcache</tt><tt class="py-op">.</tt><tt id="link-122" class="py-name"><a title="apiclient.schema.Schemas.get
+<a name="L514"></a><tt class="py-lineno">514</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="L515"></a><tt class="py-lineno">515</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L516"></a><tt class="py-lineno">516</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="L517"></a><tt class="py-lineno">517</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-121" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-121', 'loads', 'link-29');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">memcache</tt><tt class="py-op">.</tt><tt id="link-122" 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-122', 'get', 'link-56');">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="L512"></a><tt class="py-lineno">512</tt>  <tt class="py-line">                                       <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-123" class="py-name"><a title="oauth2client.appengine.OAUTH2CLIENT_NAMESPACE" class="py-name" href="#" onclick="return doclink('link-123', 'OAUTH2CLIENT_NAMESPACE', 'link-26');">OAUTH2CLIENT_NAMESPACE</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L513"></a><tt class="py-lineno">513</tt>  <tt class="py-line">      <tt class="py-comment"># This code should be ammended with application specific error</tt> </tt>
-<a name="L514"></a><tt class="py-lineno">514</tt>  <tt class="py-line">      <tt class="py-comment"># handling. The following cases should be considered:</tt> </tt>
-<a name="L515"></a><tt class="py-lineno">515</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="L516"></a><tt class="py-lineno">516</tt>  <tt class="py-line">      <tt class="py-comment"># 2. What if the step2_exchange fails?</tt> </tt>
-<a name="L517"></a><tt class="py-lineno">517</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="L518"></a><tt class="py-lineno">518</tt>  <tt class="py-line">        <tt id="link-124" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials" class="py-name" href="#" onclick="return doclink('link-124', 'credentials', 'link-46');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">flow</tt><tt class="py-op">.</tt><tt id="link-125" 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-125', 'step2_exchange', 'link-125');">step2_exchange</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-126" class="py-name"><a title="apiclient.http.HttpMock.request
+<a name="L518"></a><tt class="py-lineno">518</tt>  <tt class="py-line">                                       <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-123" class="py-name"><a title="oauth2client.appengine.OAUTH2CLIENT_NAMESPACE" class="py-name" href="#" onclick="return doclink('link-123', 'OAUTH2CLIENT_NAMESPACE', 'link-26');">OAUTH2CLIENT_NAMESPACE</a></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-comment"># This code should be ammended with application specific error</tt> </tt>
+<a name="L520"></a><tt class="py-lineno">520</tt>  <tt class="py-line">      <tt class="py-comment"># handling. The following cases should be considered:</tt> </tt>
+<a name="L521"></a><tt class="py-lineno">521</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="L522"></a><tt class="py-lineno">522</tt>  <tt class="py-line">      <tt class="py-comment"># 2. What if the step2_exchange fails?</tt> </tt>
+<a name="L523"></a><tt class="py-lineno">523</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="L524"></a><tt class="py-lineno">524</tt>  <tt class="py-line">        <tt id="link-124" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials" class="py-name" href="#" onclick="return doclink('link-124', 'credentials', 'link-46');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">flow</tt><tt class="py-op">.</tt><tt id="link-125" 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-125', 'step2_exchange', 'link-125');">step2_exchange</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-126" 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-126', 'request', 'link-77');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
-<a name="L519"></a><tt class="py-lineno">519</tt>  <tt class="py-line">        <tt id="link-127" class="py-name"><a title="oauth2client.appengine.StorageByKeyName" class="py-name" href="#" onclick="return doclink('link-127', 'StorageByKeyName', 'link-80');">StorageByKeyName</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L520"></a><tt class="py-lineno">520</tt>  <tt class="py-line">            <tt id="link-128" class="py-name"><a title="oauth2client.appengine.CredentialsModel" class="py-name" href="#" onclick="return doclink('link-128', 'CredentialsModel', 'link-81');">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-129" class="py-name"><a title="oauth2client.client.Storage.put" class="py-name" href="#" onclick="return doclink('link-129', 'put', 'link-63');">put</a></tt><tt class="py-op">(</tt><tt id="link-130" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials" class="py-name" href="#" onclick="return doclink('link-130', 'credentials', 'link-46');">credentials</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L521"></a><tt class="py-lineno">521</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-131" class="py-name"><a title="apiclient.http.HttpMock.request
+<a name="L525"></a><tt class="py-lineno">525</tt>  <tt class="py-line">        <tt id="link-127" class="py-name"><a title="oauth2client.appengine.StorageByKeyName" class="py-name" href="#" onclick="return doclink('link-127', 'StorageByKeyName', 'link-80');">StorageByKeyName</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L526"></a><tt class="py-lineno">526</tt>  <tt class="py-line">            <tt id="link-128" class="py-name"><a title="oauth2client.appengine.CredentialsModel" class="py-name" href="#" onclick="return doclink('link-128', 'CredentialsModel', 'link-81');">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-129" class="py-name"><a title="oauth2client.client.Storage.put" class="py-name" href="#" onclick="return doclink('link-129', 'put', 'link-63');">put</a></tt><tt class="py-op">(</tt><tt id="link-130" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials" class="py-name" href="#" onclick="return doclink('link-130', 'credentials', 'link-46');">credentials</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L527"></a><tt class="py-lineno">527</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-131" 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-131', 'request', 'link-77');">request</a></tt><tt class="py-op">.</tt><tt id="link-132" 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-132', 'get', 'link-56');">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="L522"></a><tt class="py-lineno">522</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L523"></a><tt class="py-lineno">523</tt>  <tt class="py-line">        <tt class="py-comment"># TODO Add error handling here.</tt> </tt>
-<a name="L524"></a><tt class="py-lineno">524</tt>  <tt class="py-line">        <tt class="py-keyword">pass</tt> </tt>
-</div></div><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>  <tt class="py-line"><tt id="link-133" 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-133', 'application', 'link-133');">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-134" 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-134', 'OAuth2Handler', 'link-134');">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="L528"></a><tt class="py-lineno">528</tt>  <tt class="py-line"> </tt>
-<a name="L529"></a><tt class="py-lineno">529</tt>  <tt class="py-line"> </tt>
-<a name="L530"></a><tt class="py-lineno">530</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="L531"></a><tt class="py-lineno">531</tt>  <tt class="py-line">  <tt class="py-name">run_wsgi_app</tt><tt class="py-op">(</tt><tt id="link-135" class="py-name"><a title="oauth2client.appengine.application" class="py-name" href="#" onclick="return doclink('link-135', 'application', 'link-133');">application</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L532"></a><tt class="py-lineno">532</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<a name="L528"></a><tt class="py-lineno">528</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L529"></a><tt class="py-lineno">529</tt>  <tt class="py-line">        <tt class="py-comment"># TODO Add error handling here.</tt> </tt>
+<a name="L530"></a><tt class="py-lineno">530</tt>  <tt class="py-line">        <tt class="py-keyword">pass</tt> </tt>
+</div></div><a name="L531"></a><tt class="py-lineno">531</tt>  <tt class="py-line"> </tt>
+<a name="L532"></a><tt class="py-lineno">532</tt>  <tt class="py-line"> </tt>
+<a name="L533"></a><tt class="py-lineno">533</tt>  <tt class="py-line"><tt id="link-133" 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-133', 'application', 'link-133');">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-134" 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-134', 'OAuth2Handler', 'link-134');">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="L534"></a><tt class="py-lineno">534</tt>  <tt class="py-line"> </tt>
+<a name="L535"></a><tt class="py-lineno">535</tt>  <tt class="py-line"> </tt>
+<a name="L536"></a><tt class="py-lineno">536</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="L537"></a><tt class="py-lineno">537</tt>  <tt class="py-line">  <tt class="py-name">run_wsgi_app</tt><tt class="py-op">(</tt><tt id="link-135" class="py-name"><a title="oauth2client.appengine.application" class="py-name" href="#" onclick="return doclink('link-135', 'application', 'link-133');">application</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L538"></a><tt class="py-lineno">538</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -796,7 +802,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jul 12 10:44:15 2012
+    Generated by Epydoc 3.0.1 on Mon Jul 23 15:50:05 2012
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"