Updated generated docs
diff --git a/docs/oauth2client.appengine.html b/docs/oauth2client.appengine.html
index 1607892..2265100 100644
--- a/docs/oauth2client.appengine.html
+++ b/docs/oauth2client.appengine.html
@@ -8,7 +8,7 @@
 <td valign=bottom>&nbsp;<br>
 <font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="oauth2client.html"><font color="#ffffff">oauth2client</font></a>.appengine</strong></big></big></font></td
 ><td align=right valign=bottom
-><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/usr/local/google/home/jcgregorio/projects/apiclient/oauth2client/appengine.py">/usr/local/google/home/jcgregorio/projects/apiclient/oauth2client/appengine.py</a></font></td></tr></table>
+><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/usr/local/google/home/jcgregorio/projects/apiclient-release/oauth2client/appengine.py">/usr/local/google/home/jcgregorio/projects/apiclient-release/oauth2client/appengine.py</a></font></td></tr></table>
     <p><tt>Utilities&nbsp;for&nbsp;Google&nbsp;App&nbsp;Engine<br>
 &nbsp;<br>
 Utilities&nbsp;for&nbsp;making&nbsp;it&nbsp;easier&nbsp;to&nbsp;use&nbsp;OAuth&nbsp;2.0&nbsp;on&nbsp;Google&nbsp;App&nbsp;Engine.</tt></p>
@@ -21,14 +21,16 @@
 <tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
 <td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="google.appengine.api.app_identity.app_identity.html">google.appengine.api.app_identity.app_identity</a><br>
 <a href="base64.html">base64</a><br>
-<a href="google.appengine.ext.db.html">google.appengine.ext.db</a><br>
-</td><td width="25%" valign=top><a href="httplib2.html">httplib2</a><br>
-<a href="google.appengine.api.memcache.html">google.appengine.api.memcache</a><br>
+<a href="oauth2client.clientsecrets.html">oauth2client.clientsecrets</a><br>
+</td><td width="25%" valign=top><a href="google.appengine.ext.db.html">google.appengine.ext.db</a><br>
+<a href="httplib2.html">httplib2</a><br>
+<a href="logging.html">logging</a><br>
+</td><td width="25%" valign=top><a href="google.appengine.api.memcache.html">google.appengine.api.memcache</a><br>
 <a href="pickle.html">pickle</a><br>
-</td><td width="25%" valign=top><a href="simplejson.html">simplejson</a><br>
-<a href="time.html">time</a><br>
+<a href="simplejson.html">simplejson</a><br>
+</td><td width="25%" valign=top><a href="time.html">time</a><br>
 <a href="google.appengine.api.users.html">google.appengine.api.users</a><br>
-</td><td width="25%" valign=top><a href="google.appengine.ext.webapp.html">google.appengine.ext.webapp</a><br>
+<a href="google.appengine.ext.webapp.html">google.appengine.ext.webapp</a><br>
 </td></tr></table></td></tr></table><p>
 <table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
 <tr bgcolor="#ee77aa">
@@ -41,6 +43,17 @@
 </font></dt><dd>
 <dl>
 <dt><font face="helvetica, arial"><a href="oauth2client.appengine.html#OAuth2Decorator">OAuth2Decorator</a>
+</font></dt><dd>
+<dl>
+<dt><font face="helvetica, arial"><a href="oauth2client.appengine.html#OAuth2DecoratorFromClientSecrets">OAuth2DecoratorFromClientSecrets</a>
+</font></dt></dl>
+</dd>
+</dl>
+</dd>
+<dt><font face="helvetica, arial"><a href="exceptions.html#Exception">exceptions.Exception</a>(<a href="exceptions.html#BaseException">exceptions.BaseException</a>)
+</font></dt><dd>
+<dl>
+<dt><font face="helvetica, arial"><a href="oauth2client.appengine.html#InvalidClientSecretsError">InvalidClientSecretsError</a>
 </font></dt></dl>
 </dd>
 <dt><font face="helvetica, arial"><a href="google.appengine.ext.db.html#Model">google.appengine.ext.db.Model</a>(<a href="__builtin__.html#object">__builtin__.object</a>)
@@ -95,9 +108,7 @@
 &nbsp;<br>
 This&nbsp;credential&nbsp;does&nbsp;not&nbsp;require&nbsp;a&nbsp;flow&nbsp;to&nbsp;instantiate&nbsp;because&nbsp;it&nbsp;represents<br>
 a&nbsp;two&nbsp;legged&nbsp;flow,&nbsp;and&nbsp;therefore&nbsp;has&nbsp;all&nbsp;of&nbsp;the&nbsp;required&nbsp;information&nbsp;to<br>
