Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(344)

Unified Diff: docs/epy/oauth2client.appengine.OAuth2Decorator-class.html

Issue 6305043: Switch to epydoc for documenting library. (Closed)
Patch Set: Revert old pydocs, they didn't really change. Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: docs/epy/oauth2client.appengine.OAuth2Decorator-class.html
===================================================================
new file mode 100644
--- /dev/null
+++ b/docs/epy/oauth2client.appengine.OAuth2Decorator-class.html
@@ -0,0 +1,536 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>oauth2client.appengine.OAuth2Decorator</title>
+ <link rel="stylesheet" href="epydoc.css" type="text/css" />
+ <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+ alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <th class="navbar" width="100%"></th>
+ </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+ <tr valign="top">
+ <td width="100%">
+ <span class="breadcrumbs">
+ <a href="oauth2client-module.html">Package&nbsp;oauth2client</a> ::
+ <a href="oauth2client.appengine-module.html">Module&nbsp;appengine</a> ::
+ Class&nbsp;OAuth2Decorator
+ </span>
+ </td>
+ <td>
+ <table cellpadding="0" cellspacing="0">
+ <!-- hide/show private -->
+ <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+ onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+ <tr><td align="right"><span class="options"
+ >[<a href="frames.html" target="_top">frames</a
+ >]&nbsp;|&nbsp;<a href="oauth2client.appengine.OAuth2Decorator-class.html"
+ target="_top">no&nbsp;frames</a>]</span></td></tr>
+ </table>
+ </td>
+ </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class OAuth2Decorator</h1><p class="nomargin-top"><span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator">source&nbsp;code</a></span></p>
+<center>
+<center> <map id="uml_class_diagram_for_oauth2cl_6" name="uml_class_diagram_for_oauth2cl_6">
+<area shape="rect" href="oauth2client.appengine.OAuth2Decorator-class.html#__init__" title="Constructor for OAuth2Decorator" alt="" coords="17,36,1188,55"/>
+<area shape="rect" href="oauth2client.appengine.OAuth2Decorator-class.html#oauth_required" title="Decorator that starts the OAuth 2.0 dance." alt="" coords="17,55,1188,73"/>
+<area shape="rect" href="oauth2client.appengine.OAuth2Decorator-class.html#oauth_aware" title="Decorator that sets up for OAuth 2.0 dance, but doesn&#39;t do it." alt="" coords="17,73,1188,92"/>
+<area shape="rect" href="oauth2client.appengine.OAuth2Decorator-class.html#has_credentials" title="True if for the logged in user there are valid access Credentials." alt="" coords="17,92,1188,111"/>
+<area shape="rect" href="oauth2client.appengine.OAuth2Decorator-class.html#authorize_url" title="Returns the URL to start the OAuth dance." alt="" coords="17,111,1188,129"/>
+<area shape="rect" href="oauth2client.appengine.OAuth2Decorator-class.html#http" title="Returns an authorized http instance." alt="" coords="17,129,1188,148"/>
+<area shape="rect" href="oauth2client.appengine.OAuth2Decorator-class.html" title="Utility for making OAuth 2.0 easier." alt="" coords="16,11,1189,149"/>
+<area shape="rect" href="oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html" title="An OAuth2Decorator that builds from a clientsecrets file." alt="" coords="492,179,713,205"/>
+</map>
+ <img src="uml_class_diagram_for_oauth2cl_6.gif" alt='' usemap="#uml_class_diagram_for_oauth2cl_6" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<pre class="literalblock">
+Utility for making OAuth 2.0 easier.
+
+Instantiate and then use with oauth_required or oauth_aware
+as decorators on webapp.RequestHandler methods.
+
+Example:
+
+ decorator = OAuth2Decorator(
+ client_id='837...ent.com',
+ client_secret='Qh...wwI',
+ scope='https://www.googleapis.com/auth/plus')
+
+
+ class MainHandler(webapp.RequestHandler):
+
+ @decorator.oauth_required
+ def get(self):
+ http = decorator.http()
+ # http is authorized with the user's Credentials and can be used
+ # in API calls
+
+</pre>
+
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Instance Methods</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-InstanceMethods"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="oauth2client.appengine.OAuth2Decorator-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">client_id</span>,
+ <span class="summary-sig-arg">client_secret</span>,
+ <span class="summary-sig-arg">scope</span>,
+ <span class="summary-sig-arg">auth_uri</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">https://accounts.google.com/o/oauth2/auth</code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">token_uri</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">https://accounts.google.com/o/oauth2/token</code><code class="variable-quote">'</code></span>,
+ <span class="summary-sig-arg">user_agent</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">message</span>=<span class="summary-sig-default">None</span>,
+ <span class="summary-sig-arg">**kwargs</span>)</span><br />
+ Constructor for OAuth2Decorator</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator.__init__">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr class="private">
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a name="_display_error_message"></a><span class="summary-sig-name">_display_error_message</span>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">request_handler</span>)</span></td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator._display_error_message">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="oauth2client.appengine.OAuth2Decorator-class.html#oauth_required" class="summary-sig-name">oauth_required</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">method</span>)</span><br />
+ Decorator that starts the OAuth 2.0 dance.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator.oauth_required">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="oauth2client.appengine.OAuth2Decorator-class.html#oauth_aware" class="summary-sig-name">oauth_aware</a>(<span class="summary-sig-arg">self</span>,
+ <span class="summary-sig-arg">method</span>)</span><br />
+ Decorator that sets up for OAuth 2.0 dance, but doesn't do it.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator.oauth_aware">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="oauth2client.appengine.OAuth2Decorator-class.html#has_credentials" class="summary-sig-name">has_credentials</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ True if for the logged in user there are valid access Credentials.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator.has_credentials">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="oauth2client.appengine.OAuth2Decorator-class.html#authorize_url" class="summary-sig-name">authorize_url</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Returns the URL to start the OAuth dance.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator.authorize_url">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+<tr>
+ <td width="15%" align="right" valign="top" class="summary">
+ <span class="summary-type">&nbsp;</span>
+ </td><td class="summary">
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td><span class="summary-sig"><a href="oauth2client.appengine.OAuth2Decorator-class.html#http" class="summary-sig-name">http</a>(<span class="summary-sig-arg">self</span>)</span><br />
+ Returns an authorized http instance.</td>
+ <td align="right" valign="top">
+ <span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator.http">source&nbsp;code</a></span>
+
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__delattr__</code>,
+ <code>__format__</code>,
+ <code>__getattribute__</code>,
+ <code>__hash__</code>,
+ <code>__new__</code>,
+ <code>__reduce__</code>,
+ <code>__reduce_ex__</code>,
+ <code>__repr__</code>,
+ <code>__setattr__</code>,
+ <code>__sizeof__</code>,
+ <code>__str__</code>,
+ <code>__subclasshook__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Properties</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-Properties"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+ <tr>
+ <td colspan="2" class="summary">
+ <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+ <code>__class__</code>
+ </p>
+ </td>
+ </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+ <td colspan="2" class="table-header">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr valign="top">
+ <td align="left"><span class="table-header">Method Details</span></td>
+ <td align="right" valign="top"
+ ><span class="options">[<a href="#section-MethodDetails"
+ class="privatelink" onclick="toggle_private();"
+ >hide private</a>]</span></td>
+ </tr>
+ </table>
+ </td>
+</tr>
+</table>
+<a name="__init__"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">client_id</span>,
+ <span class="sig-arg">client_secret</span>,
+ <span class="sig-arg">scope</span>,
+ <span class="sig-arg">auth_uri</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">https://accounts.google.com/o/oauth2/auth</code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">token_uri</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">https://accounts.google.com/o/oauth2/token</code><code class="variable-quote">'</code></span>,
+ <span class="sig-arg">user_agent</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">message</span>=<span class="sig-default">None</span>,
+ <span class="sig-arg">**kwargs</span>)</span>
+ <br /><em class="fname">(Constructor)</em>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator.__init__">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <pre class="literalblock">
+Constructor for OAuth2Decorator
+
+Args:
+ client_id: string, client identifier.
+ client_secret: string client secret.
+ scope: string or list of strings, scope(s) of the credentials being
+ requested.
+ auth_uri: string, URI for authorization endpoint. For convenience
+ defaults to Google's endpoints but any OAuth 2.0 provider can be used.
+ token_uri: string, URI for token endpoint. For convenience
+ defaults to Google's endpoints but any OAuth 2.0 provider can be used.
+ user_agent: string, User agent of your application, default to None.
+ message: Message to display if there are problems with the OAuth 2.0
+ configuration. The message may contain HTML and will be presented on the
+ web interface for any method that uses the decorator.
+ **kwargs: dict, Keyword arguments are be passed along as kwargs to the
+ OAuth2WebServerFlow constructor.
+
+</pre>
+ <dl class="fields">
+ <dt>Overrides:
+ object.__init__
+ </dt>
+ </dl>
+</td></tr></table>
+</div>
+<a name="oauth_required"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">oauth_required</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">method</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator.oauth_required">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <pre class="literalblock">
+Decorator that starts the OAuth 2.0 dance.
+
+Starts the OAuth dance for the logged in user if they haven't already
+granted access for this application.
+
+Args:
+ method: callable, to be decorated method of a webapp.RequestHandler
+ instance.
+
+</pre>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="oauth_aware"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">oauth_aware</span>(<span class="sig-arg">self</span>,
+ <span class="sig-arg">method</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator.oauth_aware">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <pre class="literalblock">
+Decorator that sets up for OAuth 2.0 dance, but doesn't do it.
+
+Does all the setup for the OAuth dance, but doesn't initiate it.
+This decorator is useful if you want to create a page that knows
+whether or not the user has granted access to this application.
+From within a method decorated with @oauth_aware the has_credentials()
+and authorize_url() methods can be called.
+
+Args:
+ method: callable, to be decorated method of a webapp.RequestHandler
+ instance.
+
+</pre>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="has_credentials"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">has_credentials</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator.has_credentials">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <pre class="literalblock">
+True if for the logged in user there are valid access Credentials.
+
+Must only be called from with a webapp.RequestHandler subclassed method
+that had been decorated with either @oauth_required or @oauth_aware.
+
+</pre>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="authorize_url"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">authorize_url</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator.authorize_url">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <pre class="literalblock">
+Returns the URL to start the OAuth dance.
+
+Must only be called from with a webapp.RequestHandler subclassed method
+that had been decorated with either @oauth_required or @oauth_aware.
+
+</pre>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<a name="http"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+ cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr valign="top"><td>
+ <h3 class="epydoc"><span class="sig"><span class="sig-name">http</span>(<span class="sig-arg">self</span>)</span>
+ </h3>
+ </td><td align="right" valign="top"
+ ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#OAuth2Decorator.http">source&nbsp;code</a></span>&nbsp;
+ </td>
+ </tr></table>
+
+ <pre class="literalblock">
+Returns an authorized http instance.
+
+Must only be called from within an @oauth_required decorated method, or
+from within an @oauth_aware decorated method where has_credentials()
+returns True.
+
+</pre>
+ <dl class="fields">
+ </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+ bgcolor="#a0c0ff" cellspacing="0">
+ <tr valign="middle">
+
+ <!-- Tree link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Index link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <!-- Help link -->
+ <th>&nbsp;&nbsp;&nbsp;<a
+ href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+ <th class="navbar" width="100%"></th>
+ </tr>
+</table>
+<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:08 2012
+ </td>
+ <td align="right" class="footer">
+ <a target="mainFrame" href="http://epydoc.sourceforge.net"
+ >http://epydoc.sourceforge.net</a>
+ </td>
+ </tr>
+</table>
+
+<script type="text/javascript">
+ <!--
+ // Private objects are initially displayed (because if
+ // javascript is turned off then we want them to be
+ // visible); but by default, we want to hide them. So hide
+ // them unless we have a cookie that says to show them.
+ checkCookie();
+ // -->
+</script>
+</body>
+</html>

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b