-generate&nbsp;and&nbsp;refresh&nbsp;its&nbsp;own&nbsp;access&nbsp;tokens.<br>
-&nbsp;<br>
-AssertionFlowCredentials&nbsp;objects&nbsp;may&nbsp;be&nbsp;safely&nbsp;pickled&nbsp;and&nbsp;unpickled.<br>&nbsp;</tt></td></tr>
+generate&nbsp;and&nbsp;refresh&nbsp;its&nbsp;own&nbsp;access&nbsp;tokens.<br>&nbsp;</tt></td></tr>
 <tr><td>&nbsp;</td>
 <td width="100%"><dl><dt>Method resolution order:</dt>
 <dd><a href="oauth2client.appengine.html#AppAssertionCredentials">AppAssertionCredentials</a></dd>
@@ -525,8 +536,6 @@
 </dl>
 <hr>
 Methods defined here:<br>
-<dl><dt><a name="CredentialsProperty-empty"><strong>empty</strong></a>(self, value)</dt></dl>
-
 <dl><dt><a name="CredentialsProperty-get_value_for_datastore"><strong>get_value_for_datastore</strong></a>(self, model_instance)</dt><dd><tt>#&nbsp;For&nbsp;writing&nbsp;to&nbsp;datastore.</tt></dd></dl>
 
 <dl><dt><a name="CredentialsProperty-make_value_from_datastore"><strong>make_value_from_datastore</strong></a>(self, value)</dt><dd><tt>#&nbsp;For&nbsp;reading&nbsp;from&nbsp;datastore.</tt></dd></dl>
@@ -585,6 +594,19 @@
 Returns:<br>
 &nbsp;&nbsp;Default&nbsp;value&nbsp;as&nbsp;provided&nbsp;by&nbsp;<a href="#CredentialsProperty-__init__">__init__</a>(default).</tt></dd></dl>
 
+<dl><dt><a name="CredentialsProperty-empty"><strong>empty</strong></a>(self, value)</dt><dd><tt>Determine&nbsp;if&nbsp;value&nbsp;is&nbsp;empty&nbsp;in&nbsp;the&nbsp;context&nbsp;of&nbsp;this&nbsp;property.<br>
+&nbsp;<br>
+For&nbsp;most&nbsp;kinds,&nbsp;this&nbsp;is&nbsp;equivalent&nbsp;to&nbsp;"not&nbsp;value",&nbsp;but&nbsp;for&nbsp;kinds&nbsp;like<br>
+bool,&nbsp;the&nbsp;test&nbsp;is&nbsp;more&nbsp;subtle,&nbsp;so&nbsp;subclasses&nbsp;can&nbsp;override&nbsp;this&nbsp;method<br>
+if&nbsp;necessary.<br>
+&nbsp;<br>
+Args:<br>
+&nbsp;&nbsp;value:&nbsp;Value&nbsp;to&nbsp;validate&nbsp;against&nbsp;this&nbsp;<a href="google.appengine.ext.db.html#Property">Property</a>.<br>
+&nbsp;<br>
+Returns:<br>
+&nbsp;&nbsp;True&nbsp;if&nbsp;this&nbsp;value&nbsp;is&nbsp;considered&nbsp;empty&nbsp;in&nbsp;the&nbsp;context&nbsp;of&nbsp;this&nbsp;<a href="google.appengine.ext.db.html#Property">Property</a><br>
+&nbsp;&nbsp;type,&nbsp;otherwise&nbsp;False.</tt></dd></dl>
+
 <hr>
 Data descriptors inherited from <a href="google.appengine.ext.db.html#Property">google.appengine.ext.db.Property</a>:<br>
 <dl><dt><strong>__dict__</strong></dt>
@@ -686,6 +708,66 @@
 <table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
 <tr bgcolor="#ffc8d8">
 <td colspan=3 valign=bottom>&nbsp;<br>
+<font color="#000000" face="helvetica, arial"><a name="InvalidClientSecretsError">class <strong>InvalidClientSecretsError</strong></a>(<a href="exceptions.html#Exception">exceptions.Exception</a>)</font></td></tr>
+    
+<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
+<td colspan=2><tt>The&nbsp;client_secrets.json&nbsp;file&nbsp;is&nbsp;malformed&nbsp;or&nbsp;missing&nbsp;required&nbsp;fields.<br>&nbsp;</tt></td></tr>
+<tr><td>&nbsp;</td>
+<td width="100%"><dl><dt>Method resolution order:</dt>
+<dd><a href="oauth2client.appengine.html#InvalidClientSecretsError">InvalidClientSecretsError</a></dd>
+<dd><a href="exceptions.html#Exception">exceptions.Exception</a></dd>
+<dd><a href="exceptions.html#BaseException">exceptions.BaseException</a></dd>
+<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
+</dl>
+<hr>
+Data descriptors defined here:<br>
+<dl><dt><strong>__weakref__</strong></dt>
+<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
+</dl>
+<hr>
+Methods inherited from <a href="exceptions.html#Exception">exceptions.Exception</a>:<br>
+<dl><dt><a name="InvalidClientSecretsError-__init__"><strong>__init__</strong></a>(...)</dt><dd><tt>x.<a href="#InvalidClientSecretsError-__init__">__init__</a>(...)&nbsp;initializes&nbsp;x;&nbsp;see&nbsp;x.__class__.__doc__&nbsp;for&nbsp;signature</tt></dd></dl>
+
+<hr>
+Data and other attributes inherited from <a href="exceptions.html#Exception">exceptions.Exception</a>:<br>
+<dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object&gt;<dd><tt>T.<a href="#InvalidClientSecretsError-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;<a href="__builtin__.html#object">object</a>&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
+
+<hr>
+Methods inherited from <a href="exceptions.html#BaseException">exceptions.BaseException</a>:<br>
+<dl><dt><a name="InvalidClientSecretsError-__delattr__"><strong>__delattr__</strong></a>(...)</dt><dd><tt>x.<a href="#InvalidClientSecretsError-__delattr__">__delattr__</a>('name')&nbsp;&lt;==&gt;&nbsp;del&nbsp;x.name</tt></dd></dl>
+
+<dl><dt><a name="InvalidClientSecretsError-__getattribute__"><strong>__getattribute__</strong></a>(...)</dt><dd><tt>x.<a href="#InvalidClientSecretsError-__getattribute__">__getattribute__</a>('name')&nbsp;&lt;==&gt;&nbsp;x.name</tt></dd></dl>
+
+<dl><dt><a name="InvalidClientSecretsError-__getitem__"><strong>__getitem__</strong></a>(...)</dt><dd><tt>x.<a href="#InvalidClientSecretsError-__getitem__">__getitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;x[y]</tt></dd></dl>
+
+<dl><dt><a name="InvalidClientSecretsError-__getslice__"><strong>__getslice__</strong></a>(...)</dt><dd><tt>x.<a href="#InvalidClientSecretsError-__getslice__">__getslice__</a>(i,&nbsp;j)&nbsp;&lt;==&gt;&nbsp;x[i:j]<br>
+&nbsp;<br>
+Use&nbsp;of&nbsp;negative&nbsp;indices&nbsp;is&nbsp;not&nbsp;supported.</tt></dd></dl>
+
+<dl><dt><a name="InvalidClientSecretsError-__reduce__"><strong>__reduce__</strong></a>(...)</dt></dl>
+
+<dl><dt><a name="InvalidClientSecretsError-__repr__"><strong>__repr__</strong></a>(...)</dt><dd><tt>x.<a href="#InvalidClientSecretsError-__repr__">__repr__</a>()&nbsp;&lt;==&gt;&nbsp;repr(x)</tt></dd></dl>
+
+<dl><dt><a name="InvalidClientSecretsError-__setattr__"><strong>__setattr__</strong></a>(...)</dt><dd><tt>x.<a href="#InvalidClientSecretsError-__setattr__">__setattr__</a>('name',&nbsp;value)&nbsp;&lt;==&gt;&nbsp;x.name&nbsp;=&nbsp;value</tt></dd></dl>
+
+<dl><dt><a name="InvalidClientSecretsError-__setstate__"><strong>__setstate__</strong></a>(...)</dt></dl>
+
+<dl><dt><a name="InvalidClientSecretsError-__str__"><strong>__str__</strong></a>(...)</dt><dd><tt>x.<a href="#InvalidClientSecretsError-__str__">__str__</a>()&nbsp;&lt;==&gt;&nbsp;str(x)</tt></dd></dl>
+
+<dl><dt><a name="InvalidClientSecretsError-__unicode__"><strong>__unicode__</strong></a>(...)</dt></dl>
+
+<hr>
+Data descriptors inherited from <a href="exceptions.html#BaseException">exceptions.BaseException</a>:<br>
+<dl><dt><strong>__dict__</strong></dt>
+</dl>
+<dl><dt><strong>args</strong></dt>
+</dl>
+<dl><dt><strong>message</strong></dt>
+</dl>
+</td></tr></table> <p>
+<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
+<tr bgcolor="#ffc8d8">
+<td colspan=3 valign=bottom>&nbsp;<br>
 <font color="#000000" face="helvetica, arial"><a name="OAuth2Decorator">class <strong>OAuth2Decorator</strong></a>(<a href="__builtin__.html#object">__builtin__.object</a>)</font></td></tr>
     
 <tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
@@ -699,7 +781,7 @@
 &nbsp;&nbsp;decorator&nbsp;=&nbsp;<a href="#OAuth2Decorator">OAuth2Decorator</a>(<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client_id='837...ent.com',<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client_secret='Qh...wwI',<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope='https://www.googleapis.com/auth/buzz')<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope='https://www.googleapis.com/auth/plus')<br>
 &nbsp;<br>
 &nbsp;<br>
 &nbsp;&nbsp;class&nbsp;MainHandler(webapp.<a href="google.appengine.ext.webapp.html#RequestHandler">RequestHandler</a>):<br>
@@ -711,16 +793,20 @@
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;in&nbsp;API&nbsp;calls<br>&nbsp;</tt></td></tr>
 <tr><td>&nbsp;</td>
 <td width="100%">Methods defined here:<br>
-<dl><dt><a name="OAuth2Decorator-__init__"><strong>__init__</strong></a>(self, client_id, client_secret, scope, auth_uri<font color="#909090">='https://accounts.google.com/o/oauth2/auth'</font>, token_uri<font color="#909090">='https://accounts.google.com/o/oauth2/token'</font>)</dt><dd><tt>Constructor&nbsp;for&nbsp;<a href="#OAuth2Decorator">OAuth2Decorator</a><br>
+<dl><dt><a name="OAuth2Decorator-__init__"><strong>__init__</strong></a>(self, client_id, client_secret, scope, auth_uri<font color="#909090">='https://accounts.google.com/o/oauth2/auth'</font>, token_uri<font color="#909090">='https://accounts.google.com/o/oauth2/token'</font>, message<font color="#909090">=None</font>)</dt><dd><tt>Constructor&nbsp;for&nbsp;<a href="#OAuth2Decorator">OAuth2Decorator</a><br>
 &nbsp;<br>
 Args:<br>
 &nbsp;&nbsp;client_id:&nbsp;string,&nbsp;client&nbsp;identifier.<br>
 &nbsp;&nbsp;client_secret:&nbsp;string&nbsp;client&nbsp;secret.<br>
-&nbsp;&nbsp;scope:&nbsp;string,&nbsp;scope&nbsp;of&nbsp;the&nbsp;credentials&nbsp;being&nbsp;requested.<br>
+&nbsp;&nbsp;scope:&nbsp;string&nbsp;or&nbsp;list&nbsp;of&nbsp;strings,&nbsp;scope(s)&nbsp;of&nbsp;the&nbsp;credentials&nbsp;being<br>
+&nbsp;&nbsp;&nbsp;&nbsp;requested.<br>
 &nbsp;&nbsp;auth_uri:&nbsp;string,&nbsp;URI&nbsp;for&nbsp;authorization&nbsp;endpoint.&nbsp;For&nbsp;convenience<br>
 &nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;to&nbsp;Google's&nbsp;endpoints&nbsp;but&nbsp;any&nbsp;OAuth&nbsp;2.0&nbsp;provider&nbsp;can&nbsp;be&nbsp;used.<br>
 &nbsp;&nbsp;token_uri:&nbsp;string,&nbsp;URI&nbsp;for&nbsp;token&nbsp;endpoint.&nbsp;For&nbsp;convenience<br>
-&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;to&nbsp;Google's&nbsp;endpoints&nbsp;but&nbsp;any&nbsp;OAuth&nbsp;2.0&nbsp;provider&nbsp;can&nbsp;be&nbsp;used.</tt></dd></dl>
+&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;to&nbsp;Google's&nbsp;endpoints&nbsp;but&nbsp;any&nbsp;OAuth&nbsp;2.0&nbsp;provider&nbsp;can&nbsp;be&nbsp;used.<br>
+&nbsp;&nbsp;message:&nbsp;Message&nbsp;to&nbsp;display&nbsp;if&nbsp;there&nbsp;are&nbsp;problems&nbsp;with&nbsp;the&nbsp;OAuth&nbsp;2.0<br>
+&nbsp;&nbsp;&nbsp;&nbsp;configuration.&nbsp;The&nbsp;message&nbsp;may&nbsp;contain&nbsp;HTML&nbsp;and&nbsp;will&nbsp;be&nbsp;presented&nbsp;on&nbsp;the<br>
+&nbsp;&nbsp;&nbsp;&nbsp;web&nbsp;interface&nbsp;for&nbsp;any&nbsp;method&nbsp;that&nbsp;uses&nbsp;the&nbsp;decorator.</tt></dd></dl>
 
 <dl><dt><a name="OAuth2Decorator-authorize_url"><strong>authorize_url</strong></a>(self)</dt><dd><tt>Returns&nbsp;the&nbsp;URL&nbsp;to&nbsp;start&nbsp;the&nbsp;OAuth&nbsp;dance.<br>
 &nbsp;<br>
@@ -771,6 +857,97 @@
 <table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
 <tr bgcolor="#ffc8d8">
 <td colspan=3 valign=bottom>&nbsp;<br>
+<font color="#000000" face="helvetica, arial"><a name="OAuth2DecoratorFromClientSecrets">class <strong>OAuth2DecoratorFromClientSecrets</strong></a>(<a href="oauth2client.appengine.html#OAuth2Decorator">OAuth2Decorator</a>)</font></td></tr>
+    
+<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
+<td colspan=2><tt>An&nbsp;<a href="#OAuth2Decorator">OAuth2Decorator</a>&nbsp;that&nbsp;builds&nbsp;from&nbsp;a&nbsp;clientsecrets&nbsp;file.<br>
+&nbsp;<br>
+Uses&nbsp;a&nbsp;clientsecrets&nbsp;file&nbsp;as&nbsp;the&nbsp;source&nbsp;for&nbsp;all&nbsp;the&nbsp;information&nbsp;when<br>
+constructing&nbsp;an&nbsp;<a href="#OAuth2Decorator">OAuth2Decorator</a>.<br>
+&nbsp;<br>
+Example:<br>
+&nbsp;<br>
+&nbsp;&nbsp;decorator&nbsp;=&nbsp;<a href="#OAuth2DecoratorFromClientSecrets">OAuth2DecoratorFromClientSecrets</a>(<br>
+&nbsp;&nbsp;&nbsp;&nbsp;os.path.join(os.path.dirname(__file__),&nbsp;'client_secrets.json')<br>
+&nbsp;&nbsp;&nbsp;&nbsp;scope='https://www.googleapis.com/auth/plus')<br>
+&nbsp;<br>
+&nbsp;<br>
+&nbsp;&nbsp;class&nbsp;MainHandler(webapp.<a href="google.appengine.ext.webapp.html#RequestHandler">RequestHandler</a>):<br>
+&nbsp;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;@decorator.oauth_required<br>
+&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;get(self):<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http&nbsp;=&nbsp;decorator.<a href="#OAuth2DecoratorFromClientSecrets-http">http</a>()<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;http&nbsp;is&nbsp;authorized&nbsp;with&nbsp;the&nbsp;user's&nbsp;Credentials&nbsp;and&nbsp;can&nbsp;be&nbsp;used<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;in&nbsp;API&nbsp;calls<br>&nbsp;</tt></td></tr>
+<tr><td>&nbsp;</td>
+<td width="100%"><dl><dt>Method resolution order:</dt>
+<dd><a href="oauth2client.appengine.html#OAuth2DecoratorFromClientSecrets">OAuth2DecoratorFromClientSecrets</a></dd>
+<dd><a href="oauth2client.appengine.html#OAuth2Decorator">OAuth2Decorator</a></dd>
+<dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
+</dl>
+<hr>
+Methods defined here:<br>
+<dl><dt><a name="OAuth2DecoratorFromClientSecrets-__init__"><strong>__init__</strong></a>(self, filename, scope, message<font color="#909090">=None</font>)</dt><dd><tt>Constructor<br>
+&nbsp;<br>
+Args:<br>
+&nbsp;&nbsp;filename:&nbsp;string,&nbsp;File&nbsp;name&nbsp;of&nbsp;client&nbsp;secrets.<br>
+&nbsp;&nbsp;scope:&nbsp;string,&nbsp;Space&nbsp;separated&nbsp;list&nbsp;of&nbsp;scopes.<br>
+&nbsp;&nbsp;message:&nbsp;string,&nbsp;A&nbsp;friendly&nbsp;string&nbsp;to&nbsp;display&nbsp;to&nbsp;the&nbsp;user&nbsp;if&nbsp;the<br>
+&nbsp;&nbsp;&nbsp;&nbsp;clientsecrets&nbsp;file&nbsp;is&nbsp;missing&nbsp;or&nbsp;invalid.&nbsp;The&nbsp;message&nbsp;may&nbsp;contain&nbsp;HTML&nbsp;and<br>
+&nbsp;&nbsp;&nbsp;&nbsp;will&nbsp;be&nbsp;presented&nbsp;on&nbsp;the&nbsp;web&nbsp;interface&nbsp;for&nbsp;any&nbsp;method&nbsp;that&nbsp;uses&nbsp;the<br>
+&nbsp;&nbsp;&nbsp;&nbsp;decorator.</tt></dd></dl>
+
+<hr>
+Methods inherited from <a href="oauth2client.appengine.html#OAuth2Decorator">OAuth2Decorator</a>:<br>
+<dl><dt><a name="OAuth2DecoratorFromClientSecrets-authorize_url"><strong>authorize_url</strong></a>(self)</dt><dd><tt>Returns&nbsp;the&nbsp;URL&nbsp;to&nbsp;start&nbsp;the&nbsp;OAuth&nbsp;dance.<br>
+&nbsp;<br>
+Must&nbsp;only&nbsp;be&nbsp;called&nbsp;from&nbsp;with&nbsp;a&nbsp;webapp.<a href="google.appengine.ext.webapp.html#RequestHandler">RequestHandler</a>&nbsp;subclassed&nbsp;method<br>
+that&nbsp;had&nbsp;been&nbsp;decorated&nbsp;with&nbsp;either&nbsp;@oauth_required&nbsp;or&nbsp;@oauth_aware.</tt></dd></dl>
+
+<dl><dt><a name="OAuth2DecoratorFromClientSecrets-has_credentials"><strong>has_credentials</strong></a>(self)</dt><dd><tt>True&nbsp;if&nbsp;for&nbsp;the&nbsp;logged&nbsp;in&nbsp;user&nbsp;there&nbsp;are&nbsp;valid&nbsp;access&nbsp;Credentials.<br>
+&nbsp;<br>
+Must&nbsp;only&nbsp;be&nbsp;called&nbsp;from&nbsp;with&nbsp;a&nbsp;webapp.<a href="google.appengine.ext.webapp.html#RequestHandler">RequestHandler</a>&nbsp;subclassed&nbsp;method<br>
+that&nbsp;had&nbsp;been&nbsp;decorated&nbsp;with&nbsp;either&nbsp;@oauth_required&nbsp;or&nbsp;@oauth_aware.</tt></dd></dl>
+
+<dl><dt><a name="OAuth2DecoratorFromClientSecrets-http"><strong>http</strong></a>(self)</dt><dd><tt>Returns&nbsp;an&nbsp;authorized&nbsp;http&nbsp;instance.<br>
+&nbsp;<br>
+Must&nbsp;only&nbsp;be&nbsp;called&nbsp;from&nbsp;within&nbsp;an&nbsp;@oauth_required&nbsp;decorated&nbsp;method,&nbsp;or<br>
+from&nbsp;within&nbsp;an&nbsp;@oauth_aware&nbsp;decorated&nbsp;method&nbsp;where&nbsp;<a href="#OAuth2DecoratorFromClientSecrets-has_credentials">has_credentials</a>()<br>
+returns&nbsp;True.</tt></dd></dl>
+
+<dl><dt><a name="OAuth2DecoratorFromClientSecrets-oauth_aware"><strong>oauth_aware</strong></a>(self, method)</dt><dd><tt>Decorator&nbsp;that&nbsp;sets&nbsp;up&nbsp;for&nbsp;OAuth&nbsp;2.0&nbsp;dance,&nbsp;but&nbsp;doesn't&nbsp;do&nbsp;it.<br>
+&nbsp;<br>
+Does&nbsp;all&nbsp;the&nbsp;setup&nbsp;for&nbsp;the&nbsp;OAuth&nbsp;dance,&nbsp;but&nbsp;doesn't&nbsp;initiate&nbsp;it.<br>
+This&nbsp;decorator&nbsp;is&nbsp;useful&nbsp;if&nbsp;you&nbsp;want&nbsp;to&nbsp;create&nbsp;a&nbsp;page&nbsp;that&nbsp;knows<br>
+whether&nbsp;or&nbsp;not&nbsp;the&nbsp;user&nbsp;has&nbsp;granted&nbsp;access&nbsp;to&nbsp;this&nbsp;application.<br>
+From&nbsp;within&nbsp;a&nbsp;method&nbsp;decorated&nbsp;with&nbsp;@oauth_aware&nbsp;the&nbsp;<a href="#OAuth2DecoratorFromClientSecrets-has_credentials">has_credentials</a>()<br>
+and&nbsp;<a href="#OAuth2DecoratorFromClientSecrets-authorize_url">authorize_url</a>()&nbsp;methods&nbsp;can&nbsp;be&nbsp;called.<br>
+&nbsp;<br>
+Args:<br>
+&nbsp;&nbsp;method:&nbsp;callable,&nbsp;to&nbsp;be&nbsp;decorated&nbsp;method&nbsp;of&nbsp;a&nbsp;webapp.<a href="google.appengine.ext.webapp.html#RequestHandler">RequestHandler</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;instance.</tt></dd></dl>
+
+<dl><dt><a name="OAuth2DecoratorFromClientSecrets-oauth_required"><strong>oauth_required</strong></a>(self, method)</dt><dd><tt>Decorator&nbsp;that&nbsp;starts&nbsp;the&nbsp;OAuth&nbsp;2.0&nbsp;dance.<br>
+&nbsp;<br>
+Starts&nbsp;the&nbsp;OAuth&nbsp;dance&nbsp;for&nbsp;the&nbsp;logged&nbsp;in&nbsp;user&nbsp;if&nbsp;they&nbsp;haven't&nbsp;already<br>
+granted&nbsp;access&nbsp;for&nbsp;this&nbsp;application.<br>
+&nbsp;<br>
+Args:<br>
+&nbsp;&nbsp;method:&nbsp;callable,&nbsp;to&nbsp;be&nbsp;decorated&nbsp;method&nbsp;of&nbsp;a&nbsp;webapp.<a href="google.appengine.ext.webapp.html#RequestHandler">RequestHandler</a><br>
+&nbsp;&nbsp;&nbsp;&nbsp;instance.</tt></dd></dl>
+
+<hr>
+Data descriptors inherited from <a href="oauth2client.appengine.html#OAuth2Decorator">OAuth2Decorator</a>:<br>
+<dl><dt><strong>__dict__</strong></dt>
+<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
+</dl>
+<dl><dt><strong>__weakref__</strong></dt>
+<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
+</dl>
+</td></tr></table> <p>
+<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
+<tr bgcolor="#ffc8d8">
+<td colspan=3 valign=bottom>&nbsp;<br>
 <font color="#000000" face="helvetica, arial"><a name="OAuth2Handler">class <strong>OAuth2Handler</strong></a>(<a href="google.appengine.ext.webapp.html#RequestHandler">google.appengine.ext.webapp.RequestHandler</a>)</font></td></tr>
     
 <tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
@@ -917,12 +1094,12 @@
 &nbsp;&nbsp;property_name:&nbsp;string,&nbsp;name&nbsp;of&nbsp;the&nbsp;property&nbsp;that&nbsp;is&nbsp;a&nbsp;<a href="#CredentialsProperty">CredentialsProperty</a><br>
 &nbsp;&nbsp;cache:&nbsp;memcache,&nbsp;a&nbsp;write-through&nbsp;cache&nbsp;to&nbsp;put&nbsp;in&nbsp;front&nbsp;of&nbsp;the&nbsp;datastore</tt></dd></dl>
 
-<dl><dt><a name="StorageByKeyName-get"><strong>get</strong></a>(self)</dt><dd><tt>Retrieve&nbsp;Credential&nbsp;from&nbsp;datastore.<br>
+<dl><dt><a name="StorageByKeyName-locked_get"><strong>locked_get</strong></a>(self)</dt><dd><tt>Retrieve&nbsp;Credential&nbsp;from&nbsp;datastore.<br>
 &nbsp;<br>
 Returns:<br>
 &nbsp;&nbsp;oauth2client.Credentials</tt></dd></dl>
 
-<dl><dt><a name="StorageByKeyName-put"><strong>put</strong></a>(self, credentials)</dt><dd><tt>Write&nbsp;a&nbsp;Credentials&nbsp;to&nbsp;the&nbsp;datastore.<br>
+<dl><dt><a name="StorageByKeyName-locked_put"><strong>locked_put</strong></a>(self, credentials)</dt><dd><tt>Write&nbsp;a&nbsp;Credentials&nbsp;to&nbsp;the&nbsp;datastore.<br>
 &nbsp;<br>
 Args:<br>
 &nbsp;&nbsp;credentials:&nbsp;Credentials,&nbsp;the&nbsp;credentials&nbsp;to&nbsp;store.</tt></dd></dl>
@@ -933,14 +1110,14 @@
 &nbsp;<br>
 This&nbsp;lock&nbsp;is&nbsp;not&nbsp;reentrant.</tt></dd></dl>
 
-<dl><dt><a name="StorageByKeyName-locked_get"><strong>locked_get</strong></a>(self)</dt><dd><tt>Retrieve&nbsp;credential.<br>
+<dl><dt><a name="StorageByKeyName-get"><strong>get</strong></a>(self)</dt><dd><tt>Retrieve&nbsp;credential.<br>
 &nbsp;<br>
-The&nbsp;<a href="oauth2client.client.html#Storage">Storage</a>&nbsp;lock&nbsp;must&nbsp;be&nbsp;held&nbsp;when&nbsp;this&nbsp;is&nbsp;called.<br>
+The&nbsp;<a href="oauth2client.client.html#Storage">Storage</a>&nbsp;lock&nbsp;must&nbsp;*not*&nbsp;be&nbsp;held&nbsp;when&nbsp;this&nbsp;is&nbsp;called.<br>
 &nbsp;<br>
 Returns:<br>
 &nbsp;&nbsp;oauth2client.client.Credentials</tt></dd></dl>
 
-<dl><dt><a name="StorageByKeyName-locked_put"><strong>locked_put</strong></a>(self, credentials)</dt><dd><tt>Write&nbsp;a&nbsp;credential.<br>
+<dl><dt><a name="StorageByKeyName-put"><strong>put</strong></a>(self, credentials)</dt><dd><tt>Write&nbsp;a&nbsp;credential.<br>
 &nbsp;<br>
 The&nbsp;<a href="oauth2client.client.html#Storage">Storage</a>&nbsp;lock&nbsp;must&nbsp;be&nbsp;held&nbsp;when&nbsp;this&nbsp;is&nbsp;called.<br>
 &nbsp;<br>
@@ -968,6 +1145,17 @@
     
 <tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
 <td width="100%"><dl><dt><a name="-main"><strong>main</strong></a>()</dt></dl>
+ <dl><dt><a name="-oauth2decorator_from_clientsecrets"><strong>oauth2decorator_from_clientsecrets</strong></a>(filename, scope, message<font color="#909090">=None</font>)</dt><dd><tt>Creates&nbsp;an&nbsp;<a href="#OAuth2Decorator">OAuth2Decorator</a>&nbsp;populated&nbsp;from&nbsp;a&nbsp;clientsecrets&nbsp;file.<br>
+&nbsp;<br>
+Args:<br>
+&nbsp;&nbsp;filename:&nbsp;string,&nbsp;File&nbsp;name&nbsp;of&nbsp;client&nbsp;secrets.<br>
+&nbsp;&nbsp;scope:&nbsp;string,&nbsp;Space&nbsp;separated&nbsp;list&nbsp;of&nbsp;scopes.<br>
+&nbsp;&nbsp;message:&nbsp;string,&nbsp;A&nbsp;friendly&nbsp;string&nbsp;to&nbsp;display&nbsp;to&nbsp;the&nbsp;user&nbsp;if&nbsp;the<br>
+&nbsp;&nbsp;&nbsp;&nbsp;clientsecrets&nbsp;file&nbsp;is&nbsp;missing&nbsp;or&nbsp;invalid.&nbsp;The&nbsp;message&nbsp;may&nbsp;contain&nbsp;HTML&nbsp;and<br>
+&nbsp;&nbsp;&nbsp;&nbsp;will&nbsp;be&nbsp;presented&nbsp;on&nbsp;the&nbsp;web&nbsp;interface&nbsp;for&nbsp;any&nbsp;method&nbsp;that&nbsp;uses&nbsp;the<br>
+&nbsp;&nbsp;&nbsp;&nbsp;decorator.<br>
+&nbsp;<br>
+Returns:&nbsp;An&nbsp;<a href="#OAuth2Decorator">OAuth2Decorator</a></tt></dd></dl>
 </td></tr></table><p>
 <table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
 <tr bgcolor="#55aa55">