Refresh docs
diff --git a/docs/dyn/adsensehost_v4_1.associationsessions.html b/docs/dyn/adsensehost_v4_1.associationsessions.html
index 00c8775..2bd44a5 100644
--- a/docs/dyn/adsensehost_v4_1.associationsessions.html
+++ b/docs/dyn/adsensehost_v4_1.associationsessions.html
@@ -89,8 +89,10 @@
   productCode: string, Products to associate with the user. (required) (repeated)
     Allowed values
       AFC - AdSense For Content
+      AFG - AdSense For Games
       AFMC - AdSense For Mobile Content
       AFS - AdSense For Search
+      AFV - AdSense For Video
   websiteUrl: string, The URL of the user's hosted website. (required)
   websiteLocale: string, The locale of the user's hosted website.
   userLocale: string, The preferred locale of the user.
diff --git a/docs/dyn/audit_v1.activities.html b/docs/dyn/audit_v1.activities.html
index 5da7168..a869ae5 100644
--- a/docs/dyn/audit_v1.activities.html
+++ b/docs/dyn/audit_v1.activities.html
@@ -75,11 +75,11 @@
 <h1><a href="audit_v1.html">Enterprise Audit API</a> . <a href="audit_v1.activities.html">activities</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#list">list(customerId, applicationId, caller=None, startTime=None, actorIpAddress=None, eventName=None, actorApplicationId=None, continuationToken=None, maxResults=None, parameters=None, actorEmail=None, endTime=None)</a></code></p>
+  <code><a href="#list">list(customerId, applicationId, caller=None, startTime=None, actorIpAddress=None, eventName=None, actorApplicationId=None, continuationToken=None, maxResults=None, actorEmail=None, endTime=None)</a></code></p>
 <p class="firstline">Retrieves a list of activities for a specific customer and application.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="list">list(customerId, applicationId, caller=None, startTime=None, actorIpAddress=None, eventName=None, actorApplicationId=None, continuationToken=None, maxResults=None, parameters=None, actorEmail=None, endTime=None)</code>
+    <code class="details" id="list">list(customerId, applicationId, caller=None, startTime=None, actorIpAddress=None, eventName=None, actorApplicationId=None, continuationToken=None, maxResults=None, actorEmail=None, endTime=None)</code>
   <pre>Retrieves a list of activities for a specific customer and application.
 
 Args:
@@ -95,7 +95,6 @@
   actorApplicationId: string, Application ID of the application which interacted on behalf of the user while performing the event.
   continuationToken: string, Next page URL.
   maxResults: integer, Number of activity records to be shown in each page.
-  parameters: string, Event parameters in the form [parameter1 name]:[parameter1 value],[parameter2 name]:[parameter2 value],...
   actorEmail: string, Email address of the user who performed the action.
   endTime: string, Return events which occured at or before this time.
 
diff --git a/docs/dyn/bigquery_v2.jobs.html b/docs/dyn/bigquery_v2.jobs.html
index 70b0098..26cc5ab 100644
--- a/docs/dyn/bigquery_v2.jobs.html
+++ b/docs/dyn/bigquery_v2.jobs.html
@@ -144,34 +144,34 @@
       "etag": "A String", # [Output-only] A hash of this resource.
       "configuration": { # [Required] Describes the job configuration.
         "load": { # [Pick one] Configures a load job.
-          "encoding": "A String", # [Optional] Character encoding of the input data. May be UTF-8 or ISO-8859-1. Default is UTF-8.
-          "fieldDelimiter": "A String", # [Optional] Delimiter to use between fields in the import data. Default is ','. Note that delimiters are applied to the raw, binary data before the encoding is applied.
-          "sourceFormat": "A String", # [Experimental] Optional and defaults to CSV. Format of source files. For CSV uploads, specify "CSV". For imports of datastore backups, specify "DATASTORE_BACKUP". For imports of newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON".
-          "destinationTable": { # [Required] Table being written to.
+          "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
+          "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
+          "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". The default value is CSV.
+          "destinationTable": { # [Required] The destination table to load the data into.
             "projectId": "A String", # [Required] ID of the project billed for storage of the table.
             "tableId": "A String", # [Required] ID of the table.
             "datasetId": "A String", # [Required] ID of the dataset containing the table.
           },
-          "writeDisposition": "A String", # [Optional] Whether to overwrite an existing table (WRITE_TRUNCATE), append to an existing table (WRITE_APPEND), or require that the the table is empty (WRITE_EMPTY). Default is WRITE_APPEND.
-          "maxBadRecords": 42, # [Optional] Maximum number of bad records that should be ignored before the entire job is aborted and no updates are performed.
-          "skipLeadingRows": 42, # [Optional] Number of rows of initial data to skip in the data being imported.
-          "sourceUris": [ # [Required] Source URIs describing Google Cloud Storage locations of data to load.
+          "writeDisposition": "A String", # [Optional] Specifies the action that occurs if the destination table already exists. Each action is atomic and only occurs if BigQuery is able to fully load the data and the load job completes without error. The following values are supported: WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the table. WRITE_APPEND: If the table already exists, BigQuery appends the data to the table. WRITE_EMPTY: If the table already exists, a 'duplicate' error is returned in the job result. Creation, truncation and append actions occur as one atomic update upon job completion.
+          "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, an 'invalid' error is returned in the job result and the job fails. The default value is 0, which requires that all records are valid.
+          "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when loading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+          "sourceUris": [ # [Required] The fully-qualified URIs that point to your data on Google Cloud Storage.
             "A String",
           ],
-          "quote": "A String", # [Optional] Quote character to use. Default is '"'. Note that quoting is done on the raw, binary data before the encoding is applied. If no quoting is done, use am empty string.
-          "createDisposition": "A String", # [Optional] Whether to create the table if it doesn't already exist (CREATE_IF_NEEDED) or to require the table already exist (CREATE_NEVER). Default is CREATE_IF_NEEDED.
-          "schemaInlineFormat": "A String", # [Experimental] Format of inlineSchema field.
-          "schemaInline": "A String", # [Experimental] Inline schema. For CSV schemas, specify as "Field1:Type1[,Field2:Type2]*". For example, "foo:STRING, bar:INTEGER, baz:FLOAT"
-          "allowQuotedNewlines": True or False, # [Experimental] Whether to allow quoted newlines in the source CSV data.
-          "schema": { # [Optional] Schema of the table being written to.
+          "quote": "A String", # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
+          "createDisposition": "A String", # [Optional] Specifies whether the job is allowed to create new tables. The following values are supported: CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the table. CREATE_NEVER: The table must already exist. If it does not, a 'notFound' error is returned in the job result. The default value is CREATE_IF_NEEDED. Creation, truncation and append actions occur as one atomic update upon job completion.
+          "schemaInlineFormat": "A String", # [Deprecated] The format of the schemaInline property.
+          "schemaInline": "A String", # [Deprecated] The inline schema. For CSV schemas, specify as "Field1:Type1[,Field2:Type2]*". For example, "foo:STRING, bar:INTEGER, baz:FLOAT".
+          "allowQuotedNewlines": True or False, # Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
+          "schema": { # [Optional] The schema for the destination table. The schema can be omitted if the destination table already exists or if the schema can be inferred from the loaded data.
             "fields": [ # Describes the fields in a table.
               {
-                "fields": [ # [Optional] Describes nested fields when type is RECORD.
+                "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                   # Object with schema name: TableFieldSchema
                 ],
-                "type": "A String", # [Required] Data type of the field.
-                "mode": "A String", # [Optional] Mode of the field (whether or not it can be null. Default is NULLABLE.
-                "name": "A String", # [Required] Name of the field.
+                "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates a nested schema).
+                "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+                "name": "A String", # [Required] The field name.
               },
             ],
           },
@@ -200,6 +200,7 @@
           },
           "priority": "A String", # [Optional] Specifies a priority for the query. Default is INTERACTIVE. Alternative is BATCH.
           "writeDisposition": "A String", # [Optional] Whether to overwrite an existing table (WRITE_TRUNCATE), append to an existing table (WRITE_APPEND), or require that the the table is empty (WRITE_EMPTY). Default is WRITE_EMPTY.
+          "allowLargeResults": True or False, # [Experimental] If true, allows >128M results to be materialized in the destination table. Requires destination_table to be set.
           "createDisposition": "A String", # [Optional] Whether to create the table if it doesn't already exist (CREATE_IF_NEEDED) or to require the table already exist (CREATE_NEVER). Default is CREATE_IF_NEEDED.
           "query": "A String", # [Required] BigQuery SQL query to execute.
           "preserveNulls": True or False, # [Experimental] If set, preserve null values in table data, rather than mapping null values to the column's default value. This flag currently defaults to false, but the default will soon be changed to true. Shortly afterward, this flag will be removed completely. Please specify true if possible, and false only if you need to force the old behavior while updating client code.
@@ -273,12 +274,12 @@
     "schema": { # The schema of the results. Present only when the query completes successfully.
       "fields": [ # Describes the fields in a table.
         {
-          "fields": [ # [Optional] Describes nested fields when type is RECORD.
+          "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
             # Object with schema name: TableFieldSchema
           ],
-          "type": "A String", # [Required] Data type of the field.
-          "mode": "A String", # [Optional] Mode of the field (whether or not it can be null. Default is NULLABLE.
-          "name": "A String", # [Required] Name of the field.
+          "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates a nested schema).
+          "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+          "name": "A String", # [Required] The field name.
         },
       ],
     },
@@ -334,34 +335,34 @@
     "etag": "A String", # [Output-only] A hash of this resource.
     "configuration": { # [Required] Describes the job configuration.
       "load": { # [Pick one] Configures a load job.
-        "encoding": "A String", # [Optional] Character encoding of the input data. May be UTF-8 or ISO-8859-1. Default is UTF-8.
-        "fieldDelimiter": "A String", # [Optional] Delimiter to use between fields in the import data. Default is ','. Note that delimiters are applied to the raw, binary data before the encoding is applied.
-        "sourceFormat": "A String", # [Experimental] Optional and defaults to CSV. Format of source files. For CSV uploads, specify "CSV". For imports of datastore backups, specify "DATASTORE_BACKUP". For imports of newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON".
-        "destinationTable": { # [Required] Table being written to.
+        "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
+        "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
+        "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". The default value is CSV.
+        "destinationTable": { # [Required] The destination table to load the data into.
           "projectId": "A String", # [Required] ID of the project billed for storage of the table.
           "tableId": "A String", # [Required] ID of the table.
           "datasetId": "A String", # [Required] ID of the dataset containing the table.
         },
-        "writeDisposition": "A String", # [Optional] Whether to overwrite an existing table (WRITE_TRUNCATE), append to an existing table (WRITE_APPEND), or require that the the table is empty (WRITE_EMPTY). Default is WRITE_APPEND.
-        "maxBadRecords": 42, # [Optional] Maximum number of bad records that should be ignored before the entire job is aborted and no updates are performed.
-        "skipLeadingRows": 42, # [Optional] Number of rows of initial data to skip in the data being imported.
-        "sourceUris": [ # [Required] Source URIs describing Google Cloud Storage locations of data to load.
+        "writeDisposition": "A String", # [Optional] Specifies the action that occurs if the destination table already exists. Each action is atomic and only occurs if BigQuery is able to fully load the data and the load job completes without error. The following values are supported: WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the table. WRITE_APPEND: If the table already exists, BigQuery appends the data to the table. WRITE_EMPTY: If the table already exists, a 'duplicate' error is returned in the job result. Creation, truncation and append actions occur as one atomic update upon job completion.
+        "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, an 'invalid' error is returned in the job result and the job fails. The default value is 0, which requires that all records are valid.
+        "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when loading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+        "sourceUris": [ # [Required] The fully-qualified URIs that point to your data on Google Cloud Storage.
           "A String",
         ],
-        "quote": "A String", # [Optional] Quote character to use. Default is '"'. Note that quoting is done on the raw, binary data before the encoding is applied. If no quoting is done, use am empty string.
-        "createDisposition": "A String", # [Optional] Whether to create the table if it doesn't already exist (CREATE_IF_NEEDED) or to require the table already exist (CREATE_NEVER). Default is CREATE_IF_NEEDED.
-        "schemaInlineFormat": "A String", # [Experimental] Format of inlineSchema field.
-        "schemaInline": "A String", # [Experimental] Inline schema. For CSV schemas, specify as "Field1:Type1[,Field2:Type2]*". For example, "foo:STRING, bar:INTEGER, baz:FLOAT"
-        "allowQuotedNewlines": True or False, # [Experimental] Whether to allow quoted newlines in the source CSV data.
-        "schema": { # [Optional] Schema of the table being written to.
+        "quote": "A String", # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
+        "createDisposition": "A String", # [Optional] Specifies whether the job is allowed to create new tables. The following values are supported: CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the table. CREATE_NEVER: The table must already exist. If it does not, a 'notFound' error is returned in the job result. The default value is CREATE_IF_NEEDED. Creation, truncation and append actions occur as one atomic update upon job completion.
+        "schemaInlineFormat": "A String", # [Deprecated] The format of the schemaInline property.
+        "schemaInline": "A String", # [Deprecated] The inline schema. For CSV schemas, specify as "Field1:Type1[,Field2:Type2]*". For example, "foo:STRING, bar:INTEGER, baz:FLOAT".
+        "allowQuotedNewlines": True or False, # Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
+        "schema": { # [Optional] The schema for the destination table. The schema can be omitted if the destination table already exists or if the schema can be inferred from the loaded data.
           "fields": [ # Describes the fields in a table.
             {
-              "fields": [ # [Optional] Describes nested fields when type is RECORD.
+              "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                 # Object with schema name: TableFieldSchema
               ],
-              "type": "A String", # [Required] Data type of the field.
-              "mode": "A String", # [Optional] Mode of the field (whether or not it can be null. Default is NULLABLE.
-              "name": "A String", # [Required] Name of the field.
+              "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates a nested schema).
+              "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+              "name": "A String", # [Required] The field name.
             },
           ],
         },
@@ -390,6 +391,7 @@
         },
         "priority": "A String", # [Optional] Specifies a priority for the query. Default is INTERACTIVE. Alternative is BATCH.
         "writeDisposition": "A String", # [Optional] Whether to overwrite an existing table (WRITE_TRUNCATE), append to an existing table (WRITE_APPEND), or require that the the table is empty (WRITE_EMPTY). Default is WRITE_EMPTY.
+        "allowLargeResults": True or False, # [Experimental] If true, allows >128M results to be materialized in the destination table. Requires destination_table to be set.
         "createDisposition": "A String", # [Optional] Whether to create the table if it doesn't already exist (CREATE_IF_NEEDED) or to require the table already exist (CREATE_NEVER). Default is CREATE_IF_NEEDED.
         "query": "A String", # [Required] BigQuery SQL query to execute.
         "preserveNulls": True or False, # [Experimental] If set, preserve null values in table data, rather than mapping null values to the column's default value. This flag currently defaults to false, but the default will soon be changed to true. Shortly afterward, this flag will be removed completely. Please specify true if possible, and false only if you need to force the old behavior while updating client code.
@@ -472,34 +474,34 @@
       "etag": "A String", # [Output-only] A hash of this resource.
       "configuration": { # [Required] Describes the job configuration.
         "load": { # [Pick one] Configures a load job.
-          "encoding": "A String", # [Optional] Character encoding of the input data. May be UTF-8 or ISO-8859-1. Default is UTF-8.
-          "fieldDelimiter": "A String", # [Optional] Delimiter to use between fields in the import data. Default is ','. Note that delimiters are applied to the raw, binary data before the encoding is applied.
-          "sourceFormat": "A String", # [Experimental] Optional and defaults to CSV. Format of source files. For CSV uploads, specify "CSV". For imports of datastore backups, specify "DATASTORE_BACKUP". For imports of newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON".
-          "destinationTable": { # [Required] Table being written to.
+          "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
+          "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
+          "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". The default value is CSV.
+          "destinationTable": { # [Required] The destination table to load the data into.
             "projectId": "A String", # [Required] ID of the project billed for storage of the table.
             "tableId": "A String", # [Required] ID of the table.
             "datasetId": "A String", # [Required] ID of the dataset containing the table.
           },
-          "writeDisposition": "A String", # [Optional] Whether to overwrite an existing table (WRITE_TRUNCATE), append to an existing table (WRITE_APPEND), or require that the the table is empty (WRITE_EMPTY). Default is WRITE_APPEND.
-          "maxBadRecords": 42, # [Optional] Maximum number of bad records that should be ignored before the entire job is aborted and no updates are performed.
-          "skipLeadingRows": 42, # [Optional] Number of rows of initial data to skip in the data being imported.
-          "sourceUris": [ # [Required] Source URIs describing Google Cloud Storage locations of data to load.
+          "writeDisposition": "A String", # [Optional] Specifies the action that occurs if the destination table already exists. Each action is atomic and only occurs if BigQuery is able to fully load the data and the load job completes without error. The following values are supported: WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the table. WRITE_APPEND: If the table already exists, BigQuery appends the data to the table. WRITE_EMPTY: If the table already exists, a 'duplicate' error is returned in the job result. Creation, truncation and append actions occur as one atomic update upon job completion.
+          "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, an 'invalid' error is returned in the job result and the job fails. The default value is 0, which requires that all records are valid.
+          "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when loading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+          "sourceUris": [ # [Required] The fully-qualified URIs that point to your data on Google Cloud Storage.
             "A String",
           ],
-          "quote": "A String", # [Optional] Quote character to use. Default is '"'. Note that quoting is done on the raw, binary data before the encoding is applied. If no quoting is done, use am empty string.
-          "createDisposition": "A String", # [Optional] Whether to create the table if it doesn't already exist (CREATE_IF_NEEDED) or to require the table already exist (CREATE_NEVER). Default is CREATE_IF_NEEDED.
-          "schemaInlineFormat": "A String", # [Experimental] Format of inlineSchema field.
-          "schemaInline": "A String", # [Experimental] Inline schema. For CSV schemas, specify as "Field1:Type1[,Field2:Type2]*". For example, "foo:STRING, bar:INTEGER, baz:FLOAT"
-          "allowQuotedNewlines": True or False, # [Experimental] Whether to allow quoted newlines in the source CSV data.
-          "schema": { # [Optional] Schema of the table being written to.
+          "quote": "A String", # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
+          "createDisposition": "A String", # [Optional] Specifies whether the job is allowed to create new tables. The following values are supported: CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the table. CREATE_NEVER: The table must already exist. If it does not, a 'notFound' error is returned in the job result. The default value is CREATE_IF_NEEDED. Creation, truncation and append actions occur as one atomic update upon job completion.
+          "schemaInlineFormat": "A String", # [Deprecated] The format of the schemaInline property.
+          "schemaInline": "A String", # [Deprecated] The inline schema. For CSV schemas, specify as "Field1:Type1[,Field2:Type2]*". For example, "foo:STRING, bar:INTEGER, baz:FLOAT".
+          "allowQuotedNewlines": True or False, # Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
+          "schema": { # [Optional] The schema for the destination table. The schema can be omitted if the destination table already exists or if the schema can be inferred from the loaded data.
             "fields": [ # Describes the fields in a table.
               {
-                "fields": [ # [Optional] Describes nested fields when type is RECORD.
+                "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                   # Object with schema name: TableFieldSchema
                 ],
-                "type": "A String", # [Required] Data type of the field.
-                "mode": "A String", # [Optional] Mode of the field (whether or not it can be null. Default is NULLABLE.
-                "name": "A String", # [Required] Name of the field.
+                "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates a nested schema).
+                "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+                "name": "A String", # [Required] The field name.
               },
             ],
           },
@@ -528,6 +530,7 @@
           },
           "priority": "A String", # [Optional] Specifies a priority for the query. Default is INTERACTIVE. Alternative is BATCH.
           "writeDisposition": "A String", # [Optional] Whether to overwrite an existing table (WRITE_TRUNCATE), append to an existing table (WRITE_APPEND), or require that the the table is empty (WRITE_EMPTY). Default is WRITE_EMPTY.
+          "allowLargeResults": True or False, # [Experimental] If true, allows >128M results to be materialized in the destination table. Requires destination_table to be set.
           "createDisposition": "A String", # [Optional] Whether to create the table if it doesn't already exist (CREATE_IF_NEEDED) or to require the table already exist (CREATE_NEVER). Default is CREATE_IF_NEEDED.
           "query": "A String", # [Required] BigQuery SQL query to execute.
           "preserveNulls": True or False, # [Experimental] If set, preserve null values in table data, rather than mapping null values to the column's default value. This flag currently defaults to false, but the default will soon be changed to true. Shortly afterward, this flag will be removed completely. Please specify true if possible, and false only if you need to force the old behavior while updating client code.
@@ -634,34 +637,34 @@
         "state": "A String", # Running state of the job. When the state is DONE, errorResult can be checked to determine whether the job succeeded or failed.
         "configuration": { # [Full-projection-only] Specifies the job configuration.
           "load": { # [Pick one] Configures a load job.
-            "encoding": "A String", # [Optional] Character encoding of the input data. May be UTF-8 or ISO-8859-1. Default is UTF-8.
-            "fieldDelimiter": "A String", # [Optional] Delimiter to use between fields in the import data. Default is ','. Note that delimiters are applied to the raw, binary data before the encoding is applied.
-            "sourceFormat": "A String", # [Experimental] Optional and defaults to CSV. Format of source files. For CSV uploads, specify "CSV". For imports of datastore backups, specify "DATASTORE_BACKUP". For imports of newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON".
-            "destinationTable": { # [Required] Table being written to.
+            "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
+            "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
+            "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". The default value is CSV.
+            "destinationTable": { # [Required] The destination table to load the data into.
               "projectId": "A String", # [Required] ID of the project billed for storage of the table.
               "tableId": "A String", # [Required] ID of the table.
               "datasetId": "A String", # [Required] ID of the dataset containing the table.
             },
-            "writeDisposition": "A String", # [Optional] Whether to overwrite an existing table (WRITE_TRUNCATE), append to an existing table (WRITE_APPEND), or require that the the table is empty (WRITE_EMPTY). Default is WRITE_APPEND.
-            "maxBadRecords": 42, # [Optional] Maximum number of bad records that should be ignored before the entire job is aborted and no updates are performed.
-            "skipLeadingRows": 42, # [Optional] Number of rows of initial data to skip in the data being imported.
-            "sourceUris": [ # [Required] Source URIs describing Google Cloud Storage locations of data to load.
+            "writeDisposition": "A String", # [Optional] Specifies the action that occurs if the destination table already exists. Each action is atomic and only occurs if BigQuery is able to fully load the data and the load job completes without error. The following values are supported: WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the table. WRITE_APPEND: If the table already exists, BigQuery appends the data to the table. WRITE_EMPTY: If the table already exists, a 'duplicate' error is returned in the job result. Creation, truncation and append actions occur as one atomic update upon job completion.
+            "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, an 'invalid' error is returned in the job result and the job fails. The default value is 0, which requires that all records are valid.
+            "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when loading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+            "sourceUris": [ # [Required] The fully-qualified URIs that point to your data on Google Cloud Storage.
               "A String",
             ],
-            "quote": "A String", # [Optional] Quote character to use. Default is '"'. Note that quoting is done on the raw, binary data before the encoding is applied. If no quoting is done, use am empty string.
-            "createDisposition": "A String", # [Optional] Whether to create the table if it doesn't already exist (CREATE_IF_NEEDED) or to require the table already exist (CREATE_NEVER). Default is CREATE_IF_NEEDED.
-            "schemaInlineFormat": "A String", # [Experimental] Format of inlineSchema field.
-            "schemaInline": "A String", # [Experimental] Inline schema. For CSV schemas, specify as "Field1:Type1[,Field2:Type2]*". For example, "foo:STRING, bar:INTEGER, baz:FLOAT"
-            "allowQuotedNewlines": True or False, # [Experimental] Whether to allow quoted newlines in the source CSV data.
-            "schema": { # [Optional] Schema of the table being written to.
+            "quote": "A String", # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
+            "createDisposition": "A String", # [Optional] Specifies whether the job is allowed to create new tables. The following values are supported: CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the table. CREATE_NEVER: The table must already exist. If it does not, a 'notFound' error is returned in the job result. The default value is CREATE_IF_NEEDED. Creation, truncation and append actions occur as one atomic update upon job completion.
+            "schemaInlineFormat": "A String", # [Deprecated] The format of the schemaInline property.
+            "schemaInline": "A String", # [Deprecated] The inline schema. For CSV schemas, specify as "Field1:Type1[,Field2:Type2]*". For example, "foo:STRING, bar:INTEGER, baz:FLOAT".
+            "allowQuotedNewlines": True or False, # Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
+            "schema": { # [Optional] The schema for the destination table. The schema can be omitted if the destination table already exists or if the schema can be inferred from the loaded data.
               "fields": [ # Describes the fields in a table.
                 {
-                  "fields": [ # [Optional] Describes nested fields when type is RECORD.
+                  "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                     # Object with schema name: TableFieldSchema
                   ],
-                  "type": "A String", # [Required] Data type of the field.
-                  "mode": "A String", # [Optional] Mode of the field (whether or not it can be null. Default is NULLABLE.
-                  "name": "A String", # [Required] Name of the field.
+                  "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates a nested schema).
+                  "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+                  "name": "A String", # [Required] The field name.
                 },
               ],
             },
@@ -690,6 +693,7 @@
             },
             "priority": "A String", # [Optional] Specifies a priority for the query. Default is INTERACTIVE. Alternative is BATCH.
             "writeDisposition": "A String", # [Optional] Whether to overwrite an existing table (WRITE_TRUNCATE), append to an existing table (WRITE_APPEND), or require that the the table is empty (WRITE_EMPTY). Default is WRITE_EMPTY.
+            "allowLargeResults": True or False, # [Experimental] If true, allows >128M results to be materialized in the destination table. Requires destination_table to be set.
             "createDisposition": "A String", # [Optional] Whether to create the table if it doesn't already exist (CREATE_IF_NEEDED) or to require the table already exist (CREATE_NEVER). Default is CREATE_IF_NEEDED.
             "query": "A String", # [Required] BigQuery SQL query to execute.
             "preserveNulls": True or False, # [Experimental] If set, preserve null values in table data, rather than mapping null values to the column's default value. This flag currently defaults to false, but the default will soon be changed to true. Shortly afterward, this flag will be removed completely. Please specify true if possible, and false only if you need to force the old behavior while updating client code.
@@ -795,12 +799,12 @@
     "schema": { # The schema of the results. Present only when the query completes successfully.
       "fields": [ # Describes the fields in a table.
         {
-          "fields": [ # [Optional] Describes nested fields when type is RECORD.
+          "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
             # Object with schema name: TableFieldSchema
           ],
-          "type": "A String", # [Required] Data type of the field.
-          "mode": "A String", # [Optional] Mode of the field (whether or not it can be null. Default is NULLABLE.
-          "name": "A String", # [Required] Name of the field.
+          "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates a nested schema).
+          "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+          "name": "A String", # [Required] The field name.
         },
       ],
     },
diff --git a/docs/dyn/bigquery_v2.tables.html b/docs/dyn/bigquery_v2.tables.html
index 52bd8ed..ac288cc 100644
--- a/docs/dyn/bigquery_v2.tables.html
+++ b/docs/dyn/bigquery_v2.tables.html
@@ -139,12 +139,12 @@
       "schema": { # [Optional] Describes the schema of this table.
         "fields": [ # Describes the fields in a table.
           {
-            "fields": [ # [Optional] Describes nested fields when type is RECORD.
+            "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
               # Object with schema name: TableFieldSchema
             ],
-            "type": "A String", # [Required] Data type of the field.
-            "mode": "A String", # [Optional] Mode of the field (whether or not it can be null. Default is NULLABLE.
-            "name": "A String", # [Required] Name of the field.
+            "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates a nested schema).
+            "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+            "name": "A String", # [Required] The field name.
           },
         ],
       },
@@ -181,12 +181,12 @@
     "schema": { # [Optional] Describes the schema of this table.
       "fields": [ # Describes the fields in a table.
         {
-          "fields": [ # [Optional] Describes nested fields when type is RECORD.
+          "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
             # Object with schema name: TableFieldSchema
           ],
-          "type": "A String", # [Required] Data type of the field.
-          "mode": "A String", # [Optional] Mode of the field (whether or not it can be null. Default is NULLABLE.
-          "name": "A String", # [Required] Name of the field.
+          "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates a nested schema).
+          "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+          "name": "A String", # [Required] The field name.
         },
       ],
     },
@@ -216,12 +216,12 @@
       "schema": { # [Optional] Describes the schema of this table.
         "fields": [ # Describes the fields in a table.
           {
-            "fields": [ # [Optional] Describes nested fields when type is RECORD.
+            "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
               # Object with schema name: TableFieldSchema
             ],
-            "type": "A String", # [Required] Data type of the field.
-            "mode": "A String", # [Optional] Mode of the field (whether or not it can be null. Default is NULLABLE.
-            "name": "A String", # [Required] Name of the field.
+            "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates a nested schema).
+            "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+            "name": "A String", # [Required] The field name.
           },
         ],
       },
@@ -306,12 +306,12 @@
     "schema": { # [Optional] Describes the schema of this table.
       "fields": [ # Describes the fields in a table.
         {
-          "fields": [ # [Optional] Describes nested fields when type is RECORD.
+          "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
             # Object with schema name: TableFieldSchema
           ],
-          "type": "A String", # [Required] Data type of the field.
-          "mode": "A String", # [Optional] Mode of the field (whether or not it can be null. Default is NULLABLE.
-          "name": "A String", # [Required] Name of the field.
+          "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates a nested schema).
+          "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+          "name": "A String", # [Required] The field name.
         },
       ],
     },
@@ -341,12 +341,12 @@
       "schema": { # [Optional] Describes the schema of this table.
         "fields": [ # Describes the fields in a table.
           {
-            "fields": [ # [Optional] Describes nested fields when type is RECORD.
+            "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
               # Object with schema name: TableFieldSchema
             ],
-            "type": "A String", # [Required] Data type of the field.
-            "mode": "A String", # [Optional] Mode of the field (whether or not it can be null. Default is NULLABLE.
-            "name": "A String", # [Required] Name of the field.
+            "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates a nested schema).
+            "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+            "name": "A String", # [Required] The field name.
           },
         ],
       },
@@ -384,12 +384,12 @@
     "schema": { # [Optional] Describes the schema of this table.
       "fields": [ # Describes the fields in a table.
         {
-          "fields": [ # [Optional] Describes nested fields when type is RECORD.
+          "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
             # Object with schema name: TableFieldSchema
           ],
-          "type": "A String", # [Required] Data type of the field.
-          "mode": "A String", # [Optional] Mode of the field (whether or not it can be null. Default is NULLABLE.
-          "name": "A String", # [Required] Name of the field.
+          "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates a nested schema).
+          "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+          "name": "A String", # [Required] The field name.
         },
       ],
     },
@@ -419,12 +419,12 @@
       "schema": { # [Optional] Describes the schema of this table.
         "fields": [ # Describes the fields in a table.
           {
-            "fields": [ # [Optional] Describes nested fields when type is RECORD.
+            "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
               # Object with schema name: TableFieldSchema
             ],
-            "type": "A String", # [Required] Data type of the field.
-            "mode": "A String", # [Optional] Mode of the field (whether or not it can be null. Default is NULLABLE.
-            "name": "A String", # [Required] Name of the field.
+            "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates a nested schema).
+            "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+            "name": "A String", # [Required] The field name.
           },
         ],
       },
diff --git a/docs/dyn/blogger_v3.blogs.html b/docs/dyn/blogger_v3.blogs.html
index 179db95..060c71e 100644
--- a/docs/dyn/blogger_v3.blogs.html
+++ b/docs/dyn/blogger_v3.blogs.html
@@ -78,7 +78,7 @@
   <code><a href="#get">get(blogId, maxPosts=None)</a></code></p>
 <p class="firstline">Gets one blog by id.</p>
 <p class="toc_element">
-  <code><a href="#getByUrl">getByUrl(url=None)</a></code></p>
+  <code><a href="#getByUrl">getByUrl(url)</a></code></p>
 <p class="firstline">Retrieve a Blog by URL.</p>
 <p class="toc_element">
   <code><a href="#listByUser">listByUser(userId)</a></code></p>
@@ -186,11 +186,11 @@
 </div>
 
 <div class="method">
-    <code class="details" id="getByUrl">getByUrl(url=None)</code>
+    <code class="details" id="getByUrl">getByUrl(url)</code>
   <pre>Retrieve a Blog by URL.
 
 Args:
-  url: string, The URL of the blog to retrieve.
+  url: string, The URL of the blog to retrieve. (required)
 
 Returns:
   An object of the form:
diff --git a/docs/dyn/blogger_v3.posts.html b/docs/dyn/blogger_v3.posts.html
index 19d99be..631a466 100644
--- a/docs/dyn/blogger_v3.posts.html
+++ b/docs/dyn/blogger_v3.posts.html
@@ -81,7 +81,7 @@
   <code><a href="#get">get(blogId, postId, maxComments=None)</a></code></p>
 <p class="firstline">Get a post by id.</p>
 <p class="toc_element">
-  <code><a href="#getByPath">getByPath(blogId, path=None, maxComments=None)</a></code></p>
+  <code><a href="#getByPath">getByPath(blogId, path, maxComments=None)</a></code></p>
 <p class="firstline">Retrieve a Post by Path.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(blogId, body)</a></code></p>
@@ -96,7 +96,7 @@
   <code><a href="#patch">patch(blogId, postId, body)</a></code></p>
 <p class="firstline">Update a post. This method supports patch semantics.</p>
 <p class="toc_element">
-  <code><a href="#search">search(blogId, q=None)</a></code></p>
+  <code><a href="#search">search(blogId, q)</a></code></p>
 <p class="firstline">Search for a post.</p>
 <p class="toc_element">
   <code><a href="#update">update(blogId, postId, body)</a></code></p>
@@ -189,12 +189,12 @@
 </div>
 
 <div class="method">
-    <code class="details" id="getByPath">getByPath(blogId, path=None, maxComments=None)</code>
+    <code class="details" id="getByPath">getByPath(blogId, path, maxComments=None)</code>
   <pre>Retrieve a Post by Path.
 
 Args:
   blogId: string, ID of the blog to fetch the post from. (required)
-  path: string, Path of the Post to retrieve.
+  path: string, Path of the Post to retrieve. (required)
   maxComments: integer, Maximum number of comments to pull back on a post.
 
 Returns:
@@ -647,12 +647,12 @@
 </div>
 
 <div class="method">
-    <code class="details" id="search">search(blogId, q=None)</code>
+    <code class="details" id="search">search(blogId, q)</code>
   <pre>Search for a post.
 
 Args:
   blogId: string, ID of the blog to fetch the post from. (required)
-  q: string, Query terms to search this blog for matching posts.
+  q: string, Query terms to search this blog for matching posts. (required)
 
 Returns:
   An object of the form:
diff --git a/docs/dyn/calendar_v3.calendarList.html b/docs/dyn/calendar_v3.calendarList.html
index 0ab7cf8..4e608df 100644
--- a/docs/dyn/calendar_v3.calendarList.html
+++ b/docs/dyn/calendar_v3.calendarList.html
@@ -130,6 +130,7 @@
       "description": "A String", # Description of the calendar. Optional. Read-only.
       "colorId": "A String", # The color of the calendar. This is an ID referring to an entry in the "calendar" section of the colors definition (see the "colors" endpoint). Optional.
       "selected": True or False, # Whether the calendar content shows up in the calendar UI. Optional. The default is False.
+      "primary": True or False, # Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False.
       "summary": "A String", # Title of the calendar. Read-only.
       "etag": "A String", # ETag of the resource.
       "location": "A String", # Geographic location of the calendar as free-form text. Optional. Read-only.
@@ -169,6 +170,7 @@
     "description": "A String", # Description of the calendar. Optional. Read-only.
     "colorId": "A String", # The color of the calendar. This is an ID referring to an entry in the "calendar" section of the colors definition (see the "colors" endpoint). Optional.
     "selected": True or False, # Whether the calendar content shows up in the calendar UI. Optional. The default is False.
+    "primary": True or False, # Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False.
     "summary": "A String", # Title of the calendar. Read-only.
     "etag": "A String", # ETag of the resource.
     "location": "A String", # Geographic location of the calendar as free-form text. Optional. Read-only.
@@ -204,6 +206,7 @@
       "description": "A String", # Description of the calendar. Optional. Read-only.
       "colorId": "A String", # The color of the calendar. This is an ID referring to an entry in the "calendar" section of the colors definition (see the "colors" endpoint). Optional.
       "selected": True or False, # Whether the calendar content shows up in the calendar UI. Optional. The default is False.
+      "primary": True or False, # Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False.
       "summary": "A String", # Title of the calendar. Read-only.
       "etag": "A String", # ETag of the resource.
       "location": "A String", # Geographic location of the calendar as free-form text. Optional. Read-only.
@@ -256,6 +259,7 @@
           "description": "A String", # Description of the calendar. Optional. Read-only.
           "colorId": "A String", # The color of the calendar. This is an ID referring to an entry in the "calendar" section of the colors definition (see the "colors" endpoint). Optional.
           "selected": True or False, # Whether the calendar content shows up in the calendar UI. Optional. The default is False.
+          "primary": True or False, # Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False.
           "summary": "A String", # Title of the calendar. Read-only.
           "etag": "A String", # ETag of the resource.
           "location": "A String", # Geographic location of the calendar as free-form text. Optional. Read-only.
@@ -314,6 +318,7 @@
     "description": "A String", # Description of the calendar. Optional. Read-only.
     "colorId": "A String", # The color of the calendar. This is an ID referring to an entry in the "calendar" section of the colors definition (see the "colors" endpoint). Optional.
     "selected": True or False, # Whether the calendar content shows up in the calendar UI. Optional. The default is False.
+    "primary": True or False, # Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False.
     "summary": "A String", # Title of the calendar. Read-only.
     "etag": "A String", # ETag of the resource.
     "location": "A String", # Geographic location of the calendar as free-form text. Optional. Read-only.
@@ -349,6 +354,7 @@
       "description": "A String", # Description of the calendar. Optional. Read-only.
       "colorId": "A String", # The color of the calendar. This is an ID referring to an entry in the "calendar" section of the colors definition (see the "colors" endpoint). Optional.
       "selected": True or False, # Whether the calendar content shows up in the calendar UI. Optional. The default is False.
+      "primary": True or False, # Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False.
       "summary": "A String", # Title of the calendar. Read-only.
       "etag": "A String", # ETag of the resource.
       "location": "A String", # Geographic location of the calendar as free-form text. Optional. Read-only.
@@ -389,6 +395,7 @@
     "description": "A String", # Description of the calendar. Optional. Read-only.
     "colorId": "A String", # The color of the calendar. This is an ID referring to an entry in the "calendar" section of the colors definition (see the "colors" endpoint). Optional.
     "selected": True or False, # Whether the calendar content shows up in the calendar UI. Optional. The default is False.
+    "primary": True or False, # Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False.
     "summary": "A String", # Title of the calendar. Read-only.
     "etag": "A String", # ETag of the resource.
     "location": "A String", # Geographic location of the calendar as free-form text. Optional. Read-only.
@@ -424,6 +431,7 @@
       "description": "A String", # Description of the calendar. Optional. Read-only.
       "colorId": "A String", # The color of the calendar. This is an ID referring to an entry in the "calendar" section of the colors definition (see the "colors" endpoint). Optional.
       "selected": True or False, # Whether the calendar content shows up in the calendar UI. Optional. The default is False.
+      "primary": True or False, # Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False.
       "summary": "A String", # Title of the calendar. Read-only.
       "etag": "A String", # ETag of the resource.
       "location": "A String", # Geographic location of the calendar as free-form text. Optional. Read-only.
diff --git a/docs/dyn/calendar_v3.events.html b/docs/dyn/calendar_v3.events.html
index f96363d..14939a3 100644
--- a/docs/dyn/calendar_v3.events.html
+++ b/docs/dyn/calendar_v3.events.html
@@ -87,7 +87,7 @@
   <code><a href="#insert">insert(calendarId, body, sendNotifications=None, maxAttendees=None)</a></code></p>
 <p class="firstline">Creates an event.</p>
 <p class="toc_element">
-  <code><a href="#instances">instances(calendarId, eventId, timeMin=None, pageToken=None, alwaysIncludeEmail=None, showDeleted=None, maxAttendees=None, maxResults=None, timeMax=None, timeZone=None, originalStart=None)</a></code></p>
+  <code><a href="#instances">instances(calendarId, eventId, timeMin=None, showDeleted=None, alwaysIncludeEmail=None, pageToken=None, maxAttendees=None, maxResults=None, timeMax=None, timeZone=None, originalStart=None)</a></code></p>
 <p class="firstline">Returns instances of the specified recurring event.</p>
 <p class="toc_element">
   <code><a href="#instances_next">instances_next(previous_request, previous_response)</a></code></p>
@@ -763,16 +763,16 @@
 </div>
 
 <div class="method">
-    <code class="details" id="instances">instances(calendarId, eventId, timeMin=None, pageToken=None, alwaysIncludeEmail=None, showDeleted=None, maxAttendees=None, maxResults=None, timeMax=None, timeZone=None, originalStart=None)</code>
+    <code class="details" id="instances">instances(calendarId, eventId, timeMin=None, showDeleted=None, alwaysIncludeEmail=None, pageToken=None, maxAttendees=None, maxResults=None, timeMax=None, timeZone=None, originalStart=None)</code>
   <pre>Returns instances of the specified recurring event.
 
 Args:
   calendarId: string, Calendar identifier. (required)
   eventId: string, Recurring event identifier. (required)
   timeMin: string, Lower bound (inclusive) for an event's end time to filter by. Optional. The default is not to filter by end time.
-  pageToken: string, Token specifying which result page to return. Optional.
+  showDeleted: boolean, Whether to include deleted events (with 'status' equals 'cancelled') in the result. Cancelled instances of recurring events will still be included if 'singleEvents' is False. Optional. The default is False.
   alwaysIncludeEmail: boolean, Whether to always include a value in the "email" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.
-  showDeleted: boolean, Whether to include deleted events (with 'eventStatus' equals 'cancelled') in the result. Optional. The default is False.
+  pageToken: string, Token specifying which result page to return. Optional.
   maxAttendees: integer, The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.
   maxResults: integer, Maximum number of events returned on one result page. Optional.
   timeMax: string, Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time.
@@ -958,7 +958,7 @@
   updatedMin: string, Lower bound for an event's last modification time (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by last modification time.
   singleEvents: boolean, Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves. Optional. The default is False.
   alwaysIncludeEmail: boolean, Whether to always include a value in the "email" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.
-  showDeleted: boolean, Whether to include deleted single events (with 'status' equals 'cancelled') in the result. Cancelled instances of recurring events will still be included if 'singleEvents' is False. Optional. The default is False.
+  showDeleted: boolean, Whether to include deleted events (with 'status' equals 'cancelled') in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if 'showDeleted' and 'singleEvents' are both False. If 'showDeleted' and 'singleEvents' are both True only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False.
   maxAttendees: integer, The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.
   iCalUID: string, Specifies iCalendar UID (iCalUID) of events to be included in the response. Optional.
   maxResults: integer, Maximum number of events returned on one result page. Optional.
diff --git a/docs/dyn/discovery_v1.apis.html b/docs/dyn/discovery_v1.apis.html
index 5635b84..280e348 100644
--- a/docs/dyn/discovery_v1.apis.html
+++ b/docs/dyn/discovery_v1.apis.html
@@ -134,9 +134,7 @@
           },
         },
         "supportsMediaUpload": True or False, # Whether this method supports media uploads.
-        "request": { # The schema for the request.
-          "$ref": "A String", # Schema ID for the request schema.
-        },
+        "etagRequired": True or False, # Whether this method requires an ETag to be specified. The ETag is sent as an HTTP If-Match or If-None-Match header.
         "mediaUpload": { # Media upload parameters.
           "maxSize": "A String", # Maximum size of a media upload, such as "1MB", "2GB" or "3TB".
           "protocols": { # Supported upload protocols.
@@ -153,6 +151,9 @@
             "A String",
           ],
         },
+        "request": { # The schema for the request.
+          "$ref": "A String", # Schema ID for the request schema.
+        },
         "response": { # The schema for the response.
           "$ref": "A String", # Schema ID for the response schema.
         },
@@ -291,9 +292,7 @@
               },
             },
             "supportsMediaUpload": True or False, # Whether this method supports media uploads.
-            "request": { # The schema for the request.
-              "$ref": "A String", # Schema ID for the request schema.
-            },
+            "etagRequired": True or False, # Whether this method requires an ETag to be specified. The ETag is sent as an HTTP If-Match or If-None-Match header.
             "mediaUpload": { # Media upload parameters.
               "maxSize": "A String", # Maximum size of a media upload, such as "1MB", "2GB" or "3TB".
               "protocols": { # Supported upload protocols.
@@ -310,6 +309,9 @@
                 "A String",
               ],
             },
+            "request": { # The schema for the request.
+              "$ref": "A String", # Schema ID for the request schema.
+            },
             "response": { # The schema for the response.
               "$ref": "A String", # Schema ID for the response schema.
             },
diff --git a/docs/dyn/drive_v2.about.html b/docs/dyn/drive_v2.about.html
index 09b6d34..24a3664 100644
--- a/docs/dyn/drive_v2.about.html
+++ b/docs/dyn/drive_v2.about.html
@@ -98,14 +98,15 @@
         "featureRate": 3.14, # The request limit rate for this feature, in queries per second.
       },
     ],
-    "quotaBytesUsed": "A String", # The number of quota bytes used.
+    "quotaBytesUsed": "A String", # The number of quota bytes used by Google Drive.
     "user": { # The JSON template for a user. # The authenticated user.
       "picture": { # The user's profile picture.
         "url": "A String", # A URL that points to a profile picture of this user.
       },
       "kind": "drive#user", # This is always drive#user.
-      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
       "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
     },
     "permissionId": "A String", # The current user's ID as visible in the permissions collection.
     "maxUploadSizes": [ # List of max upload sizes for each file type. The most specific type takes precedence.
diff --git a/docs/dyn/drive_v2.apps.html b/docs/dyn/drive_v2.apps.html
index 27f5594..d8dfd75 100644
--- a/docs/dyn/drive_v2.apps.html
+++ b/docs/dyn/drive_v2.apps.html
@@ -79,7 +79,7 @@
 <p class="firstline">Gets a specific app.</p>
 <p class="toc_element">
   <code><a href="#list">list()</a></code></p>
-<p class="firstline">Lists a user's apps.</p>
+<p class="firstline">Lists a user's installed apps.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="get">get(appId)</code>
@@ -91,7 +91,7 @@
 Returns:
   An object of the form:
 
-    { # Information about a third-party application which the user has installed or given access to Google Drive.
+    { # The apps resource provides a list of the apps that a user has installed, with information about each app's supported MIME types, file extensions, and other details.
     "kind": "drive#app", # This is always drive#app.
     "primaryFileExtensions": [ # The list of primary file extensions.
       "A String",
@@ -129,7 +129,7 @@
 
 <div class="method">
     <code class="details" id="list">list()</code>
-  <pre>Lists a user's apps.
+  <pre>Lists a user's installed apps.
 
 Args:
 
@@ -138,7 +138,7 @@
 
     { # A list of third-party applications which the user has installed or given access to Google Drive.
     "items": [ # The actual list of apps.
-      { # Information about a third-party application which the user has installed or given access to Google Drive.
+      { # The apps resource provides a list of the apps that a user has installed, with information about each app's supported MIME types, file extensions, and other details.
         "kind": "drive#app", # This is always drive#app.
         "primaryFileExtensions": [ # The list of primary file extensions.
           "A String",
diff --git a/docs/dyn/drive_v2.changes.html b/docs/dyn/drive_v2.changes.html
index 416526e..505e7af 100644
--- a/docs/dyn/drive_v2.changes.html
+++ b/docs/dyn/drive_v2.changes.html
@@ -99,7 +99,6 @@
     "deleted": True or False, # Whether the file has been deleted.
     "file": { # The metadata for a file. # The updated state of the file. Present if the file has not been deleted.
       "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-      "appDataContents": True or False, # Whether this file is in the appdata folder.
       "thumbnailLink": "A String", # A link to the file's thumbnail.
       "labels": { # A group of labels for the file.
         "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -109,13 +108,33 @@
         "trashed": True or False, # Whether this file has been trashed.
       },
       "indexableText": { # Indexable text attributes for the file (can only be written)
-        "text": "A String", # The text to be indexed for this file
+        "text": "A String", # The text to be indexed for this file.
       },
       "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
       "etag": "A String", # ETag of the file.
-      "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+      "lastModifyingUserName": "A String", # Name of the last user to modify this file.
       "writersCanShare": True or False, # Whether writers can share the document with other users.
-      "id": "A String", # The id of the file.
+      "owners": [ # The owner(s) of this file.
+        { # The JSON template for a user.
+          "picture": { # The user's profile picture.
+            "url": "A String", # A URL that points to a profile picture of this user.
+          },
+          "kind": "drive#user", # This is always drive#user.
+          "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+          "displayName": "A String", # A plain text displayable name for this user.
+          "permissionId": "A String", # The user's ID as visible in the permissions collection.
+        },
+      ],
+      "id": "A String", # The ID of the file.
+      "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+        "picture": { # The user's profile picture.
+          "url": "A String", # A URL that points to a profile picture of this user.
+        },
+        "kind": "drive#user", # This is always drive#user.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+        "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
+      },
       "title": "A String", # The title of this file.
       "ownerNames": [ # Name(s) of the owner(s) of this file.
         "A String",
@@ -147,9 +166,9 @@
       "editable": True or False, # Whether the file can be edited by the current user.
       "kind": "drive#file", # The type of file. This is always drive#file.
       "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-      "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+      "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
       "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-      "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+      "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
       "iconLink": "A String", # A link to the file's icon.
       "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
         "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -181,8 +200,8 @@
       "embedLink": "A String", # A link for embedding the file.
       "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
       "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-      "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-      "userPermission": { # A single permission for a file.
+      "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+      "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
         "withLink": True or False, # Whether the link is required for this permission.
         "kind": "drive#permission", # This is always drive#permission.
         "name": "A String", # The name for this permission.
@@ -205,7 +224,7 @@
         ],
         "selfLink": "A String", # A link back to this permission.
       },
-      "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+      "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
       "selfLink": "A String", # A link back to this file.
       "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
     },
@@ -238,7 +257,6 @@
         "deleted": True or False, # Whether the file has been deleted.
         "file": { # The metadata for a file. # The updated state of the file. Present if the file has not been deleted.
           "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-          "appDataContents": True or False, # Whether this file is in the appdata folder.
           "thumbnailLink": "A String", # A link to the file's thumbnail.
           "labels": { # A group of labels for the file.
             "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -248,13 +266,33 @@
             "trashed": True or False, # Whether this file has been trashed.
           },
           "indexableText": { # Indexable text attributes for the file (can only be written)
-            "text": "A String", # The text to be indexed for this file
+            "text": "A String", # The text to be indexed for this file.
           },
           "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
           "etag": "A String", # ETag of the file.
-          "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+          "lastModifyingUserName": "A String", # Name of the last user to modify this file.
           "writersCanShare": True or False, # Whether writers can share the document with other users.
-          "id": "A String", # The id of the file.
+          "owners": [ # The owner(s) of this file.
+            { # The JSON template for a user.
+              "picture": { # The user's profile picture.
+                "url": "A String", # A URL that points to a profile picture of this user.
+              },
+              "kind": "drive#user", # This is always drive#user.
+              "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+              "displayName": "A String", # A plain text displayable name for this user.
+              "permissionId": "A String", # The user's ID as visible in the permissions collection.
+            },
+          ],
+          "id": "A String", # The ID of the file.
+          "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+            "picture": { # The user's profile picture.
+              "url": "A String", # A URL that points to a profile picture of this user.
+            },
+            "kind": "drive#user", # This is always drive#user.
+            "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+            "displayName": "A String", # A plain text displayable name for this user.
+            "permissionId": "A String", # The user's ID as visible in the permissions collection.
+          },
           "title": "A String", # The title of this file.
           "ownerNames": [ # Name(s) of the owner(s) of this file.
             "A String",
@@ -286,9 +324,9 @@
           "editable": True or False, # Whether the file can be edited by the current user.
           "kind": "drive#file", # The type of file. This is always drive#file.
           "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-          "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+          "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
           "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-          "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+          "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
           "iconLink": "A String", # A link to the file's icon.
           "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
             "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -320,8 +358,8 @@
           "embedLink": "A String", # A link for embedding the file.
           "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
           "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-          "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-          "userPermission": { # A single permission for a file.
+          "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+          "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
             "withLink": True or False, # Whether the link is required for this permission.
             "kind": "drive#permission", # This is always drive#permission.
             "name": "A String", # The name for this permission.
@@ -344,7 +382,7 @@
             ],
             "selfLink": "A String", # A link back to this permission.
           },
-          "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+          "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
           "selfLink": "A String", # A link back to this file.
           "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
         },
diff --git a/docs/dyn/drive_v2.children.html b/docs/dyn/drive_v2.children.html
index 188f97d..6babcde 100644
--- a/docs/dyn/drive_v2.children.html
+++ b/docs/dyn/drive_v2.children.html
@@ -111,7 +111,7 @@
 Returns:
   An object of the form:
 
-    { # A reference to a file's child.
+    { # A reference to a folder's child.
       "kind": "drive#childReference", # This is always drive#childReference.
       "childLink": "A String", # A link to the child.
       "id": "A String", # The ID of the child.
@@ -128,7 +128,7 @@
   body: object, The request body. (required)
     The object takes the form of:
 
-{ # A reference to a file's child.
+{ # A reference to a folder's child.
     "kind": "drive#childReference", # This is always drive#childReference.
     "childLink": "A String", # A link to the child.
     "id": "A String", # The ID of the child.
@@ -139,7 +139,7 @@
 Returns:
   An object of the form:
 
-    { # A reference to a file's child.
+    { # A reference to a folder's child.
       "kind": "drive#childReference", # This is always drive#childReference.
       "childLink": "A String", # A link to the child.
       "id": "A String", # The ID of the child.
@@ -164,7 +164,7 @@
     "nextPageToken": "A String", # The page token for the next page of children.
     "kind": "drive#childList", # This is always drive#childList.
     "items": [ # The actual list of children.
-      { # A reference to a file's child.
+      { # A reference to a folder's child.
           "kind": "drive#childReference", # This is always drive#childReference.
           "childLink": "A String", # A link to the child.
           "id": "A String", # The ID of the child.
diff --git a/docs/dyn/drive_v2.comments.html b/docs/dyn/drive_v2.comments.html
index 945d2c4..da882e7 100644
--- a/docs/dyn/drive_v2.comments.html
+++ b/docs/dyn/drive_v2.comments.html
@@ -129,8 +129,9 @@
           "url": "A String", # A URL that points to a profile picture of this user.
         },
         "kind": "drive#user", # This is always drive#user.
-        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
         "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
       },
       "deleted": True or False, # Whether this comment has been deleted. If a comment has been deleted the content will be cleared and this will only represent a comment that once existed.
       "replies": [ # Replies to this post.
@@ -141,8 +142,9 @@
               "url": "A String", # A URL that points to a profile picture of this user.
             },
             "kind": "drive#user", # This is always drive#user.
-            "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+            "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
             "displayName": "A String", # A plain text displayable name for this user.
+            "permissionId": "A String", # The user's ID as visible in the permissions collection.
           },
           "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
           "htmlContent": "A String", # HTML formatted content for this reply.
@@ -190,8 +192,9 @@
         "url": "A String", # A URL that points to a profile picture of this user.
       },
       "kind": "drive#user", # This is always drive#user.
-      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
       "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
     },
     "deleted": True or False, # Whether this comment has been deleted. If a comment has been deleted the content will be cleared and this will only represent a comment that once existed.
     "replies": [ # Replies to this post.
@@ -202,8 +205,9 @@
             "url": "A String", # A URL that points to a profile picture of this user.
           },
           "kind": "drive#user", # This is always drive#user.
-          "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+          "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
           "displayName": "A String", # A plain text displayable name for this user.
+          "permissionId": "A String", # The user's ID as visible in the permissions collection.
         },
         "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
         "htmlContent": "A String", # HTML formatted content for this reply.
@@ -245,8 +249,9 @@
           "url": "A String", # A URL that points to a profile picture of this user.
         },
         "kind": "drive#user", # This is always drive#user.
-        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
         "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
       },
       "deleted": True or False, # Whether this comment has been deleted. If a comment has been deleted the content will be cleared and this will only represent a comment that once existed.
       "replies": [ # Replies to this post.
@@ -257,8 +262,9 @@
               "url": "A String", # A URL that points to a profile picture of this user.
             },
             "kind": "drive#user", # This is always drive#user.
-            "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+            "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
             "displayName": "A String", # A plain text displayable name for this user.
+            "permissionId": "A String", # The user's ID as visible in the permissions collection.
           },
           "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
           "htmlContent": "A String", # HTML formatted content for this reply.
@@ -314,8 +320,9 @@
               "url": "A String", # A URL that points to a profile picture of this user.
             },
             "kind": "drive#user", # This is always drive#user.
-            "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+            "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
             "displayName": "A String", # A plain text displayable name for this user.
+            "permissionId": "A String", # The user's ID as visible in the permissions collection.
           },
           "deleted": True or False, # Whether this comment has been deleted. If a comment has been deleted the content will be cleared and this will only represent a comment that once existed.
           "replies": [ # Replies to this post.
@@ -326,8 +333,9 @@
                   "url": "A String", # A URL that points to a profile picture of this user.
                 },
                 "kind": "drive#user", # This is always drive#user.
-                "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+                "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
                 "displayName": "A String", # A plain text displayable name for this user.
+                "permissionId": "A String", # The user's ID as visible in the permissions collection.
               },
               "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
               "htmlContent": "A String", # HTML formatted content for this reply.
@@ -393,8 +401,9 @@
         "url": "A String", # A URL that points to a profile picture of this user.
       },
       "kind": "drive#user", # This is always drive#user.
-      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
       "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
     },
     "deleted": True or False, # Whether this comment has been deleted. If a comment has been deleted the content will be cleared and this will only represent a comment that once existed.
     "replies": [ # Replies to this post.
@@ -405,8 +414,9 @@
             "url": "A String", # A URL that points to a profile picture of this user.
           },
           "kind": "drive#user", # This is always drive#user.
-          "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+          "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
           "displayName": "A String", # A plain text displayable name for this user.
+          "permissionId": "A String", # The user's ID as visible in the permissions collection.
         },
         "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
         "htmlContent": "A String", # HTML formatted content for this reply.
@@ -448,8 +458,9 @@
           "url": "A String", # A URL that points to a profile picture of this user.
         },
         "kind": "drive#user", # This is always drive#user.
-        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
         "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
       },
       "deleted": True or False, # Whether this comment has been deleted. If a comment has been deleted the content will be cleared and this will only represent a comment that once existed.
       "replies": [ # Replies to this post.
@@ -460,8 +471,9 @@
               "url": "A String", # A URL that points to a profile picture of this user.
             },
             "kind": "drive#user", # This is always drive#user.
-            "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+            "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
             "displayName": "A String", # A plain text displayable name for this user.
+            "permissionId": "A String", # The user's ID as visible in the permissions collection.
           },
           "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
           "htmlContent": "A String", # HTML formatted content for this reply.
@@ -510,8 +522,9 @@
         "url": "A String", # A URL that points to a profile picture of this user.
       },
       "kind": "drive#user", # This is always drive#user.
-      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
       "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
     },
     "deleted": True or False, # Whether this comment has been deleted. If a comment has been deleted the content will be cleared and this will only represent a comment that once existed.
     "replies": [ # Replies to this post.
@@ -522,8 +535,9 @@
             "url": "A String", # A URL that points to a profile picture of this user.
           },
           "kind": "drive#user", # This is always drive#user.
-          "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+          "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
           "displayName": "A String", # A plain text displayable name for this user.
+          "permissionId": "A String", # The user's ID as visible in the permissions collection.
         },
         "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
         "htmlContent": "A String", # HTML formatted content for this reply.
@@ -565,8 +579,9 @@
           "url": "A String", # A URL that points to a profile picture of this user.
         },
         "kind": "drive#user", # This is always drive#user.
-        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
         "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
       },
       "deleted": True or False, # Whether this comment has been deleted. If a comment has been deleted the content will be cleared and this will only represent a comment that once existed.
       "replies": [ # Replies to this post.
@@ -577,8 +592,9 @@
               "url": "A String", # A URL that points to a profile picture of this user.
             },
             "kind": "drive#user", # This is always drive#user.
-            "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+            "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
             "displayName": "A String", # A plain text displayable name for this user.
+            "permissionId": "A String", # The user's ID as visible in the permissions collection.
           },
           "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
           "htmlContent": "A String", # HTML formatted content for this reply.
diff --git a/docs/dyn/drive_v2.files.html b/docs/dyn/drive_v2.files.html
index 87cbc06..407b827 100644
--- a/docs/dyn/drive_v2.files.html
+++ b/docs/dyn/drive_v2.files.html
@@ -84,7 +84,7 @@
   <code><a href="#get">get(fileId, projection=None, updateViewedDate=None)</a></code></p>
 <p class="firstline">Gets a file's metadata by ID.</p>
 <p class="toc_element">
-  <code><a href="#insert">insert(body=None, media_body=None, convert=None, ocrLanguage=None, ocr=None, timedTextLanguage=None, timedTextTrackName=None, pinned=None)</a></code></p>
+  <code><a href="#insert">insert(body=None, media_body=None, convert=None, useContentAsIndexableText=None, ocrLanguage=None, ocr=None, timedTextLanguage=None, timedTextTrackName=None, pinned=None)</a></code></p>
 <p class="firstline">Insert a new file.</p>
 <p class="toc_element">
   <code><a href="#list">list(q=None, projection=None, pageToken=None, maxResults=None)</a></code></p>
@@ -93,7 +93,7 @@
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
-  <code><a href="#patch">patch(fileId, body, newRevision=None, pinned=None, ocrLanguage=None, ocr=None, updateViewedDate=None, timedTextTrackName=None, convert=None, setModifiedDate=None, timedTextLanguage=None)</a></code></p>
+  <code><a href="#patch">patch(fileId, body, newRevision=None, pinned=None, ocrLanguage=None, ocr=None, updateViewedDate=None, timedTextTrackName=None, convert=None, useContentAsIndexableText=None, setModifiedDate=None, timedTextLanguage=None)</a></code></p>
 <p class="firstline">Updates file metadata and/or content. This method supports patch semantics.</p>
 <p class="toc_element">
   <code><a href="#touch">touch(fileId)</a></code></p>
@@ -105,8 +105,8 @@
   <code><a href="#untrash">untrash(fileId)</a></code></p>
 <p class="firstline">Restores a file from the trash.</p>
 <p class="toc_element">
-  <code><a href="#update">update(fileId, body=None, newRevision=None, media_body=None, ocrLanguage=None, ocr=None, pinned=None, updateViewedDate=None, timedTextTrackName=None, convert=None, setModifiedDate=None, timedTextLanguage=None)</a></code></p>
-<p class="firstline">Updates file metadata and/or content</p>
+  <code><a href="#update">update(fileId, body=None, newRevision=None, media_body=None, ocrLanguage=None, ocr=None, pinned=None, updateViewedDate=None, timedTextTrackName=None, convert=None, useContentAsIndexableText=None, setModifiedDate=None, timedTextLanguage=None)</a></code></p>
+<p class="firstline">Updates file metadata and/or content.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="copy">copy(fileId, body, pinned=None, convert=None, ocrLanguage=None, ocr=None, timedTextLanguage=None, timedTextTrackName=None)</code>
@@ -119,7 +119,6 @@
 
 { # The metadata for a file.
   "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-  "appDataContents": True or False, # Whether this file is in the appdata folder.
   "thumbnailLink": "A String", # A link to the file's thumbnail.
   "labels": { # A group of labels for the file.
     "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -129,13 +128,33 @@
     "trashed": True or False, # Whether this file has been trashed.
   },
   "indexableText": { # Indexable text attributes for the file (can only be written)
-    "text": "A String", # The text to be indexed for this file
+    "text": "A String", # The text to be indexed for this file.
   },
   "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
   "etag": "A String", # ETag of the file.
-  "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+  "lastModifyingUserName": "A String", # Name of the last user to modify this file.
   "writersCanShare": True or False, # Whether writers can share the document with other users.
-  "id": "A String", # The id of the file.
+  "owners": [ # The owner(s) of this file.
+    { # The JSON template for a user.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
+  ],
+  "id": "A String", # The ID of the file.
+  "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+    "picture": { # The user's profile picture.
+      "url": "A String", # A URL that points to a profile picture of this user.
+    },
+    "kind": "drive#user", # This is always drive#user.
+    "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+    "displayName": "A String", # A plain text displayable name for this user.
+    "permissionId": "A String", # The user's ID as visible in the permissions collection.
+  },
   "title": "A String", # The title of this file.
   "ownerNames": [ # Name(s) of the owner(s) of this file.
     "A String",
@@ -167,9 +186,9 @@
   "editable": True or False, # Whether the file can be edited by the current user.
   "kind": "drive#file", # The type of file. This is always drive#file.
   "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-  "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+  "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
   "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-  "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+  "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
   "iconLink": "A String", # A link to the file's icon.
   "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
     "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -201,8 +220,8 @@
   "embedLink": "A String", # A link for embedding the file.
   "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
   "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-  "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-  "userPermission": { # A single permission for a file.
+  "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+  "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
     "withLink": True or False, # Whether the link is required for this permission.
     "kind": "drive#permission", # This is always drive#permission.
     "name": "A String", # The name for this permission.
@@ -225,7 +244,7 @@
     ],
     "selfLink": "A String", # A link back to this permission.
   },
-  "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+  "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
   "selfLink": "A String", # A link back to this file.
   "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
 }
@@ -242,7 +261,6 @@
 
     { # The metadata for a file.
     "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-    "appDataContents": True or False, # Whether this file is in the appdata folder.
     "thumbnailLink": "A String", # A link to the file's thumbnail.
     "labels": { # A group of labels for the file.
       "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -252,13 +270,33 @@
       "trashed": True or False, # Whether this file has been trashed.
     },
     "indexableText": { # Indexable text attributes for the file (can only be written)
-      "text": "A String", # The text to be indexed for this file
+      "text": "A String", # The text to be indexed for this file.
     },
     "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
     "etag": "A String", # ETag of the file.
-    "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+    "lastModifyingUserName": "A String", # Name of the last user to modify this file.
     "writersCanShare": True or False, # Whether writers can share the document with other users.
-    "id": "A String", # The id of the file.
+    "owners": [ # The owner(s) of this file.
+      { # The JSON template for a user.
+        "picture": { # The user's profile picture.
+          "url": "A String", # A URL that points to a profile picture of this user.
+        },
+        "kind": "drive#user", # This is always drive#user.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+        "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
+      },
+    ],
+    "id": "A String", # The ID of the file.
+    "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
     "title": "A String", # The title of this file.
     "ownerNames": [ # Name(s) of the owner(s) of this file.
       "A String",
@@ -290,9 +328,9 @@
     "editable": True or False, # Whether the file can be edited by the current user.
     "kind": "drive#file", # The type of file. This is always drive#file.
     "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-    "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+    "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
     "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
     "iconLink": "A String", # A link to the file's icon.
     "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
       "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -324,8 +362,8 @@
     "embedLink": "A String", # A link for embedding the file.
     "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
     "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-    "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-    "userPermission": { # A single permission for a file.
+    "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+    "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
       "withLink": True or False, # Whether the link is required for this permission.
       "kind": "drive#permission", # This is always drive#permission.
       "name": "A String", # The name for this permission.
@@ -348,7 +386,7 @@
       ],
       "selfLink": "A String", # A link back to this permission.
     },
-    "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+    "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
     "selfLink": "A String", # A link back to this file.
     "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
   }</pre>
@@ -380,7 +418,6 @@
 
     { # The metadata for a file.
     "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-    "appDataContents": True or False, # Whether this file is in the appdata folder.
     "thumbnailLink": "A String", # A link to the file's thumbnail.
     "labels": { # A group of labels for the file.
       "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -390,13 +427,33 @@
       "trashed": True or False, # Whether this file has been trashed.
     },
     "indexableText": { # Indexable text attributes for the file (can only be written)
-      "text": "A String", # The text to be indexed for this file
+      "text": "A String", # The text to be indexed for this file.
     },
     "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
     "etag": "A String", # ETag of the file.
-    "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+    "lastModifyingUserName": "A String", # Name of the last user to modify this file.
     "writersCanShare": True or False, # Whether writers can share the document with other users.
-    "id": "A String", # The id of the file.
+    "owners": [ # The owner(s) of this file.
+      { # The JSON template for a user.
+        "picture": { # The user's profile picture.
+          "url": "A String", # A URL that points to a profile picture of this user.
+        },
+        "kind": "drive#user", # This is always drive#user.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+        "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
+      },
+    ],
+    "id": "A String", # The ID of the file.
+    "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
     "title": "A String", # The title of this file.
     "ownerNames": [ # Name(s) of the owner(s) of this file.
       "A String",
@@ -428,9 +485,9 @@
     "editable": True or False, # Whether the file can be edited by the current user.
     "kind": "drive#file", # The type of file. This is always drive#file.
     "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-    "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+    "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
     "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
     "iconLink": "A String", # A link to the file's icon.
     "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
       "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -462,8 +519,8 @@
     "embedLink": "A String", # A link for embedding the file.
     "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
     "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-    "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-    "userPermission": { # A single permission for a file.
+    "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+    "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
       "withLink": True or False, # Whether the link is required for this permission.
       "kind": "drive#permission", # This is always drive#permission.
       "name": "A String", # The name for this permission.
@@ -486,14 +543,14 @@
       ],
       "selfLink": "A String", # A link back to this permission.
     },
-    "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+    "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
     "selfLink": "A String", # A link back to this file.
     "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
   }</pre>
 </div>
 
 <div class="method">
-    <code class="details" id="insert">insert(body=None, media_body=None, convert=None, ocrLanguage=None, ocr=None, timedTextLanguage=None, timedTextTrackName=None, pinned=None)</code>
+    <code class="details" id="insert">insert(body=None, media_body=None, convert=None, useContentAsIndexableText=None, ocrLanguage=None, ocr=None, timedTextLanguage=None, timedTextTrackName=None, pinned=None)</code>
   <pre>Insert a new file.
 
 Args:
@@ -502,7 +559,6 @@
 
 { # The metadata for a file.
   "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-  "appDataContents": True or False, # Whether this file is in the appdata folder.
   "thumbnailLink": "A String", # A link to the file's thumbnail.
   "labels": { # A group of labels for the file.
     "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -512,13 +568,33 @@
     "trashed": True or False, # Whether this file has been trashed.
   },
   "indexableText": { # Indexable text attributes for the file (can only be written)
-    "text": "A String", # The text to be indexed for this file
+    "text": "A String", # The text to be indexed for this file.
   },
   "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
   "etag": "A String", # ETag of the file.
-  "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+  "lastModifyingUserName": "A String", # Name of the last user to modify this file.
   "writersCanShare": True or False, # Whether writers can share the document with other users.
-  "id": "A String", # The id of the file.
+  "owners": [ # The owner(s) of this file.
+    { # The JSON template for a user.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
+  ],
+  "id": "A String", # The ID of the file.
+  "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+    "picture": { # The user's profile picture.
+      "url": "A String", # A URL that points to a profile picture of this user.
+    },
+    "kind": "drive#user", # This is always drive#user.
+    "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+    "displayName": "A String", # A plain text displayable name for this user.
+    "permissionId": "A String", # The user's ID as visible in the permissions collection.
+  },
   "title": "A String", # The title of this file.
   "ownerNames": [ # Name(s) of the owner(s) of this file.
     "A String",
@@ -550,9 +626,9 @@
   "editable": True or False, # Whether the file can be edited by the current user.
   "kind": "drive#file", # The type of file. This is always drive#file.
   "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-  "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+  "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
   "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-  "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+  "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
   "iconLink": "A String", # A link to the file's icon.
   "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
     "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -584,8 +660,8 @@
   "embedLink": "A String", # A link for embedding the file.
   "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
   "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-  "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-  "userPermission": { # A single permission for a file.
+  "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+  "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
     "withLink": True or False, # Whether the link is required for this permission.
     "kind": "drive#permission", # This is always drive#permission.
     "name": "A String", # The name for this permission.
@@ -608,13 +684,14 @@
     ],
     "selfLink": "A String", # A link back to this permission.
   },
-  "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+  "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
   "selfLink": "A String", # A link back to this file.
   "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
 }
 
   media_body: string, The filename of the media request body, or an instance of a MediaUpload object.
   convert: boolean, Whether to convert this file to the corresponding Google Docs format.
+  useContentAsIndexableText: boolean, Whether to use the content as indexable text.
   ocrLanguage: string, If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
   ocr: boolean, Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
   timedTextLanguage: string, The language of the timed text.
@@ -626,7 +703,6 @@
 
     { # The metadata for a file.
     "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-    "appDataContents": True or False, # Whether this file is in the appdata folder.
     "thumbnailLink": "A String", # A link to the file's thumbnail.
     "labels": { # A group of labels for the file.
       "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -636,13 +712,33 @@
       "trashed": True or False, # Whether this file has been trashed.
     },
     "indexableText": { # Indexable text attributes for the file (can only be written)
-      "text": "A String", # The text to be indexed for this file
+      "text": "A String", # The text to be indexed for this file.
     },
     "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
     "etag": "A String", # ETag of the file.
-    "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+    "lastModifyingUserName": "A String", # Name of the last user to modify this file.
     "writersCanShare": True or False, # Whether writers can share the document with other users.
-    "id": "A String", # The id of the file.
+    "owners": [ # The owner(s) of this file.
+      { # The JSON template for a user.
+        "picture": { # The user's profile picture.
+          "url": "A String", # A URL that points to a profile picture of this user.
+        },
+        "kind": "drive#user", # This is always drive#user.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+        "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
+      },
+    ],
+    "id": "A String", # The ID of the file.
+    "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
     "title": "A String", # The title of this file.
     "ownerNames": [ # Name(s) of the owner(s) of this file.
       "A String",
@@ -674,9 +770,9 @@
     "editable": True or False, # Whether the file can be edited by the current user.
     "kind": "drive#file", # The type of file. This is always drive#file.
     "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-    "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+    "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
     "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
     "iconLink": "A String", # A link to the file's icon.
     "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
       "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -708,8 +804,8 @@
     "embedLink": "A String", # A link for embedding the file.
     "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
     "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-    "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-    "userPermission": { # A single permission for a file.
+    "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+    "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
       "withLink": True or False, # Whether the link is required for this permission.
       "kind": "drive#permission", # This is always drive#permission.
       "name": "A String", # The name for this permission.
@@ -732,7 +828,7 @@
       ],
       "selfLink": "A String", # A link back to this permission.
     },
-    "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+    "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
     "selfLink": "A String", # A link back to this file.
     "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
   }</pre>
@@ -760,7 +856,6 @@
     "items": [ # The actual list of files.
       { # The metadata for a file.
         "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-        "appDataContents": True or False, # Whether this file is in the appdata folder.
         "thumbnailLink": "A String", # A link to the file's thumbnail.
         "labels": { # A group of labels for the file.
           "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -770,13 +865,33 @@
           "trashed": True or False, # Whether this file has been trashed.
         },
         "indexableText": { # Indexable text attributes for the file (can only be written)
-          "text": "A String", # The text to be indexed for this file
+          "text": "A String", # The text to be indexed for this file.
         },
         "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
         "etag": "A String", # ETag of the file.
-        "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+        "lastModifyingUserName": "A String", # Name of the last user to modify this file.
         "writersCanShare": True or False, # Whether writers can share the document with other users.
-        "id": "A String", # The id of the file.
+        "owners": [ # The owner(s) of this file.
+          { # The JSON template for a user.
+            "picture": { # The user's profile picture.
+              "url": "A String", # A URL that points to a profile picture of this user.
+            },
+            "kind": "drive#user", # This is always drive#user.
+            "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+            "displayName": "A String", # A plain text displayable name for this user.
+            "permissionId": "A String", # The user's ID as visible in the permissions collection.
+          },
+        ],
+        "id": "A String", # The ID of the file.
+        "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+          "picture": { # The user's profile picture.
+            "url": "A String", # A URL that points to a profile picture of this user.
+          },
+          "kind": "drive#user", # This is always drive#user.
+          "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+          "displayName": "A String", # A plain text displayable name for this user.
+          "permissionId": "A String", # The user's ID as visible in the permissions collection.
+        },
         "title": "A String", # The title of this file.
         "ownerNames": [ # Name(s) of the owner(s) of this file.
           "A String",
@@ -808,9 +923,9 @@
         "editable": True or False, # Whether the file can be edited by the current user.
         "kind": "drive#file", # The type of file. This is always drive#file.
         "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-        "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+        "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
         "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-        "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+        "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
         "iconLink": "A String", # A link to the file's icon.
         "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
           "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -842,8 +957,8 @@
         "embedLink": "A String", # A link for embedding the file.
         "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
         "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-        "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-        "userPermission": { # A single permission for a file.
+        "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+        "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
           "withLink": True or False, # Whether the link is required for this permission.
           "kind": "drive#permission", # This is always drive#permission.
           "name": "A String", # The name for this permission.
@@ -866,7 +981,7 @@
           ],
           "selfLink": "A String", # A link back to this permission.
         },
-        "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+        "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
         "selfLink": "A String", # A link back to this file.
         "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
       },
@@ -892,7 +1007,7 @@
 </div>
 
 <div class="method">
-    <code class="details" id="patch">patch(fileId, body, newRevision=None, pinned=None, ocrLanguage=None, ocr=None, updateViewedDate=None, timedTextTrackName=None, convert=None, setModifiedDate=None, timedTextLanguage=None)</code>
+    <code class="details" id="patch">patch(fileId, body, newRevision=None, pinned=None, ocrLanguage=None, ocr=None, updateViewedDate=None, timedTextTrackName=None, convert=None, useContentAsIndexableText=None, setModifiedDate=None, timedTextLanguage=None)</code>
   <pre>Updates file metadata and/or content. This method supports patch semantics.
 
 Args:
@@ -902,7 +1017,6 @@
 
 { # The metadata for a file.
   "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-  "appDataContents": True or False, # Whether this file is in the appdata folder.
   "thumbnailLink": "A String", # A link to the file's thumbnail.
   "labels": { # A group of labels for the file.
     "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -912,13 +1026,33 @@
     "trashed": True or False, # Whether this file has been trashed.
   },
   "indexableText": { # Indexable text attributes for the file (can only be written)
-    "text": "A String", # The text to be indexed for this file
+    "text": "A String", # The text to be indexed for this file.
   },
   "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
   "etag": "A String", # ETag of the file.
-  "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+  "lastModifyingUserName": "A String", # Name of the last user to modify this file.
   "writersCanShare": True or False, # Whether writers can share the document with other users.
-  "id": "A String", # The id of the file.
+  "owners": [ # The owner(s) of this file.
+    { # The JSON template for a user.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
+  ],
+  "id": "A String", # The ID of the file.
+  "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+    "picture": { # The user's profile picture.
+      "url": "A String", # A URL that points to a profile picture of this user.
+    },
+    "kind": "drive#user", # This is always drive#user.
+    "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+    "displayName": "A String", # A plain text displayable name for this user.
+    "permissionId": "A String", # The user's ID as visible in the permissions collection.
+  },
   "title": "A String", # The title of this file.
   "ownerNames": [ # Name(s) of the owner(s) of this file.
     "A String",
@@ -950,9 +1084,9 @@
   "editable": True or False, # Whether the file can be edited by the current user.
   "kind": "drive#file", # The type of file. This is always drive#file.
   "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-  "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+  "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
   "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-  "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+  "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
   "iconLink": "A String", # A link to the file's icon.
   "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
     "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -984,8 +1118,8 @@
   "embedLink": "A String", # A link for embedding the file.
   "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
   "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-  "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-  "userPermission": { # A single permission for a file.
+  "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+  "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
     "withLink": True or False, # Whether the link is required for this permission.
     "kind": "drive#permission", # This is always drive#permission.
     "name": "A String", # The name for this permission.
@@ -1008,18 +1142,19 @@
     ],
     "selfLink": "A String", # A link back to this permission.
   },
-  "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+  "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
   "selfLink": "A String", # A link back to this file.
   "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
 }
 
-  newRevision: boolean, Whether a blob upload should create a new revision. If false, the blob data in the current head revision will be replaced.
+  newRevision: boolean, Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision is replaced. If true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).
   pinned: boolean, Whether to pin the new revision.
   ocrLanguage: string, If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
   ocr: boolean, Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
   updateViewedDate: boolean, Whether to update the view date after successfully updating the file.
   timedTextTrackName: string, The timed text track name.
   convert: boolean, Whether to convert this file to the corresponding Google Docs format.
+  useContentAsIndexableText: boolean, Whether to use the content as indexable text.
   setModifiedDate: boolean, Whether to set the modified date with the supplied modified date.
   timedTextLanguage: string, The language of the timed text.
 
@@ -1028,7 +1163,6 @@
 
     { # The metadata for a file.
     "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-    "appDataContents": True or False, # Whether this file is in the appdata folder.
     "thumbnailLink": "A String", # A link to the file's thumbnail.
     "labels": { # A group of labels for the file.
       "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -1038,13 +1172,33 @@
       "trashed": True or False, # Whether this file has been trashed.
     },
     "indexableText": { # Indexable text attributes for the file (can only be written)
-      "text": "A String", # The text to be indexed for this file
+      "text": "A String", # The text to be indexed for this file.
     },
     "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
     "etag": "A String", # ETag of the file.
-    "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+    "lastModifyingUserName": "A String", # Name of the last user to modify this file.
     "writersCanShare": True or False, # Whether writers can share the document with other users.
-    "id": "A String", # The id of the file.
+    "owners": [ # The owner(s) of this file.
+      { # The JSON template for a user.
+        "picture": { # The user's profile picture.
+          "url": "A String", # A URL that points to a profile picture of this user.
+        },
+        "kind": "drive#user", # This is always drive#user.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+        "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
+      },
+    ],
+    "id": "A String", # The ID of the file.
+    "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
     "title": "A String", # The title of this file.
     "ownerNames": [ # Name(s) of the owner(s) of this file.
       "A String",
@@ -1076,9 +1230,9 @@
     "editable": True or False, # Whether the file can be edited by the current user.
     "kind": "drive#file", # The type of file. This is always drive#file.
     "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-    "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+    "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
     "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
     "iconLink": "A String", # A link to the file's icon.
     "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
       "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -1110,8 +1264,8 @@
     "embedLink": "A String", # A link for embedding the file.
     "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
     "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-    "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-    "userPermission": { # A single permission for a file.
+    "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+    "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
       "withLink": True or False, # Whether the link is required for this permission.
       "kind": "drive#permission", # This is always drive#permission.
       "name": "A String", # The name for this permission.
@@ -1134,7 +1288,7 @@
       ],
       "selfLink": "A String", # A link back to this permission.
     },
-    "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+    "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
     "selfLink": "A String", # A link back to this file.
     "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
   }</pre>
@@ -1152,7 +1306,6 @@
 
     { # The metadata for a file.
     "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-    "appDataContents": True or False, # Whether this file is in the appdata folder.
     "thumbnailLink": "A String", # A link to the file's thumbnail.
     "labels": { # A group of labels for the file.
       "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -1162,13 +1315,33 @@
       "trashed": True or False, # Whether this file has been trashed.
     },
     "indexableText": { # Indexable text attributes for the file (can only be written)
-      "text": "A String", # The text to be indexed for this file
+      "text": "A String", # The text to be indexed for this file.
     },
     "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
     "etag": "A String", # ETag of the file.
-    "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+    "lastModifyingUserName": "A String", # Name of the last user to modify this file.
     "writersCanShare": True or False, # Whether writers can share the document with other users.
-    "id": "A String", # The id of the file.
+    "owners": [ # The owner(s) of this file.
+      { # The JSON template for a user.
+        "picture": { # The user's profile picture.
+          "url": "A String", # A URL that points to a profile picture of this user.
+        },
+        "kind": "drive#user", # This is always drive#user.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+        "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
+      },
+    ],
+    "id": "A String", # The ID of the file.
+    "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
     "title": "A String", # The title of this file.
     "ownerNames": [ # Name(s) of the owner(s) of this file.
       "A String",
@@ -1200,9 +1373,9 @@
     "editable": True or False, # Whether the file can be edited by the current user.
     "kind": "drive#file", # The type of file. This is always drive#file.
     "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-    "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+    "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
     "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
     "iconLink": "A String", # A link to the file's icon.
     "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
       "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -1234,8 +1407,8 @@
     "embedLink": "A String", # A link for embedding the file.
     "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
     "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-    "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-    "userPermission": { # A single permission for a file.
+    "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+    "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
       "withLink": True or False, # Whether the link is required for this permission.
       "kind": "drive#permission", # This is always drive#permission.
       "name": "A String", # The name for this permission.
@@ -1258,7 +1431,7 @@
       ],
       "selfLink": "A String", # A link back to this permission.
     },
-    "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+    "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
     "selfLink": "A String", # A link back to this file.
     "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
   }</pre>
@@ -1276,7 +1449,6 @@
 
     { # The metadata for a file.
     "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-    "appDataContents": True or False, # Whether this file is in the appdata folder.
     "thumbnailLink": "A String", # A link to the file's thumbnail.
     "labels": { # A group of labels for the file.
       "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -1286,13 +1458,33 @@
       "trashed": True or False, # Whether this file has been trashed.
     },
     "indexableText": { # Indexable text attributes for the file (can only be written)
-      "text": "A String", # The text to be indexed for this file
+      "text": "A String", # The text to be indexed for this file.
     },
     "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
     "etag": "A String", # ETag of the file.
-    "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+    "lastModifyingUserName": "A String", # Name of the last user to modify this file.
     "writersCanShare": True or False, # Whether writers can share the document with other users.
-    "id": "A String", # The id of the file.
+    "owners": [ # The owner(s) of this file.
+      { # The JSON template for a user.
+        "picture": { # The user's profile picture.
+          "url": "A String", # A URL that points to a profile picture of this user.
+        },
+        "kind": "drive#user", # This is always drive#user.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+        "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
+      },
+    ],
+    "id": "A String", # The ID of the file.
+    "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
     "title": "A String", # The title of this file.
     "ownerNames": [ # Name(s) of the owner(s) of this file.
       "A String",
@@ -1324,9 +1516,9 @@
     "editable": True or False, # Whether the file can be edited by the current user.
     "kind": "drive#file", # The type of file. This is always drive#file.
     "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-    "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+    "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
     "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
     "iconLink": "A String", # A link to the file's icon.
     "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
       "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -1358,8 +1550,8 @@
     "embedLink": "A String", # A link for embedding the file.
     "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
     "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-    "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-    "userPermission": { # A single permission for a file.
+    "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+    "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
       "withLink": True or False, # Whether the link is required for this permission.
       "kind": "drive#permission", # This is always drive#permission.
       "name": "A String", # The name for this permission.
@@ -1382,7 +1574,7 @@
       ],
       "selfLink": "A String", # A link back to this permission.
     },
-    "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+    "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
     "selfLink": "A String", # A link back to this file.
     "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
   }</pre>
@@ -1400,7 +1592,6 @@
 
     { # The metadata for a file.
     "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-    "appDataContents": True or False, # Whether this file is in the appdata folder.
     "thumbnailLink": "A String", # A link to the file's thumbnail.
     "labels": { # A group of labels for the file.
       "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -1410,13 +1601,33 @@
       "trashed": True or False, # Whether this file has been trashed.
     },
     "indexableText": { # Indexable text attributes for the file (can only be written)
-      "text": "A String", # The text to be indexed for this file
+      "text": "A String", # The text to be indexed for this file.
     },
     "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
     "etag": "A String", # ETag of the file.
-    "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+    "lastModifyingUserName": "A String", # Name of the last user to modify this file.
     "writersCanShare": True or False, # Whether writers can share the document with other users.
-    "id": "A String", # The id of the file.
+    "owners": [ # The owner(s) of this file.
+      { # The JSON template for a user.
+        "picture": { # The user's profile picture.
+          "url": "A String", # A URL that points to a profile picture of this user.
+        },
+        "kind": "drive#user", # This is always drive#user.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+        "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
+      },
+    ],
+    "id": "A String", # The ID of the file.
+    "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
     "title": "A String", # The title of this file.
     "ownerNames": [ # Name(s) of the owner(s) of this file.
       "A String",
@@ -1448,9 +1659,9 @@
     "editable": True or False, # Whether the file can be edited by the current user.
     "kind": "drive#file", # The type of file. This is always drive#file.
     "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-    "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+    "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
     "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
     "iconLink": "A String", # A link to the file's icon.
     "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
       "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -1482,8 +1693,8 @@
     "embedLink": "A String", # A link for embedding the file.
     "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
     "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-    "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-    "userPermission": { # A single permission for a file.
+    "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+    "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
       "withLink": True or False, # Whether the link is required for this permission.
       "kind": "drive#permission", # This is always drive#permission.
       "name": "A String", # The name for this permission.
@@ -1506,15 +1717,15 @@
       ],
       "selfLink": "A String", # A link back to this permission.
     },
-    "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+    "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
     "selfLink": "A String", # A link back to this file.
     "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
   }</pre>
 </div>
 
 <div class="method">
-    <code class="details" id="update">update(fileId, body=None, newRevision=None, media_body=None, ocrLanguage=None, ocr=None, pinned=None, updateViewedDate=None, timedTextTrackName=None, convert=None, setModifiedDate=None, timedTextLanguage=None)</code>
-  <pre>Updates file metadata and/or content
+    <code class="details" id="update">update(fileId, body=None, newRevision=None, media_body=None, ocrLanguage=None, ocr=None, pinned=None, updateViewedDate=None, timedTextTrackName=None, convert=None, useContentAsIndexableText=None, setModifiedDate=None, timedTextLanguage=None)</code>
+  <pre>Updates file metadata and/or content.
 
 Args:
   fileId: string, The ID of the file to update. (required)
@@ -1523,7 +1734,6 @@
 
 { # The metadata for a file.
   "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-  "appDataContents": True or False, # Whether this file is in the appdata folder.
   "thumbnailLink": "A String", # A link to the file's thumbnail.
   "labels": { # A group of labels for the file.
     "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -1533,13 +1743,33 @@
     "trashed": True or False, # Whether this file has been trashed.
   },
   "indexableText": { # Indexable text attributes for the file (can only be written)
-    "text": "A String", # The text to be indexed for this file
+    "text": "A String", # The text to be indexed for this file.
   },
   "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
   "etag": "A String", # ETag of the file.
-  "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+  "lastModifyingUserName": "A String", # Name of the last user to modify this file.
   "writersCanShare": True or False, # Whether writers can share the document with other users.
-  "id": "A String", # The id of the file.
+  "owners": [ # The owner(s) of this file.
+    { # The JSON template for a user.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
+  ],
+  "id": "A String", # The ID of the file.
+  "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+    "picture": { # The user's profile picture.
+      "url": "A String", # A URL that points to a profile picture of this user.
+    },
+    "kind": "drive#user", # This is always drive#user.
+    "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+    "displayName": "A String", # A plain text displayable name for this user.
+    "permissionId": "A String", # The user's ID as visible in the permissions collection.
+  },
   "title": "A String", # The title of this file.
   "ownerNames": [ # Name(s) of the owner(s) of this file.
     "A String",
@@ -1571,9 +1801,9 @@
   "editable": True or False, # Whether the file can be edited by the current user.
   "kind": "drive#file", # The type of file. This is always drive#file.
   "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-  "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+  "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
   "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-  "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+  "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
   "iconLink": "A String", # A link to the file's icon.
   "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
     "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -1605,8 +1835,8 @@
   "embedLink": "A String", # A link for embedding the file.
   "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
   "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-  "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-  "userPermission": { # A single permission for a file.
+  "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+  "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
     "withLink": True or False, # Whether the link is required for this permission.
     "kind": "drive#permission", # This is always drive#permission.
     "name": "A String", # The name for this permission.
@@ -1629,12 +1859,12 @@
     ],
     "selfLink": "A String", # A link back to this permission.
   },
-  "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+  "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
   "selfLink": "A String", # A link back to this file.
   "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
 }
 
-  newRevision: boolean, Whether a blob upload should create a new revision. If false, the blob data in the current head revision will be replaced.
+  newRevision: boolean, Whether a blob upload should create a new revision. If not set or false, the blob data in the current head revision is replaced. If true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).
   media_body: string, The filename of the media request body, or an instance of a MediaUpload object.
   ocrLanguage: string, If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
   ocr: boolean, Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.
@@ -1642,6 +1872,7 @@
   updateViewedDate: boolean, Whether to update the view date after successfully updating the file.
   timedTextTrackName: string, The timed text track name.
   convert: boolean, Whether to convert this file to the corresponding Google Docs format.
+  useContentAsIndexableText: boolean, Whether to use the content as indexable text.
   setModifiedDate: boolean, Whether to set the modified date with the supplied modified date.
   timedTextLanguage: string, The language of the timed text.
 
@@ -1650,7 +1881,6 @@
 
     { # The metadata for a file.
     "mimeType": "A String", # The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.
-    "appDataContents": True or False, # Whether this file is in the appdata folder.
     "thumbnailLink": "A String", # A link to the file's thumbnail.
     "labels": { # A group of labels for the file.
       "restricted": True or False, # Whether viewers are prevented from downloading this file.
@@ -1660,13 +1890,33 @@
       "trashed": True or False, # Whether this file has been trashed.
     },
     "indexableText": { # Indexable text attributes for the file (can only be written)
-      "text": "A String", # The text to be indexed for this file
+      "text": "A String", # The text to be indexed for this file.
     },
     "explicitlyTrashed": True or False, # Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed.
     "etag": "A String", # ETag of the file.
-    "lastModifyingUserName": "A String", # Name of the last user to modify this file. This will only be populated if a user has edited this file.
+    "lastModifyingUserName": "A String", # Name of the last user to modify this file.
     "writersCanShare": True or False, # Whether writers can share the document with other users.
-    "id": "A String", # The id of the file.
+    "owners": [ # The owner(s) of this file.
+      { # The JSON template for a user.
+        "picture": { # The user's profile picture.
+          "url": "A String", # A URL that points to a profile picture of this user.
+        },
+        "kind": "drive#user", # This is always drive#user.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+        "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
+      },
+    ],
+    "id": "A String", # The ID of the file.
+    "lastModifyingUser": { # The JSON template for a user. # The last user to modify this file.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
     "title": "A String", # The title of this file.
     "ownerNames": [ # Name(s) of the owner(s) of this file.
       "A String",
@@ -1698,9 +1948,9 @@
     "editable": True or False, # Whether the file can be edited by the current user.
     "kind": "drive#file", # The type of file. This is always drive#file.
     "quotaBytesUsed": "A String", # The number of quota bytes used by this file.
-    "fileSize": "A String", # The size of the file in bytes. This will only be populated on files with content stored in Drive.
+    "fileSize": "A String", # The size of the file in bytes. This is only populated for files with content stored in Drive.
     "createdDate": "A String", # Create time for this file (formatted ISO8601 timestamp).
-    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive.
+    "md5Checksum": "A String", # An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive.
     "iconLink": "A String", # A link to the file's icon.
     "imageMediaMetadata": { # Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.
       "exposureBias": 3.14, # The exposure bias of the photo (APEX value).
@@ -1732,8 +1982,8 @@
     "embedLink": "A String", # A link for embedding the file.
     "alternateLink": "A String", # A link for opening the file in using a relevant Google editor or viewer.
     "modifiedByMeDate": "A String", # Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.
-    "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
-    "userPermission": { # A single permission for a file.
+    "downloadUrl": "A String", # Short lived download URL for the file. This is only populated for files with content stored in Drive.
+    "userPermission": { # A permission for a file. # The permissions for the authenticated user on this file.
       "withLink": True or False, # Whether the link is required for this permission.
       "kind": "drive#permission", # This is always drive#permission.
       "name": "A String", # The name for this permission.
@@ -1756,7 +2006,7 @@
       ],
       "selfLink": "A String", # A link back to this permission.
     },
-    "fileExtension": "A String", # The file extension used when downloading this file. This field is set from the title when inserting or uploading new content. This will only be populated on files with content stored in Drive.
+    "fileExtension": "A String", # The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive.
     "selfLink": "A String", # A link back to this file.
     "modifiedDate": "A String", # Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.
   }</pre>
diff --git a/docs/dyn/drive_v2.permissions.html b/docs/dyn/drive_v2.permissions.html
index 09e2e46..4f3048a 100644
--- a/docs/dyn/drive_v2.permissions.html
+++ b/docs/dyn/drive_v2.permissions.html
@@ -81,7 +81,7 @@
   <code><a href="#get">get(fileId, permissionId)</a></code></p>
 <p class="firstline">Gets a permission by ID.</p>
 <p class="toc_element">
-  <code><a href="#insert">insert(fileId, body, sendNotificationEmails=None)</a></code></p>
+  <code><a href="#insert">insert(fileId, body, sendNotificationEmails=None, emailMessage=None)</a></code></p>
 <p class="firstline">Inserts a permission for a file.</p>
 <p class="toc_element">
   <code><a href="#list">list(fileId)</a></code></p>
@@ -114,7 +114,7 @@
 Returns:
   An object of the form:
 
-    { # A single permission for a file.
+    { # A permission for a file.
     "withLink": True or False, # Whether the link is required for this permission.
     "kind": "drive#permission", # This is always drive#permission.
     "name": "A String", # The name for this permission.
@@ -140,7 +140,7 @@
 </div>
 
 <div class="method">
-    <code class="details" id="insert">insert(fileId, body, sendNotificationEmails=None)</code>
+    <code class="details" id="insert">insert(fileId, body, sendNotificationEmails=None, emailMessage=None)</code>
   <pre>Inserts a permission for a file.
 
 Args:
@@ -148,7 +148,7 @@
   body: object, The request body. (required)
     The object takes the form of:
 
-{ # A single permission for a file.
+{ # A permission for a file.
   "withLink": True or False, # Whether the link is required for this permission.
   "kind": "drive#permission", # This is always drive#permission.
   "name": "A String", # The name for this permission.
@@ -172,12 +172,13 @@
   "selfLink": "A String", # A link back to this permission.
 }
 
-  sendNotificationEmails: boolean, Whether to send notification emails.
+  sendNotificationEmails: boolean, Whether to send notification emails when sharing to users or groups.
+  emailMessage: string, A custom message to include in notification emails.
 
 Returns:
   An object of the form:
 
-    { # A single permission for a file.
+    { # A permission for a file.
     "withLink": True or False, # Whether the link is required for this permission.
     "kind": "drive#permission", # This is always drive#permission.
     "name": "A String", # The name for this permission.
@@ -214,7 +215,7 @@
 
     { # A list of permissions associated with a file.
     "items": [ # The actual list of permissions.
-      { # A single permission for a file.
+      { # A permission for a file.
         "withLink": True or False, # Whether the link is required for this permission.
         "kind": "drive#permission", # This is always drive#permission.
         "name": "A String", # The name for this permission.
@@ -254,7 +255,7 @@
   body: object, The request body. (required)
     The object takes the form of:
 
-{ # A single permission for a file.
+{ # A permission for a file.
   "withLink": True or False, # Whether the link is required for this permission.
   "kind": "drive#permission", # This is always drive#permission.
   "name": "A String", # The name for this permission.
@@ -282,7 +283,7 @@
 Returns:
   An object of the form:
 
-    { # A single permission for a file.
+    { # A permission for a file.
     "withLink": True or False, # Whether the link is required for this permission.
     "kind": "drive#permission", # This is always drive#permission.
     "name": "A String", # The name for this permission.
@@ -317,7 +318,7 @@
   body: object, The request body. (required)
     The object takes the form of:
 
-{ # A single permission for a file.
+{ # A permission for a file.
   "withLink": True or False, # Whether the link is required for this permission.
   "kind": "drive#permission", # This is always drive#permission.
   "name": "A String", # The name for this permission.
@@ -345,7 +346,7 @@
 Returns:
   An object of the form:
 
-    { # A single permission for a file.
+    { # A permission for a file.
     "withLink": True or False, # Whether the link is required for this permission.
     "kind": "drive#permission", # This is always drive#permission.
     "name": "A String", # The name for this permission.
diff --git a/docs/dyn/drive_v2.replies.html b/docs/dyn/drive_v2.replies.html
index 582221a..1111a4a 100644
--- a/docs/dyn/drive_v2.replies.html
+++ b/docs/dyn/drive_v2.replies.html
@@ -127,8 +127,9 @@
         "url": "A String", # A URL that points to a profile picture of this user.
       },
       "kind": "drive#user", # This is always drive#user.
-      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
       "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
     },
     "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
     "htmlContent": "A String", # HTML formatted content for this reply.
@@ -159,8 +160,9 @@
       "url": "A String", # A URL that points to a profile picture of this user.
     },
     "kind": "drive#user", # This is always drive#user.
-    "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+    "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
     "displayName": "A String", # A plain text displayable name for this user.
+    "permissionId": "A String", # The user's ID as visible in the permissions collection.
   },
   "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
   "htmlContent": "A String", # HTML formatted content for this reply.
@@ -184,8 +186,9 @@
         "url": "A String", # A URL that points to a profile picture of this user.
       },
       "kind": "drive#user", # This is always drive#user.
-      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
       "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
     },
     "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
     "htmlContent": "A String", # HTML formatted content for this reply.
@@ -223,8 +226,9 @@
             "url": "A String", # A URL that points to a profile picture of this user.
           },
           "kind": "drive#user", # This is always drive#user.
-          "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+          "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
           "displayName": "A String", # A plain text displayable name for this user.
+          "permissionId": "A String", # The user's ID as visible in the permissions collection.
         },
         "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
         "htmlContent": "A String", # HTML formatted content for this reply.
@@ -273,8 +277,9 @@
       "url": "A String", # A URL that points to a profile picture of this user.
     },
     "kind": "drive#user", # This is always drive#user.
-    "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+    "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
     "displayName": "A String", # A plain text displayable name for this user.
+    "permissionId": "A String", # The user's ID as visible in the permissions collection.
   },
   "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
   "htmlContent": "A String", # HTML formatted content for this reply.
@@ -298,8 +303,9 @@
         "url": "A String", # A URL that points to a profile picture of this user.
       },
       "kind": "drive#user", # This is always drive#user.
-      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
       "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
     },
     "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
     "htmlContent": "A String", # HTML formatted content for this reply.
@@ -331,8 +337,9 @@
       "url": "A String", # A URL that points to a profile picture of this user.
     },
     "kind": "drive#user", # This is always drive#user.
-    "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+    "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
     "displayName": "A String", # A plain text displayable name for this user.
+    "permissionId": "A String", # The user's ID as visible in the permissions collection.
   },
   "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
   "htmlContent": "A String", # HTML formatted content for this reply.
@@ -356,8 +363,9 @@
         "url": "A String", # A URL that points to a profile picture of this user.
       },
       "kind": "drive#user", # This is always drive#user.
-      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user of which the request was made on behalf.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
       "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
     },
     "deleted": True or False, # Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.
     "htmlContent": "A String", # HTML formatted content for this reply.
diff --git a/docs/dyn/drive_v2.revisions.html b/docs/dyn/drive_v2.revisions.html
index e7b12a9..1d9645d 100644
--- a/docs/dyn/drive_v2.revisions.html
+++ b/docs/dyn/drive_v2.revisions.html
@@ -111,12 +111,21 @@
 Returns:
   An object of the form:
 
-    { # A single revision of a file.
+    { # A revision of a file.
       "mimeType": "A String", # The MIME type of the revision.
       "pinned": True or False, # Whether this revision is pinned to prevent automatic purging. This will only be populated and can only be modified on files with content stored in Drive which are not Google Docs. Revisions can also be pinned when they are created through the drive.files.insert/update/copy by using the pinned query parameter.
       "kind": "drive#revision", # This is always drive#revision.
       "publishedLink": "A String", # A link to the published revision.
       "publishedOutsideDomain": True or False, # Whether this revision is published outside the domain. This is only populated and can only be modified for Google Docs.
+      "lastModifyingUser": { # The JSON template for a user. # The last user to modify this revision.
+        "picture": { # The user's profile picture.
+          "url": "A String", # A URL that points to a profile picture of this user.
+        },
+        "kind": "drive#user", # This is always drive#user.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+        "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
+      },
       "publishAuto": True or False, # Whether subsequent revisions will be automatically republished. This is only populated and can only be modified for Google Docs.
       "published": True or False, # Whether this revision is published. This is only populated and can only be modified for Google Docs.
       "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
@@ -146,12 +155,21 @@
 
     { # A list of revisions of a file.
     "items": [ # The actual list of revisions.
-      { # A single revision of a file.
+      { # A revision of a file.
           "mimeType": "A String", # The MIME type of the revision.
           "pinned": True or False, # Whether this revision is pinned to prevent automatic purging. This will only be populated and can only be modified on files with content stored in Drive which are not Google Docs. Revisions can also be pinned when they are created through the drive.files.insert/update/copy by using the pinned query parameter.
           "kind": "drive#revision", # This is always drive#revision.
           "publishedLink": "A String", # A link to the published revision.
           "publishedOutsideDomain": True or False, # Whether this revision is published outside the domain. This is only populated and can only be modified for Google Docs.
+          "lastModifyingUser": { # The JSON template for a user. # The last user to modify this revision.
+            "picture": { # The user's profile picture.
+              "url": "A String", # A URL that points to a profile picture of this user.
+            },
+            "kind": "drive#user", # This is always drive#user.
+            "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+            "displayName": "A String", # A plain text displayable name for this user.
+            "permissionId": "A String", # The user's ID as visible in the permissions collection.
+          },
           "publishAuto": True or False, # Whether subsequent revisions will be automatically republished. This is only populated and can only be modified for Google Docs.
           "published": True or False, # Whether this revision is published. This is only populated and can only be modified for Google Docs.
           "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
@@ -184,12 +202,21 @@
   body: object, The request body. (required)
     The object takes the form of:
 
-{ # A single revision of a file.
+{ # A revision of a file.
     "mimeType": "A String", # The MIME type of the revision.
     "pinned": True or False, # Whether this revision is pinned to prevent automatic purging. This will only be populated and can only be modified on files with content stored in Drive which are not Google Docs. Revisions can also be pinned when they are created through the drive.files.insert/update/copy by using the pinned query parameter.
     "kind": "drive#revision", # This is always drive#revision.
     "publishedLink": "A String", # A link to the published revision.
     "publishedOutsideDomain": True or False, # Whether this revision is published outside the domain. This is only populated and can only be modified for Google Docs.
+    "lastModifyingUser": { # The JSON template for a user. # The last user to modify this revision.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
     "publishAuto": True or False, # Whether subsequent revisions will be automatically republished. This is only populated and can only be modified for Google Docs.
     "published": True or False, # Whether this revision is published. This is only populated and can only be modified for Google Docs.
     "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
@@ -210,12 +237,21 @@
 Returns:
   An object of the form:
 
-    { # A single revision of a file.
+    { # A revision of a file.
       "mimeType": "A String", # The MIME type of the revision.
       "pinned": True or False, # Whether this revision is pinned to prevent automatic purging. This will only be populated and can only be modified on files with content stored in Drive which are not Google Docs. Revisions can also be pinned when they are created through the drive.files.insert/update/copy by using the pinned query parameter.
       "kind": "drive#revision", # This is always drive#revision.
       "publishedLink": "A String", # A link to the published revision.
       "publishedOutsideDomain": True or False, # Whether this revision is published outside the domain. This is only populated and can only be modified for Google Docs.
+      "lastModifyingUser": { # The JSON template for a user. # The last user to modify this revision.
+        "picture": { # The user's profile picture.
+          "url": "A String", # A URL that points to a profile picture of this user.
+        },
+        "kind": "drive#user", # This is always drive#user.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+        "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
+      },
       "publishAuto": True or False, # Whether subsequent revisions will be automatically republished. This is only populated and can only be modified for Google Docs.
       "published": True or False, # Whether this revision is published. This is only populated and can only be modified for Google Docs.
       "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
@@ -243,12 +279,21 @@
   body: object, The request body. (required)
     The object takes the form of:
 
-{ # A single revision of a file.
+{ # A revision of a file.
     "mimeType": "A String", # The MIME type of the revision.
     "pinned": True or False, # Whether this revision is pinned to prevent automatic purging. This will only be populated and can only be modified on files with content stored in Drive which are not Google Docs. Revisions can also be pinned when they are created through the drive.files.insert/update/copy by using the pinned query parameter.
     "kind": "drive#revision", # This is always drive#revision.
     "publishedLink": "A String", # A link to the published revision.
     "publishedOutsideDomain": True or False, # Whether this revision is published outside the domain. This is only populated and can only be modified for Google Docs.
+    "lastModifyingUser": { # The JSON template for a user. # The last user to modify this revision.
+      "picture": { # The user's profile picture.
+        "url": "A String", # A URL that points to a profile picture of this user.
+      },
+      "kind": "drive#user", # This is always drive#user.
+      "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+      "displayName": "A String", # A plain text displayable name for this user.
+      "permissionId": "A String", # The user's ID as visible in the permissions collection.
+    },
     "publishAuto": True or False, # Whether subsequent revisions will be automatically republished. This is only populated and can only be modified for Google Docs.
     "published": True or False, # Whether this revision is published. This is only populated and can only be modified for Google Docs.
     "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
@@ -269,12 +314,21 @@
 Returns:
   An object of the form:
 
-    { # A single revision of a file.
+    { # A revision of a file.
       "mimeType": "A String", # The MIME type of the revision.
       "pinned": True or False, # Whether this revision is pinned to prevent automatic purging. This will only be populated and can only be modified on files with content stored in Drive which are not Google Docs. Revisions can also be pinned when they are created through the drive.files.insert/update/copy by using the pinned query parameter.
       "kind": "drive#revision", # This is always drive#revision.
       "publishedLink": "A String", # A link to the published revision.
       "publishedOutsideDomain": True or False, # Whether this revision is published outside the domain. This is only populated and can only be modified for Google Docs.
+      "lastModifyingUser": { # The JSON template for a user. # The last user to modify this revision.
+        "picture": { # The user's profile picture.
+          "url": "A String", # A URL that points to a profile picture of this user.
+        },
+        "kind": "drive#user", # This is always drive#user.
+        "isAuthenticatedUser": True or False, # Whether this user is the same as the authenticated user for whom the request was made.
+        "displayName": "A String", # A plain text displayable name for this user.
+        "permissionId": "A String", # The user's ID as visible in the permissions collection.
+      },
       "publishAuto": True or False, # Whether subsequent revisions will be automatically republished. This is only populated and can only be modified for Google Docs.
       "published": True or False, # Whether this revision is published. This is only populated and can only be modified for Google Docs.
       "downloadUrl": "A String", # Short term download URL for the file. This will only be populated on files with content stored in Drive.
diff --git a/docs/dyn/gan_v1beta1.advertisers.html b/docs/dyn/gan_v1beta1.advertisers.html
index 3c3335c..0ff960c 100644
--- a/docs/dyn/gan_v1beta1.advertisers.html
+++ b/docs/dyn/gan_v1beta1.advertisers.html
@@ -78,7 +78,7 @@
   <code><a href="#get">get(role, roleId, advertiserId=None)</a></code></p>
 <p class="firstline">Retrieves data about a single advertiser if that the requesting advertiser/publisher has access to it. Only publishers can lookup advertisers. Advertisers can request information about themselves by omitting the advertiserId query parameter.</p>
 <p class="toc_element">
-  <code><a href="#list">list(role, roleId, relationshipStatus=None, pageToken=None, advertiserCategory=None, minNinetyDayEpc=None, maxResults=None, minSevenDayEpc=None, minPayoutRank=None)</a></code></p>
+  <code><a href="#list">list(role, roleId, relationshipStatus=None, pageToken=None, minNinetyDayEpc=None, advertiserCategory=None, maxResults=None, minSevenDayEpc=None, minPayoutRank=None)</a></code></p>
 <p class="firstline">Retrieves data about all advertisers that the requesting advertiser/publisher has access to.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
@@ -135,7 +135,7 @@
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(role, roleId, relationshipStatus=None, pageToken=None, advertiserCategory=None, minNinetyDayEpc=None, maxResults=None, minSevenDayEpc=None, minPayoutRank=None)</code>
+    <code class="details" id="list">list(role, roleId, relationshipStatus=None, pageToken=None, minNinetyDayEpc=None, advertiserCategory=None, maxResults=None, minSevenDayEpc=None, minPayoutRank=None)</code>
   <pre>Retrieves data about all advertisers that the requesting advertiser/publisher has access to.
 
 Args:
@@ -152,8 +152,8 @@
       declined - An advertiser that did not approve your application.
       pending - An advertiser program that you've already applied to, but they haven't yet decided to approve or decline your application.
   pageToken: string, The value of 'nextPageToken' from the previous page. Optional.
-  advertiserCategory: string, Caret(^) delimted list of advertiser categories. Valid categories are defined here: http://www.google.com/support/affiliatenetwork/advertiser/bin/answer.py?hl=en&answer=107581. Filters out all advertisers not in one of the given advertiser categories. Optional.
   minNinetyDayEpc: number, Filters out all advertisers that have a ninety day EPC average lower than the given value (inclusive). Min value: 0.0. Optional.
+  advertiserCategory: string, Caret(^) delimted list of advertiser categories. Valid categories are defined here: http://www.google.com/support/affiliatenetwork/advertiser/bin/answer.py?hl=en&answer=107581. Filters out all advertisers not in one of the given advertiser categories. Optional.
   maxResults: integer, Max number of items to return in this page. Optional. Defaults to 20.
   minSevenDayEpc: number, Filters out all advertisers that have a seven day EPC average lower than the given value (inclusive). Min value: 0.0. Optional.
   minPayoutRank: integer, A value between 1 and 4, where 1 represents the quartile of advertisers with the lowest ranks and 4 represents the quartile of advertisers with the highest ranks. Filters out all advertisers with a lower rank than the given quartile. For example if a 2 was given only advertisers with a payout rank of 25 or higher would be included. Optional.
diff --git a/docs/dyn/gan_v1beta1.html b/docs/dyn/gan_v1beta1.html
index 4de2571..10402cc 100644
--- a/docs/dyn/gan_v1beta1.html
+++ b/docs/dyn/gan_v1beta1.html
@@ -99,4 +99,9 @@
 </p>
 <p class="firstline">Returns the publishers Resource.</p>
 
+<p class="toc_element">
+  <code><a href="gan_v1beta1.reports.html">reports()</a></code>
+</p>
+<p class="firstline">Returns the reports Resource.</p>
+
 </body></html>
\ No newline at end of file
diff --git a/docs/dyn/plus_v1.html b/docs/dyn/plus_v1.html
index 53ca3b4..6a3ff6d 100644
--- a/docs/dyn/plus_v1.html
+++ b/docs/dyn/plus_v1.html
@@ -85,6 +85,11 @@
 <p class="firstline">Returns the comments Resource.</p>
 
 <p class="toc_element">
+  <code><a href="plus_v1.moments.html">moments()</a></code>
+</p>
+<p class="firstline">Returns the moments Resource.</p>
+
+<p class="toc_element">
   <code><a href="plus_v1.people.html">people()</a></code>
 </p>
 <p class="firstline">Returns the people Resource.</p>
diff --git a/docs/dyn/plus_v1.people.html b/docs/dyn/plus_v1.people.html
index 91ffdcc..a4f1a68 100644
--- a/docs/dyn/plus_v1.people.html
+++ b/docs/dyn/plus_v1.people.html
@@ -76,7 +76,10 @@
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#get">get(userId)</a></code></p>
-<p class="firstline">Get a person's profile.</p>
+<p class="firstline">Get a person's profile. If your app uses scope https://www.googleapis.com/auth/plus.login, this method is guaranteed to return ageRange and language.</p>
+<p class="toc_element">
+  <code><a href="#list">list(userId, collection, orderBy=None, pageToken=None, maxResults=None)</a></code></p>
+<p class="firstline">List all of the people in the specified collection.</p>
 <p class="toc_element">
   <code><a href="#listByActivity">listByActivity(activityId, collection, pageToken=None, maxResults=None)</a></code></p>
 <p class="firstline">List all of the people in the specified collection for a particular activity.</p>
@@ -84,6 +87,9 @@
   <code><a href="#listByActivity_next">listByActivity_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
   <code><a href="#search">search(query, pageToken=None, language=None, maxResults=None)</a></code></p>
 <p class="firstline">Search all public profiles.</p>
 <p class="toc_element">
@@ -92,7 +98,7 @@
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="get">get(userId)</code>
-  <pre>Get a person's profile.
+  <pre>Get a person's profile. If your app uses scope https://www.googleapis.com/auth/plus.login, this method is guaranteed to return ageRange and language.
 
 Args:
   userId: string, The ID of the person to get the profile for. The special value "me" can be used to indicate the authenticated user. (required)
@@ -115,8 +121,17 @@
     "currentLocation": "A String", # The current location for this person.
     "etag": "A String", # ETag of this response for caching purposes.
     "circledByCount": 42, # If a Google+ Page and for followers who are visible, the number of people who have added this page to a circle.
+    "relationshipStatus": "A String", # The person's relationship status. Possible values are:
+        # - "single" - Person is single.
+        # - "in_a_relationship" - Person is in a relationship.
+        # - "engaged" - Person is engaged.
+        # - "married" - Person is married.
+        # - "its_complicated" - The relationship is complicated.
+        # - "open_relationship" - Person is in an open relationship.
+        # - "widowed" - Person is widowed.
+        # - "in_domestic_partnership" - Person is in a domestic partnership.
+        # - "in_civil_union" - Person is in a civil union.
     "aboutMe": "A String", # A short biography for this person.
-    "kind": "plus#person", # Identifies this resource as a person. Value: "plus#person".
     "placesLived": [ # A list of places where this person has lived.
       {
         "primary": True or False, # If "true", this place of residence is this person's primary residence.
@@ -125,7 +140,7 @@
     ],
     "birthday": "A String", # The person's date of birth, represented as YYYY-MM-DD.
     "nickname": "A String", # The nickname of this person.
-    "emails": [ # A list of email addresses for this person.
+    "emails": [ # A list of email addresses that this person has set to public on their Google+ profile. You can also use the userinfo.email scope to retrieve an authenticated user's email address.
       {
         "type": "A String", # The type of address. Possible values are:
             # - "home" - Home email address.
@@ -150,16 +165,7 @@
         "name": "A String", # The name of the organization.
       },
     ],
-    "relationshipStatus": "A String", # The person's relationship status. Possible values are:
-        # - "single" - Person is single.
-        # - "in_a_relationship" - Person is in a relationship.
-        # - "engaged" - Person is engaged.
-        # - "married" - Person is married.
-        # - "its_complicated" - The relationship is complicated.
-        # - "open_relationship" - Person is in an open relationship.
-        # - "widowed" - Person is widowed.
-        # - "in_domestic_partnership" - Person is in a domestic partnership.
-        # - "in_civil_union" - Person is in a civil union.
+    "kind": "plus#person", # Identifies this resource as a person. Value: "plus#person".
     "displayName": "A String", # The name of this person, suitable for display.
     "name": { # An object representation of the individual components of a person's name.
       "honorificPrefix": "A String", # The honorific prefixes (such as "Dr." or "Mrs.") for this person.
@@ -169,6 +175,7 @@
       "givenName": "A String", # The given name (first name) of this person.
       "honorificSuffix": "A String", # The honorific suffixes (such as "Jr.") for this person.
     },
+    "language": "A String", # The user's preferred language for rendering.
     "url": "A String", # The URL of this person's profile.
     "gender": "A String", # The person's gender. Possible values are:
         # - "male" - Male gender.
@@ -201,6 +208,148 @@
         "value": "A String", # The URL value.
       },
     ],
+    "ageRange": { # The age range of the person.
+      "max": 42, # The age range's upper bound, if any.
+      "min": 42, # The age range's lower bound, if any.
+    },
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(userId, collection, orderBy=None, pageToken=None, maxResults=None)</code>
+  <pre>List all of the people in the specified collection.
+
+Args:
+  userId: string, Get the collection of people for the person identified. Use "me" to indicate the authenticated user. (required)
+  collection: string, The collection of people to list. (required)
+    Allowed values
+      visible - The list of people who this user has added to one or more circles, limited to the circles visible to the requesting application.
+  orderBy: string, The order to return people in.
+    Allowed values
+      alphabetical - Order the people by their display name.
+      best - Order people based on the relevence to the viewer.
+  pageToken: string, The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of "nextPageToken" from the previous response.
+  maxResults: integer, The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.
+
+Returns:
+  An object of the form:
+
+    {
+    "nextPageToken": "A String", # The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results.
+    "kind": "plus#peopleFeed", # Identifies this resource as a collection of people. Value: "plus#peopleFeed".
+    "title": "A String", # The title of this collection of people.
+    "items": [ # The people in this page of results. Each item includes the id, displayName, image, and url for the person. To retrieve additional profile data, see the people.get method.
+      {
+        "braggingRights": "A String", # The "bragging rights" line of this person.
+        "image": { # The representation of the person's profile photo.
+          "url": "A String", # The URL of the person's profile photo. To re-size the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side.
+        },
+        "hasApp": True or False, # If "true", indicates that the person has installed the app that is making the request and has chosen to expose this install state to the caller. A value of "false" indicates that the install state cannot be determined (it is either not installed or the person has chosen to keep this information private).
+        "id": "A String", # The ID of this person.
+        "objectType": "A String", # Type of person within Google+. Possible values are:
+            # - "person" - represents an actual person.
+            # - "page" - represents a page.
+        "verified": True or False, # Whether the person or Google+ Page has been verified.
+        "tagline": "A String", # The brief description (tagline) of this person.
+        "currentLocation": "A String", # The current location for this person.
+        "etag": "A String", # ETag of this response for caching purposes.
+        "circledByCount": 42, # If a Google+ Page and for followers who are visible, the number of people who have added this page to a circle.
+        "relationshipStatus": "A String", # The person's relationship status. Possible values are:
+            # - "single" - Person is single.
+            # - "in_a_relationship" - Person is in a relationship.
+            # - "engaged" - Person is engaged.
+            # - "married" - Person is married.
+            # - "its_complicated" - The relationship is complicated.
+            # - "open_relationship" - Person is in an open relationship.
+            # - "widowed" - Person is widowed.
+            # - "in_domestic_partnership" - Person is in a domestic partnership.
+            # - "in_civil_union" - Person is in a civil union.
+        "aboutMe": "A String", # A short biography for this person.
+        "placesLived": [ # A list of places where this person has lived.
+          {
+            "primary": True or False, # If "true", this place of residence is this person's primary residence.
+            "value": "A String", # A place where this person has lived. For example: "Seattle, WA", "Near Toronto".
+          },
+        ],
+        "birthday": "A String", # The person's date of birth, represented as YYYY-MM-DD.
+        "nickname": "A String", # The nickname of this person.
+        "emails": [ # A list of email addresses that this person has set to public on their Google+ profile. You can also use the userinfo.email scope to retrieve an authenticated user's email address.
+          {
+            "type": "A String", # The type of address. Possible values are:
+                # - "home" - Home email address.
+                # - "work" - Work email address.
+                # - "other" - Other.
+            "primary": True or False, # If "true", indicates this email address is the person's primary one.
+            "value": "A String", # The email address.
+          },
+        ],
+        "organizations": [ # A list of current or past organizations with which this person is associated.
+          {
+            "startDate": "A String", # The date the person joined this organization.
+            "endDate": "A String", # The date the person left this organization.
+            "description": "A String", # A short description of the person's role in this organization. Deprecated.
+            "title": "A String", # The person's job title or role within the organization.
+            "primary": True or False, # If "true", indicates this organization is the person's primary one (typically interpreted as current one).
+            "location": "A String", # The location of this organization. Deprecated.
+            "department": "A String", # The department within the organization. Deprecated.
+            "type": "A String", # The type of organization. Possible values are:
+                # - "work" - Work.
+                # - "school" - School.
+            "name": "A String", # The name of the organization.
+          },
+        ],
+        "kind": "plus#person", # Identifies this resource as a person. Value: "plus#person".
+        "displayName": "A String", # The name of this person, suitable for display.
+        "name": { # An object representation of the individual components of a person's name.
+          "honorificPrefix": "A String", # The honorific prefixes (such as "Dr." or "Mrs.") for this person.
+          "middleName": "A String", # The middle name of this person.
+          "familyName": "A String", # The family name (last name) of this person.
+          "formatted": "A String", # The full name of this person, including middle names, suffixes, etc.
+          "givenName": "A String", # The given name (first name) of this person.
+          "honorificSuffix": "A String", # The honorific suffixes (such as "Jr.") for this person.
+        },
+        "language": "A String", # The user's preferred language for rendering.
+        "url": "A String", # The URL of this person's profile.
+        "gender": "A String", # The person's gender. Possible values are:
+            # - "male" - Male gender.
+            # - "female" - Female gender.
+            # - "other" - Other.
+        "cover": { # The cover photo content.
+          "layout": "A String", # The layout of the cover art. Possible values are:
+              # - "banner" - One large image banner.
+          "coverInfo": { # Extra information about the cover photo.
+            "leftImageOffset": 42, # The difference between the left position of the image cover and the actual displayed cover image. Only valid for BANNER layout.
+            "topImageOffset": 42, # The difference between the top position of the image cover and the actual displayed cover image. Only valid for BANNER layout.
+          },
+          "coverPhoto": { # The person's primary cover image.
+            "url": "A String", # The url to the image.
+            "width": 42, # The width to the image.
+            "height": 42, # The height to the image.
+          },
+        },
+        "isPlusUser": True or False, # Whether this user has signed up for Google+.
+        "plusOneCount": 42, # If a Google+ Page, the number of people who have +1'ed this page.
+        "urls": [ # A list of URLs for this person.
+          {
+            "type": "A String", # The type of URL. Possible values are:
+                # - "home" - URL for home.
+                # - "work" - URL for work.
+                # - "blog" - URL for blog.
+                # - "profile" - URL for profile.
+                # - "other" - Other.
+            "primary": True or False, # If "true", this URL is the person's primary URL.
+            "value": "A String", # The URL value.
+          },
+        ],
+        "ageRange": { # The age range of the person.
+          "max": 42, # The age range's upper bound, if any.
+          "min": 42, # The age range's lower bound, if any.
+        },
+      },
+    ],
+    "etag": "A String", # ETag of this response for caching purposes.
+    "totalItems": 42, # The total number of people available in this list. The number of people in a response might be smaller due to paging. This might not be set for all collections.
+    "selfLink": "A String", # Link to this resource.
   }</pre>
 </div>
 
@@ -240,8 +389,17 @@
         "currentLocation": "A String", # The current location for this person.
         "etag": "A String", # ETag of this response for caching purposes.
         "circledByCount": 42, # If a Google+ Page and for followers who are visible, the number of people who have added this page to a circle.
+        "relationshipStatus": "A String", # The person's relationship status. Possible values are:
+            # - "single" - Person is single.
+            # - "in_a_relationship" - Person is in a relationship.
+            # - "engaged" - Person is engaged.
+            # - "married" - Person is married.
+            # - "its_complicated" - The relationship is complicated.
+            # - "open_relationship" - Person is in an open relationship.
+            # - "widowed" - Person is widowed.
+            # - "in_domestic_partnership" - Person is in a domestic partnership.
+            # - "in_civil_union" - Person is in a civil union.
         "aboutMe": "A String", # A short biography for this person.
-        "kind": "plus#person", # Identifies this resource as a person. Value: "plus#person".
         "placesLived": [ # A list of places where this person has lived.
           {
             "primary": True or False, # If "true", this place of residence is this person's primary residence.
@@ -250,7 +408,7 @@
         ],
         "birthday": "A String", # The person's date of birth, represented as YYYY-MM-DD.
         "nickname": "A String", # The nickname of this person.
-        "emails": [ # A list of email addresses for this person.
+        "emails": [ # A list of email addresses that this person has set to public on their Google+ profile. You can also use the userinfo.email scope to retrieve an authenticated user's email address.
           {
             "type": "A String", # The type of address. Possible values are:
                 # - "home" - Home email address.
@@ -275,16 +433,7 @@
             "name": "A String", # The name of the organization.
           },
         ],
-        "relationshipStatus": "A String", # The person's relationship status. Possible values are:
-            # - "single" - Person is single.
-            # - "in_a_relationship" - Person is in a relationship.
-            # - "engaged" - Person is engaged.
-            # - "married" - Person is married.
-            # - "its_complicated" - The relationship is complicated.
-            # - "open_relationship" - Person is in an open relationship.
-            # - "widowed" - Person is widowed.
-            # - "in_domestic_partnership" - Person is in a domestic partnership.
-            # - "in_civil_union" - Person is in a civil union.
+        "kind": "plus#person", # Identifies this resource as a person. Value: "plus#person".
         "displayName": "A String", # The name of this person, suitable for display.
         "name": { # An object representation of the individual components of a person's name.
           "honorificPrefix": "A String", # The honorific prefixes (such as "Dr." or "Mrs.") for this person.
@@ -294,6 +443,7 @@
           "givenName": "A String", # The given name (first name) of this person.
           "honorificSuffix": "A String", # The honorific suffixes (such as "Jr.") for this person.
         },
+        "language": "A String", # The user's preferred language for rendering.
         "url": "A String", # The URL of this person's profile.
         "gender": "A String", # The person's gender. Possible values are:
             # - "male" - Male gender.
@@ -326,6 +476,10 @@
             "value": "A String", # The URL value.
           },
         ],
+        "ageRange": { # The age range of the person.
+          "max": 42, # The age range's upper bound, if any.
+          "min": 42, # The age range's lower bound, if any.
+        },
       },
     ],
     "etag": "A String", # ETag of this response for caching purposes.
@@ -349,6 +503,20 @@
 </div>
 
 <div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
     <code class="details" id="search">search(query, pageToken=None, language=None, maxResults=None)</code>
   <pre>Search all public profiles.
 
@@ -381,8 +549,17 @@
         "currentLocation": "A String", # The current location for this person.
         "etag": "A String", # ETag of this response for caching purposes.
         "circledByCount": 42, # If a Google+ Page and for followers who are visible, the number of people who have added this page to a circle.
+        "relationshipStatus": "A String", # The person's relationship status. Possible values are:
+            # - "single" - Person is single.
+            # - "in_a_relationship" - Person is in a relationship.
+            # - "engaged" - Person is engaged.
+            # - "married" - Person is married.
+            # - "its_complicated" - The relationship is complicated.
+            # - "open_relationship" - Person is in an open relationship.
+            # - "widowed" - Person is widowed.
+            # - "in_domestic_partnership" - Person is in a domestic partnership.
+            # - "in_civil_union" - Person is in a civil union.
         "aboutMe": "A String", # A short biography for this person.
-        "kind": "plus#person", # Identifies this resource as a person. Value: "plus#person".
         "placesLived": [ # A list of places where this person has lived.
           {
             "primary": True or False, # If "true", this place of residence is this person's primary residence.
@@ -391,7 +568,7 @@
         ],
         "birthday": "A String", # The person's date of birth, represented as YYYY-MM-DD.
         "nickname": "A String", # The nickname of this person.
-        "emails": [ # A list of email addresses for this person.
+        "emails": [ # A list of email addresses that this person has set to public on their Google+ profile. You can also use the userinfo.email scope to retrieve an authenticated user's email address.
           {
             "type": "A String", # The type of address. Possible values are:
                 # - "home" - Home email address.
@@ -416,16 +593,7 @@
             "name": "A String", # The name of the organization.
           },
         ],
-        "relationshipStatus": "A String", # The person's relationship status. Possible values are:
-            # - "single" - Person is single.
-            # - "in_a_relationship" - Person is in a relationship.
-            # - "engaged" - Person is engaged.
-            # - "married" - Person is married.
-            # - "its_complicated" - The relationship is complicated.
-            # - "open_relationship" - Person is in an open relationship.
-            # - "widowed" - Person is widowed.
-            # - "in_domestic_partnership" - Person is in a domestic partnership.
-            # - "in_civil_union" - Person is in a civil union.
+        "kind": "plus#person", # Identifies this resource as a person. Value: "plus#person".
         "displayName": "A String", # The name of this person, suitable for display.
         "name": { # An object representation of the individual components of a person's name.
           "honorificPrefix": "A String", # The honorific prefixes (such as "Dr." or "Mrs.") for this person.
@@ -435,6 +603,7 @@
           "givenName": "A String", # The given name (first name) of this person.
           "honorificSuffix": "A String", # The honorific suffixes (such as "Jr.") for this person.
         },
+        "language": "A String", # The user's preferred language for rendering.
         "url": "A String", # The URL of this person's profile.
         "gender": "A String", # The person's gender. Possible values are:
             # - "male" - Male gender.
@@ -467,6 +636,10 @@
             "value": "A String", # The URL value.
           },
         ],
+        "ageRange": { # The age range of the person.
+          "max": 42, # The age range's upper bound, if any.
+          "min": 42, # The age range's lower bound, if any.
+        },
       },
     ],
     "etag": "A String", # ETag of this response for caching purposes.
diff --git a/docs/dyn/shopping_v1.products.html b/docs/dyn/shopping_v1.products.html
index d5d6f3a..136a9d2 100644
--- a/docs/dyn/shopping_v1.products.html
+++ b/docs/dyn/shopping_v1.products.html
@@ -78,7 +78,7 @@
   <code><a href="#get">get(source, accountId, productIdType, productId, taxonomy=None, recommendations_useGcsConfig=None, plusOne_enabled=None, recommendations_include=None, location=None, recommendations_enabled=None, categories_enabled=None, attributeFilter=None, categories_useGcsConfig=None, plusOne_styles=None, thumbnails=None, categories_include=None, plusOne_useGcsConfig=None)</a></code></p>
 <p class="firstline">Returns a single product</p>
 <p class="toc_element">
-  <code><a href="#list">list(source, facets_enabled=None, rankBy=None, taxonomy=None, promotions_enabled=None, channels=None, facets_discover=None, startIndex=None, availability=None, crowdBy=None, spelling_enabled=None, categoryRecommendations_category=None, extras_enabled=None, facets_includeEmptyBuckets=None, categoryRecommendations_enabled=None, extras_info=None, spelling_useGcsConfig=None, useCase=None, location=None, maxVariants=None, plusOne_styles=None, plusOne_enabled=None, relatedQueries_enabled=None, facets_useGcsConfig=None, categoryRecommendations_useGcsConfig=None, boostBy=None, safe=None, maxResults=None, categories_enabled=None, attributeFilter=None, categoryRecommendations_include=None, categories_useGcsConfig=None, clickTracking=None, facets_include=None, thumbnails=None, language=None, currency=None, categories_include=None, redirects_enabled=None, restrictBy=None, q=None, redirects_useGcsConfig=None, plusOne_useGcsConfig=None, relatedQueries_useGcsConfig=None, promotions_useGcsConfig=None, country=None)</a></code></p>
+  <code><a href="#list">list(source, facets_enabled=None, rankBy=None, taxonomy=None, promotions_enabled=None, experimentId=None, channels=None, facets_discover=None, startIndex=None, availability=None, crowdBy=None, spelling_enabled=None, categoryRecommendations_category=None, extras_enabled=None, facets_includeEmptyBuckets=None, categoryRecommendations_enabled=None, extras_info=None, spelling_useGcsConfig=None, useCase=None, location=None, maxVariants=None, plusOne_styles=None, plusOne_enabled=None, relatedQueries_enabled=None, facets_useGcsConfig=None, categoryRecommendations_useGcsConfig=None, boostBy=None, safe=None, maxResults=None, categories_enabled=None, attributeFilter=None, categoryRecommendations_include=None, categories_useGcsConfig=None, clickTracking=None, facets_include=None, thumbnails=None, language=None, currency=None, categories_include=None, redirects_enabled=None, restrictBy=None, q=None, redirects_useGcsConfig=None, plusOne_useGcsConfig=None, relatedQueries_useGcsConfig=None, promotions_useGcsConfig=None, country=None)</a></code></p>
 <p class="firstline">Returns a list of products and content modules</p>
 <h3>Method Details</h3>
 <div class="method">
@@ -353,7 +353,7 @@
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(source, facets_enabled=None, rankBy=None, taxonomy=None, promotions_enabled=None, channels=None, facets_discover=None, startIndex=None, availability=None, crowdBy=None, spelling_enabled=None, categoryRecommendations_category=None, extras_enabled=None, facets_includeEmptyBuckets=None, categoryRecommendations_enabled=None, extras_info=None, spelling_useGcsConfig=None, useCase=None, location=None, maxVariants=None, plusOne_styles=None, plusOne_enabled=None, relatedQueries_enabled=None, facets_useGcsConfig=None, categoryRecommendations_useGcsConfig=None, boostBy=None, safe=None, maxResults=None, categories_enabled=None, attributeFilter=None, categoryRecommendations_include=None, categories_useGcsConfig=None, clickTracking=None, facets_include=None, thumbnails=None, language=None, currency=None, categories_include=None, redirects_enabled=None, restrictBy=None, q=None, redirects_useGcsConfig=None, plusOne_useGcsConfig=None, relatedQueries_useGcsConfig=None, promotions_useGcsConfig=None, country=None)</code>
+    <code class="details" id="list">list(source, facets_enabled=None, rankBy=None, taxonomy=None, promotions_enabled=None, experimentId=None, channels=None, facets_discover=None, startIndex=None, availability=None, crowdBy=None, spelling_enabled=None, categoryRecommendations_category=None, extras_enabled=None, facets_includeEmptyBuckets=None, categoryRecommendations_enabled=None, extras_info=None, spelling_useGcsConfig=None, useCase=None, location=None, maxVariants=None, plusOne_styles=None, plusOne_enabled=None, relatedQueries_enabled=None, facets_useGcsConfig=None, categoryRecommendations_useGcsConfig=None, boostBy=None, safe=None, maxResults=None, categories_enabled=None, attributeFilter=None, categoryRecommendations_include=None, categories_useGcsConfig=None, clickTracking=None, facets_include=None, thumbnails=None, language=None, currency=None, categories_include=None, redirects_enabled=None, restrictBy=None, q=None, redirects_useGcsConfig=None, plusOne_useGcsConfig=None, relatedQueries_useGcsConfig=None, promotions_useGcsConfig=None, country=None)</code>
   <pre>Returns a list of products and content modules
 
 Args:
@@ -362,6 +362,7 @@
   rankBy: string, Ranking specification
   taxonomy: string, Taxonomy name
   promotions_enabled: boolean, Whether to return promotion information
+  experimentId: string, The Id of the experiment
   channels: string, Channels specification
   facets_discover: string, Facets to discover
   startIndex: integer, Index (1-based) of first product to return
diff --git a/docs/dyn/storage_v1beta1.objects.html b/docs/dyn/storage_v1beta1.objects.html
index b2421b3..740ba0d 100644
--- a/docs/dyn/storage_v1beta1.objects.html
+++ b/docs/dyn/storage_v1beta1.objects.html
@@ -137,7 +137,7 @@
       "media": { # Object media data. Provided on your behalf when uploading raw media or multipart/related with an auxiliary media part.
         "contentType": "A String", # Content-Type of the object data.
         "timeCreated": "A String", # Creation time of the data in RFC 3339 format.
-        "algorithm": "A String", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
+        "algorithm": "MD5", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
         "length": "A String", # Content-Length of the data in bytes.
         "link": "A String", # Media download link.
         "hash": "A String", # Hash of the data. Required if a hash algorithm is provided.
@@ -213,7 +213,7 @@
     "media": { # Object media data. Provided on your behalf when uploading raw media or multipart/related with an auxiliary media part.
       "contentType": "A String", # Content-Type of the object data.
       "timeCreated": "A String", # Creation time of the data in RFC 3339 format.
-      "algorithm": "A String", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
+      "algorithm": "MD5", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
       "length": "A String", # Content-Length of the data in bytes.
       "link": "A String", # Media download link.
       "hash": "A String", # Hash of the data. Required if a hash algorithm is provided.
@@ -271,7 +271,7 @@
       "media": { # Object media data. Provided on your behalf when uploading raw media or multipart/related with an auxiliary media part.
         "contentType": "A String", # Content-Type of the object data.
         "timeCreated": "A String", # Creation time of the data in RFC 3339 format.
-        "algorithm": "A String", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
+        "algorithm": "MD5", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
         "length": "A String", # Content-Length of the data in bytes.
         "link": "A String", # Media download link.
         "hash": "A String", # Hash of the data. Required if a hash algorithm is provided.
@@ -329,7 +329,7 @@
     "media": { # Object media data. Provided on your behalf when uploading raw media or multipart/related with an auxiliary media part.
       "contentType": "A String", # Content-Type of the object data.
       "timeCreated": "A String", # Creation time of the data in RFC 3339 format.
-      "algorithm": "A String", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
+      "algorithm": "MD5", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
       "length": "A String", # Content-Length of the data in bytes.
       "link": "A String", # Media download link.
       "hash": "A String", # Hash of the data. Required if a hash algorithm is provided.
@@ -411,7 +411,7 @@
           "media": { # Object media data. Provided on your behalf when uploading raw media or multipart/related with an auxiliary media part.
             "contentType": "A String", # Content-Type of the object data.
             "timeCreated": "A String", # Creation time of the data in RFC 3339 format.
-            "algorithm": "A String", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
+            "algorithm": "MD5", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
             "length": "A String", # Content-Length of the data in bytes.
             "link": "A String", # Media download link.
             "hash": "A String", # Hash of the data. Required if a hash algorithm is provided.
@@ -490,7 +490,7 @@
     "media": { # Object media data. Provided on your behalf when uploading raw media or multipart/related with an auxiliary media part.
       "contentType": "A String", # Content-Type of the object data.
       "timeCreated": "A String", # Creation time of the data in RFC 3339 format.
-      "algorithm": "A String", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
+      "algorithm": "MD5", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
       "length": "A String", # Content-Length of the data in bytes.
       "link": "A String", # Media download link.
       "hash": "A String", # Hash of the data. Required if a hash algorithm is provided.
@@ -546,7 +546,7 @@
       "media": { # Object media data. Provided on your behalf when uploading raw media or multipart/related with an auxiliary media part.
         "contentType": "A String", # Content-Type of the object data.
         "timeCreated": "A String", # Creation time of the data in RFC 3339 format.
-        "algorithm": "A String", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
+        "algorithm": "MD5", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
         "length": "A String", # Content-Length of the data in bytes.
         "link": "A String", # Media download link.
         "hash": "A String", # Hash of the data. Required if a hash algorithm is provided.
@@ -605,7 +605,7 @@
     "media": { # Object media data. Provided on your behalf when uploading raw media or multipart/related with an auxiliary media part.
       "contentType": "A String", # Content-Type of the object data.
       "timeCreated": "A String", # Creation time of the data in RFC 3339 format.
-      "algorithm": "A String", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
+      "algorithm": "MD5", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
       "length": "A String", # Content-Length of the data in bytes.
       "link": "A String", # Media download link.
       "hash": "A String", # Hash of the data. Required if a hash algorithm is provided.
@@ -661,7 +661,7 @@
       "media": { # Object media data. Provided on your behalf when uploading raw media or multipart/related with an auxiliary media part.
         "contentType": "A String", # Content-Type of the object data.
         "timeCreated": "A String", # Creation time of the data in RFC 3339 format.
-        "algorithm": "A String", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
+        "algorithm": "MD5", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
         "length": "A String", # Content-Length of the data in bytes.
         "link": "A String", # Media download link.
         "hash": "A String", # Hash of the data. Required if a hash algorithm is provided.
@@ -720,7 +720,7 @@
     "media": { # Object media data. Provided on your behalf when uploading raw media or multipart/related with an auxiliary media part.
       "contentType": "A String", # Content-Type of the object data.
       "timeCreated": "A String", # Creation time of the data in RFC 3339 format.
-      "algorithm": "A String", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
+      "algorithm": "MD5", # Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.
       "length": "A String", # Content-Length of the data in bytes.
       "link": "A String", # Media download link.
       "hash": "A String", # Hash of the data. Required if a hash algorithm is provided.
diff --git a/docs/dyn/youtubeAnalytics_v1.reports.html b/docs/dyn/youtubeAnalytics_v1.reports.html
index 7ad9782..d389b5b 100644
--- a/docs/dyn/youtubeAnalytics_v1.reports.html
+++ b/docs/dyn/youtubeAnalytics_v1.reports.html
@@ -75,21 +75,23 @@
 <h1><a href="youtubeAnalytics_v1.html">YouTube Analytics API</a> . <a href="youtubeAnalytics_v1.reports.html">reports</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#query">query(ids, start_date, end_date, metrics, sort=None, dimensions=None, filters=None, max_results=None, start_index=None)</a></code></p>
+  <code><a href="#query">query(ids=None, start_date, end_date, metrics, sort=None, dimensions=None, filters=None, max_results=None, start_index=None)</a></code></p>
 <p class="firstline">Retrieve your YouTube Analytics reports.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="query">query(ids, start_date, end_date, metrics, sort=None, dimensions=None, filters=None, max_results=None, start_index=None)</code>
+    <code class="details" id="query">query(ids=None, start_date, end_date, metrics, sort=None, dimensions=None, filters=None, max_results=None, start_index=None)</code>
   <pre>Retrieve your YouTube Analytics reports.
 
 Args:
-  ids: string, Unique channel or content owner ID for retrieving YouTube Analytics data. Either channel==C or contentOwner==O where 'C' is the encrypted channel ID and 'O' is the content owner name. (required)
-  start_date: string, Start date for fetching YouTube Analytics data. All requests should specify a start date formatted as YYYY-MM-DD. (required)
-  end_date: string, End date for fetching YouTube Analytics data. All requests should specify an end date formatted as YYYY-MM-DD. (required)
-  metrics: string, A comma-separated list of YouTube Analytics metrics. E.g., 'views' or 'likes,dislikes' (required)
-  sort: string, A comma-separated list of dimensions or metrics that determine the sort order for YouTube Analytics data. By default the sort order is ascending, '-' prefix causes descending sort order.
-  dimensions: string, A comma-separated list of YouTube Analytics dimensions. E.g., 'video', or 'ageGroup,gender'.
-  filters: string, A list of dimension filters to be applied to YouTube Analytics data. Multiple filters can be joined together with the ';' character. The returned result table will satisfy both filters. E.g., video==dMH0bHeiRNg;country==IT will restrict the returned stats to the given video and the country Italy.
+  ids: string, Identifies the YouTube channel or content owner for which you are retrieving YouTube Analytics data.
+- To request data for a YouTube user, set the ids parameter value to channel==CHANNEL_ID, where CHANNEL_ID specifies the unique YouTube channel ID.
+- To request data for a YouTube CMS content owner, set the ids parameter value to contentOwner==OWNER_NAME, where OWNER_NAME is the CMS name of the content owner. (required)
+  start_date: string, The start date for fetching YouTube Analytics data. The value should be in YYYY-MM-DD format. (required)
+  end_date: string, The end date for fetching YouTube Analytics data. The value should be in YYYY-MM-DD format. (required)
+  metrics: string, A comma-separated list of YouTube Analytics metrics, such as views or likes,dislikes. See the Available Reports document for a list of the reports that you can retrieve and the metrics available in each report, and see the Metrics document for definitions of those metrics. (required)
+  sort: string, A comma-separated list of dimensions or metrics that determine the sort order for YouTube Analytics data. By default the sort order is ascending. The '-' prefix causes descending sort order.
+  dimensions: string, A comma-separated list of YouTube Analytics dimensions, such as views or ageGroup,gender. See the Available Reports document for a list of the reports that you can retrieve and the dimensions used for those reports. Also see the Dimensions document for definitions of those dimensions.
+  filters: string, A list of filters that should be applied when retrieving YouTube Analytics data. The Available Reports document identifies the dimensions that can be used to filter each report, and the Dimensions document defines those dimensions. If a request uses multiple filters, join them together with a semicolon (;), and the returned result table will satisfy both filters. For example, a filters parameter value of video==dMH0bHeiRNg;country==IT restricts the result set to include data for the given video in Italy.
   max_results: integer, The maximum number of rows to include in the response.
   start_index: integer, An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter (one-based, inclusive).
 
@@ -97,16 +99,16 @@
   An object of the form:
 
     { # Contains a single result table. The table is returned as an array of rows that contain the values for the cells of the table. Depending on the metric or dimension, the cell can contain a string (video ID, country code) or a number (number of views or number of likes).
-    "kind": "youtubeAnalytics#resultTable", # Identifier used to mark the structure as a result table.
-    "rows": [ # Contains all rows of the result table. Each row contains an array with the values for the columns. The order matches the order of the column information provided in the "columnHeaders" field. If no data is available for the given query, the "rows" element will be omitted from the response. The response for a query with the day dimension will not contain rows for the most recent days.
+    "kind": "youtubeAnalytics#resultTable", # This value specifies the type of data included in the API response. For the query method, the kind property value will be youtubeAnalytics#resultTable.
+    "rows": [ # The list contains all rows of the result table. Each item in the list is an array that contains comma-delimited data corresponding to a single row of data. The order of the comma-delimited data fields will match the order of the columns listed in the columnHeaders field. If no data is available for the given query, the rows element will be omitted from the response. The response for a query with the day dimension will not contain rows for the most recent days.
       [
         "",
       ],
     ],
-    "columnHeaders": [ # Contains information about the columns returned in the "rows" fields. The order of the elements matches the order of the corresponding columns in "rows" field.
+    "columnHeaders": [ # This value specifies information about the data returned in the rows fields. Each item in the columnHeaders list identifies a field returned in the rows value, which contains a list of comma-delimited data. The columnHeaders list will begin with the dimensions specified in the API request, which will be followed by the metrics specified in the API request. The order of both dimensions and metrics will match the ordering in the API request. For example, if the API request contains the parameters dimensions=ageGroup,gender&metrics=viewerPercentage, the API response will return columns in this order: ageGroup,gender,viewerPercentage.
       {
-        "dataType": "A String", # Type of the data in the column (STRING, INTEGER, FLOAT).
-        "columnType": "A String", # The type of the column (DIMENSION, METRIC).
+        "dataType": "A String", # The type of the data in the column (STRING, INTEGER, FLOAT, etc.).
+        "columnType": "A String", # The type of the column (DIMENSION or METRIC).
         "name": "A String", # The name of the dimension or metric.
       },
     ],
diff --git a/docs/dyn/youtube_v3.activities.html b/docs/dyn/youtube_v3.activities.html
index d13058d..4f7c0aa 100644
--- a/docs/dyn/youtube_v3.activities.html
+++ b/docs/dyn/youtube_v3.activities.html
@@ -98,15 +98,16 @@
 { # An activity resource contains information about an action that a particular channel, or user, has taken on YouTube. The actions reported in activity feeds include rating a video, sharing a video, marking a video as a favorite, commenting on a video, uploading a video, and so forth. Each activity resource identifies the type of action, the channel associated with the action, and the resource(s) associated with the action, such as the video that was rated or uploaded.
     "snippet": { # Basic details about an activity, including title, description, thumbnails, activity type and group. # The snippet object contains basic details about the activity, including the activity's type and group ID.
       "thumbnails": { # A map of thumbnail images associated with the resource that is primarily associated with the activity. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-        "a_key": { # The thumbnail image's name.
+        "a_key": { # A thumbnail is an image representing a YouTube resource. # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
           "url": "A String", # The thumbnail image's URL.
-          "width": 42,
-          "height": 42,
+          "width": 42, # (Optional) Width of the thumbnail image.
+          "height": 42, # (Optional) Height of the thumbnail image.
         },
       },
       "title": "A String", # The title of the resource primarily associated with the activity.
       "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel associated with the activity.
-      "publishedAt": "A String", # The date and time that the activity occurred. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+      "publishedAt": "A String", # The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+      "channelTitle": "A String", # Channel title for the channel responsible for this activity
       "type": "A String", # The type of activity that the resource describes.
       "groupId": "A String", # The group ID associated with the activity. A group ID identifies user events that are associated with the same user and resource. For example, if a user rates a video and marks the same video as a favorite, the entries for those events would have the same group ID in the user's activity feed. In your user interface, you can avoid repetition by grouping events with the same groupId value.
       "description": "A String", # The description of the resource primarily associated with the activity.
@@ -213,15 +214,16 @@
     { # An activity resource contains information about an action that a particular channel, or user, has taken on YouTube. The actions reported in activity feeds include rating a video, sharing a video, marking a video as a favorite, commenting on a video, uploading a video, and so forth. Each activity resource identifies the type of action, the channel associated with the action, and the resource(s) associated with the action, such as the video that was rated or uploaded.
       "snippet": { # Basic details about an activity, including title, description, thumbnails, activity type and group. # The snippet object contains basic details about the activity, including the activity's type and group ID.
         "thumbnails": { # A map of thumbnail images associated with the resource that is primarily associated with the activity. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-          "a_key": { # The thumbnail image's name.
+          "a_key": { # A thumbnail is an image representing a YouTube resource. # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
             "url": "A String", # The thumbnail image's URL.
-            "width": 42,
-            "height": 42,
+            "width": 42, # (Optional) Width of the thumbnail image.
+            "height": 42, # (Optional) Height of the thumbnail image.
           },
         },
         "title": "A String", # The title of the resource primarily associated with the activity.
         "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel associated with the activity.
-        "publishedAt": "A String", # The date and time that the activity occurred. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+        "publishedAt": "A String", # The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+        "channelTitle": "A String", # Channel title for the channel responsible for this activity
         "type": "A String", # The type of activity that the resource describes.
         "groupId": "A String", # The group ID associated with the activity. A group ID identifies user events that are associated with the same user and resource. For example, if a user rates a video and marks the same video as a favorite, the entries for those events would have the same group ID in the user's activity feed. In your user interface, you can avoid repetition by grouping events with the same groupId value.
         "description": "A String", # The description of the resource primarily associated with the activity.
@@ -348,15 +350,16 @@
       { # An activity resource contains information about an action that a particular channel, or user, has taken on YouTube. The actions reported in activity feeds include rating a video, sharing a video, marking a video as a favorite, commenting on a video, uploading a video, and so forth. Each activity resource identifies the type of action, the channel associated with the action, and the resource(s) associated with the action, such as the video that was rated or uploaded.
           "snippet": { # Basic details about an activity, including title, description, thumbnails, activity type and group. # The snippet object contains basic details about the activity, including the activity's type and group ID.
             "thumbnails": { # A map of thumbnail images associated with the resource that is primarily associated with the activity. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-              "a_key": { # The thumbnail image's name.
+              "a_key": { # A thumbnail is an image representing a YouTube resource. # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
                 "url": "A String", # The thumbnail image's URL.
-                "width": 42,
-                "height": 42,
+                "width": 42, # (Optional) Width of the thumbnail image.
+                "height": 42, # (Optional) Height of the thumbnail image.
               },
             },
             "title": "A String", # The title of the resource primarily associated with the activity.
             "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel associated with the activity.
-            "publishedAt": "A String", # The date and time that the activity occurred. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+            "publishedAt": "A String", # The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+            "channelTitle": "A String", # Channel title for the channel responsible for this activity
             "type": "A String", # The type of activity that the resource describes.
             "groupId": "A String", # The group ID associated with the activity. A group ID identifies user events that are associated with the same user and resource. For example, if a user rates a video and marks the same video as a favorite, the entries for those events would have the same group ID in the user's activity feed. In your user interface, you can avoid repetition by grouping events with the same groupId value.
             "description": "A String", # The description of the resource primarily associated with the activity.
diff --git a/docs/dyn/youtube_v3.channels.html b/docs/dyn/youtube_v3.channels.html
index 4c49487..5748601 100644
--- a/docs/dyn/youtube_v3.channels.html
+++ b/docs/dyn/youtube_v3.channels.html
@@ -75,24 +75,25 @@
 <h1><a href="youtube_v3.html">YouTube Data API</a> . <a href="youtube_v3.channels.html">channels</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#list">list(part=None, pageToken=None, mine=None, maxResults=None, categoryId=None, mySubscribers=None, id=None)</a></code></p>
+  <code><a href="#list">list(part=None, onBehalfOfContentOwner=None, pageToken=None, categoryId=None, maxResults=None, mine=None, mySubscribers=None, id=None)</a></code></p>
 <p class="firstline">Returns a collection of zero or more channel resources that match the request criteria.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="list">list(part=None, pageToken=None, mine=None, maxResults=None, categoryId=None, mySubscribers=None, id=None)</code>
+    <code class="details" id="list">list(part=None, onBehalfOfContentOwner=None, pageToken=None, categoryId=None, maxResults=None, mine=None, mySubscribers=None, id=None)</code>
   <pre>Returns a collection of zero or more channel resources that match the request criteria.
 
 Args:
   part: string, The part parameter specifies a comma-separated list of one or more channel resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, statistics, and topicDetails.
 
 If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a channel resource, the contentDetails property contains other properties, such as the uploads properties. As such, if you set part=contentDetails, the API response will also contain all of those nested properties. (required)
+  onBehalfOfContentOwner: string, The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.
   pageToken: string, The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.
-  mine: boolean, Set this parameter's value to true to instruct the API to only return channels owned by the authenticated user.
-  maxResults: integer, The maxResults parameter specifies the maximum number of items that should be returned in the result set.
   categoryId: string, The categoryId parameter specifies a YouTube guide category, thereby requesting YouTube channels associated with that category.
+  maxResults: integer, The maxResults parameter specifies the maximum number of items that should be returned in the result set.
+  mine: boolean, Set this parameter's value to true to instruct the API to only return channels owned by the authenticated user.
   mySubscribers: string, Set this parameter's value to true to retrieve a list of channels that subscribed to the authenticated user's channel.
   id: string, The id parameter specifies a comma-separated list of the YouTube channel ID(s) for the resource(s) that are being retrieved. In a channel resource, the id property specifies the channel's YouTube channel ID.
 
@@ -127,17 +128,96 @@
             "favorites": "A String", # The ID of the playlist that contains the channel's favorite videos. Use the playlistItems.insert and playlistItems.delete to add or remove items from that list.
             "uploads": "A String", # The ID of the playlist that contains the channel's uploaded videos. Use the videos.insert method to upload new videos and the videos.delete method to delete previously uploaded videos.
           },
+          "googlePlusUserId": "A String", # The googlePlusUserId object identifies the Google+ profile ID associated with this channel.
+        },
+        "brandingSettings": { # Branding properties of a YouTube channel. # The brandingSettings object encapsulates information about the branding of the channel.
+          "image": {
+            "largeBrandedBannerImageUrl": { # Represent a property available in different languages.
+              "default": "A String",
+              "localizeds": [
+                { # A localized string.
+                  "value": "A String",
+                  "language": "A String",
+                },
+              ],
+            },
+            "bannerImageUrl": "A String",
+            "backgroundImageUrl": { # Represent a property available in different languages.
+              "default": "A String",
+              "localizeds": [
+                { # A localized string.
+                  "value": "A String",
+                  "language": "A String",
+                },
+              ],
+            },
+            "largeBrandedBannerImageImapScript": { # Represent a property available in different languages.
+              "default": "A String",
+              "localizeds": [
+                { # A localized string.
+                  "value": "A String",
+                  "language": "A String",
+                },
+              ],
+            },
+            "bannerMobileImageUrl": "A String",
+            "smallBrandedBannerImageUrl": { # Represent a property available in different languages.
+              "default": "A String",
+              "localizeds": [
+                { # A localized string.
+                  "value": "A String",
+                  "language": "A String",
+                },
+              ],
+            },
+            "smallBrandedBannerImageImapScript": { # Represent a property available in different languages.
+              "default": "A String",
+              "localizeds": [
+                { # A localized string.
+                  "value": "A String",
+                  "language": "A String",
+                },
+              ],
+            },
+            "trackingImageUrl": "A String",
+            "watchIconImageUrl": "A String",
+          },
+          "watch": { # Branding properties for the watch.
+            "textColor": "A String",
+            "featuredPlaylistId": "A String",
+            "backgroundColor": "A String",
+          },
+          "channel": { # Branding properties for the channel view.
+            "description": "A String",
+            "title": "A String",
+            "moderateComments": True or False,
+            "showBrowseView": True or False,
+            "featuredChannelsTitle": "A String",
+            "unsubscribedTrailer": "A String",
+            "keywords": "A String",
+            "defaultTab": "A String",
+            "featuredChannelsUrls": [
+              "A String",
+            ],
+            "trackingAnalyticsAccountId": "A String",
+            "showRelatedChannels": True or False,
+          },
+          "hints": [
+            { # A key value for the experimental branding properties.
+              "property": "A String",
+              "value": "A String",
+            },
+          ],
         },
         "snippet": { # Basic details about a channel, including title, description and thumbnails. # The snippet object contains basic details about the channel, such as its title, description, and thumbnail images.
           "title": "A String", # The channel's title.
-          "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel.
-          "description": "A String", # The channel's description.
+          "description": "A String", # The description of the channel.
           "publishedAt": "A String", # The date and time that the channel was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
           "thumbnails": { # A map of thumbnail images associated with the channel. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-            "a_key": { # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
+            "a_key": { # A thumbnail is an image representing a YouTube resource. # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
               "url": "A String", # The thumbnail image's URL.
-              "width": 42,
-              "height": 42,
+              "width": 42, # (Optional) Width of the thumbnail image.
+              "height": 42, # (Optional) Height of the thumbnail image.
             },
           },
         },
diff --git a/docs/dyn/youtube_v3.html b/docs/dyn/youtube_v3.html
index 12354bf..4f8da3d 100644
--- a/docs/dyn/youtube_v3.html
+++ b/docs/dyn/youtube_v3.html
@@ -90,6 +90,16 @@
 <p class="firstline">Returns the guideCategories Resource.</p>
 
 <p class="toc_element">
+  <code><a href="youtube_v3.liveBroadcasts.html">liveBroadcasts()</a></code>
+</p>
+<p class="firstline">Returns the liveBroadcasts Resource.</p>
+
+<p class="toc_element">
+  <code><a href="youtube_v3.liveStreams.html">liveStreams()</a></code>
+</p>
+<p class="firstline">Returns the liveStreams Resource.</p>
+
+<p class="toc_element">
   <code><a href="youtube_v3.playlistItems.html">playlistItems()</a></code>
 </p>
 <p class="firstline">Returns the playlistItems Resource.</p>
diff --git a/docs/dyn/youtube_v3.playlistItems.html b/docs/dyn/youtube_v3.playlistItems.html
index 4b8614d..cbb3f9e 100644
--- a/docs/dyn/youtube_v3.playlistItems.html
+++ b/docs/dyn/youtube_v3.playlistItems.html
@@ -81,7 +81,7 @@
   <code><a href="#insert">insert(part=None, body)</a></code></p>
 <p class="firstline">Adds a resource to a playlist.</p>
 <p class="toc_element">
-  <code><a href="#list">list(part=None, pageToken=None, playlistId=None, maxResults=None, id=None)</a></code></p>
+  <code><a href="#list">list(part=None, pageToken=None, playlistId=None, videoId=None, maxResults=None, id=None)</a></code></p>
 <p class="firstline">Returns a collection of playlist items that match the API request parameters. You can retrieve all of the playlist items in a specified playlist or retrieve one or more playlist items by their unique IDs.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
@@ -134,10 +134,10 @@
       "publishedAt": "A String", # The date and time that the item was added to the playlist. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
       "position": 42, # The order in which the item appears in the playlist. The value uses a zero-based index, so the first item has a position of 0, the second item has a position of 1, and so forth.
       "thumbnails": { # A map of thumbnail images associated with the playlist item. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-        "a_key": { # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
+        "a_key": { # A thumbnail is an image representing a YouTube resource. # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
           "url": "A String", # The thumbnail image's URL.
-          "width": 42,
-          "height": 42,
+          "width": 42, # (Optional) Width of the thumbnail image.
+          "height": 42, # (Optional) Height of the thumbnail image.
         },
       },
     },
@@ -180,10 +180,10 @@
         "publishedAt": "A String", # The date and time that the item was added to the playlist. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
         "position": 42, # The order in which the item appears in the playlist. The value uses a zero-based index, so the first item has a position of 0, the second item has a position of 1, and so forth.
         "thumbnails": { # A map of thumbnail images associated with the playlist item. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-          "a_key": { # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
+          "a_key": { # A thumbnail is an image representing a YouTube resource. # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
             "url": "A String", # The thumbnail image's URL.
-            "width": 42,
-            "height": 42,
+            "width": 42, # (Optional) Width of the thumbnail image.
+            "height": 42, # (Optional) Height of the thumbnail image.
           },
         },
       },
@@ -200,7 +200,7 @@
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(part=None, pageToken=None, playlistId=None, maxResults=None, id=None)</code>
+    <code class="details" id="list">list(part=None, pageToken=None, playlistId=None, videoId=None, maxResults=None, id=None)</code>
   <pre>Returns a collection of playlist items that match the API request parameters. You can retrieve all of the playlist items in a specified playlist or retrieve one or more playlist items by their unique IDs.
 
 Args:
@@ -209,6 +209,7 @@
 If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a playlistItem resource, the snippet property contains numerous fields, including the title, description, position, and resourceId properties. As such, if you set part=snippet, the API response will contain all of those properties. (required)
   pageToken: string, USE_DESCRIPTION --- channels:list:pageToken
   playlistId: string, The playlistId parameter specifies the unique ID of the playlist for which you want to retrieve playlist items. Note that even though this is an optional parameter, every request to retrieve playlist items must specify a value for either the id parameter or the playlistId parameter.
+  videoId: string, The videoId parameter specifies that the request should return only the playlist items that contain the specified video.
   maxResults: integer, USE_DESCRIPTION --- channels:list:maxResults
   id: string, The id parameter specifies a comma-separated list of one or more unique playlist item IDs.
 
@@ -243,10 +244,10 @@
             "publishedAt": "A String", # The date and time that the item was added to the playlist. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
             "position": 42, # The order in which the item appears in the playlist. The value uses a zero-based index, so the first item has a position of 0, the second item has a position of 1, and so forth.
             "thumbnails": { # A map of thumbnail images associated with the playlist item. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-              "a_key": { # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
+              "a_key": { # A thumbnail is an image representing a YouTube resource. # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
                 "url": "A String", # The thumbnail image's URL.
-                "width": 42,
-                "height": 42,
+                "width": 42, # (Optional) Width of the thumbnail image.
+                "height": 42, # (Optional) Height of the thumbnail image.
               },
             },
           },
@@ -321,10 +322,10 @@
       "publishedAt": "A String", # The date and time that the item was added to the playlist. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
       "position": 42, # The order in which the item appears in the playlist. The value uses a zero-based index, so the first item has a position of 0, the second item has a position of 1, and so forth.
       "thumbnails": { # A map of thumbnail images associated with the playlist item. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-        "a_key": { # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
+        "a_key": { # A thumbnail is an image representing a YouTube resource. # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
           "url": "A String", # The thumbnail image's URL.
-          "width": 42,
-          "height": 42,
+          "width": 42, # (Optional) Width of the thumbnail image.
+          "height": 42, # (Optional) Height of the thumbnail image.
         },
       },
     },
@@ -367,10 +368,10 @@
         "publishedAt": "A String", # The date and time that the item was added to the playlist. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
         "position": 42, # The order in which the item appears in the playlist. The value uses a zero-based index, so the first item has a position of 0, the second item has a position of 1, and so forth.
         "thumbnails": { # A map of thumbnail images associated with the playlist item. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-          "a_key": { # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
+          "a_key": { # A thumbnail is an image representing a YouTube resource. # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
             "url": "A String", # The thumbnail image's URL.
-            "width": 42,
-            "height": 42,
+            "width": 42, # (Optional) Width of the thumbnail image.
+            "height": 42, # (Optional) Height of the thumbnail image.
           },
         },
       },
diff --git a/docs/dyn/youtube_v3.playlists.html b/docs/dyn/youtube_v3.playlists.html
index 243e3cb..a0514c5 100644
--- a/docs/dyn/youtube_v3.playlists.html
+++ b/docs/dyn/youtube_v3.playlists.html
@@ -133,10 +133,10 @@
       "description": "A String", # The playlist's description.
       "publishedAt": "A String", # The date and time that the playlist was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
       "thumbnails": { # A map of thumbnail images associated with the playlist. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-        "a_key": { # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
+        "a_key": { # A thumbnail is an image representing a YouTube resource. # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
           "url": "A String", # The thumbnail image's URL.
-          "width": 42,
-          "height": 42,
+          "width": 42, # (Optional) Width of the thumbnail image.
+          "height": 42, # (Optional) Height of the thumbnail image.
         },
       },
     },
@@ -174,10 +174,10 @@
         "description": "A String", # The playlist's description.
         "publishedAt": "A String", # The date and time that the playlist was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
         "thumbnails": { # A map of thumbnail images associated with the playlist. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-          "a_key": { # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
+          "a_key": { # A thumbnail is an image representing a YouTube resource. # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
             "url": "A String", # The thumbnail image's URL.
-            "width": 42,
-            "height": 42,
+            "width": 42, # (Optional) Width of the thumbnail image.
+            "height": 42, # (Optional) Height of the thumbnail image.
           },
         },
       },
@@ -233,10 +233,10 @@
             "description": "A String", # The playlist's description.
             "publishedAt": "A String", # The date and time that the playlist was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
             "thumbnails": { # A map of thumbnail images associated with the playlist. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-              "a_key": { # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
+              "a_key": { # A thumbnail is an image representing a YouTube resource. # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
                 "url": "A String", # The thumbnail image's URL.
-                "width": 42,
-                "height": 42,
+                "width": 42, # (Optional) Width of the thumbnail image.
+                "height": 42, # (Optional) Height of the thumbnail image.
               },
             },
           },
@@ -306,10 +306,10 @@
       "description": "A String", # The playlist's description.
       "publishedAt": "A String", # The date and time that the playlist was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
       "thumbnails": { # A map of thumbnail images associated with the playlist. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-        "a_key": { # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
+        "a_key": { # A thumbnail is an image representing a YouTube resource. # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
           "url": "A String", # The thumbnail image's URL.
-          "width": 42,
-          "height": 42,
+          "width": 42, # (Optional) Width of the thumbnail image.
+          "height": 42, # (Optional) Height of the thumbnail image.
         },
       },
     },
@@ -347,10 +347,10 @@
         "description": "A String", # The playlist's description.
         "publishedAt": "A String", # The date and time that the playlist was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
         "thumbnails": { # A map of thumbnail images associated with the playlist. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-          "a_key": { # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
+          "a_key": { # A thumbnail is an image representing a YouTube resource. # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
             "url": "A String", # The thumbnail image's URL.
-            "width": 42,
-            "height": 42,
+            "width": 42, # (Optional) Width of the thumbnail image.
+            "height": 42, # (Optional) Height of the thumbnail image.
           },
         },
       },
diff --git a/docs/dyn/youtube_v3.search.html b/docs/dyn/youtube_v3.search.html
index 393977b..b33fd74 100644
--- a/docs/dyn/youtube_v3.search.html
+++ b/docs/dyn/youtube_v3.search.html
@@ -75,14 +75,14 @@
 <h1><a href="youtube_v3.html">YouTube Data API</a> . <a href="youtube_v3.search.html">search</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#list">list(part=None, channelId=None, videoSyndicated=None, videoCaption=None, publishedAfter=None, regionCode=None, type=None, topicId=None, publishedBefore=None, videoDimension=None, videoLicense=None, maxResults=None, relatedToVideoId=None, videoDefinition=None, pageToken=None, videoDuration=None, q=None, videoEmbeddable=None, videoCategoryId=None, order=None)</a></code></p>
+  <code><a href="#list">list(part=None, channelId=None, videoSyndicated=None, channelType=None, videoCaption=None, publishedAfter=None, onBehalfOfContentOwner=None, forContentOwner=None, regionCode=None, type=None, topicId=None, publishedBefore=None, videoDimension=None, videoLicense=None, maxResults=None, videoType=None, videoDefinition=None, pageToken=None, relatedToVideoId=None, videoDuration=None, q=None, videoEmbeddable=None, videoCategoryId=None, order=None)</a></code></p>
 <p class="firstline">Returns a collection of search results that match the query parameters specified in the API request. By default, a search result set identifies matching video, channel, and playlist resources, but you can also configure queries to only retrieve a specific type of resource.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="list">list(part=None, channelId=None, videoSyndicated=None, videoCaption=None, publishedAfter=None, regionCode=None, type=None, topicId=None, publishedBefore=None, videoDimension=None, videoLicense=None, maxResults=None, relatedToVideoId=None, videoDefinition=None, pageToken=None, videoDuration=None, q=None, videoEmbeddable=None, videoCategoryId=None, order=None)</code>
+    <code class="details" id="list">list(part=None, channelId=None, videoSyndicated=None, channelType=None, videoCaption=None, publishedAfter=None, onBehalfOfContentOwner=None, forContentOwner=None, regionCode=None, type=None, topicId=None, publishedBefore=None, videoDimension=None, videoLicense=None, maxResults=None, videoType=None, videoDefinition=None, pageToken=None, relatedToVideoId=None, videoDuration=None, q=None, videoEmbeddable=None, videoCategoryId=None, order=None)</code>
   <pre>Returns a collection of search results that match the query parameters specified in the API request. By default, a search result set identifies matching video, channel, and playlist resources, but you can also configure queries to only retrieve a specific type of resource.
 
 Args:
@@ -94,12 +94,18 @@
     Allowed values
       any - Return all videos, syndicated or not.
       true - Only retrieve syndicated videos.
+  channelType: string, The channelType parameter lets you restrict a search to a particular type of channel.
+    Allowed values
+      any - Return all channels.
+      show - Only retrieve shows.
   videoCaption: string, The videoCaption parameter indicates whether the API should filter video search results based on whether they have captions.
     Allowed values
       any - Do not filter results based on caption availability.
       closedCaption - Only include videos that have captions.
       none - Only include videos that do not have captions.
   publishedAfter: string, The publishedAfter parameter indicates that the API response should only contain resources created after the specified time. The value is an RFC 3339 formatted date-time value (1970-01-01T00:00:00Z).
+  onBehalfOfContentOwner: string, The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.
+  forContentOwner: boolean, The forContentOwner parameter restricts the search to only retrieve resources owned by the content owner specified by the onBehalfOfContentOwner parameter. The user must be authenticated as a CMS account linked to the specified content owner and onBehalfOfContentOwner must be provided.
   regionCode: string, The regionCode parameter instructs the API to return search results for the specified country. The parameter value is an ISO 3166-1 alpha-2 country code.
   type: string, The type parameter restricts a search query to only retrieve a particular type of resource.
   topicId: string, The topicId parameter indicates that the API response should only contain resources associated with the specified topic. The value identifies a Freebase topic ID.
@@ -115,13 +121,18 @@
       creativeCommon - Only return videos that have a Creative Commons license. Users can reuse videos with this license in other videos that they create. Learn more.
       youtube - Only return videos that have the standard YouTube license.
   maxResults: integer, USE_DESCRIPTION --- channels:list:maxResults
-  relatedToVideoId: string, The relatedToVideoId parameter retrieves a list of videos that are related to the video that the parameter value identifies. The parameter value must be set to a YouTube video ID and, if you are using this parameter, the type parameter must be set to video.
+  videoType: string, The videoType parameter lets you restrict a search to a particular type of videos.
+    Allowed values
+      any - Return all videos.
+      episode - Only retrieve episodes of shows.
+      movie - Only retrieve movies.
   videoDefinition: string, The videoDefinition parameter lets you restrict a search to only include either high definition (HD) or standard definition (SD) videos. HD videos are available for playback in at least 720p, though higher resolutions, like 1080p, might also be available.
     Allowed values
       any - Return all videos, regardless of their resolution.
       high - Only retrieve HD videos.
       standard - Only retrieve videos in standard definition.
   pageToken: string, USE_DESCRIPTION --- channels:list:pageToken
+  relatedToVideoId: string, The relatedToVideoId parameter retrieves a list of videos that are related to the video that the parameter value identifies. The parameter value must be set to a YouTube video ID and, if you are using this parameter, the type parameter must be set to video.
   videoDuration: string, The videoDuration parameter filters video search results based on their duration.
     Allowed values
       any - Do not filter video search results based on their duration. This is the default value.
@@ -149,23 +160,24 @@
     "kind": "youtube#searchListResponse", # The type of the API response. For this operation, the value will be youtube#searchListResponse.
     "items": [ # A list of results that match the search criteria.
       { # A search result contains information about a YouTube video, channel, or playlist that matches the search parameters specified in an API request. While a search result points to a uniquely identifiable resource, like a video, it does not have its own persistent data.
-        "snippet": { # Basic details about a search result, including title, description and thumbnails of the item referenced by the search result. # The snippet object contains basic details about a search result, such as its title or description. For example, if the search result is a video, then the title will be the video's title and the description will be the video's description.
-          "title": "A String", # The title to display for the search result.
-          "channelId": "A String", # The value that YouTube uses to uniquely identify the channel that published the resource that the search result identifies.
-          "description": "A String", # A description of the search result.
-          "publishedAt": "A String", # The creation date and time of the resource that the search result identifies. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+        "snippet": { # The snippet object contains basic details about a search result, such as its title or description. For example, if the search result is a video, then the title will be the video's title and the description will be the video's description.
           "thumbnails": { # A map of thumbnail images associated with the search result. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-            "a_key": { # The thumbnail image's name. This value is used as the key in the snippet.thumbnails map.
+            "a_key": { # A thumbnail is an image representing a YouTube resource. # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
               "url": "A String", # The thumbnail image's URL.
-              "width": 42,
-              "height": 42,
+              "width": 42, # (Optional) Width of the thumbnail image.
+              "height": 42, # (Optional) Height of the thumbnail image.
             },
           },
+          "title": "A String", # The title of the search result.
+          "channelId": "A String", # The value that YouTube uses to uniquely identify the channel that published the resource that the search result identifies.
+          "publishedAt": "A String", # The creation date and time of the resource that the search result identifies. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+          "channelTitle": "A String", # The title of the channel that published the resource that the search result identifies.
+          "description": "A String", # A description of the search result.
         },
-        "kind": "youtube#searchResult", # The type of the API response. For this resource, the value will be youtube#searchResult.
-        "etag": "A String", # The ETag of the search result.
+        "kind": "youtube#searchResult", # The kind, fixed to "youtube#searchResult".
+        "etag": "A String", # Etag of this resource.
         "id": { # A resource id is a generic reference that points to another YouTube resource. # The id object contains information that can be used to uniquely identify the resource that matches the search request.
-          "kind": "A String", # The kind, or type, of the referred resource.
+          "kind": "A String",
           "channelId": "A String", # The ID that YouTube uses to uniquely identify the referred resource, if that resource is a channel. This property is only present if the resourceId.kind value is youtube#channel.
           "playlistId": "A String", # The ID that YouTube uses to uniquely identify the referred resource, if that resource is a playlist. This property is only present if the resourceId.kind value is youtube#playlist.
           "videoId": "A String", # The ID that YouTube uses to uniquely identify the referred resource, if that resource is a video. This property is only present if the resourceId.kind value is youtube#video.
diff --git a/docs/dyn/youtube_v3.subscriptions.html b/docs/dyn/youtube_v3.subscriptions.html
index 7f5948e..74b2864 100644
--- a/docs/dyn/youtube_v3.subscriptions.html
+++ b/docs/dyn/youtube_v3.subscriptions.html
@@ -120,10 +120,10 @@
       "channelId": "A String", # The ID that YouTube uses to uniquely identify the subscriber's channel.
       "publishedAt": "A String", # The date and time that the subscription was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
       "thumbnails": { # A map of thumbnail images associated with the subscription. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-        "a_key": { # The thumbnail image's name.
+        "a_key": { # A thumbnail is an image representing a YouTube resource. # The thumbnail image's name.
           "url": "A String", # The thumbnail image's URL.
-          "width": 42,
-          "height": 42,
+          "width": 42, # (Optional) Width of the thumbnail image.
+          "height": 42, # (Optional) Height of the thumbnail image.
         },
       },
     },
@@ -153,10 +153,10 @@
         "channelId": "A String", # The ID that YouTube uses to uniquely identify the subscriber's channel.
         "publishedAt": "A String", # The date and time that the subscription was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
         "thumbnails": { # A map of thumbnail images associated with the subscription. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-          "a_key": { # The thumbnail image's name.
+          "a_key": { # A thumbnail is an image representing a YouTube resource. # The thumbnail image's name.
             "url": "A String", # The thumbnail image's URL.
-            "width": 42,
-            "height": 42,
+            "width": 42, # (Optional) Width of the thumbnail image.
+            "height": 42, # (Optional) Height of the thumbnail image.
           },
         },
       },
@@ -210,10 +210,10 @@
             "channelId": "A String", # The ID that YouTube uses to uniquely identify the subscriber's channel.
             "publishedAt": "A String", # The date and time that the subscription was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
             "thumbnails": { # A map of thumbnail images associated with the subscription. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-              "a_key": { # The thumbnail image's name.
+              "a_key": { # A thumbnail is an image representing a YouTube resource. # The thumbnail image's name.
                 "url": "A String", # The thumbnail image's URL.
-                "width": 42,
-                "height": 42,
+                "width": 42, # (Optional) Width of the thumbnail image.
+                "height": 42, # (Optional) Height of the thumbnail image.
               },
             },
           },
diff --git a/docs/dyn/youtube_v3.videoCategories.html b/docs/dyn/youtube_v3.videoCategories.html
index 4c84e33..f4a76af 100644
--- a/docs/dyn/youtube_v3.videoCategories.html
+++ b/docs/dyn/youtube_v3.videoCategories.html
@@ -94,9 +94,9 @@
     { # A paginated list of video categories returned as the response to a youtube.videoCategory.list call.
     "items": [ # A list of video categories that can be associated with YouTube videos. In this map, the video category ID is the map key, and its value is the corresponding videoCategory resource.
       { # A videoCategory resource identifies a category that has been or could be associated with uploaded videos.
-        "snippet": { # Basic details about a video category, such as its localized title. # The snippet object contains basic details about the video category, including its title.
+        "snippet": { # The snippet object contains basic details about the video category, including its title.
           "channelId": "UCBR8-60-B28hp2BmDPdntcQ", # The YouTube channel that created the video category.
-          "title": "A String", # The video category's title.
+          "title": "A String",
         },
         "kind": "youtube#videoCategory", # The type of the API resource. For video category resources, the value will be youtube#videoCategory.
         "etag": "A String", # The ETag of the videoCategory resource.
diff --git a/docs/dyn/youtube_v3.videos.html b/docs/dyn/youtube_v3.videos.html
index 4d1a5d8..ec78917 100644
--- a/docs/dyn/youtube_v3.videos.html
+++ b/docs/dyn/youtube_v3.videos.html
@@ -75,24 +75,25 @@
 <h1><a href="youtube_v3.html">YouTube Data API</a> . <a href="youtube_v3.videos.html">videos</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#delete">delete(id)</a></code></p>
+  <code><a href="#delete">delete(id, onBehalfOfContentOwner=None)</a></code></p>
 <p class="firstline">Deletes a YouTube video.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(part=None, body=None, media_body=None)</a></code></p>
 <p class="firstline">Uploads a video to YouTube and optionally sets the video's metadata.</p>
 <p class="toc_element">
-  <code><a href="#list">list(id, part=None)</a></code></p>
+  <code><a href="#list">list(id, part=None, onBehalfOfContentOwner=None)</a></code></p>
 <p class="firstline">Returns a list of videos that match the API request parameters.</p>
 <p class="toc_element">
-  <code><a href="#update">update(part=None, body)</a></code></p>
+  <code><a href="#update">update(part=None, body, onBehalfOfContentOwner=None)</a></code></p>
 <p class="firstline">Updates a video's metadata.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="delete">delete(id)</code>
+    <code class="details" id="delete">delete(id, onBehalfOfContentOwner=None)</code>
   <pre>Deletes a YouTube video.
 
 Args:
   id: string, The id parameter specifies the YouTube video ID for the resource that is being deleted. In a video resource, the id property specifies the video's ID. (required)
+  onBehalfOfContentOwner: string, The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.
 </pre>
 </div>
 
@@ -109,15 +110,30 @@
 
 { # A video resource represents a YouTube video.
     "status": { # The status of a video details the video's upload status and privacy status. # The status object contains information about the video's uploading, processing, and privacy statuses.
+      "license": "A String", # The video's license.
+      "embeddable": True or False, # This value indicates if the video can be embedded on another website.
       "privacyStatus": "A String", # The video's privacy status.
       "uploadStatus": "A String", # The status of the uploaded video.
       "rejectionReason": "A String", # This value explains why YouTube rejected an uploaded video. This property is only present if the uploadStatus property indicates that the upload was rejected.
       "failureReason": "A String", # This value explains why a video failed to upload. This property is only present if the uploadStatus property indicates that the upload failed.
     },
-    "topicDetails": { # Freebase topic information related to the video. # The topicDetails object encapsulates information about Freebase topics associated with the video.
-      "topicIds": [ # A list of Freebase topic IDs associated with the video. You can retrieve information about each topic using the Freebase Topic API.
+    "snippet": { # Basic details about a video, including title, description, uploader, thumbnails and category. # The snippet object contains basic details about the video, such as its title, description, and category.
+      "description": "A String", # The video's description.
+      "tags": [ # A list of keyword tags associated with the video. Tags may contain spaces. This field is only visible to the video's uploader.
         "A String",
       ],
+      "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that the video was uploaded to.
+      "publishedAt": "A String", # The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+      "channelTitle": "A String", # Channel title for the channel that the video belongs to.
+      "title": "A String", # The video's title.
+      "categoryId": "A String", # The YouTube video category associated with the video.
+      "thumbnails": { # A map of thumbnail images associated with the video. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
+        "a_key": { # A thumbnail is an image representing a YouTube resource. # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
+          "url": "A String", # The thumbnail image's URL.
+          "width": 42, # (Optional) Width of the thumbnail image.
+          "height": 42, # (Optional) Height of the thumbnail image.
+        },
+      },
     },
     "kind": "youtube#video", # The type of the API resource. For video resources, the value will be youtube#video.
     "statistics": { # Statistics about the video, such as the number of times the video was viewed or liked. # The statistics object contains statistics about the video.
@@ -127,9 +143,29 @@
       "dislikeCount": "A String", # The number of users who have indicated that they disliked the video by giving it a negative rating.
       "likeCount": "A String", # The number of users who have indicated that they liked the video by giving it a positive rating.
     },
-    "contentDetails": { # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
-      "duration": "A String", # The length of the video. The tag value is an ISO 8601 duration in the format PT#M#S, in which the letters PT indicate that the value specifies a period of time, and the letters M and S refer to length in minutes and seconds, respectively. The # characters preceding the M and S letters are both integers that specify the number of minutes (or seconds) of the video. For example, a value of PT15M51S indicates that the video is 15 minutes and 51 seconds long.
-      "regionRestriction": { # Region restriction of the video. # The regionRestriction object contains information about the countries where a video is (or is not) viewable. The object will contain either the contentDetails.regionRestriction.allowed property or the contentDetails.regionRestriction.blocked property.
+    "topicDetails": { # Freebase topic information related to the video. # The topicDetails object encapsulates information about Freebase topics associated with the video.
+      "topicIds": [ # A list of Freebase topic IDs associated with the video. You can retrieve information about each topic using the Freebase Topic API.
+        "A String",
+      ],
+    },
+    "monetizationDetails": { # Details about monetization of a YouTube Video. # The monetizationDetails object encapsulates information about the monetization status of the video.
+      "access": { # Rights management policy for YouTube resources. # The value of access indicates whether the video can be monetized or not.
+        "exception": [ # A list of region codes that identify countries where the default policy do not apply.
+          "A String",
+        ],
+        "allowed": True or False, # The value of allowed indicates whether the access to the policy is allowed or denied by default.
+      },
+    },
+    "contentDetails": { # Details about the content of a YouTube Video. # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
+      "definition": "A String", # The value of definition indicates whether the video is available in high definition or only in standard definition.
+      "countryRestriction": { # Rights management policy for YouTube resources. # The countryRestriction object contains information about the countries where a video is (or is not) viewable.
+        "exception": [ # A list of region codes that identify countries where the default policy do not apply.
+          "A String",
+        ],
+        "allowed": True or False, # The value of allowed indicates whether the access to the policy is allowed or denied by default.
+      },
+      "caption": "A String", # The value of captions indicates whether the video has captions or not.
+      "regionRestriction": { # DEPRECATED Region restriction of the video. # The regionRestriction object contains information about the countries where a video is (or is not) viewable. The object will contain either the contentDetails.regionRestriction.allowed property or the contentDetails.regionRestriction.blocked property.
         "blocked": [ # A list of region codes that identify countries where the video is blocked. If this property is present and a country is not listed in its value, then the video is viewable in that country. If this property is present and contains an empty list, the video is viewable in all countries.
           "A String",
         ],
@@ -137,28 +173,97 @@
           "A String",
         ],
       },
+      "duration": "A String", # The length of the video. The tag value is an ISO 8601 duration in the format PT#M#S, in which the letters PT indicate that the value specifies a period of time, and the letters M and S refer to length in minutes and seconds, respectively. The # characters preceding the M and S letters are both integers that specify the number of minutes (or seconds) of the video. For example, a value of PT15M51S indicates that the video is 15 minutes and 51 seconds long.
+      "licensedContent": True or False, # The value of is_license_content indicates whether the video is licensed content.
+      "dimension": "A String", # The value of dimension indicates whether the video is available in 3D or in 2D.
     },
-    "snippet": { # Basic details about a video, including title, description, uploader, thumbnails and category. # The snippet object contains basic details about the video, such as its title, description, and category.
-      "thumbnails": { # A map of thumbnail images associated with the video. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-        "a_key": { # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
-          "url": "A String", # The thumbnail image's URL.
-          "width": 42,
-          "height": 42,
-        },
-      },
-      "tags": [ # A list of keyword tags associated with the video. Tags may contain spaces. This field is only visible to the video's uploader.
+    "suggestions": { # Specifies suggestions on how to improve video content, including encoding hints, tag suggestions, and editor suggestions. # The suggestions object encapsulates suggestions that identify opportunities to improve the video quality or the metadata for the uploaded video. This data can only be retrieved by the video owner.
+      "processingErrors": [ # A list of errors that will prevent YouTube from successfully processing the uploaded video video. These errors indicate that, regardless of the video's current processing status, eventually, that status will almost certainly be failed.
         "A String",
       ],
-      "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that the video was uploaded to.
-      "publishedAt": "A String", # The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
-      "title": "A String", # The video's title.
-      "categoryId": "A String", # The YouTube video category associated with the video.
-      "description": "A String", # The video's description.
+      "tagSuggestions": [ # A list of keyword tags that could be added to the video's metadata to increase the likelihood that users will locate your video when searching or browsing on YouTube.
+        { # A single tag suggestion with it's relevance information.
+          "categoryRestricts": [ # A set of video categories for which the tag is relevant. You can use this information to display appropriate tag suggestions based on the video category that the video uploader associates with the video. By default, tag suggestions are relevant for all categories if there are no restricts defined for the keyword.
+            "A String",
+          ],
+          "tag": "A String", # The keyword tag suggested for the video.
+        },
+      ],
+      "editorSuggestions": [ # A list of video editing operations that might improve the video quality or playback experience of the uploaded video.
+        "A String",
+      ],
+      "processingWarnings": [ # A list of reasons why YouTube may have difficulty transcoding the uploaded video or that might result in an erroneous transcoding. These warnings are generated before YouTube actually processes the uploaded video file. In addition, they identify issues that are unlikely to cause the video processing to fail but that might cause problems such as sync issues, video artifacts, or a missing audio track.
+        "A String",
+      ],
+      "processingHints": [ # A list of suggestions that may improve YouTube's ability to process the video.
+        "A String",
+      ],
+    },
+    "fileDetails": { # Describes original video file properties, including technical details about audio and video streams, but also metadata information like content length, digitization time, or geotagging information. # The fileDetails object encapsulates information about the video file that was uploaded to YouTube, including the file's resolution, duration, audio and video codecs, stream bitrates, and more. This data can only be retrieved by the video owner.
+      "bitrateBps": "A String", # The uploaded video file's combined (video and audio) bitrate in bits per second.
+      "container": "A String", # The uploaded video file's container format.
+      "recordingLocation": { # A geoPoint holds geo location information associated with a YouTube resource. # Geographic coordinates that identify the place where the uploaded video was recorded. Coordinates are defined using WGS 84.
+        "latitude": 3.14, # Latitude in degrees.
+        "elevation": 3.14, # Altitude above the Earth, in meters.
+        "longitude": 3.14, # Longitude in degrees.
+      },
+      "fileType": "A String", # The uploaded file's type as detected by YouTube's video processing engine. Currently, YouTube only processes video files, but this field is present whether a video file or another type of file was uploaded.
+      "creationTime": "A String", # The date and time when the uploaded video file was created. The value is specified in ISO 8601 format. Currently, the following ISO 8601 formats are supported:
+          # - Date only: YYYY-MM-DD
+          # - Naive time: YYYY-MM-DDTHH:MM:SS
+          # - Time with timezone: YYYY-MM-DDTHH:MM:SS+HH:MM
+      "durationMs": "A String", # The length of the uploaded video in milliseconds.
+      "fileName": "A String", # The uploaded file's name. This field is present whether a video file or another type of file was uploaded.
+      "fileSize": "A String", # The uploaded file's size in bytes. This field is present whether a video file or another type of file was uploaded.
+      "videoStreams": [ # A list of video streams contained in the uploaded video file. Each item in the list contains detailed metadata about a video stream.
+        { # Information about a video stream.
+          "bitrateBps": "A String", # The video stream's bitrate, in bits per second.
+          "vendor": "A String", # A value that uniquely identifies a video vendor. Typically, the value is a four-letter vendor code.
+          "codec": "A String", # The video codec that the stream uses.
+          "widthPixels": 42, # The encoded video content's width in pixels. You can calculate the video's encoding aspect ratio as width_pixels / height_pixels.
+          "heightPixels": 42, # The encoded video content's height in pixels.
+          "aspectRatio": 3.14, # The video content's display aspect ratio, which specifies the aspect ratio in which the video should be displayed.
+          "rotation": "A String", # The amount that YouTube needs to rotate the original source content to properly display the video.
+          "frameRateFps": 3.14, # The video stream's frame rate, in frames per second.
+        },
+      ],
+      "audioStreams": [ # A list of audio streams contained in the uploaded video file. Each item in the list contains detailed metadata about an audio stream.
+        { # Information about an audio stream.
+          "bitrateBps": "A String", # The audio stream's bitrate, in bits per second.
+          "codec": "A String", # The audio codec that the stream uses.
+          "vendor": "A String", # A value that uniquely identifies a video vendor. Typically, the value is a four-letter vendor code.
+          "channelCount": 42, # The number of audio channels that the stream contains.
+        },
+      ],
+    },
+    "processingDetails": { # Describes processing status and progress and availability of some other Video resource parts. # The processingProgress object encapsulates information about YouTube's progress in processing the uploaded video file. The properties in the object identify the current processing status and an estimate of the time remaining until YouTube finishes processing the video. This part also indicates whether different types of data or content, such as file details or thumbnail images, are available for the video.
+        # 
+        # The processingProgress object is designed to be polled so that the video uploaded can track the progress that YouTube has made in processing the uploaded video file. This data can only be retrieved by the video owner.
+      "fileDetailsAvailability": "A String", # This value indicates whether file details are available for the uploaded video. You can retrieve a video's file details by requesting the fileDetails part in your videos.list() request.
+      "editorSuggestionsAvailability": "A String", # This value indicates whether video editing suggestions, which might improve video quality or the playback experience, are available for the video. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
+      "processingStatus": "A String", # The video's processing status. This value indicates whether YouTube was able to process the video or if the video is still being processed.
+      "processingIssuesAvailability": "A String", # This value indicates whether the video processing engine has generated suggestions that might improve YouTube's ability to process the the video, warnings that explain video processing problems, or errors that cause video processing problems. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
+      "processingFailureReason": "A String", # The reason that YouTube failed to process the video. This property will only have a value if the processingStatus property's value is failed.
+      "thumbnailsAvailability": "A String", # This value indicates whether thumbnail images have been generated for the video.
+      "processingProgress": { # Video processing progress and completion time estimate. # The processingProgress object contains information about the progress YouTube has made in processing the video. The values are really only relevant if the video's processing status is processing.
+        "timeLeftMs": "A String", # An estimate of the amount of time, in millseconds, that YouTube needs to finish processing the video.
+        "partsProcessed": "A String", # The number of parts of the video that YouTube has already processed. You can estimate the percentage of the video that YouTube has already processed by calculating:
+            # 100 * parts_processed / parts_total
+            #
+            # Note that since the estimated number of parts could increase without a corresponding increase in the number of parts that have already been processed, it is possible that the calculated progress could periodically decrease while YouTube processes a video.
+        "partsTotal": "A String", # An estimate of the total number of parts that need to be processed for the video. The number may be updated with more precise estimates while YouTube processes the video.
+      },
+      "tagSuggestionsAvailability": "A String", # This value indicates whether keyword (tag) suggestions are available for the video. Tags can be added to a video's metadata to make it easier for other users to find the video. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
     },
     "player": { # Player to be used for a video playback. # The player object contains information that you would use to play the video in an embedded player.
       "embedHtml": "A String", # An <iframe> tag that embeds a player that will play the video.
     },
     "etag": "A String", # The ETag of the video resource.
+    "projectDetails": { # Project specific details about the content of a YouTube Video. # The projectDetails object contains information about the project specific video metadata.
+      "tags": [ # A list of project tags associated with the video during the upload.
+        "A String",
+      ],
+    },
     "recordingDetails": { # Recording information associated with the video. # The recordingDetails object encapsulates information about the location, date and address where the video was recorded.
       "recordingDate": "A String", # The date and time when the video was recorded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
       "locationDescription": "A String", # The text description of the location where the video was recorded.
@@ -178,15 +283,30 @@
 
     { # A video resource represents a YouTube video.
       "status": { # The status of a video details the video's upload status and privacy status. # The status object contains information about the video's uploading, processing, and privacy statuses.
+        "license": "A String", # The video's license.
+        "embeddable": True or False, # This value indicates if the video can be embedded on another website.
         "privacyStatus": "A String", # The video's privacy status.
         "uploadStatus": "A String", # The status of the uploaded video.
         "rejectionReason": "A String", # This value explains why YouTube rejected an uploaded video. This property is only present if the uploadStatus property indicates that the upload was rejected.
         "failureReason": "A String", # This value explains why a video failed to upload. This property is only present if the uploadStatus property indicates that the upload failed.
       },
-      "topicDetails": { # Freebase topic information related to the video. # The topicDetails object encapsulates information about Freebase topics associated with the video.
-        "topicIds": [ # A list of Freebase topic IDs associated with the video. You can retrieve information about each topic using the Freebase Topic API.
+      "snippet": { # Basic details about a video, including title, description, uploader, thumbnails and category. # The snippet object contains basic details about the video, such as its title, description, and category.
+        "description": "A String", # The video's description.
+        "tags": [ # A list of keyword tags associated with the video. Tags may contain spaces. This field is only visible to the video's uploader.
           "A String",
         ],
+        "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that the video was uploaded to.
+        "publishedAt": "A String", # The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+        "channelTitle": "A String", # Channel title for the channel that the video belongs to.
+        "title": "A String", # The video's title.
+        "categoryId": "A String", # The YouTube video category associated with the video.
+        "thumbnails": { # A map of thumbnail images associated with the video. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
+          "a_key": { # A thumbnail is an image representing a YouTube resource. # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
+            "url": "A String", # The thumbnail image's URL.
+            "width": 42, # (Optional) Width of the thumbnail image.
+            "height": 42, # (Optional) Height of the thumbnail image.
+          },
+        },
       },
       "kind": "youtube#video", # The type of the API resource. For video resources, the value will be youtube#video.
       "statistics": { # Statistics about the video, such as the number of times the video was viewed or liked. # The statistics object contains statistics about the video.
@@ -196,9 +316,29 @@
         "dislikeCount": "A String", # The number of users who have indicated that they disliked the video by giving it a negative rating.
         "likeCount": "A String", # The number of users who have indicated that they liked the video by giving it a positive rating.
       },
-      "contentDetails": { # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
-        "duration": "A String", # The length of the video. The tag value is an ISO 8601 duration in the format PT#M#S, in which the letters PT indicate that the value specifies a period of time, and the letters M and S refer to length in minutes and seconds, respectively. The # characters preceding the M and S letters are both integers that specify the number of minutes (or seconds) of the video. For example, a value of PT15M51S indicates that the video is 15 minutes and 51 seconds long.
-        "regionRestriction": { # Region restriction of the video. # The regionRestriction object contains information about the countries where a video is (or is not) viewable. The object will contain either the contentDetails.regionRestriction.allowed property or the contentDetails.regionRestriction.blocked property.
+      "topicDetails": { # Freebase topic information related to the video. # The topicDetails object encapsulates information about Freebase topics associated with the video.
+        "topicIds": [ # A list of Freebase topic IDs associated with the video. You can retrieve information about each topic using the Freebase Topic API.
+          "A String",
+        ],
+      },
+      "monetizationDetails": { # Details about monetization of a YouTube Video. # The monetizationDetails object encapsulates information about the monetization status of the video.
+        "access": { # Rights management policy for YouTube resources. # The value of access indicates whether the video can be monetized or not.
+          "exception": [ # A list of region codes that identify countries where the default policy do not apply.
+            "A String",
+          ],
+          "allowed": True or False, # The value of allowed indicates whether the access to the policy is allowed or denied by default.
+        },
+      },
+      "contentDetails": { # Details about the content of a YouTube Video. # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
+        "definition": "A String", # The value of definition indicates whether the video is available in high definition or only in standard definition.
+        "countryRestriction": { # Rights management policy for YouTube resources. # The countryRestriction object contains information about the countries where a video is (or is not) viewable.
+          "exception": [ # A list of region codes that identify countries where the default policy do not apply.
+            "A String",
+          ],
+          "allowed": True or False, # The value of allowed indicates whether the access to the policy is allowed or denied by default.
+        },
+        "caption": "A String", # The value of captions indicates whether the video has captions or not.
+        "regionRestriction": { # DEPRECATED Region restriction of the video. # The regionRestriction object contains information about the countries where a video is (or is not) viewable. The object will contain either the contentDetails.regionRestriction.allowed property or the contentDetails.regionRestriction.blocked property.
           "blocked": [ # A list of region codes that identify countries where the video is blocked. If this property is present and a country is not listed in its value, then the video is viewable in that country. If this property is present and contains an empty list, the video is viewable in all countries.
             "A String",
           ],
@@ -206,28 +346,97 @@
             "A String",
           ],
         },
+        "duration": "A String", # The length of the video. The tag value is an ISO 8601 duration in the format PT#M#S, in which the letters PT indicate that the value specifies a period of time, and the letters M and S refer to length in minutes and seconds, respectively. The # characters preceding the M and S letters are both integers that specify the number of minutes (or seconds) of the video. For example, a value of PT15M51S indicates that the video is 15 minutes and 51 seconds long.
+        "licensedContent": True or False, # The value of is_license_content indicates whether the video is licensed content.
+        "dimension": "A String", # The value of dimension indicates whether the video is available in 3D or in 2D.
       },
-      "snippet": { # Basic details about a video, including title, description, uploader, thumbnails and category. # The snippet object contains basic details about the video, such as its title, description, and category.
-        "thumbnails": { # A map of thumbnail images associated with the video. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-          "a_key": { # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
-            "url": "A String", # The thumbnail image's URL.
-            "width": 42,
-            "height": 42,
-          },
-        },
-        "tags": [ # A list of keyword tags associated with the video. Tags may contain spaces. This field is only visible to the video's uploader.
+      "suggestions": { # Specifies suggestions on how to improve video content, including encoding hints, tag suggestions, and editor suggestions. # The suggestions object encapsulates suggestions that identify opportunities to improve the video quality or the metadata for the uploaded video. This data can only be retrieved by the video owner.
+        "processingErrors": [ # A list of errors that will prevent YouTube from successfully processing the uploaded video video. These errors indicate that, regardless of the video's current processing status, eventually, that status will almost certainly be failed.
           "A String",
         ],
-        "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that the video was uploaded to.
-        "publishedAt": "A String", # The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
-        "title": "A String", # The video's title.
-        "categoryId": "A String", # The YouTube video category associated with the video.
-        "description": "A String", # The video's description.
+        "tagSuggestions": [ # A list of keyword tags that could be added to the video's metadata to increase the likelihood that users will locate your video when searching or browsing on YouTube.
+          { # A single tag suggestion with it's relevance information.
+            "categoryRestricts": [ # A set of video categories for which the tag is relevant. You can use this information to display appropriate tag suggestions based on the video category that the video uploader associates with the video. By default, tag suggestions are relevant for all categories if there are no restricts defined for the keyword.
+              "A String",
+            ],
+            "tag": "A String", # The keyword tag suggested for the video.
+          },
+        ],
+        "editorSuggestions": [ # A list of video editing operations that might improve the video quality or playback experience of the uploaded video.
+          "A String",
+        ],
+        "processingWarnings": [ # A list of reasons why YouTube may have difficulty transcoding the uploaded video or that might result in an erroneous transcoding. These warnings are generated before YouTube actually processes the uploaded video file. In addition, they identify issues that are unlikely to cause the video processing to fail but that might cause problems such as sync issues, video artifacts, or a missing audio track.
+          "A String",
+        ],
+        "processingHints": [ # A list of suggestions that may improve YouTube's ability to process the video.
+          "A String",
+        ],
+      },
+      "fileDetails": { # Describes original video file properties, including technical details about audio and video streams, but also metadata information like content length, digitization time, or geotagging information. # The fileDetails object encapsulates information about the video file that was uploaded to YouTube, including the file's resolution, duration, audio and video codecs, stream bitrates, and more. This data can only be retrieved by the video owner.
+        "bitrateBps": "A String", # The uploaded video file's combined (video and audio) bitrate in bits per second.
+        "container": "A String", # The uploaded video file's container format.
+        "recordingLocation": { # A geoPoint holds geo location information associated with a YouTube resource. # Geographic coordinates that identify the place where the uploaded video was recorded. Coordinates are defined using WGS 84.
+          "latitude": 3.14, # Latitude in degrees.
+          "elevation": 3.14, # Altitude above the Earth, in meters.
+          "longitude": 3.14, # Longitude in degrees.
+        },
+        "fileType": "A String", # The uploaded file's type as detected by YouTube's video processing engine. Currently, YouTube only processes video files, but this field is present whether a video file or another type of file was uploaded.
+        "creationTime": "A String", # The date and time when the uploaded video file was created. The value is specified in ISO 8601 format. Currently, the following ISO 8601 formats are supported:
+            # - Date only: YYYY-MM-DD
+            # - Naive time: YYYY-MM-DDTHH:MM:SS
+            # - Time with timezone: YYYY-MM-DDTHH:MM:SS+HH:MM
+        "durationMs": "A String", # The length of the uploaded video in milliseconds.
+        "fileName": "A String", # The uploaded file's name. This field is present whether a video file or another type of file was uploaded.
+        "fileSize": "A String", # The uploaded file's size in bytes. This field is present whether a video file or another type of file was uploaded.
+        "videoStreams": [ # A list of video streams contained in the uploaded video file. Each item in the list contains detailed metadata about a video stream.
+          { # Information about a video stream.
+            "bitrateBps": "A String", # The video stream's bitrate, in bits per second.
+            "vendor": "A String", # A value that uniquely identifies a video vendor. Typically, the value is a four-letter vendor code.
+            "codec": "A String", # The video codec that the stream uses.
+            "widthPixels": 42, # The encoded video content's width in pixels. You can calculate the video's encoding aspect ratio as width_pixels / height_pixels.
+            "heightPixels": 42, # The encoded video content's height in pixels.
+            "aspectRatio": 3.14, # The video content's display aspect ratio, which specifies the aspect ratio in which the video should be displayed.
+            "rotation": "A String", # The amount that YouTube needs to rotate the original source content to properly display the video.
+            "frameRateFps": 3.14, # The video stream's frame rate, in frames per second.
+          },
+        ],
+        "audioStreams": [ # A list of audio streams contained in the uploaded video file. Each item in the list contains detailed metadata about an audio stream.
+          { # Information about an audio stream.
+            "bitrateBps": "A String", # The audio stream's bitrate, in bits per second.
+            "codec": "A String", # The audio codec that the stream uses.
+            "vendor": "A String", # A value that uniquely identifies a video vendor. Typically, the value is a four-letter vendor code.
+            "channelCount": 42, # The number of audio channels that the stream contains.
+          },
+        ],
+      },
+      "processingDetails": { # Describes processing status and progress and availability of some other Video resource parts. # The processingProgress object encapsulates information about YouTube's progress in processing the uploaded video file. The properties in the object identify the current processing status and an estimate of the time remaining until YouTube finishes processing the video. This part also indicates whether different types of data or content, such as file details or thumbnail images, are available for the video.
+          #
+          # The processingProgress object is designed to be polled so that the video uploaded can track the progress that YouTube has made in processing the uploaded video file. This data can only be retrieved by the video owner.
+        "fileDetailsAvailability": "A String", # This value indicates whether file details are available for the uploaded video. You can retrieve a video's file details by requesting the fileDetails part in your videos.list() request.
+        "editorSuggestionsAvailability": "A String", # This value indicates whether video editing suggestions, which might improve video quality or the playback experience, are available for the video. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
+        "processingStatus": "A String", # The video's processing status. This value indicates whether YouTube was able to process the video or if the video is still being processed.
+        "processingIssuesAvailability": "A String", # This value indicates whether the video processing engine has generated suggestions that might improve YouTube's ability to process the the video, warnings that explain video processing problems, or errors that cause video processing problems. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
+        "processingFailureReason": "A String", # The reason that YouTube failed to process the video. This property will only have a value if the processingStatus property's value is failed.
+        "thumbnailsAvailability": "A String", # This value indicates whether thumbnail images have been generated for the video.
+        "processingProgress": { # Video processing progress and completion time estimate. # The processingProgress object contains information about the progress YouTube has made in processing the video. The values are really only relevant if the video's processing status is processing.
+          "timeLeftMs": "A String", # An estimate of the amount of time, in millseconds, that YouTube needs to finish processing the video.
+          "partsProcessed": "A String", # The number of parts of the video that YouTube has already processed. You can estimate the percentage of the video that YouTube has already processed by calculating:
+              # 100 * parts_processed / parts_total
+              #
+              # Note that since the estimated number of parts could increase without a corresponding increase in the number of parts that have already been processed, it is possible that the calculated progress could periodically decrease while YouTube processes a video.
+          "partsTotal": "A String", # An estimate of the total number of parts that need to be processed for the video. The number may be updated with more precise estimates while YouTube processes the video.
+        },
+        "tagSuggestionsAvailability": "A String", # This value indicates whether keyword (tag) suggestions are available for the video. Tags can be added to a video's metadata to make it easier for other users to find the video. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
       },
       "player": { # Player to be used for a video playback. # The player object contains information that you would use to play the video in an embedded player.
         "embedHtml": "A String", # An <iframe> tag that embeds a player that will play the video.
       },
       "etag": "A String", # The ETag of the video resource.
+      "projectDetails": { # Project specific details about the content of a YouTube Video. # The projectDetails object contains information about the project specific video metadata.
+        "tags": [ # A list of project tags associated with the video during the upload.
+          "A String",
+        ],
+      },
       "recordingDetails": { # Recording information associated with the video. # The recordingDetails object encapsulates information about the location, date and address where the video was recorded.
         "recordingDate": "A String", # The date and time when the video was recorded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
         "locationDescription": "A String", # The text description of the location where the video was recorded.
@@ -242,7 +451,7 @@
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(id, part=None)</code>
+    <code class="details" id="list">list(id, part=None, onBehalfOfContentOwner=None)</code>
   <pre>Returns a list of videos that match the API request parameters.
 
 Args:
@@ -250,6 +459,7 @@
   part: string, The part parameter specifies a comma-separated list of one or more video resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, player, statistics, status, and topicDetails.
 
 If the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a video resource, the snippet property contains the channelId, title, description, tags, and categoryId properties. As such, if you set part=snippet, the API response will contain all of those properties. (required)
+  onBehalfOfContentOwner: string, The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.
 
 Returns:
   An object of the form:
@@ -258,15 +468,30 @@
     "items": [ # A list of videos that match the request criteria.
       { # A video resource represents a YouTube video.
           "status": { # The status of a video details the video's upload status and privacy status. # The status object contains information about the video's uploading, processing, and privacy statuses.
+            "license": "A String", # The video's license.
+            "embeddable": True or False, # This value indicates if the video can be embedded on another website.
             "privacyStatus": "A String", # The video's privacy status.
             "uploadStatus": "A String", # The status of the uploaded video.
             "rejectionReason": "A String", # This value explains why YouTube rejected an uploaded video. This property is only present if the uploadStatus property indicates that the upload was rejected.
             "failureReason": "A String", # This value explains why a video failed to upload. This property is only present if the uploadStatus property indicates that the upload failed.
           },
-          "topicDetails": { # Freebase topic information related to the video. # The topicDetails object encapsulates information about Freebase topics associated with the video.
-            "topicIds": [ # A list of Freebase topic IDs associated with the video. You can retrieve information about each topic using the Freebase Topic API.
+          "snippet": { # Basic details about a video, including title, description, uploader, thumbnails and category. # The snippet object contains basic details about the video, such as its title, description, and category.
+            "description": "A String", # The video's description.
+            "tags": [ # A list of keyword tags associated with the video. Tags may contain spaces. This field is only visible to the video's uploader.
               "A String",
             ],
+            "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that the video was uploaded to.
+            "publishedAt": "A String", # The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+            "channelTitle": "A String", # Channel title for the channel that the video belongs to.
+            "title": "A String", # The video's title.
+            "categoryId": "A String", # The YouTube video category associated with the video.
+            "thumbnails": { # A map of thumbnail images associated with the video. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
+              "a_key": { # A thumbnail is an image representing a YouTube resource. # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
+                "url": "A String", # The thumbnail image's URL.
+                "width": 42, # (Optional) Width of the thumbnail image.
+                "height": 42, # (Optional) Height of the thumbnail image.
+              },
+            },
           },
           "kind": "youtube#video", # The type of the API resource. For video resources, the value will be youtube#video.
           "statistics": { # Statistics about the video, such as the number of times the video was viewed or liked. # The statistics object contains statistics about the video.
@@ -276,9 +501,29 @@
             "dislikeCount": "A String", # The number of users who have indicated that they disliked the video by giving it a negative rating.
             "likeCount": "A String", # The number of users who have indicated that they liked the video by giving it a positive rating.
           },
-          "contentDetails": { # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
-            "duration": "A String", # The length of the video. The tag value is an ISO 8601 duration in the format PT#M#S, in which the letters PT indicate that the value specifies a period of time, and the letters M and S refer to length in minutes and seconds, respectively. The # characters preceding the M and S letters are both integers that specify the number of minutes (or seconds) of the video. For example, a value of PT15M51S indicates that the video is 15 minutes and 51 seconds long.
-            "regionRestriction": { # Region restriction of the video. # The regionRestriction object contains information about the countries where a video is (or is not) viewable. The object will contain either the contentDetails.regionRestriction.allowed property or the contentDetails.regionRestriction.blocked property.
+          "topicDetails": { # Freebase topic information related to the video. # The topicDetails object encapsulates information about Freebase topics associated with the video.
+            "topicIds": [ # A list of Freebase topic IDs associated with the video. You can retrieve information about each topic using the Freebase Topic API.
+              "A String",
+            ],
+          },
+          "monetizationDetails": { # Details about monetization of a YouTube Video. # The monetizationDetails object encapsulates information about the monetization status of the video.
+            "access": { # Rights management policy for YouTube resources. # The value of access indicates whether the video can be monetized or not.
+              "exception": [ # A list of region codes that identify countries where the default policy do not apply.
+                "A String",
+              ],
+              "allowed": True or False, # The value of allowed indicates whether the access to the policy is allowed or denied by default.
+            },
+          },
+          "contentDetails": { # Details about the content of a YouTube Video. # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
+            "definition": "A String", # The value of definition indicates whether the video is available in high definition or only in standard definition.
+            "countryRestriction": { # Rights management policy for YouTube resources. # The countryRestriction object contains information about the countries where a video is (or is not) viewable.
+              "exception": [ # A list of region codes that identify countries where the default policy do not apply.
+                "A String",
+              ],
+              "allowed": True or False, # The value of allowed indicates whether the access to the policy is allowed or denied by default.
+            },
+            "caption": "A String", # The value of captions indicates whether the video has captions or not.
+            "regionRestriction": { # DEPRECATED Region restriction of the video. # The regionRestriction object contains information about the countries where a video is (or is not) viewable. The object will contain either the contentDetails.regionRestriction.allowed property or the contentDetails.regionRestriction.blocked property.
               "blocked": [ # A list of region codes that identify countries where the video is blocked. If this property is present and a country is not listed in its value, then the video is viewable in that country. If this property is present and contains an empty list, the video is viewable in all countries.
                 "A String",
               ],
@@ -286,28 +531,97 @@
                 "A String",
               ],
             },
+            "duration": "A String", # The length of the video. The tag value is an ISO 8601 duration in the format PT#M#S, in which the letters PT indicate that the value specifies a period of time, and the letters M and S refer to length in minutes and seconds, respectively. The # characters preceding the M and S letters are both integers that specify the number of minutes (or seconds) of the video. For example, a value of PT15M51S indicates that the video is 15 minutes and 51 seconds long.
+            "licensedContent": True or False, # The value of is_license_content indicates whether the video is licensed content.
+            "dimension": "A String", # The value of dimension indicates whether the video is available in 3D or in 2D.
           },
-          "snippet": { # Basic details about a video, including title, description, uploader, thumbnails and category. # The snippet object contains basic details about the video, such as its title, description, and category.
-            "thumbnails": { # A map of thumbnail images associated with the video. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-              "a_key": { # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
-                "url": "A String", # The thumbnail image's URL.
-                "width": 42,
-                "height": 42,
-              },
-            },
-            "tags": [ # A list of keyword tags associated with the video. Tags may contain spaces. This field is only visible to the video's uploader.
+          "suggestions": { # Specifies suggestions on how to improve video content, including encoding hints, tag suggestions, and editor suggestions. # The suggestions object encapsulates suggestions that identify opportunities to improve the video quality or the metadata for the uploaded video. This data can only be retrieved by the video owner.
+            "processingErrors": [ # A list of errors that will prevent YouTube from successfully processing the uploaded video video. These errors indicate that, regardless of the video's current processing status, eventually, that status will almost certainly be failed.
               "A String",
             ],
-            "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that the video was uploaded to.
-            "publishedAt": "A String", # The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
-            "title": "A String", # The video's title.
-            "categoryId": "A String", # The YouTube video category associated with the video.
-            "description": "A String", # The video's description.
+            "tagSuggestions": [ # A list of keyword tags that could be added to the video's metadata to increase the likelihood that users will locate your video when searching or browsing on YouTube.
+              { # A single tag suggestion with it's relevance information.
+                "categoryRestricts": [ # A set of video categories for which the tag is relevant. You can use this information to display appropriate tag suggestions based on the video category that the video uploader associates with the video. By default, tag suggestions are relevant for all categories if there are no restricts defined for the keyword.
+                  "A String",
+                ],
+                "tag": "A String", # The keyword tag suggested for the video.
+              },
+            ],
+            "editorSuggestions": [ # A list of video editing operations that might improve the video quality or playback experience of the uploaded video.
+              "A String",
+            ],
+            "processingWarnings": [ # A list of reasons why YouTube may have difficulty transcoding the uploaded video or that might result in an erroneous transcoding. These warnings are generated before YouTube actually processes the uploaded video file. In addition, they identify issues that are unlikely to cause the video processing to fail but that might cause problems such as sync issues, video artifacts, or a missing audio track.
+              "A String",
+            ],
+            "processingHints": [ # A list of suggestions that may improve YouTube's ability to process the video.
+              "A String",
+            ],
+          },
+          "fileDetails": { # Describes original video file properties, including technical details about audio and video streams, but also metadata information like content length, digitization time, or geotagging information. # The fileDetails object encapsulates information about the video file that was uploaded to YouTube, including the file's resolution, duration, audio and video codecs, stream bitrates, and more. This data can only be retrieved by the video owner.
+            "bitrateBps": "A String", # The uploaded video file's combined (video and audio) bitrate in bits per second.
+            "container": "A String", # The uploaded video file's container format.
+            "recordingLocation": { # A geoPoint holds geo location information associated with a YouTube resource. # Geographic coordinates that identify the place where the uploaded video was recorded. Coordinates are defined using WGS 84.
+              "latitude": 3.14, # Latitude in degrees.
+              "elevation": 3.14, # Altitude above the Earth, in meters.
+              "longitude": 3.14, # Longitude in degrees.
+            },
+            "fileType": "A String", # The uploaded file's type as detected by YouTube's video processing engine. Currently, YouTube only processes video files, but this field is present whether a video file or another type of file was uploaded.
+            "creationTime": "A String", # The date and time when the uploaded video file was created. The value is specified in ISO 8601 format. Currently, the following ISO 8601 formats are supported:
+                # - Date only: YYYY-MM-DD
+                # - Naive time: YYYY-MM-DDTHH:MM:SS
+                # - Time with timezone: YYYY-MM-DDTHH:MM:SS+HH:MM
+            "durationMs": "A String", # The length of the uploaded video in milliseconds.
+            "fileName": "A String", # The uploaded file's name. This field is present whether a video file or another type of file was uploaded.
+            "fileSize": "A String", # The uploaded file's size in bytes. This field is present whether a video file or another type of file was uploaded.
+            "videoStreams": [ # A list of video streams contained in the uploaded video file. Each item in the list contains detailed metadata about a video stream.
+              { # Information about a video stream.
+                "bitrateBps": "A String", # The video stream's bitrate, in bits per second.
+                "vendor": "A String", # A value that uniquely identifies a video vendor. Typically, the value is a four-letter vendor code.
+                "codec": "A String", # The video codec that the stream uses.
+                "widthPixels": 42, # The encoded video content's width in pixels. You can calculate the video's encoding aspect ratio as width_pixels / height_pixels.
+                "heightPixels": 42, # The encoded video content's height in pixels.
+                "aspectRatio": 3.14, # The video content's display aspect ratio, which specifies the aspect ratio in which the video should be displayed.
+                "rotation": "A String", # The amount that YouTube needs to rotate the original source content to properly display the video.
+                "frameRateFps": 3.14, # The video stream's frame rate, in frames per second.
+              },
+            ],
+            "audioStreams": [ # A list of audio streams contained in the uploaded video file. Each item in the list contains detailed metadata about an audio stream.
+              { # Information about an audio stream.
+                "bitrateBps": "A String", # The audio stream's bitrate, in bits per second.
+                "codec": "A String", # The audio codec that the stream uses.
+                "vendor": "A String", # A value that uniquely identifies a video vendor. Typically, the value is a four-letter vendor code.
+                "channelCount": 42, # The number of audio channels that the stream contains.
+              },
+            ],
+          },
+          "processingDetails": { # Describes processing status and progress and availability of some other Video resource parts. # The processingProgress object encapsulates information about YouTube's progress in processing the uploaded video file. The properties in the object identify the current processing status and an estimate of the time remaining until YouTube finishes processing the video. This part also indicates whether different types of data or content, such as file details or thumbnail images, are available for the video.
+              #
+              # The processingProgress object is designed to be polled so that the video uploaded can track the progress that YouTube has made in processing the uploaded video file. This data can only be retrieved by the video owner.
+            "fileDetailsAvailability": "A String", # This value indicates whether file details are available for the uploaded video. You can retrieve a video's file details by requesting the fileDetails part in your videos.list() request.
+            "editorSuggestionsAvailability": "A String", # This value indicates whether video editing suggestions, which might improve video quality or the playback experience, are available for the video. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
+            "processingStatus": "A String", # The video's processing status. This value indicates whether YouTube was able to process the video or if the video is still being processed.
+            "processingIssuesAvailability": "A String", # This value indicates whether the video processing engine has generated suggestions that might improve YouTube's ability to process the the video, warnings that explain video processing problems, or errors that cause video processing problems. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
+            "processingFailureReason": "A String", # The reason that YouTube failed to process the video. This property will only have a value if the processingStatus property's value is failed.
+            "thumbnailsAvailability": "A String", # This value indicates whether thumbnail images have been generated for the video.
+            "processingProgress": { # Video processing progress and completion time estimate. # The processingProgress object contains information about the progress YouTube has made in processing the video. The values are really only relevant if the video's processing status is processing.
+              "timeLeftMs": "A String", # An estimate of the amount of time, in millseconds, that YouTube needs to finish processing the video.
+              "partsProcessed": "A String", # The number of parts of the video that YouTube has already processed. You can estimate the percentage of the video that YouTube has already processed by calculating:
+                  # 100 * parts_processed / parts_total
+                  #
+                  # Note that since the estimated number of parts could increase without a corresponding increase in the number of parts that have already been processed, it is possible that the calculated progress could periodically decrease while YouTube processes a video.
+              "partsTotal": "A String", # An estimate of the total number of parts that need to be processed for the video. The number may be updated with more precise estimates while YouTube processes the video.
+            },
+            "tagSuggestionsAvailability": "A String", # This value indicates whether keyword (tag) suggestions are available for the video. Tags can be added to a video's metadata to make it easier for other users to find the video. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
           },
           "player": { # Player to be used for a video playback. # The player object contains information that you would use to play the video in an embedded player.
             "embedHtml": "A String", # An <iframe> tag that embeds a player that will play the video.
           },
           "etag": "A String", # The ETag of the video resource.
+          "projectDetails": { # Project specific details about the content of a YouTube Video. # The projectDetails object contains information about the project specific video metadata.
+            "tags": [ # A list of project tags associated with the video during the upload.
+              "A String",
+            ],
+          },
           "recordingDetails": { # Recording information associated with the video. # The recordingDetails object encapsulates information about the location, date and address where the video was recorded.
             "recordingDate": "A String", # The date and time when the video was recorded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
             "locationDescription": "A String", # The text description of the location where the video was recorded.
@@ -326,7 +640,7 @@
 </div>
 
 <div class="method">
-    <code class="details" id="update">update(part=None, body)</code>
+    <code class="details" id="update">update(part=None, body, onBehalfOfContentOwner=None)</code>
   <pre>Updates a video's metadata.
 
 Args:
@@ -342,15 +656,30 @@
 
 { # A video resource represents a YouTube video.
     "status": { # The status of a video details the video's upload status and privacy status. # The status object contains information about the video's uploading, processing, and privacy statuses.
+      "license": "A String", # The video's license.
+      "embeddable": True or False, # This value indicates if the video can be embedded on another website.
       "privacyStatus": "A String", # The video's privacy status.
       "uploadStatus": "A String", # The status of the uploaded video.
       "rejectionReason": "A String", # This value explains why YouTube rejected an uploaded video. This property is only present if the uploadStatus property indicates that the upload was rejected.
       "failureReason": "A String", # This value explains why a video failed to upload. This property is only present if the uploadStatus property indicates that the upload failed.
     },
-    "topicDetails": { # Freebase topic information related to the video. # The topicDetails object encapsulates information about Freebase topics associated with the video.
-      "topicIds": [ # A list of Freebase topic IDs associated with the video. You can retrieve information about each topic using the Freebase Topic API.
+    "snippet": { # Basic details about a video, including title, description, uploader, thumbnails and category. # The snippet object contains basic details about the video, such as its title, description, and category.
+      "description": "A String", # The video's description.
+      "tags": [ # A list of keyword tags associated with the video. Tags may contain spaces. This field is only visible to the video's uploader.
         "A String",
       ],
+      "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that the video was uploaded to.
+      "publishedAt": "A String", # The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+      "channelTitle": "A String", # Channel title for the channel that the video belongs to.
+      "title": "A String", # The video's title.
+      "categoryId": "A String", # The YouTube video category associated with the video.
+      "thumbnails": { # A map of thumbnail images associated with the video. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
+        "a_key": { # A thumbnail is an image representing a YouTube resource. # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
+          "url": "A String", # The thumbnail image's URL.
+          "width": 42, # (Optional) Width of the thumbnail image.
+          "height": 42, # (Optional) Height of the thumbnail image.
+        },
+      },
     },
     "kind": "youtube#video", # The type of the API resource. For video resources, the value will be youtube#video.
     "statistics": { # Statistics about the video, such as the number of times the video was viewed or liked. # The statistics object contains statistics about the video.
@@ -360,9 +689,29 @@
       "dislikeCount": "A String", # The number of users who have indicated that they disliked the video by giving it a negative rating.
       "likeCount": "A String", # The number of users who have indicated that they liked the video by giving it a positive rating.
     },
-    "contentDetails": { # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
-      "duration": "A String", # The length of the video. The tag value is an ISO 8601 duration in the format PT#M#S, in which the letters PT indicate that the value specifies a period of time, and the letters M and S refer to length in minutes and seconds, respectively. The # characters preceding the M and S letters are both integers that specify the number of minutes (or seconds) of the video. For example, a value of PT15M51S indicates that the video is 15 minutes and 51 seconds long.
-      "regionRestriction": { # Region restriction of the video. # The regionRestriction object contains information about the countries where a video is (or is not) viewable. The object will contain either the contentDetails.regionRestriction.allowed property or the contentDetails.regionRestriction.blocked property.
+    "topicDetails": { # Freebase topic information related to the video. # The topicDetails object encapsulates information about Freebase topics associated with the video.
+      "topicIds": [ # A list of Freebase topic IDs associated with the video. You can retrieve information about each topic using the Freebase Topic API.
+        "A String",
+      ],
+    },
+    "monetizationDetails": { # Details about monetization of a YouTube Video. # The monetizationDetails object encapsulates information about the monetization status of the video.
+      "access": { # Rights management policy for YouTube resources. # The value of access indicates whether the video can be monetized or not.
+        "exception": [ # A list of region codes that identify countries where the default policy do not apply.
+          "A String",
+        ],
+        "allowed": True or False, # The value of allowed indicates whether the access to the policy is allowed or denied by default.
+      },
+    },
+    "contentDetails": { # Details about the content of a YouTube Video. # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
+      "definition": "A String", # The value of definition indicates whether the video is available in high definition or only in standard definition.
+      "countryRestriction": { # Rights management policy for YouTube resources. # The countryRestriction object contains information about the countries where a video is (or is not) viewable.
+        "exception": [ # A list of region codes that identify countries where the default policy do not apply.
+          "A String",
+        ],
+        "allowed": True or False, # The value of allowed indicates whether the access to the policy is allowed or denied by default.
+      },
+      "caption": "A String", # The value of captions indicates whether the video has captions or not.
+      "regionRestriction": { # DEPRECATED Region restriction of the video. # The regionRestriction object contains information about the countries where a video is (or is not) viewable. The object will contain either the contentDetails.regionRestriction.allowed property or the contentDetails.regionRestriction.blocked property.
         "blocked": [ # A list of region codes that identify countries where the video is blocked. If this property is present and a country is not listed in its value, then the video is viewable in that country. If this property is present and contains an empty list, the video is viewable in all countries.
           "A String",
         ],
@@ -370,28 +719,97 @@
           "A String",
         ],
       },
+      "duration": "A String", # The length of the video. The tag value is an ISO 8601 duration in the format PT#M#S, in which the letters PT indicate that the value specifies a period of time, and the letters M and S refer to length in minutes and seconds, respectively. The # characters preceding the M and S letters are both integers that specify the number of minutes (or seconds) of the video. For example, a value of PT15M51S indicates that the video is 15 minutes and 51 seconds long.
+      "licensedContent": True or False, # The value of is_license_content indicates whether the video is licensed content.
+      "dimension": "A String", # The value of dimension indicates whether the video is available in 3D or in 2D.
     },
-    "snippet": { # Basic details about a video, including title, description, uploader, thumbnails and category. # The snippet object contains basic details about the video, such as its title, description, and category.
-      "thumbnails": { # A map of thumbnail images associated with the video. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-        "a_key": { # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
-          "url": "A String", # The thumbnail image's URL.
-          "width": 42,
-          "height": 42,
-        },
-      },
-      "tags": [ # A list of keyword tags associated with the video. Tags may contain spaces. This field is only visible to the video's uploader.
+    "suggestions": { # Specifies suggestions on how to improve video content, including encoding hints, tag suggestions, and editor suggestions. # The suggestions object encapsulates suggestions that identify opportunities to improve the video quality or the metadata for the uploaded video. This data can only be retrieved by the video owner.
+      "processingErrors": [ # A list of errors that will prevent YouTube from successfully processing the uploaded video video. These errors indicate that, regardless of the video's current processing status, eventually, that status will almost certainly be failed.
         "A String",
       ],
-      "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that the video was uploaded to.
-      "publishedAt": "A String", # The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
-      "title": "A String", # The video's title.
-      "categoryId": "A String", # The YouTube video category associated with the video.
-      "description": "A String", # The video's description.
+      "tagSuggestions": [ # A list of keyword tags that could be added to the video's metadata to increase the likelihood that users will locate your video when searching or browsing on YouTube.
+        { # A single tag suggestion with it's relevance information.
+          "categoryRestricts": [ # A set of video categories for which the tag is relevant. You can use this information to display appropriate tag suggestions based on the video category that the video uploader associates with the video. By default, tag suggestions are relevant for all categories if there are no restricts defined for the keyword.
+            "A String",
+          ],
+          "tag": "A String", # The keyword tag suggested for the video.
+        },
+      ],
+      "editorSuggestions": [ # A list of video editing operations that might improve the video quality or playback experience of the uploaded video.
+        "A String",
+      ],
+      "processingWarnings": [ # A list of reasons why YouTube may have difficulty transcoding the uploaded video or that might result in an erroneous transcoding. These warnings are generated before YouTube actually processes the uploaded video file. In addition, they identify issues that are unlikely to cause the video processing to fail but that might cause problems such as sync issues, video artifacts, or a missing audio track.
+        "A String",
+      ],
+      "processingHints": [ # A list of suggestions that may improve YouTube's ability to process the video.
+        "A String",
+      ],
+    },
+    "fileDetails": { # Describes original video file properties, including technical details about audio and video streams, but also metadata information like content length, digitization time, or geotagging information. # The fileDetails object encapsulates information about the video file that was uploaded to YouTube, including the file's resolution, duration, audio and video codecs, stream bitrates, and more. This data can only be retrieved by the video owner.
+      "bitrateBps": "A String", # The uploaded video file's combined (video and audio) bitrate in bits per second.
+      "container": "A String", # The uploaded video file's container format.
+      "recordingLocation": { # A geoPoint holds geo location information associated with a YouTube resource. # Geographic coordinates that identify the place where the uploaded video was recorded. Coordinates are defined using WGS 84.
+        "latitude": 3.14, # Latitude in degrees.
+        "elevation": 3.14, # Altitude above the Earth, in meters.
+        "longitude": 3.14, # Longitude in degrees.
+      },
+      "fileType": "A String", # The uploaded file's type as detected by YouTube's video processing engine. Currently, YouTube only processes video files, but this field is present whether a video file or another type of file was uploaded.
+      "creationTime": "A String", # The date and time when the uploaded video file was created. The value is specified in ISO 8601 format. Currently, the following ISO 8601 formats are supported:
+          # - Date only: YYYY-MM-DD
+          # - Naive time: YYYY-MM-DDTHH:MM:SS
+          # - Time with timezone: YYYY-MM-DDTHH:MM:SS+HH:MM
+      "durationMs": "A String", # The length of the uploaded video in milliseconds.
+      "fileName": "A String", # The uploaded file's name. This field is present whether a video file or another type of file was uploaded.
+      "fileSize": "A String", # The uploaded file's size in bytes. This field is present whether a video file or another type of file was uploaded.
+      "videoStreams": [ # A list of video streams contained in the uploaded video file. Each item in the list contains detailed metadata about a video stream.
+        { # Information about a video stream.
+          "bitrateBps": "A String", # The video stream's bitrate, in bits per second.
+          "vendor": "A String", # A value that uniquely identifies a video vendor. Typically, the value is a four-letter vendor code.
+          "codec": "A String", # The video codec that the stream uses.
+          "widthPixels": 42, # The encoded video content's width in pixels. You can calculate the video's encoding aspect ratio as width_pixels / height_pixels.
+          "heightPixels": 42, # The encoded video content's height in pixels.
+          "aspectRatio": 3.14, # The video content's display aspect ratio, which specifies the aspect ratio in which the video should be displayed.
+          "rotation": "A String", # The amount that YouTube needs to rotate the original source content to properly display the video.
+          "frameRateFps": 3.14, # The video stream's frame rate, in frames per second.
+        },
+      ],
+      "audioStreams": [ # A list of audio streams contained in the uploaded video file. Each item in the list contains detailed metadata about an audio stream.
+        { # Information about an audio stream.
+          "bitrateBps": "A String", # The audio stream's bitrate, in bits per second.
+          "codec": "A String", # The audio codec that the stream uses.
+          "vendor": "A String", # A value that uniquely identifies a video vendor. Typically, the value is a four-letter vendor code.
+          "channelCount": 42, # The number of audio channels that the stream contains.
+        },
+      ],
+    },
+    "processingDetails": { # Describes processing status and progress and availability of some other Video resource parts. # The processingProgress object encapsulates information about YouTube's progress in processing the uploaded video file. The properties in the object identify the current processing status and an estimate of the time remaining until YouTube finishes processing the video. This part also indicates whether different types of data or content, such as file details or thumbnail images, are available for the video.
+        # 
+        # The processingProgress object is designed to be polled so that the video uploaded can track the progress that YouTube has made in processing the uploaded video file. This data can only be retrieved by the video owner.
+      "fileDetailsAvailability": "A String", # This value indicates whether file details are available for the uploaded video. You can retrieve a video's file details by requesting the fileDetails part in your videos.list() request.
+      "editorSuggestionsAvailability": "A String", # This value indicates whether video editing suggestions, which might improve video quality or the playback experience, are available for the video. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
+      "processingStatus": "A String", # The video's processing status. This value indicates whether YouTube was able to process the video or if the video is still being processed.
+      "processingIssuesAvailability": "A String", # This value indicates whether the video processing engine has generated suggestions that might improve YouTube's ability to process the the video, warnings that explain video processing problems, or errors that cause video processing problems. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
+      "processingFailureReason": "A String", # The reason that YouTube failed to process the video. This property will only have a value if the processingStatus property's value is failed.
+      "thumbnailsAvailability": "A String", # This value indicates whether thumbnail images have been generated for the video.
+      "processingProgress": { # Video processing progress and completion time estimate. # The processingProgress object contains information about the progress YouTube has made in processing the video. The values are really only relevant if the video's processing status is processing.
+        "timeLeftMs": "A String", # An estimate of the amount of time, in millseconds, that YouTube needs to finish processing the video.
+        "partsProcessed": "A String", # The number of parts of the video that YouTube has already processed. You can estimate the percentage of the video that YouTube has already processed by calculating:
+            # 100 * parts_processed / parts_total
+            #
+            # Note that since the estimated number of parts could increase without a corresponding increase in the number of parts that have already been processed, it is possible that the calculated progress could periodically decrease while YouTube processes a video.
+        "partsTotal": "A String", # An estimate of the total number of parts that need to be processed for the video. The number may be updated with more precise estimates while YouTube processes the video.
+      },
+      "tagSuggestionsAvailability": "A String", # This value indicates whether keyword (tag) suggestions are available for the video. Tags can be added to a video's metadata to make it easier for other users to find the video. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
     },
     "player": { # Player to be used for a video playback. # The player object contains information that you would use to play the video in an embedded player.
       "embedHtml": "A String", # An <iframe> tag that embeds a player that will play the video.
     },
     "etag": "A String", # The ETag of the video resource.
+    "projectDetails": { # Project specific details about the content of a YouTube Video. # The projectDetails object contains information about the project specific video metadata.
+      "tags": [ # A list of project tags associated with the video during the upload.
+        "A String",
+      ],
+    },
     "recordingDetails": { # Recording information associated with the video. # The recordingDetails object encapsulates information about the location, date and address where the video was recorded.
       "recordingDate": "A String", # The date and time when the video was recorded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
       "locationDescription": "A String", # The text description of the location where the video was recorded.
@@ -404,21 +822,37 @@
     "id": "A String", # The ID that YouTube uses to uniquely identify the video.
   }
 
+  onBehalfOfContentOwner: string, The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.
 
 Returns:
   An object of the form:
 
     { # A video resource represents a YouTube video.
       "status": { # The status of a video details the video's upload status and privacy status. # The status object contains information about the video's uploading, processing, and privacy statuses.
+        "license": "A String", # The video's license.
+        "embeddable": True or False, # This value indicates if the video can be embedded on another website.
         "privacyStatus": "A String", # The video's privacy status.
         "uploadStatus": "A String", # The status of the uploaded video.
         "rejectionReason": "A String", # This value explains why YouTube rejected an uploaded video. This property is only present if the uploadStatus property indicates that the upload was rejected.
         "failureReason": "A String", # This value explains why a video failed to upload. This property is only present if the uploadStatus property indicates that the upload failed.
       },
-      "topicDetails": { # Freebase topic information related to the video. # The topicDetails object encapsulates information about Freebase topics associated with the video.
-        "topicIds": [ # A list of Freebase topic IDs associated with the video. You can retrieve information about each topic using the Freebase Topic API.
+      "snippet": { # Basic details about a video, including title, description, uploader, thumbnails and category. # The snippet object contains basic details about the video, such as its title, description, and category.
+        "description": "A String", # The video's description.
+        "tags": [ # A list of keyword tags associated with the video. Tags may contain spaces. This field is only visible to the video's uploader.
           "A String",
         ],
+        "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that the video was uploaded to.
+        "publishedAt": "A String", # The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+        "channelTitle": "A String", # Channel title for the channel that the video belongs to.
+        "title": "A String", # The video's title.
+        "categoryId": "A String", # The YouTube video category associated with the video.
+        "thumbnails": { # A map of thumbnail images associated with the video. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
+          "a_key": { # A thumbnail is an image representing a YouTube resource. # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
+            "url": "A String", # The thumbnail image's URL.
+            "width": 42, # (Optional) Width of the thumbnail image.
+            "height": 42, # (Optional) Height of the thumbnail image.
+          },
+        },
       },
       "kind": "youtube#video", # The type of the API resource. For video resources, the value will be youtube#video.
       "statistics": { # Statistics about the video, such as the number of times the video was viewed or liked. # The statistics object contains statistics about the video.
@@ -428,9 +862,29 @@
         "dislikeCount": "A String", # The number of users who have indicated that they disliked the video by giving it a negative rating.
         "likeCount": "A String", # The number of users who have indicated that they liked the video by giving it a positive rating.
       },
-      "contentDetails": { # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
-        "duration": "A String", # The length of the video. The tag value is an ISO 8601 duration in the format PT#M#S, in which the letters PT indicate that the value specifies a period of time, and the letters M and S refer to length in minutes and seconds, respectively. The # characters preceding the M and S letters are both integers that specify the number of minutes (or seconds) of the video. For example, a value of PT15M51S indicates that the video is 15 minutes and 51 seconds long.
-        "regionRestriction": { # Region restriction of the video. # The regionRestriction object contains information about the countries where a video is (or is not) viewable. The object will contain either the contentDetails.regionRestriction.allowed property or the contentDetails.regionRestriction.blocked property.
+      "topicDetails": { # Freebase topic information related to the video. # The topicDetails object encapsulates information about Freebase topics associated with the video.
+        "topicIds": [ # A list of Freebase topic IDs associated with the video. You can retrieve information about each topic using the Freebase Topic API.
+          "A String",
+        ],
+      },
+      "monetizationDetails": { # Details about monetization of a YouTube Video. # The monetizationDetails object encapsulates information about the monetization status of the video.
+        "access": { # Rights management policy for YouTube resources. # The value of access indicates whether the video can be monetized or not.
+          "exception": [ # A list of region codes that identify countries where the default policy do not apply.
+            "A String",
+          ],
+          "allowed": True or False, # The value of allowed indicates whether the access to the policy is allowed or denied by default.
+        },
+      },
+      "contentDetails": { # Details about the content of a YouTube Video. # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
+        "definition": "A String", # The value of definition indicates whether the video is available in high definition or only in standard definition.
+        "countryRestriction": { # Rights management policy for YouTube resources. # The countryRestriction object contains information about the countries where a video is (or is not) viewable.
+          "exception": [ # A list of region codes that identify countries where the default policy do not apply.
+            "A String",
+          ],
+          "allowed": True or False, # The value of allowed indicates whether the access to the policy is allowed or denied by default.
+        },
+        "caption": "A String", # The value of captions indicates whether the video has captions or not.
+        "regionRestriction": { # DEPRECATED Region restriction of the video. # The regionRestriction object contains information about the countries where a video is (or is not) viewable. The object will contain either the contentDetails.regionRestriction.allowed property or the contentDetails.regionRestriction.blocked property.
           "blocked": [ # A list of region codes that identify countries where the video is blocked. If this property is present and a country is not listed in its value, then the video is viewable in that country. If this property is present and contains an empty list, the video is viewable in all countries.
             "A String",
           ],
@@ -438,28 +892,97 @@
             "A String",
           ],
         },
+        "duration": "A String", # The length of the video. The tag value is an ISO 8601 duration in the format PT#M#S, in which the letters PT indicate that the value specifies a period of time, and the letters M and S refer to length in minutes and seconds, respectively. The # characters preceding the M and S letters are both integers that specify the number of minutes (or seconds) of the video. For example, a value of PT15M51S indicates that the video is 15 minutes and 51 seconds long.
+        "licensedContent": True or False, # The value of is_license_content indicates whether the video is licensed content.
+        "dimension": "A String", # The value of dimension indicates whether the video is available in 3D or in 2D.
       },
-      "snippet": { # Basic details about a video, including title, description, uploader, thumbnails and category. # The snippet object contains basic details about the video, such as its title, description, and category.
-        "thumbnails": { # A map of thumbnail images associated with the video. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
-          "a_key": { # Name of the thumbnail, to easily identify it. The set of names is dependent on the resource the thumbnail is for.
-            "url": "A String", # The thumbnail image's URL.
-            "width": 42,
-            "height": 42,
-          },
-        },
-        "tags": [ # A list of keyword tags associated with the video. Tags may contain spaces. This field is only visible to the video's uploader.
+      "suggestions": { # Specifies suggestions on how to improve video content, including encoding hints, tag suggestions, and editor suggestions. # The suggestions object encapsulates suggestions that identify opportunities to improve the video quality or the metadata for the uploaded video. This data can only be retrieved by the video owner.
+        "processingErrors": [ # A list of errors that will prevent YouTube from successfully processing the uploaded video video. These errors indicate that, regardless of the video's current processing status, eventually, that status will almost certainly be failed.
           "A String",
         ],
-        "channelId": "A String", # The ID that YouTube uses to uniquely identify the channel that the video was uploaded to.
-        "publishedAt": "A String", # The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
-        "title": "A String", # The video's title.
-        "categoryId": "A String", # The YouTube video category associated with the video.
-        "description": "A String", # The video's description.
+        "tagSuggestions": [ # A list of keyword tags that could be added to the video's metadata to increase the likelihood that users will locate your video when searching or browsing on YouTube.
+          { # A single tag suggestion with it's relevance information.
+            "categoryRestricts": [ # A set of video categories for which the tag is relevant. You can use this information to display appropriate tag suggestions based on the video category that the video uploader associates with the video. By default, tag suggestions are relevant for all categories if there are no restricts defined for the keyword.
+              "A String",
+            ],
+            "tag": "A String", # The keyword tag suggested for the video.
+          },
+        ],
+        "editorSuggestions": [ # A list of video editing operations that might improve the video quality or playback experience of the uploaded video.
+          "A String",
+        ],
+        "processingWarnings": [ # A list of reasons why YouTube may have difficulty transcoding the uploaded video or that might result in an erroneous transcoding. These warnings are generated before YouTube actually processes the uploaded video file. In addition, they identify issues that are unlikely to cause the video processing to fail but that might cause problems such as sync issues, video artifacts, or a missing audio track.
+          "A String",
+        ],
+        "processingHints": [ # A list of suggestions that may improve YouTube's ability to process the video.
+          "A String",
+        ],
+      },
+      "fileDetails": { # Describes original video file properties, including technical details about audio and video streams, but also metadata information like content length, digitization time, or geotagging information. # The fileDetails object encapsulates information about the video file that was uploaded to YouTube, including the file's resolution, duration, audio and video codecs, stream bitrates, and more. This data can only be retrieved by the video owner.
+        "bitrateBps": "A String", # The uploaded video file's combined (video and audio) bitrate in bits per second.
+        "container": "A String", # The uploaded video file's container format.
+        "recordingLocation": { # A geoPoint holds geo location information associated with a YouTube resource. # Geographic coordinates that identify the place where the uploaded video was recorded. Coordinates are defined using WGS 84.
+          "latitude": 3.14, # Latitude in degrees.
+          "elevation": 3.14, # Altitude above the Earth, in meters.
+          "longitude": 3.14, # Longitude in degrees.
+        },
+        "fileType": "A String", # The uploaded file's type as detected by YouTube's video processing engine. Currently, YouTube only processes video files, but this field is present whether a video file or another type of file was uploaded.
+        "creationTime": "A String", # The date and time when the uploaded video file was created. The value is specified in ISO 8601 format. Currently, the following ISO 8601 formats are supported:
+            # - Date only: YYYY-MM-DD
+            # - Naive time: YYYY-MM-DDTHH:MM:SS
+            # - Time with timezone: YYYY-MM-DDTHH:MM:SS+HH:MM
+        "durationMs": "A String", # The length of the uploaded video in milliseconds.
+        "fileName": "A String", # The uploaded file's name. This field is present whether a video file or another type of file was uploaded.
+        "fileSize": "A String", # The uploaded file's size in bytes. This field is present whether a video file or another type of file was uploaded.
+        "videoStreams": [ # A list of video streams contained in the uploaded video file. Each item in the list contains detailed metadata about a video stream.
+          { # Information about a video stream.
+            "bitrateBps": "A String", # The video stream's bitrate, in bits per second.
+            "vendor": "A String", # A value that uniquely identifies a video vendor. Typically, the value is a four-letter vendor code.
+            "codec": "A String", # The video codec that the stream uses.
+            "widthPixels": 42, # The encoded video content's width in pixels. You can calculate the video's encoding aspect ratio as width_pixels / height_pixels.
+            "heightPixels": 42, # The encoded video content's height in pixels.
+            "aspectRatio": 3.14, # The video content's display aspect ratio, which specifies the aspect ratio in which the video should be displayed.
+            "rotation": "A String", # The amount that YouTube needs to rotate the original source content to properly display the video.
+            "frameRateFps": 3.14, # The video stream's frame rate, in frames per second.
+          },
+        ],
+        "audioStreams": [ # A list of audio streams contained in the uploaded video file. Each item in the list contains detailed metadata about an audio stream.
+          { # Information about an audio stream.
+            "bitrateBps": "A String", # The audio stream's bitrate, in bits per second.
+            "codec": "A String", # The audio codec that the stream uses.
+            "vendor": "A String", # A value that uniquely identifies a video vendor. Typically, the value is a four-letter vendor code.
+            "channelCount": 42, # The number of audio channels that the stream contains.
+          },
+        ],
+      },
+      "processingDetails": { # Describes processing status and progress and availability of some other Video resource parts. # The processingProgress object encapsulates information about YouTube's progress in processing the uploaded video file. The properties in the object identify the current processing status and an estimate of the time remaining until YouTube finishes processing the video. This part also indicates whether different types of data or content, such as file details or thumbnail images, are available for the video.
+          #
+          # The processingProgress object is designed to be polled so that the video uploaded can track the progress that YouTube has made in processing the uploaded video file. This data can only be retrieved by the video owner.
+        "fileDetailsAvailability": "A String", # This value indicates whether file details are available for the uploaded video. You can retrieve a video's file details by requesting the fileDetails part in your videos.list() request.
+        "editorSuggestionsAvailability": "A String", # This value indicates whether video editing suggestions, which might improve video quality or the playback experience, are available for the video. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
+        "processingStatus": "A String", # The video's processing status. This value indicates whether YouTube was able to process the video or if the video is still being processed.
+        "processingIssuesAvailability": "A String", # This value indicates whether the video processing engine has generated suggestions that might improve YouTube's ability to process the the video, warnings that explain video processing problems, or errors that cause video processing problems. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
+        "processingFailureReason": "A String", # The reason that YouTube failed to process the video. This property will only have a value if the processingStatus property's value is failed.
+        "thumbnailsAvailability": "A String", # This value indicates whether thumbnail images have been generated for the video.
+        "processingProgress": { # Video processing progress and completion time estimate. # The processingProgress object contains information about the progress YouTube has made in processing the video. The values are really only relevant if the video's processing status is processing.
+          "timeLeftMs": "A String", # An estimate of the amount of time, in millseconds, that YouTube needs to finish processing the video.
+          "partsProcessed": "A String", # The number of parts of the video that YouTube has already processed. You can estimate the percentage of the video that YouTube has already processed by calculating:
+              # 100 * parts_processed / parts_total
+              #
+              # Note that since the estimated number of parts could increase without a corresponding increase in the number of parts that have already been processed, it is possible that the calculated progress could periodically decrease while YouTube processes a video.
+          "partsTotal": "A String", # An estimate of the total number of parts that need to be processed for the video. The number may be updated with more precise estimates while YouTube processes the video.
+        },
+        "tagSuggestionsAvailability": "A String", # This value indicates whether keyword (tag) suggestions are available for the video. Tags can be added to a video's metadata to make it easier for other users to find the video. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request.
       },
       "player": { # Player to be used for a video playback. # The player object contains information that you would use to play the video in an embedded player.
         "embedHtml": "A String", # An <iframe> tag that embeds a player that will play the video.
       },
       "etag": "A String", # The ETag of the video resource.
+      "projectDetails": { # Project specific details about the content of a YouTube Video. # The projectDetails object contains information about the project specific video metadata.
+        "tags": [ # A list of project tags associated with the video during the upload.
+          "A String",
+        ],
+      },
       "recordingDetails": { # Recording information associated with the video. # The recordingDetails object encapsulates information about the location, date and address where the video was recorded.
         "recordingDate": "A String", # The date and time when the video was recorded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
         "locationDescription": "A String", # The text description of the location where the video was recorded.
diff --git a/docs/epy/api-objects.txt b/docs/epy/api-objects.txt
index 8b3e0a1..5a5f9bb 100644
--- a/docs/epy/api-objects.txt
+++ b/docs/epy/api-objects.txt
@@ -1,19 +1,26 @@
 apiclient	apiclient-module.html
 apiclient.discovery	apiclient.discovery-module.html
+apiclient.discovery.MEDIA_BODY_PARAMETER_DEFAULT_VALUE	apiclient.discovery-module.html#MEDIA_BODY_PARAMETER_DEFAULT_VALUE
 apiclient.discovery._cast	apiclient.discovery-module.html#_cast
-apiclient.discovery.MULTIPLIERS	apiclient.discovery-module.html#MULTIPLIERS
-apiclient.discovery.fix_method_name	apiclient.discovery-module.html#fix_method_name
+apiclient.discovery._MEDIA_SIZE_BIT_SHIFTS	apiclient.discovery-module.html#_MEDIA_SIZE_BIT_SHIFTS
+apiclient.discovery._fix_up_parameters	apiclient.discovery-module.html#_fix_up_parameters
+apiclient.discovery.HTTP_PAYLOAD_METHODS	apiclient.discovery-module.html#HTTP_PAYLOAD_METHODS
+apiclient.discovery._media_path_url_from_info	apiclient.discovery-module.html#_media_path_url_from_info
+apiclient.discovery._fix_up_media_upload	apiclient.discovery-module.html#_fix_up_media_upload
 apiclient.discovery.build	apiclient.discovery-module.html#build
 apiclient.discovery.key2param	apiclient.discovery-module.html#key2param
 apiclient.discovery.VARNAME	apiclient.discovery-module.html#VARNAME
 apiclient.discovery.createNextMethod	apiclient.discovery-module.html#createNextMethod
 apiclient.discovery.logger	apiclient.discovery-module.html#logger
+apiclient.discovery.BODY_PARAMETER_DEFAULT_VALUE	apiclient.discovery-module.html#BODY_PARAMETER_DEFAULT_VALUE
 apiclient.discovery._media_size_to_long	apiclient.discovery-module.html#_media_size_to_long
-apiclient.discovery._add_query_parameter	apiclient.discovery-module.html#_add_query_parameter
+apiclient.discovery._fix_up_method_description	apiclient.discovery-module.html#_fix_up_method_description
+apiclient.discovery.STACK_QUERY_PARAMETER_DEFAULT_VALUE	apiclient.discovery-module.html#STACK_QUERY_PARAMETER_DEFAULT_VALUE
 apiclient.discovery.createMethod	apiclient.discovery-module.html#createMethod
 apiclient.discovery.DEFAULT_METHOD_DOC	apiclient.discovery-module.html#DEFAULT_METHOD_DOC
 apiclient.discovery.RESERVED_WORDS	apiclient.discovery-module.html#RESERVED_WORDS
 apiclient.discovery.build_from_document	apiclient.discovery-module.html#build_from_document
+apiclient.discovery.fix_method_name	apiclient.discovery-module.html#fix_method_name
 apiclient.discovery.STACK_QUERY_PARAMETERS	apiclient.discovery-module.html#STACK_QUERY_PARAMETERS
 apiclient.discovery.DISCOVERY_URI	apiclient.discovery-module.html#DISCOVERY_URI
 apiclient.discovery.URITEMPLATE	apiclient.discovery-module.html#URITEMPLATE
@@ -49,6 +56,9 @@
 apiclient.push.CLIENT_TOKEN	apiclient.push-module.html#CLIENT_TOKEN
 apiclient.schema	apiclient.schema-module.html
 oauth2client	oauth2client-module.html
+oauth2client.GOOGLE_REVOKE_URI	oauth2client-module.html#GOOGLE_REVOKE_URI
+oauth2client.GOOGLE_TOKEN_URI	oauth2client-module.html#GOOGLE_TOKEN_URI
+oauth2client.GOOGLE_AUTH_URI	oauth2client-module.html#GOOGLE_AUTH_URI
 oauth2client.anyjson	oauth2client.anyjson-module.html
 oauth2client.appengine	oauth2client.appengine-module.html
 oauth2client.appengine._safe_html	oauth2client.appengine-module.html#_safe_html
@@ -58,6 +68,7 @@
 oauth2client.appengine.logger	oauth2client.appengine-module.html#logger
 oauth2client.appengine._generate_new_xsrf_secret_key	oauth2client.appengine-module.html#_generate_new_xsrf_secret_key
 oauth2client.appengine.xsrf_secret_key	oauth2client.appengine-module.html#xsrf_secret_key
+oauth2client.appengine.ndb	oauth2client.appengine-module.html#ndb
 oauth2client.appengine.oauth2decorator_from_clientsecrets	oauth2client.appengine-module.html#oauth2decorator_from_clientsecrets
 oauth2client.appengine._parse_state_value	oauth2client.appengine-module.html#_parse_state_value
 oauth2client.client	oauth2client.client-module.html
@@ -67,6 +78,7 @@
 oauth2client.client.ID_TOKEN_VERIFICATON_CERTS	oauth2client.client-module.html#ID_TOKEN_VERIFICATON_CERTS
 oauth2client.client.credentials_from_clientsecrets_and_code	oauth2client.client-module.html#credentials_from_clientsecrets_and_code
 oauth2client.client.flow_from_clientsecrets	oauth2client.client-module.html#flow_from_clientsecrets
+oauth2client.client._update_query_params	oauth2client.client-module.html#_update_query_params
 oauth2client.client.EXPIRY_FORMAT	oauth2client.client-module.html#EXPIRY_FORMAT
 oauth2client.client.logger	oauth2client.client-module.html#logger
 oauth2client.client._abstract	oauth2client.client-module.html#_abstract
@@ -74,8 +86,9 @@
 oauth2client.client.OOB_CALLBACK_URN	oauth2client.client-module.html#OOB_CALLBACK_URN
 oauth2client.client._parse_exchange_token_response	oauth2client.client-module.html#_parse_exchange_token_response
 oauth2client.client.credentials_from_code	oauth2client.client-module.html#credentials_from_code
-oauth2client.client._urlsafe_b64decode	oauth2client.client-module.html#_urlsafe_b64decode
+oauth2client.client.HAS_OPENSSL	oauth2client.client-module.html#HAS_OPENSSL
 oauth2client.client.verify_id_token	oauth2client.client-module.html#verify_id_token
+oauth2client.client._urlsafe_b64decode	oauth2client.client-module.html#_urlsafe_b64decode
 oauth2client.client.REFRESH_STATUS_CODES	oauth2client.client-module.html#REFRESH_STATUS_CODES
 oauth2client.clientsecrets	oauth2client.clientsecrets-module.html
 oauth2client.clientsecrets.load	oauth2client.clientsecrets-module.html#load
@@ -124,10 +137,11 @@
 oauth2client.tools.run	oauth2client.tools-module.html#run
 oauth2client.tools.FLAGS	oauth2client.tools-module.html#FLAGS
 oauth2client.util	oauth2client.util-module.html
-oauth2client.util.scopes_to_string	oauth2client.util-module.html#scopes_to_string
-oauth2client.util.dict_to_tuple_key	oauth2client.util-module.html#dict_to_tuple_key
 oauth2client.util.positional	oauth2client.util-module.html#positional
+oauth2client.util.scopes_to_string	oauth2client.util-module.html#scopes_to_string
 oauth2client.util.FLAGS	oauth2client.util-module.html#FLAGS
+oauth2client.util.dict_to_tuple_key	oauth2client.util-module.html#dict_to_tuple_key
+oauth2client.util._add_query_parameter	oauth2client.util-module.html#_add_query_parameter
 oauth2client.util.logger	oauth2client.util-module.html#logger
 oauth2client.xsrfutil	oauth2client.xsrfutil-module.html
 oauth2client.xsrfutil.validate_token	oauth2client.xsrfutil-module.html#validate_token
@@ -143,6 +157,9 @@
 apiclient.discovery.Resource._set_service_methods	apiclient.discovery.Resource-class.html#_set_service_methods
 apiclient.discovery.Resource.__getstate__	apiclient.discovery.Resource-class.html#__getstate__
 apiclient.discovery.Resource._add_basic_methods	apiclient.discovery.Resource-class.html#_add_basic_methods
+apiclient.discovery.ResourceMethodParameters	apiclient.discovery.ResourceMethodParameters-class.html
+apiclient.discovery.ResourceMethodParameters.set_parameters	apiclient.discovery.ResourceMethodParameters-class.html#set_parameters
+apiclient.discovery.ResourceMethodParameters.__init__	apiclient.discovery.ResourceMethodParameters-class.html#__init__
 apiclient.errors.BatchError	apiclient.errors.BatchError-class.html
 apiclient.errors.BatchError.__str__	apiclient.errors.BatchError-class.html#__str__
 apiclient.errors.BatchError.__repr__	apiclient.errors.BatchError-class.html#__repr__
@@ -158,6 +175,10 @@
 apiclient.errors.InvalidJsonError	apiclient.errors.InvalidJsonError-class.html
 apiclient.errors.MediaUploadSizeError	apiclient.errors.MediaUploadSizeError-class.html
 apiclient.errors.ResumableUploadError	apiclient.errors.ResumableUploadError-class.html
+apiclient.errors.HttpError.__str__	apiclient.errors.HttpError-class.html#__str__
+apiclient.errors.HttpError.__repr__	apiclient.errors.HttpError-class.html#__repr__
+apiclient.errors.HttpError.__init__	apiclient.errors.HttpError-class.html#__init__
+apiclient.errors.HttpError._get_reason	apiclient.errors.HttpError-class.html#_get_reason
 apiclient.errors.UnacceptableMimeTypeError	apiclient.errors.UnacceptableMimeTypeError-class.html
 apiclient.errors.UnexpectedBodyError	apiclient.errors.UnexpectedBodyError-class.html
 apiclient.errors.UnexpectedBodyError.__init__	apiclient.errors.UnexpectedBodyError-class.html#__init__
@@ -370,27 +391,33 @@
 apiclient.schema._SchemaToStruct.undent	apiclient.schema._SchemaToStruct-class.html#undent
 apiclient.schema._SchemaToStruct.emit	apiclient.schema._SchemaToStruct-class.html#emit
 apiclient.schema._SchemaToStruct.__init__	apiclient.schema._SchemaToStruct-class.html#__init__
+google.appengine.ext.db.PropertiedClass	google.appengine.ext.db.PropertiedClass-class.html
+google.appengine.ext.db.PropertiedClass.__init__	google.appengine.ext.db.PropertiedClass-class.html#__init__
 oauth2client.appengine.AppAssertionCredentials	oauth2client.appengine.AppAssertionCredentials-class.html
 oauth2client.appengine.AppAssertionCredentials.from_json	oauth2client.appengine.AppAssertionCredentials-class.html#from_json
 oauth2client.client.OAuth2Credentials.authorize	oauth2client.client.OAuth2Credentials-class.html#authorize
+oauth2client.client.OAuth2Credentials.revoke	oauth2client.client.OAuth2Credentials-class.html#revoke
 oauth2client.client.OAuth2Credentials.set_store	oauth2client.client.OAuth2Credentials-class.html#set_store
 oauth2client.client.OAuth2Credentials.to_json	oauth2client.client.OAuth2Credentials-class.html#to_json
 oauth2client.client.OAuth2Credentials.apply	oauth2client.client.OAuth2Credentials-class.html#apply
 oauth2client.client.Credentials.new_from_json	oauth2client.client.Credentials-class.html#new_from_json
 oauth2client.appengine.AppAssertionCredentials.__init__	oauth2client.appengine.AppAssertionCredentials-class.html#__init__
+oauth2client.client.OAuth2Credentials._generate_refresh_request_headers	oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers
+oauth2client.client.Credentials._to_json	oauth2client.client.Credentials-class.html#_to_json
 oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS	oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS
 oauth2client.client.OAuth2Credentials.__getstate__	oauth2client.client.OAuth2Credentials-class.html#__getstate__
 oauth2client.client.OAuth2Credentials.__setstate__	oauth2client.client.OAuth2Credentials-class.html#__setstate__
 oauth2client.appengine.AppAssertionCredentials._refresh	oauth2client.appengine.AppAssertionCredentials-class.html#_refresh
-oauth2client.client.OAuth2Credentials._generate_refresh_request_headers	oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers
+oauth2client.client.AssertionCredentials._revoke	oauth2client.client.AssertionCredentials-class.html#_revoke
 oauth2client.client.AssertionCredentials._generate_assertion	oauth2client.client.AssertionCredentials-class.html#_generate_assertion
+oauth2client.client.OAuth2Credentials._do_revoke	oauth2client.client.OAuth2Credentials-class.html#_do_revoke
 oauth2client.client.AssertionCredentials._generate_refresh_request_body	oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body
-oauth2client.client.Credentials._to_json	oauth2client.client.Credentials-class.html#_to_json
 oauth2client.client.OAuth2Credentials._updateFromCredential	oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential
 oauth2client.client.OAuth2Credentials._do_refresh_request	oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request
 oauth2client.client.OAuth2Credentials.refresh	oauth2client.client.OAuth2Credentials-class.html#refresh
 oauth2client.client.OAuth2Credentials.access_token_expired	oauth2client.client.OAuth2Credentials-class.html#access_token_expired
 oauth2client.appengine.CredentialsModel	oauth2client.appengine.CredentialsModel-class.html
+google.appengine.ext.db.Model.__metaclass__	google.appengine.ext.db.PropertiedClass-class.html
 oauth2client.appengine.CredentialsModel.credentials	oauth2client.appengine.CredentialsModel-class.html#credentials
 oauth2client.appengine.CredentialsNDBModel	oauth2client.appengine.CredentialsNDBModel-class.html
 oauth2client.appengine.CredentialsNDBModel.credentials	oauth2client.appengine.CredentialsNDBModel-class.html#credentials
@@ -401,17 +428,17 @@
 oauth2client.appengine.CredentialsNDBProperty._to_base_type	oauth2client.appengine.CredentialsNDBProperty-class.html#_to_base_type
 oauth2client.appengine.CredentialsProperty	oauth2client.appengine.CredentialsProperty-class.html
 oauth2client.appengine.CredentialsProperty.make_value_from_datastore	oauth2client.appengine.CredentialsProperty-class.html#make_value_from_datastore
+oauth2client.appengine.CredentialsProperty.data_type	oauth2client.appengine.CredentialsProperty-class.html#data_type
 oauth2client.appengine.CredentialsProperty.validate	oauth2client.appengine.CredentialsProperty-class.html#validate
 oauth2client.appengine.CredentialsProperty.get_value_for_datastore	oauth2client.appengine.CredentialsProperty-class.html#get_value_for_datastore
-oauth2client.appengine.CredentialsProperty.data_type	oauth2client.appengine.CredentialsProperty-class.html#data_type
 oauth2client.appengine.FlowNDBProperty	oauth2client.appengine.FlowNDBProperty-class.html
 oauth2client.appengine.FlowNDBProperty._validate	oauth2client.appengine.FlowNDBProperty-class.html#_validate
 oauth2client.appengine.FlowProperty	oauth2client.appengine.FlowProperty-class.html
 oauth2client.appengine.FlowProperty.make_value_from_datastore	oauth2client.appengine.FlowProperty-class.html#make_value_from_datastore
-oauth2client.appengine.FlowProperty.validate	oauth2client.appengine.FlowProperty-class.html#validate
-oauth2client.appengine.FlowProperty.get_value_for_datastore	oauth2client.appengine.FlowProperty-class.html#get_value_for_datastore
-oauth2client.appengine.FlowProperty.empty	oauth2client.appengine.FlowProperty-class.html#empty
 oauth2client.appengine.FlowProperty.data_type	oauth2client.appengine.FlowProperty-class.html#data_type
+oauth2client.appengine.FlowProperty.validate	oauth2client.appengine.FlowProperty-class.html#validate
+oauth2client.appengine.FlowProperty.empty	oauth2client.appengine.FlowProperty-class.html#empty
+oauth2client.appengine.FlowProperty.get_value_for_datastore	oauth2client.appengine.FlowProperty-class.html#get_value_for_datastore
 oauth2client.appengine.InvalidClientSecretsError	oauth2client.appengine.InvalidClientSecretsError-class.html
 oauth2client.appengine.InvalidXsrfTokenError	oauth2client.appengine.InvalidXsrfTokenError-class.html
 oauth2client.appengine.OAuth2Decorator	oauth2client.appengine.OAuth2Decorator-class.html
@@ -439,6 +466,7 @@
 oauth2client.appengine.OAuth2Decorator.callback_path	oauth2client.appengine.OAuth2Decorator-class.html#callback_path
 oauth2client.appengine.OAuth2Decorator.oauth_required	oauth2client.appengine.OAuth2Decorator-class.html#oauth_required
 oauth2client.appengine.SiteXsrfSecretKey	oauth2client.appengine.SiteXsrfSecretKey-class.html
+google.appengine.ext.db.Model.__metaclass__	google.appengine.ext.db.PropertiedClass-class.html
 oauth2client.appengine.SiteXsrfSecretKey.secret	oauth2client.appengine.SiteXsrfSecretKey-class.html#secret
 oauth2client.appengine.SiteXsrfSecretKeyNDB	oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html
 oauth2client.appengine.SiteXsrfSecretKeyNDB.secret	oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html#secret
@@ -459,18 +487,21 @@
 oauth2client.client.AccessTokenCredentials	oauth2client.client.AccessTokenCredentials-class.html
 oauth2client.client.AccessTokenCredentials.from_json	oauth2client.client.AccessTokenCredentials-class.html#from_json
 oauth2client.client.OAuth2Credentials.authorize	oauth2client.client.OAuth2Credentials-class.html#authorize
+oauth2client.client.OAuth2Credentials.revoke	oauth2client.client.OAuth2Credentials-class.html#revoke
 oauth2client.client.OAuth2Credentials.set_store	oauth2client.client.OAuth2Credentials-class.html#set_store
 oauth2client.client.OAuth2Credentials.to_json	oauth2client.client.OAuth2Credentials-class.html#to_json
 oauth2client.client.OAuth2Credentials.apply	oauth2client.client.OAuth2Credentials-class.html#apply
 oauth2client.client.Credentials.new_from_json	oauth2client.client.Credentials-class.html#new_from_json
 oauth2client.client.AccessTokenCredentials.__init__	oauth2client.client.AccessTokenCredentials-class.html#__init__
+oauth2client.client.Credentials._to_json	oauth2client.client.Credentials-class.html#_to_json
 oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS	oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS
 oauth2client.client.OAuth2Credentials.__getstate__	oauth2client.client.OAuth2Credentials-class.html#__getstate__
 oauth2client.client.OAuth2Credentials.__setstate__	oauth2client.client.OAuth2Credentials-class.html#__setstate__
 oauth2client.client.AccessTokenCredentials._refresh	oauth2client.client.AccessTokenCredentials-class.html#_refresh
 oauth2client.client.OAuth2Credentials._generate_refresh_request_headers	oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers
+oauth2client.client.AccessTokenCredentials._revoke	oauth2client.client.AccessTokenCredentials-class.html#_revoke
+oauth2client.client.OAuth2Credentials._do_revoke	oauth2client.client.OAuth2Credentials-class.html#_do_revoke
 oauth2client.client.OAuth2Credentials._generate_refresh_request_body	oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_body
-oauth2client.client.Credentials._to_json	oauth2client.client.Credentials-class.html#_to_json
 oauth2client.client.OAuth2Credentials._updateFromCredential	oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential
 oauth2client.client.OAuth2Credentials._do_refresh_request	oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request
 oauth2client.client.OAuth2Credentials.refresh	oauth2client.client.OAuth2Credentials-class.html#refresh
@@ -480,19 +511,22 @@
 oauth2client.client.AssertionCredentials	oauth2client.client.AssertionCredentials-class.html
 oauth2client.client.OAuth2Credentials.from_json	oauth2client.client.OAuth2Credentials-class.html#from_json
 oauth2client.client.OAuth2Credentials.authorize	oauth2client.client.OAuth2Credentials-class.html#authorize
+oauth2client.client.OAuth2Credentials.revoke	oauth2client.client.OAuth2Credentials-class.html#revoke
 oauth2client.client.OAuth2Credentials.set_store	oauth2client.client.OAuth2Credentials-class.html#set_store
 oauth2client.client.OAuth2Credentials.to_json	oauth2client.client.OAuth2Credentials-class.html#to_json
 oauth2client.client.OAuth2Credentials.apply	oauth2client.client.OAuth2Credentials-class.html#apply
 oauth2client.client.Credentials.new_from_json	oauth2client.client.Credentials-class.html#new_from_json
 oauth2client.client.AssertionCredentials.__init__	oauth2client.client.AssertionCredentials-class.html#__init__
+oauth2client.client.OAuth2Credentials._generate_refresh_request_headers	oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers
+oauth2client.client.Credentials._to_json	oauth2client.client.Credentials-class.html#_to_json
 oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS	oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS
 oauth2client.client.OAuth2Credentials.__getstate__	oauth2client.client.OAuth2Credentials-class.html#__getstate__
 oauth2client.client.OAuth2Credentials.__setstate__	oauth2client.client.OAuth2Credentials-class.html#__setstate__
 oauth2client.client.OAuth2Credentials._refresh	oauth2client.client.OAuth2Credentials-class.html#_refresh
-oauth2client.client.OAuth2Credentials._generate_refresh_request_headers	oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers
+oauth2client.client.AssertionCredentials._revoke	oauth2client.client.AssertionCredentials-class.html#_revoke
 oauth2client.client.AssertionCredentials._generate_assertion	oauth2client.client.AssertionCredentials-class.html#_generate_assertion
+oauth2client.client.OAuth2Credentials._do_revoke	oauth2client.client.OAuth2Credentials-class.html#_do_revoke
 oauth2client.client.AssertionCredentials._generate_refresh_request_body	oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body
-oauth2client.client.Credentials._to_json	oauth2client.client.Credentials-class.html#_to_json
 oauth2client.client.OAuth2Credentials._updateFromCredential	oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential
 oauth2client.client.OAuth2Credentials._do_refresh_request	oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request
 oauth2client.client.OAuth2Credentials.refresh	oauth2client.client.OAuth2Credentials-class.html#refresh
@@ -500,6 +534,7 @@
 oauth2client.client.Credentials	oauth2client.client.Credentials-class.html
 oauth2client.client.Credentials.authorize	oauth2client.client.Credentials-class.html#authorize
 oauth2client.client.Credentials.from_json	oauth2client.client.Credentials-class.html#from_json
+oauth2client.client.Credentials.revoke	oauth2client.client.Credentials-class.html#revoke
 oauth2client.client.Credentials.to_json	oauth2client.client.Credentials-class.html#to_json
 oauth2client.client.Credentials.apply	oauth2client.client.Credentials-class.html#apply
 oauth2client.client.Credentials.new_from_json	oauth2client.client.Credentials-class.html#new_from_json
@@ -518,18 +553,21 @@
 oauth2client.client.OAuth2Credentials	oauth2client.client.OAuth2Credentials-class.html
 oauth2client.client.OAuth2Credentials.authorize	oauth2client.client.OAuth2Credentials-class.html#authorize
 oauth2client.client.OAuth2Credentials.from_json	oauth2client.client.OAuth2Credentials-class.html#from_json
+oauth2client.client.OAuth2Credentials.revoke	oauth2client.client.OAuth2Credentials-class.html#revoke
 oauth2client.client.OAuth2Credentials.set_store	oauth2client.client.OAuth2Credentials-class.html#set_store
 oauth2client.client.OAuth2Credentials.to_json	oauth2client.client.OAuth2Credentials-class.html#to_json
 oauth2client.client.OAuth2Credentials.apply	oauth2client.client.OAuth2Credentials-class.html#apply
 oauth2client.client.Credentials.new_from_json	oauth2client.client.Credentials-class.html#new_from_json
 oauth2client.client.OAuth2Credentials.__init__	oauth2client.client.OAuth2Credentials-class.html#__init__
+oauth2client.client.Credentials._to_json	oauth2client.client.Credentials-class.html#_to_json
 oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS	oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS
 oauth2client.client.OAuth2Credentials.__getstate__	oauth2client.client.OAuth2Credentials-class.html#__getstate__
 oauth2client.client.OAuth2Credentials.__setstate__	oauth2client.client.OAuth2Credentials-class.html#__setstate__
 oauth2client.client.OAuth2Credentials._refresh	oauth2client.client.OAuth2Credentials-class.html#_refresh
 oauth2client.client.OAuth2Credentials._generate_refresh_request_headers	oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers
+oauth2client.client.OAuth2Credentials._revoke	oauth2client.client.OAuth2Credentials-class.html#_revoke
+oauth2client.client.OAuth2Credentials._do_revoke	oauth2client.client.OAuth2Credentials-class.html#_do_revoke
 oauth2client.client.OAuth2Credentials._generate_refresh_request_body	oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_body
-oauth2client.client.Credentials._to_json	oauth2client.client.Credentials-class.html#_to_json
 oauth2client.client.OAuth2Credentials._updateFromCredential	oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential
 oauth2client.client.OAuth2Credentials._do_refresh_request	oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request
 oauth2client.client.OAuth2Credentials.refresh	oauth2client.client.OAuth2Credentials-class.html#refresh
@@ -541,6 +579,7 @@
 oauth2client.client.SignedJwtAssertionCredentials	oauth2client.client.SignedJwtAssertionCredentials-class.html
 oauth2client.client.SignedJwtAssertionCredentials.from_json	oauth2client.client.SignedJwtAssertionCredentials-class.html#from_json
 oauth2client.client.OAuth2Credentials.authorize	oauth2client.client.OAuth2Credentials-class.html#authorize
+oauth2client.client.OAuth2Credentials.revoke	oauth2client.client.OAuth2Credentials-class.html#revoke
 oauth2client.client.OAuth2Credentials.set_store	oauth2client.client.OAuth2Credentials-class.html#set_store
 oauth2client.client.OAuth2Credentials.to_json	oauth2client.client.OAuth2Credentials-class.html#to_json
 oauth2client.client.OAuth2Credentials.apply	oauth2client.client.OAuth2Credentials-class.html#apply
@@ -549,11 +588,13 @@
 oauth2client.client.OAuth2Credentials._generate_refresh_request_headers	oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers
 oauth2client.client.Credentials._to_json	oauth2client.client.Credentials-class.html#_to_json
 oauth2client.client.SignedJwtAssertionCredentials.MAX_TOKEN_LIFETIME_SECS	oauth2client.client.SignedJwtAssertionCredentials-class.html#MAX_TOKEN_LIFETIME_SECS
-oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS	oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS
+oauth2client.client.SignedJwtAssertionCredentials._generate_assertion	oauth2client.client.SignedJwtAssertionCredentials-class.html#_generate_assertion
 oauth2client.client.OAuth2Credentials.__getstate__	oauth2client.client.OAuth2Credentials-class.html#__getstate__
 oauth2client.client.OAuth2Credentials.__setstate__	oauth2client.client.OAuth2Credentials-class.html#__setstate__
 oauth2client.client.OAuth2Credentials._refresh	oauth2client.client.OAuth2Credentials-class.html#_refresh
-oauth2client.client.SignedJwtAssertionCredentials._generate_assertion	oauth2client.client.SignedJwtAssertionCredentials-class.html#_generate_assertion
+oauth2client.client.AssertionCredentials._revoke	oauth2client.client.AssertionCredentials-class.html#_revoke
+oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS	oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS
+oauth2client.client.OAuth2Credentials._do_revoke	oauth2client.client.OAuth2Credentials-class.html#_do_revoke
 oauth2client.client.AssertionCredentials._generate_refresh_request_body	oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body
 oauth2client.client.OAuth2Credentials._updateFromCredential	oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential
 oauth2client.client.OAuth2Credentials._do_refresh_request	oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request
@@ -568,6 +609,7 @@
 oauth2client.client.Storage.put	oauth2client.client.Storage-class.html#put
 oauth2client.client.Storage.release_lock	oauth2client.client.Storage-class.html#release_lock
 oauth2client.client.Storage.delete	oauth2client.client.Storage-class.html#delete
+oauth2client.client.TokenRevokeError	oauth2client.client.TokenRevokeError-class.html
 oauth2client.client.UnknownClientSecretsFlowError	oauth2client.client.UnknownClientSecretsFlowError-class.html
 oauth2client.client.VerifyJwtTokenError	oauth2client.client.VerifyJwtTokenError-class.html
 oauth2client.clientsecrets.Error	oauth2client.clientsecrets.Error-class.html
@@ -611,19 +653,22 @@
 oauth2client.gce.AppAssertionCredentials	oauth2client.gce.AppAssertionCredentials-class.html
 oauth2client.gce.AppAssertionCredentials.from_json	oauth2client.gce.AppAssertionCredentials-class.html#from_json
 oauth2client.client.OAuth2Credentials.authorize	oauth2client.client.OAuth2Credentials-class.html#authorize
+oauth2client.client.OAuth2Credentials.revoke	oauth2client.client.OAuth2Credentials-class.html#revoke
 oauth2client.client.OAuth2Credentials.set_store	oauth2client.client.OAuth2Credentials-class.html#set_store
 oauth2client.client.OAuth2Credentials.to_json	oauth2client.client.OAuth2Credentials-class.html#to_json
 oauth2client.client.OAuth2Credentials.apply	oauth2client.client.OAuth2Credentials-class.html#apply
 oauth2client.client.Credentials.new_from_json	oauth2client.client.Credentials-class.html#new_from_json
 oauth2client.gce.AppAssertionCredentials.__init__	oauth2client.gce.AppAssertionCredentials-class.html#__init__
 oauth2client.client.OAuth2Credentials._generate_refresh_request_headers	oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers
+oauth2client.client.Credentials._to_json	oauth2client.client.Credentials-class.html#_to_json
 oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS	oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS
 oauth2client.client.OAuth2Credentials.__getstate__	oauth2client.client.OAuth2Credentials-class.html#__getstate__
 oauth2client.client.OAuth2Credentials.__setstate__	oauth2client.client.OAuth2Credentials-class.html#__setstate__
 oauth2client.gce.AppAssertionCredentials._refresh	oauth2client.gce.AppAssertionCredentials-class.html#_refresh
+oauth2client.client.AssertionCredentials._revoke	oauth2client.client.AssertionCredentials-class.html#_revoke
 oauth2client.client.AssertionCredentials._generate_assertion	oauth2client.client.AssertionCredentials-class.html#_generate_assertion
+oauth2client.client.OAuth2Credentials._do_revoke	oauth2client.client.OAuth2Credentials-class.html#_do_revoke
 oauth2client.client.AssertionCredentials._generate_refresh_request_body	oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body
-oauth2client.client.Credentials._to_json	oauth2client.client.Credentials-class.html#_to_json
 oauth2client.client.OAuth2Credentials._updateFromCredential	oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential
 oauth2client.client.OAuth2Credentials._do_refresh_request	oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request
 oauth2client.client.OAuth2Credentials.refresh	oauth2client.client.OAuth2Credentials-class.html#refresh
diff --git a/docs/epy/apiclient-module.html b/docs/epy/apiclient-module.html
index b0f8b9d..7ccfcf7 100644
--- a/docs/epy/apiclient-module.html
+++ b/docs/epy/apiclient-module.html
@@ -54,7 +54,7 @@
 <h1 class="epydoc">Package apiclient</h1><p class="nomargin-top"><span class="codelink"><a href="apiclient-pysrc.html">source&nbsp;code</a></span></p>
 <hr />
 <div class="fields">      <p><strong>Version:</strong>
-        1.0
+        1.1
       </p>
 </div><!-- ==================== SUBMODULES ==================== -->
 <a name="section-Submodules"></a>
@@ -75,7 +75,7 @@
 </tr>
   <tr><td class="summary">
   <ul class="nomargin">
-    <li> <strong class="uidlink"><a href="apiclient.discovery-module.html">apiclient.discovery</a></strong>: <em class="summary">Client for discovery based APIs</em>    </li>
+    <li> <strong class="uidlink"><a href="apiclient.discovery-module.html">apiclient.discovery</a></strong>: <em class="summary">Client for discovery based APIs.</em>    </li>
     <li> <strong class="uidlink"><a href="apiclient.errors-module.html">apiclient.errors</a></strong>: <em class="summary">Errors for the library.</em>    </li>
     <li> <strong class="uidlink"><a href="apiclient.ext-module.html">apiclient.ext</a></strong>    </li>
     <li> <strong class="uidlink"><a href="apiclient.http-module.html">apiclient.http</a></strong>: <em class="summary">Classes to encapsulate a single HTTP request.</em>    </li>
@@ -110,7 +110,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:30 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:22 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient-pysrc.html b/docs/epy/apiclient-pysrc.html
index 9a49f5a..660313f 100644
--- a/docs/epy/apiclient-pysrc.html
+++ b/docs/epy/apiclient-pysrc.html
@@ -52,7 +52,7 @@
 </table>
 <h1 class="epydoc">Source Code for <a href="apiclient-module.html">Package apiclient</a></h1>
 <pre class="py-src">
-<a name="L1"></a><tt class="py-lineno">1</tt>  <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt> <tt class="py-docstring">"1.0"</tt> </tt>
+<a name="L1"></a><tt class="py-lineno">1</tt>  <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt> <tt class="py-docstring">"1.1"</tt> </tt>
 <a name="L2"></a><tt class="py-lineno">2</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
@@ -83,7 +83,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:47 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.discovery-module.html b/docs/epy/apiclient.discovery-module.html
index 852dee5..7fe3c03 100644
--- a/docs/epy/apiclient.discovery-module.html
+++ b/docs/epy/apiclient.discovery-module.html
@@ -54,7 +54,7 @@
 <!-- ==================== MODULE DESCRIPTION ==================== -->
 <h1 class="epydoc">Module discovery</h1><p class="nomargin-top"><span class="codelink"><a href="apiclient.discovery-pysrc.html">source&nbsp;code</a></span></p>
 <pre class="literalblock">
-Client for discovery based APIs
+Client for discovery based APIs.
 
 A client library for Google's discovery based APIs.
 
@@ -81,11 +81,19 @@
     </table>
   </td>
 </tr>
-<tr>
+<tr class="private">
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a href="apiclient.discovery.Resource-class.html" class="summary-name">Resource</a><br />
+        <a href="apiclient.discovery.ResourceMethodParameters-class.html" class="summary-name" onclick="show_private();">ResourceMethodParameters</a><br />
+      Represents the parameters associated with a method.
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="apiclient.discovery.Resource-class.html" class="summary-name" onclick="show_private();">Resource</a><br />
       A class for interacting with a resource.
     </td>
   </tr>
@@ -124,25 +132,6 @@
       
     </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 href="apiclient.discovery-module.html#_add_query_parameter" class="summary-sig-name" onclick="show_private();">_add_query_parameter</a>(<span class="summary-sig-arg">url</span>,
-        <span class="summary-sig-arg">name</span>,
-        <span class="summary-sig-arg">value</span>)</span><br />
-      Adds a query parameter to a url.</td>
-          <td align="right" valign="top">
-            <span class="codelink"><a href="apiclient.discovery-pysrc.html#_add_query_parameter">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>
@@ -241,13 +230,88 @@
       
     </td>
   </tr>
-<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 href="apiclient.discovery-module.html#createMethod" class="summary-sig-name">createMethod</a>(<span class="summary-sig-arg">methodName</span>,
+          <td><span class="summary-sig"><a href="apiclient.discovery-module.html#_media_path_url_from_info" class="summary-sig-name" onclick="show_private();">_media_path_url_from_info</a>(<span class="summary-sig-arg">root_desc</span>,
+        <span class="summary-sig-arg">path_url</span>)</span><br />
+      Creates an absolute media path URL.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="apiclient.discovery-pysrc.html#_media_path_url_from_info">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 href="apiclient.discovery-module.html#_fix_up_parameters" class="summary-sig-name" onclick="show_private();">_fix_up_parameters</a>(<span class="summary-sig-arg">method_desc</span>,
+        <span class="summary-sig-arg">root_desc</span>,
+        <span class="summary-sig-arg">http_method</span>)</span><br />
+      Updates parameters of an API method with values specific to this library.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="apiclient.discovery-pysrc.html#_fix_up_parameters">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 href="apiclient.discovery-module.html#_fix_up_media_upload" class="summary-sig-name" onclick="show_private();">_fix_up_media_upload</a>(<span class="summary-sig-arg">method_desc</span>,
+        <span class="summary-sig-arg">root_desc</span>,
+        <span class="summary-sig-arg">path_url</span>,
+        <span class="summary-sig-arg">parameters</span>)</span><br />
+      Updates parameters of API by adding 'media_body' if supported by method.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="apiclient.discovery-pysrc.html#_fix_up_media_upload">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 href="apiclient.discovery-module.html#_fix_up_method_description" class="summary-sig-name" onclick="show_private();">_fix_up_method_description</a>(<span class="summary-sig-arg">method_desc</span>,
+        <span class="summary-sig-arg">root_desc</span>)</span><br />
+      Updates a method description in a discovery document.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="apiclient.discovery-pysrc.html#_fix_up_method_description">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 href="apiclient.discovery-module.html#createMethod" class="summary-sig-name" onclick="show_private();">createMethod</a>(<span class="summary-sig-arg">methodName</span>,
         <span class="summary-sig-arg">methodDesc</span>,
         <span class="summary-sig-arg">rootDesc</span>,
         <span class="summary-sig-arg">schema</span>)</span><br />
@@ -261,13 +325,13 @@
       
     </td>
   </tr>
-<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 href="apiclient.discovery-module.html#createNextMethod" class="summary-sig-name">createNextMethod</a>(<span class="summary-sig-arg">methodName</span>)</span><br />
+          <td><span class="summary-sig"><a href="apiclient.discovery-module.html#createNextMethod" class="summary-sig-name" onclick="show_private();">createNextMethod</a>(<span class="summary-sig-arg">methodName</span>)</span><br />
       Creates any _next methods for attaching to a Resource.</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="apiclient.discovery-pysrc.html#createNextMethod">source&nbsp;code</a></span>
@@ -296,260 +360,91 @@
     </table>
   </td>
 </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="copy"></a><span class="summary-name">copy</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="httplib2"></a><span class="summary-name">httplib2</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="logging"></a><span class="summary-name">logging</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="os"></a><span class="summary-name">os</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="re"></a><span class="summary-name">re</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="uritemplate"></a><span class="summary-name">uritemplate</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="urllib"></a><span class="summary-name">urllib</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="urlparse"></a><span class="summary-name">urlparse</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="mimeparse"></a><span class="summary-name">mimeparse</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="mimetypes"></a><span class="summary-name">mimetypes</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="parse_qsl"></a><span class="summary-name">parse_qsl</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="HttpError"></a><span class="summary-name">HttpError</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="InvalidJsonError"></a><span class="summary-name">InvalidJsonError</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="MediaUploadSizeError"></a><span class="summary-name">MediaUploadSizeError</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="UnacceptableMimeTypeError"></a><span class="summary-name">UnacceptableMimeTypeError</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="UnknownApiNameOrVersion"></a><span class="summary-name">UnknownApiNameOrVersion</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="UnknownFileType"></a><span class="summary-name">UnknownFileType</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="HttpRequest"></a><span class="summary-name">HttpRequest</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="MediaFileUpload"></a><span class="summary-name">MediaFileUpload</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="MediaUpload"></a><span class="summary-name">MediaUpload</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="JsonModel"></a><span class="summary-name">JsonModel</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="MediaModel"></a><span class="summary-name">MediaModel</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="RawModel"></a><span class="summary-name">RawModel</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="Schemas"></a><span class="summary-name">Schemas</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="MIMEMultipart"></a><span class="summary-name">MIMEMultipart</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="MIMENonMultipart"></a><span class="summary-name">MIMENonMultipart</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="positional"></a><span class="summary-name">positional</span>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type">&nbsp;</span>
-    </td><td class="summary">
-        <a name="simplejson"></a><span class="summary-name">simplejson</span>
-    </td>
-  </tr>
-<tr>
+<tr class="private">
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
         <a name="logger"></a><span class="summary-name">logger</span> = <code title="logging.getLogger(__name__)">logging.getLogger(__name__)</code>
     </td>
   </tr>
-<tr>
+<tr class="private">
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
         <a name="URITEMPLATE"></a><span class="summary-name">URITEMPLATE</span> = <code title="re.compile('{[^}]*}')">re.compile('{[^}]*}')</code>
     </td>
   </tr>
-<tr>
+<tr class="private">
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
         <a name="VARNAME"></a><span class="summary-name">VARNAME</span> = <code title="re.compile('[a-zA-Z0-9_-]+')">re.compile('[a-zA-Z0-9_-]+')</code>
     </td>
   </tr>
-<tr>
+<tr class="private">
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a href="apiclient.discovery-module.html#DISCOVERY_URI" class="summary-name">DISCOVERY_URI</a> = <code title="'https://www.googleapis.com/discovery/v1/apis/' '{api}/{apiVersion}/re\
+        <a href="apiclient.discovery-module.html#DISCOVERY_URI" class="summary-name" onclick="show_private();">DISCOVERY_URI</a> = <code title="'https://www.googleapis.com/discovery/v1/apis/' '{api}/{apiVersion}/re\
 st'">'https://www.googleapis.com/discovery/v1/apis/<code class="variable-ellipsis">...</code></code>
     </td>
   </tr>
-<tr>
+<tr class="private">
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
         <a name="DEFAULT_METHOD_DOC"></a><span class="summary-name">DEFAULT_METHOD_DOC</span> = <code title="'A description of how to use this function'">'A description of how to use this function'</code>
     </td>
   </tr>
-<tr>
+<tr class="private">
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a name="STACK_QUERY_PARAMETERS"></a><span class="summary-name">STACK_QUERY_PARAMETERS</span> = <code title="['trace', 'pp', 'userip', 'strict']">['trace', 'pp', 'userip', 'strict']</code>
+        <a name="HTTP_PAYLOAD_METHODS"></a><span class="summary-name">HTTP_PAYLOAD_METHODS</span> = <code title="frozenset(['PUT', 'POST', 'PATCH'])">frozenset(['PUT', 'POST', 'PATCH'])</code>
     </td>
   </tr>
-<tr>
+<tr class="private">
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a href="apiclient.discovery-module.html#RESERVED_WORDS" class="summary-name">RESERVED_WORDS</a> = <code title="['and', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', \
-'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'i\
-mport', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', '\
-return', 'try', 'while', 'body']">['and', 'assert', 'break', 'class', 'continue<code class="variable-ellipsis">...</code></code>
+        <a name="_MEDIA_SIZE_BIT_SHIFTS"></a><span class="summary-name">_MEDIA_SIZE_BIT_SHIFTS</span> = <code title="{'KB': 10, 'MB': 20, 'GB': 30, 'TB': 40}">{'KB': 10, 'MB': 20, 'GB': 30, 'TB': 40}</code>
     </td>
   </tr>
-<tr>
+<tr class="private">
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a href="apiclient.discovery-module.html#MULTIPLIERS" class="summary-name">MULTIPLIERS</a> = <code title="{&quot;KB&quot;: 2** 10, &quot;MB&quot;: 2** 20, &quot;GB&quot;: 2** 30, &quot;TB&quot;: 2** 40,}">{&quot;KB&quot;: 2** 10, &quot;MB&quot;: 2** 20, &quot;GB&quot;: 2** 30, &quot;TB&quot;:<code class="variable-ellipsis">...</code></code>
+        <a href="apiclient.discovery-module.html#BODY_PARAMETER_DEFAULT_VALUE" class="summary-name" onclick="show_private();">BODY_PARAMETER_DEFAULT_VALUE</a> = <code title="{'description': 'The request body.', 'type': 'object', 'required': Tru\
+e,}">{'description': 'The request bo<code class="variable-ellipsis">...</code></code>
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="apiclient.discovery-module.html#MEDIA_BODY_PARAMETER_DEFAULT_VALUE" class="summary-name" onclick="show_private();">MEDIA_BODY_PARAMETER_DEFAULT_VALUE</a> = <code title="{'description':('The filename of the media request body, or an instanc\
+e ' 'of a MediaUpload object.'), 'type': 'string', 'required': False,}">{'description':('The file<code class="variable-ellipsis">...</code></code>
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="apiclient.discovery-module.html#STACK_QUERY_PARAMETERS" class="summary-name" onclick="show_private();">STACK_QUERY_PARAMETERS</a> = <code title="frozenset(['trace', 'pp', 'userip', 'strict'])">frozenset(['trace', 'pp', 'userip', '<code class="variable-ellipsis">...</code></code>
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="apiclient.discovery-module.html#STACK_QUERY_PARAMETER_DEFAULT_VALUE" class="summary-name" onclick="show_private();">STACK_QUERY_PARAMETER_DEFAULT_VALUE</a> = <code title="{'type': 'string', 'location': 'query'}">{'type': 'string', 'loca<code class="variable-ellipsis">...</code></code>
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="RESERVED_WORDS"></a><span class="summary-name">RESERVED_WORDS</span> = <code title="frozenset(['body'])">frozenset(['body'])</code>
     </td>
   </tr>
 </table>
@@ -599,40 +494,6 @@
   </dl>
 </td></tr></table>
 </div>
-<a name="_add_query_parameter"></a>
-<div class="private">
-<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">_add_query_parameter</span>(<span class="sig-arg">url</span>,
-        <span class="sig-arg">name</span>,
-        <span class="sig-arg">value</span>)</span>
-  </h3>
-  </td><td align="right" valign="top"
-    ><span class="codelink"><a href="apiclient.discovery-pysrc.html#_add_query_parameter">source&nbsp;code</a></span>&nbsp;
-    </td>
-  </tr></table>
-  
-  <pre class="literalblock">
-Adds a query parameter to a url.
-
-Replaces the current value if it already exists in the URL.
-
-Args:
-  url: string, url to add the query parameter to.
-  name: string, query parameter name.
-  value: string, query parameter value.
-
-Returns:
-  Updated query parameter. Does not update the url if value is None.
-
-</pre>
-  <dl class="fields">
-  </dl>
-</td></tr></table>
-</div>
 <a name="key2param"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -831,8 +692,189 @@
   </dl>
 </td></tr></table>
 </div>
+<a name="_media_path_url_from_info"></a>
+<div class="private">
+<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">_media_path_url_from_info</span>(<span class="sig-arg">root_desc</span>,
+        <span class="sig-arg">path_url</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="apiclient.discovery-pysrc.html#_media_path_url_from_info">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Creates an absolute media path URL.
+
+Constructed using the API root URI and service path from the discovery
+document and the relative path for the API method.
+
+Args:
+  root_desc: Dictionary; the entire original deserialized discovery document.
+  path_url: String; the relative URL for the API method. Relative to the API
+      root, which is specified in the discovery document.
+
+Returns:
+  String; the absolute URI for media upload for the API method.
+
+</pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="_fix_up_parameters"></a>
+<div class="private">
+<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">_fix_up_parameters</span>(<span class="sig-arg">method_desc</span>,
+        <span class="sig-arg">root_desc</span>,
+        <span class="sig-arg">http_method</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="apiclient.discovery-pysrc.html#_fix_up_parameters">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Updates parameters of an API method with values specific to this library.
+
+Specifically, adds whatever global parameters are specified by the API to the
+parameters for the individual method. Also adds parameters which don't
+appear in the discovery document, but are available to all discovery based
+APIs (these are listed in STACK_QUERY_PARAMETERS).
+
+SIDE EFFECTS: This updates the parameters dictionary object in the method
+description.
+
+Args:
+  method_desc: Dictionary with metadata describing an API method. Value comes
+      from the dictionary of methods stored in the 'methods' key in the
+      deserialized discovery document.
+  root_desc: Dictionary; the entire original deserialized discovery document.
+  http_method: String; the HTTP method used to call the API method described
+      in method_desc.
+
+Returns:
+  The updated Dictionary stored in the 'parameters' key of the method
+      description dictionary.
+
+</pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="_fix_up_media_upload"></a>
+<div class="private">
+<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">_fix_up_media_upload</span>(<span class="sig-arg">method_desc</span>,
+        <span class="sig-arg">root_desc</span>,
+        <span class="sig-arg">path_url</span>,
+        <span class="sig-arg">parameters</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="apiclient.discovery-pysrc.html#_fix_up_media_upload">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Updates parameters of API by adding 'media_body' if supported by method.
+
+SIDE EFFECTS: If the method supports media upload and has a required body,
+sets body to be optional (required=False) instead. Also, if there is a
+'mediaUpload' in the method description, adds 'media_upload' key to
+parameters.
+
+Args:
+  method_desc: Dictionary with metadata describing an API method. Value comes
+      from the dictionary of methods stored in the 'methods' key in the
+      deserialized discovery document.
+  root_desc: Dictionary; the entire original deserialized discovery document.
+  path_url: String; the relative URL for the API method. Relative to the API
+      root, which is specified in the discovery document.
+  parameters: A dictionary describing method parameters for method described
+      in method_desc.
+
+Returns:
+  Triple (accept, max_size, media_path_url) where:
+    - accept is a list of strings representing what content types are
+      accepted for media upload. Defaults to empty list if not in the
+      discovery document.
+    - max_size is a long representing the max size in bytes allowed for a
+      media upload. Defaults to 0L if not in the discovery document.
+    - media_path_url is a String; the absolute URI for media upload for the
+      API method. Constructed using the API root URI and service path from
+      the discovery document and the relative path for the API method. If
+      media upload is not supported, this is None.
+
+</pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="_fix_up_method_description"></a>
+<div class="private">
+<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">_fix_up_method_description</span>(<span class="sig-arg">method_desc</span>,
+        <span class="sig-arg">root_desc</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="apiclient.discovery-pysrc.html#_fix_up_method_description">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Updates a method description in a discovery document.
+
+SIDE EFFECTS: Changes the parameters dictionary in the method description with
+extra parameters which are used locally.
+
+Args:
+  method_desc: Dictionary with metadata describing an API method. Value comes
+      from the dictionary of methods stored in the 'methods' key in the
+      deserialized discovery document.
+  root_desc: Dictionary; the entire original deserialized discovery document.
+
+Returns:
+  Tuple (path_url, http_method, method_id, accept, max_size, media_path_url)
+  where:
+    - path_url is a String; the relative URL for the API method. Relative to
+      the API root, which is specified in the discovery document.
+    - http_method is a String; the HTTP method used to call the API method
+      described in the method description.
+    - method_id is a String; the name of the RPC method associated with the
+      API method, and is in the method description in the 'id' key.
+    - accept is a list of strings representing what content types are
+      accepted for media upload. Defaults to empty list if not in the
+      discovery document.
+    - max_size is a long representing the max size in bytes allowed for a
+      media upload. Defaults to 0L if not in the discovery document.
+    - media_path_url is a String; the absolute URI for media upload for the
+      API method. Constructed using the API root URI and service path from
+      the discovery document and the relative path for the API method. If
+      media upload is not supported, this is None.
+
+</pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="createMethod"></a>
-<div>
+<div class="private">
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
@@ -864,7 +906,7 @@
 </td></tr></table>
 </div>
 <a name="createNextMethod"></a>
-<div>
+<div class="private">
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
@@ -910,7 +952,7 @@
 </tr>
 </table>
 <a name="DISCOVERY_URI"></a>
-<div>
+<div class="private">
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
@@ -928,40 +970,75 @@
   </dl>
 </td></tr></table>
 </div>
-<a name="RESERVED_WORDS"></a>
-<div>
+<a name="BODY_PARAMETER_DEFAULT_VALUE"></a>
+<div class="private">
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
-  <h3 class="epydoc">RESERVED_WORDS</h3>
+  <h3 class="epydoc">BODY_PARAMETER_DEFAULT_VALUE</h3>
   
   <dl class="fields">
   </dl>
   <dl class="fields">
     <dt>Value:</dt>
       <dd><table><tr><td><pre class="variable">
-['and', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', <span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'i<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-mport', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', '<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-return', 'try', 'while', 'body']
+{'description': 'The request body.', 'type': 'object', 'required': Tru<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+e,}
 </pre></td></tr></table>
 </dd>
   </dl>
 </td></tr></table>
 </div>
-<a name="MULTIPLIERS"></a>
-<div>
+<a name="MEDIA_BODY_PARAMETER_DEFAULT_VALUE"></a>
+<div class="private">
 <table class="details" border="1" cellpadding="3"
        cellspacing="0" width="100%" bgcolor="white">
 <tr><td>
-  <h3 class="epydoc">MULTIPLIERS</h3>
+  <h3 class="epydoc">MEDIA_BODY_PARAMETER_DEFAULT_VALUE</h3>
   
   <dl class="fields">
   </dl>
   <dl class="fields">
     <dt>Value:</dt>
       <dd><table><tr><td><pre class="variable">
-{&quot;KB&quot;: 2** 10, &quot;MB&quot;: 2** 20, &quot;GB&quot;: 2** 30, &quot;TB&quot;: 2** 40,}
+{'description':('The filename of the media request body, or an instanc<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+e ' 'of a MediaUpload object.'), 'type': 'string', 'required': False,}
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="STACK_QUERY_PARAMETERS"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">STACK_QUERY_PARAMETERS</h3>
+  
+  <dl class="fields">
+  </dl>
+  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+frozenset(['trace', 'pp', 'userip', 'strict'])
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="STACK_QUERY_PARAMETER_DEFAULT_VALUE"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">STACK_QUERY_PARAMETER_DEFAULT_VALUE</h3>
+  
+  <dl class="fields">
+  </dl>
+  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+{'type': 'string', 'location': 'query'}
 </pre></td></tr></table>
 </dd>
   </dl>
@@ -991,7 +1068,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.discovery-pysrc.html b/docs/epy/apiclient.discovery-pysrc.html
index d6772a9..5bef416 100644
--- a/docs/epy/apiclient.discovery-pysrc.html
+++ b/docs/epy/apiclient.discovery-pysrc.html
@@ -67,7 +67,7 @@
 <a name="L12"></a><tt class="py-lineno"> 12</tt>  <tt class="py-line"><tt class="py-comment"># See the License for the specific language governing permissions and</tt> </tt>
 <a name="L13"></a><tt class="py-lineno"> 13</tt>  <tt class="py-line"><tt class="py-comment"># limitations under the License.</tt> </tt>
 <a name="L14"></a><tt class="py-lineno"> 14</tt>  <tt class="py-line"> </tt>
-<a name="L15"></a><tt class="py-lineno"> 15</tt>  <tt class="py-line"><tt class="py-docstring">"""Client for discovery based APIs</tt> </tt>
+<a name="L15"></a><tt class="py-lineno"> 15</tt>  <tt class="py-line"><tt class="py-docstring">"""Client for discovery based APIs.</tt> </tt>
 <a name="L16"></a><tt class="py-lineno"> 16</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
 <a name="L17"></a><tt class="py-lineno"> 17</tt>  <tt class="py-line"><tt class="py-docstring">A client library for Google's discovery based APIs.</tt> </tt>
 <a name="L18"></a><tt class="py-lineno"> 18</tt>  <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
@@ -75,934 +75,1104 @@
 <a name="L20"></a><tt class="py-lineno"> 20</tt>  <tt class="py-line"><tt class="py-name">__author__</tt> <tt class="py-op">=</tt> <tt class="py-string">'jcgregorio@google.com (Joe Gregorio)'</tt> </tt>
 <a name="L21"></a><tt class="py-lineno"> 21</tt>  <tt class="py-line"><tt class="py-name">__all__</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> </tt>
 <a name="L22"></a><tt class="py-lineno"> 22</tt>  <tt class="py-line">    <tt class="py-string">'build'</tt><tt class="py-op">,</tt> </tt>
-<a name="L23"></a><tt class="py-lineno"> 23</tt>  <tt class="py-line">    <tt class="py-string">'build_from_document'</tt> </tt>
+<a name="L23"></a><tt class="py-lineno"> 23</tt>  <tt class="py-line">    <tt class="py-string">'build_from_document'</tt><tt class="py-op">,</tt> </tt>
 <a name="L24"></a><tt class="py-lineno"> 24</tt>  <tt class="py-line">    <tt class="py-string">'fix_method_name'</tt><tt class="py-op">,</tt> </tt>
-<a name="L25"></a><tt class="py-lineno"> 25</tt>  <tt class="py-line">    <tt class="py-string">'key2param'</tt> </tt>
+<a name="L25"></a><tt class="py-lineno"> 25</tt>  <tt class="py-line">    <tt class="py-string">'key2param'</tt><tt class="py-op">,</tt> </tt>
 <a name="L26"></a><tt class="py-lineno"> 26</tt>  <tt class="py-line">    <tt class="py-op">]</tt> </tt>
 <a name="L27"></a><tt class="py-lineno"> 27</tt>  <tt class="py-line"> </tt>
-<a name="L28"></a><tt class="py-lineno"> 28</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">copy</tt> </tt>
-<a name="L29"></a><tt class="py-lineno"> 29</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">httplib2</tt> </tt>
-<a name="L30"></a><tt class="py-lineno"> 30</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
-<a name="L31"></a><tt class="py-lineno"> 31</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
-<a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">re</tt> </tt>
-<a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">uritemplate</tt> </tt>
-<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">urllib</tt> </tt>
-<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">urlparse</tt> </tt>
-<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Module apiclient.mimeparse=apiclient.mimeparse-module.html"><a title="apiclient.mimeparse" class="py-name" href="#" onclick="return doclink('link-0', 'mimeparse', 'link-0');">mimeparse</a></tt> </tt>
-<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">mimetypes</tt> </tt>
-<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"> </tt>
-<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt class="py-name">urlparse</tt> <tt class="py-keyword">import</tt> <tt class="py-name">parse_qsl</tt> </tt>
-<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
-<a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt class="py-name">cgi</tt> <tt class="py-keyword">import</tt> <tt class="py-name">parse_qsl</tt> </tt>
-<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"> </tt>
-<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-1" class="py-name" targets="Package apiclient=apiclient-module.html"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-1', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-2" class="py-name" targets="Module apiclient.errors=apiclient.errors-module.html"><a title="apiclient.errors" class="py-name" href="#" onclick="return doclink('link-2', 'errors', 'link-2');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Class apiclient.errors.HttpError=apiclient.errors.HttpError-class.html"><a title="apiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-3', 'HttpError', 'link-3');">HttpError</a></tt> </tt>
-<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-4', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="apiclient.errors" class="py-name" href="#" onclick="return doclink('link-5', 'errors', 'link-2');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-6" class="py-name" targets="Class apiclient.errors.InvalidJsonError=apiclient.errors.InvalidJsonError-class.html"><a title="apiclient.errors.InvalidJsonError" class="py-name" href="#" onclick="return doclink('link-6', 'InvalidJsonError', 'link-6');">InvalidJsonError</a></tt> </tt>
-<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-7" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-7', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-8" class="py-name"><a title="apiclient.errors" class="py-name" href="#" onclick="return doclink('link-8', 'errors', 'link-2');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-9" class="py-name" targets="Class apiclient.errors.MediaUploadSizeError=apiclient.errors.MediaUploadSizeError-class.html"><a title="apiclient.errors.MediaUploadSizeError" class="py-name" href="#" onclick="return doclink('link-9', 'MediaUploadSizeError', 'link-9');">MediaUploadSizeError</a></tt> </tt>
-<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-10" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-10', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-11" class="py-name"><a title="apiclient.errors" class="py-name" href="#" onclick="return doclink('link-11', 'errors', 'link-2');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-12" class="py-name" targets="Class apiclient.errors.UnacceptableMimeTypeError=apiclient.errors.UnacceptableMimeTypeError-class.html"><a title="apiclient.errors.UnacceptableMimeTypeError" class="py-name" href="#" onclick="return doclink('link-12', 'UnacceptableMimeTypeError', 'link-12');">UnacceptableMimeTypeError</a></tt> </tt>
-<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-13" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-13', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name"><a title="apiclient.errors" class="py-name" href="#" onclick="return doclink('link-14', 'errors', 'link-2');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-15" class="py-name" targets="Class apiclient.errors.UnknownApiNameOrVersion=apiclient.errors.UnknownApiNameOrVersion-class.html"><a title="apiclient.errors.UnknownApiNameOrVersion" class="py-name" href="#" onclick="return doclink('link-15', 'UnknownApiNameOrVersion', 'link-15');">UnknownApiNameOrVersion</a></tt> </tt>
-<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-16" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-16', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name"><a title="apiclient.errors" class="py-name" href="#" onclick="return doclink('link-17', 'errors', 'link-2');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-18" class="py-name" targets="Class apiclient.errors.UnknownFileType=apiclient.errors.UnknownFileType-class.html"><a title="apiclient.errors.UnknownFileType" class="py-name" href="#" onclick="return doclink('link-18', 'UnknownFileType', 'link-18');">UnknownFileType</a></tt> </tt>
-<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-19" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-19', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-20" class="py-name" targets="Module apiclient.http=apiclient.http-module.html,Method oauth2client.appengine.OAuth2Decorator.http()=oauth2client.appengine.OAuth2Decorator-class.html#http"><a title="apiclient.http
+<a name="L28"></a><tt class="py-lineno"> 28</tt>  <tt class="py-line"> </tt>
+<a name="L29"></a><tt class="py-lineno"> 29</tt>  <tt class="py-line"><tt class="py-comment"># Standard library imports</tt> </tt>
+<a name="L30"></a><tt class="py-lineno"> 30</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">copy</tt> </tt>
+<a name="L31"></a><tt class="py-lineno"> 31</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">email</tt><tt class="py-op">.</tt><tt class="py-name">mime</tt><tt class="py-op">.</tt><tt class="py-name">multipart</tt> <tt class="py-keyword">import</tt> <tt class="py-name">MIMEMultipart</tt> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">email</tt><tt class="py-op">.</tt><tt class="py-name">mime</tt><tt class="py-op">.</tt><tt class="py-name">nonmultipart</tt> <tt class="py-keyword">import</tt> <tt class="py-name">MIMENonMultipart</tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">keyword</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">mimetypes</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">re</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">urllib</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">urlparse</tt> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt class="py-name">urlparse</tt> <tt class="py-keyword">import</tt> <tt class="py-name">parse_qsl</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt class="py-name">cgi</tt> <tt class="py-keyword">import</tt> <tt class="py-name">parse_qsl</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line"> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line"><tt class="py-comment"># Third-party imports</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">httplib2</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Module apiclient.mimeparse=apiclient.mimeparse-module.html"><a title="apiclient.mimeparse" class="py-name" href="#" onclick="return doclink('link-0', 'mimeparse', 'link-0');">mimeparse</a></tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">uritemplate</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line"><tt class="py-comment"># Local imports</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-1" class="py-name" targets="Package apiclient=apiclient-module.html"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-1', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-2" class="py-name" targets="Module apiclient.errors=apiclient.errors-module.html"><a title="apiclient.errors" class="py-name" href="#" onclick="return doclink('link-2', 'errors', 'link-2');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Class apiclient.errors.HttpError=apiclient.errors.HttpError-class.html"><a title="apiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-3', 'HttpError', 'link-3');">HttpError</a></tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-4', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="apiclient.errors" class="py-name" href="#" onclick="return doclink('link-5', 'errors', 'link-2');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-6" class="py-name" targets="Class apiclient.errors.InvalidJsonError=apiclient.errors.InvalidJsonError-class.html"><a title="apiclient.errors.InvalidJsonError" class="py-name" href="#" onclick="return doclink('link-6', 'InvalidJsonError', 'link-6');">InvalidJsonError</a></tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-7" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-7', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-8" class="py-name"><a title="apiclient.errors" class="py-name" href="#" onclick="return doclink('link-8', 'errors', 'link-2');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-9" class="py-name" targets="Class apiclient.errors.MediaUploadSizeError=apiclient.errors.MediaUploadSizeError-class.html"><a title="apiclient.errors.MediaUploadSizeError" class="py-name" href="#" onclick="return doclink('link-9', 'MediaUploadSizeError', 'link-9');">MediaUploadSizeError</a></tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-10" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-10', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-11" class="py-name"><a title="apiclient.errors" class="py-name" href="#" onclick="return doclink('link-11', 'errors', 'link-2');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-12" class="py-name" targets="Class apiclient.errors.UnacceptableMimeTypeError=apiclient.errors.UnacceptableMimeTypeError-class.html"><a title="apiclient.errors.UnacceptableMimeTypeError" class="py-name" href="#" onclick="return doclink('link-12', 'UnacceptableMimeTypeError', 'link-12');">UnacceptableMimeTypeError</a></tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-13" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-13', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name"><a title="apiclient.errors" class="py-name" href="#" onclick="return doclink('link-14', 'errors', 'link-2');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-15" class="py-name" targets="Class apiclient.errors.UnknownApiNameOrVersion=apiclient.errors.UnknownApiNameOrVersion-class.html"><a title="apiclient.errors.UnknownApiNameOrVersion" class="py-name" href="#" onclick="return doclink('link-15', 'UnknownApiNameOrVersion', 'link-15');">UnknownApiNameOrVersion</a></tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-16" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-16', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name"><a title="apiclient.errors" class="py-name" href="#" onclick="return doclink('link-17', 'errors', 'link-2');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-18" class="py-name" targets="Class apiclient.errors.UnknownFileType=apiclient.errors.UnknownFileType-class.html"><a title="apiclient.errors.UnknownFileType" class="py-name" href="#" onclick="return doclink('link-18', 'UnknownFileType', 'link-18');">UnknownFileType</a></tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-19" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-19', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-20" class="py-name" targets="Module apiclient.http=apiclient.http-module.html,Method oauth2client.appengine.OAuth2Decorator.http()=oauth2client.appengine.OAuth2Decorator-class.html#http"><a title="apiclient.http
 oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-20', 'http', 'link-20');">http</a></tt> <tt class="py-keyword">import</tt> <tt id="link-21" class="py-name" targets="Class apiclient.http.HttpRequest=apiclient.http.HttpRequest-class.html"><a title="apiclient.http.HttpRequest" class="py-name" href="#" onclick="return doclink('link-21', 'HttpRequest', 'link-21');">HttpRequest</a></tt> </tt>
-<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-22" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-22', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-23" class="py-name"><a title="apiclient.http
+<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-22" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-22', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-23" class="py-name"><a title="apiclient.http
 oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-23', 'http', 'link-20');">http</a></tt> <tt class="py-keyword">import</tt> <tt id="link-24" class="py-name" targets="Class apiclient.http.MediaFileUpload=apiclient.http.MediaFileUpload-class.html"><a title="apiclient.http.MediaFileUpload" class="py-name" href="#" onclick="return doclink('link-24', 'MediaFileUpload', 'link-24');">MediaFileUpload</a></tt> </tt>
-<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-25" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-25', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-26" class="py-name"><a title="apiclient.http
+<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-25" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-25', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-26" class="py-name"><a title="apiclient.http
 oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-26', 'http', 'link-20');">http</a></tt> <tt class="py-keyword">import</tt> <tt id="link-27" class="py-name" targets="Class apiclient.http.MediaUpload=apiclient.http.MediaUpload-class.html"><a title="apiclient.http.MediaUpload" class="py-name" href="#" onclick="return doclink('link-27', 'MediaUpload', 'link-27');">MediaUpload</a></tt> </tt>
-<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-28" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-28', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Module apiclient.model=apiclient.model-module.html"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-29', 'model', 'link-29');">model</a></tt> <tt class="py-keyword">import</tt> <tt id="link-30" class="py-name" targets="Class apiclient.model.JsonModel=apiclient.model.JsonModel-class.html"><a title="apiclient.model.JsonModel" class="py-name" href="#" onclick="return doclink('link-30', 'JsonModel', 'link-30');">JsonModel</a></tt> </tt>
-<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-31" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-31', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-32" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-32', 'model', 'link-29');">model</a></tt> <tt class="py-keyword">import</tt> <tt id="link-33" class="py-name" targets="Class apiclient.model.MediaModel=apiclient.model.MediaModel-class.html"><a title="apiclient.model.MediaModel" class="py-name" href="#" onclick="return doclink('link-33', 'MediaModel', 'link-33');">MediaModel</a></tt> </tt>
-<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-34" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-34', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-35', 'model', 'link-29');">model</a></tt> <tt class="py-keyword">import</tt> <tt id="link-36" class="py-name" targets="Class apiclient.model.RawModel=apiclient.model.RawModel-class.html"><a title="apiclient.model.RawModel" class="py-name" href="#" onclick="return doclink('link-36', 'RawModel', 'link-36');">RawModel</a></tt> </tt>
-<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-37" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-37', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-38" class="py-name" targets="Module apiclient.schema=apiclient.schema-module.html"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-38', 'schema', 'link-38');">schema</a></tt> <tt class="py-keyword">import</tt> <tt id="link-39" class="py-name" targets="Class apiclient.schema.Schemas=apiclient.schema.Schemas-class.html"><a title="apiclient.schema.Schemas" class="py-name" href="#" onclick="return doclink('link-39', 'Schemas', 'link-39');">Schemas</a></tt> </tt>
-<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">email</tt><tt class="py-op">.</tt><tt class="py-name">mime</tt><tt class="py-op">.</tt><tt class="py-name">multipart</tt> <tt class="py-keyword">import</tt> <tt class="py-name">MIMEMultipart</tt> </tt>
-<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">email</tt><tt class="py-op">.</tt><tt class="py-name">mime</tt><tt class="py-op">.</tt><tt class="py-name">nonmultipart</tt> <tt class="py-keyword">import</tt> <tt class="py-name">MIMENonMultipart</tt> </tt>
-<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-40" class="py-name" targets="Package oauth2client=oauth2client-module.html"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-40', 'oauth2client', 'link-40');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-41" class="py-name" targets="Module oauth2client.util=oauth2client.util-module.html"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-41', 'util', 'link-41');">util</a></tt> <tt class="py-keyword">import</tt> <tt id="link-42" class="py-name" targets="Function oauth2client.util.positional()=oauth2client.util-module.html#positional"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-42', 'positional', 'link-42');">positional</a></tt> </tt>
-<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-43" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-43', 'oauth2client', 'link-40');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-44" class="py-name" targets="Module oauth2client.anyjson=oauth2client.anyjson-module.html"><a title="oauth2client.anyjson" class="py-name" href="#" onclick="return doclink('link-44', 'anyjson', 'link-44');">anyjson</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">simplejson</tt> </tt>
-<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line"> </tt>
-<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line"><tt class="py-comment"># The client library requires a version of httplib2 that supports RETRIES.</tt> </tt>
-<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"><tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">RETRIES</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line"> </tt>
-<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line"><tt id="link-45" class="py-name" targets="Variable apiclient.discovery.logger=apiclient.discovery-module.html#logger,Variable oauth2client.appengine.logger=oauth2client.appengine-module.html#logger,Variable oauth2client.client.logger=oauth2client.client-module.html#logger,Variable oauth2client.crypt.logger=oauth2client.crypt-module.html#logger,Variable oauth2client.gce.logger=oauth2client.gce-module.html#logger,Variable oauth2client.locked_file.logger=oauth2client.locked_file-module.html#logger,Variable oauth2client.multistore_file.logger=oauth2client.multistore_file-module.html#logger,Variable oauth2client.util.logger=oauth2client.util-module.html#logger"><a title="apiclient.discovery.logger
-oauth2client.appengine.logger
-oauth2client.client.logger
-oauth2client.crypt.logger
-oauth2client.gce.logger
-oauth2client.locked_file.logger
-oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-45', 'logger', 'link-45');">logger</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
-<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line"> </tt>
-<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line"><tt id="link-46" class="py-name" targets="Variable apiclient.discovery.URITEMPLATE=apiclient.discovery-module.html#URITEMPLATE"><a title="apiclient.discovery.URITEMPLATE" class="py-name" href="#" onclick="return doclink('link-46', 'URITEMPLATE', 'link-46');">URITEMPLATE</a></tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'{[^}]*}'</tt><tt class="py-op">)</tt> </tt>
-<a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line"><tt id="link-47" class="py-name" targets="Variable apiclient.discovery.VARNAME=apiclient.discovery-module.html#VARNAME"><a title="apiclient.discovery.VARNAME" class="py-name" href="#" onclick="return doclink('link-47', 'VARNAME', 'link-47');">VARNAME</a></tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'[a-zA-Z0-9_-]+'</tt><tt class="py-op">)</tt> </tt>
-<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line"><tt id="link-48" class="py-name" targets="Variable apiclient.discovery.DISCOVERY_URI=apiclient.discovery-module.html#DISCOVERY_URI"><a title="apiclient.discovery.DISCOVERY_URI" class="py-name" href="#" onclick="return doclink('link-48', 'DISCOVERY_URI', 'link-48');">DISCOVERY_URI</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'https://www.googleapis.com/discovery/v1/apis/'</tt> </tt>
-<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line">  <tt class="py-string">'{api}/{apiVersion}/rest'</tt><tt class="py-op">)</tt> </tt>
-<a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line"><tt id="link-49" class="py-name" targets="Variable apiclient.discovery.DEFAULT_METHOD_DOC=apiclient.discovery-module.html#DEFAULT_METHOD_DOC"><a title="apiclient.discovery.DEFAULT_METHOD_DOC" class="py-name" href="#" onclick="return doclink('link-49', 'DEFAULT_METHOD_DOC', 'link-49');">DEFAULT_METHOD_DOC</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'A description of how to use this function'</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-28" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-28', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Module apiclient.model=apiclient.model-module.html"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-29', 'model', 'link-29');">model</a></tt> <tt class="py-keyword">import</tt> <tt id="link-30" class="py-name" targets="Class apiclient.model.JsonModel=apiclient.model.JsonModel-class.html"><a title="apiclient.model.JsonModel" class="py-name" href="#" onclick="return doclink('link-30', 'JsonModel', 'link-30');">JsonModel</a></tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-31" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-31', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-32" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-32', 'model', 'link-29');">model</a></tt> <tt class="py-keyword">import</tt> <tt id="link-33" class="py-name" targets="Class apiclient.model.MediaModel=apiclient.model.MediaModel-class.html"><a title="apiclient.model.MediaModel" class="py-name" href="#" onclick="return doclink('link-33', 'MediaModel', 'link-33');">MediaModel</a></tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-34" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-34', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-35', 'model', 'link-29');">model</a></tt> <tt class="py-keyword">import</tt> <tt id="link-36" class="py-name" targets="Class apiclient.model.RawModel=apiclient.model.RawModel-class.html"><a title="apiclient.model.RawModel" class="py-name" href="#" onclick="return doclink('link-36', 'RawModel', 'link-36');">RawModel</a></tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-37" class="py-name"><a title="apiclient" class="py-name" href="#" onclick="return doclink('link-37', 'apiclient', 'link-1');">apiclient</a></tt><tt class="py-op">.</tt><tt id="link-38" class="py-name" targets="Module apiclient.schema=apiclient.schema-module.html"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-38', 'schema', 'link-38');">schema</a></tt> <tt class="py-keyword">import</tt> <tt id="link-39" class="py-name" targets="Class apiclient.schema.Schemas=apiclient.schema.Schemas-class.html"><a title="apiclient.schema.Schemas" class="py-name" href="#" onclick="return doclink('link-39', 'Schemas', 'link-39');">Schemas</a></tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-40" class="py-name" targets="Package oauth2client=oauth2client-module.html"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-40', 'oauth2client', 'link-40');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-41" class="py-name" targets="Module oauth2client.anyjson=oauth2client.anyjson-module.html"><a title="oauth2client.anyjson" class="py-name" href="#" onclick="return doclink('link-41', 'anyjson', 'link-41');">anyjson</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">simplejson</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-42" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-42', 'oauth2client', 'link-40');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Module oauth2client.util=oauth2client.util-module.html"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-43', 'util', 'link-43');">util</a></tt> <tt class="py-keyword">import</tt> <tt id="link-44" class="py-name" targets="Function oauth2client.util._add_query_parameter()=oauth2client.util-module.html#_add_query_parameter"><a title="oauth2client.util._add_query_parameter" class="py-name" href="#" onclick="return doclink('link-44', '_add_query_parameter', 'link-44');">_add_query_parameter</a></tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-45" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-45', 'oauth2client', 'link-40');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-46', 'util', 'link-43');">util</a></tt> <tt class="py-keyword">import</tt> <tt id="link-47" class="py-name" targets="Function oauth2client.util.positional()=oauth2client.util-module.html#positional"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-47', 'positional', 'link-47');">positional</a></tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line"> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line"> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line"><tt class="py-comment"># The client library requires a version of httplib2 that supports RETRIES.</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line"><tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">RETRIES</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
 <a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line"> </tt>
-<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line"><tt class="py-comment"># Parameters accepted by the stack, but not visible via discovery.</tt> </tt>
-<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"><tt id="link-50" class="py-name" targets="Variable apiclient.discovery.STACK_QUERY_PARAMETERS=apiclient.discovery-module.html#STACK_QUERY_PARAMETERS"><a title="apiclient.discovery.STACK_QUERY_PARAMETERS" class="py-name" href="#" onclick="return doclink('link-50', 'STACK_QUERY_PARAMETERS', 'link-50');">STACK_QUERY_PARAMETERS</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">'trace'</tt><tt class="py-op">,</tt> <tt class="py-string">'pp'</tt><tt class="py-op">,</tt> <tt class="py-string">'userip'</tt><tt class="py-op">,</tt> <tt class="py-string">'strict'</tt><tt class="py-op">]</tt> </tt>
-<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line"> </tt>
-<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line"><tt class="py-comment"># Python reserved words.</tt> </tt>
-<a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line"><tt id="link-51" class="py-name" targets="Variable apiclient.discovery.RESERVED_WORDS=apiclient.discovery-module.html#RESERVED_WORDS"><a title="apiclient.discovery.RESERVED_WORDS" class="py-name" href="#" onclick="return doclink('link-51', 'RESERVED_WORDS', 'link-51');">RESERVED_WORDS</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">'and'</tt><tt class="py-op">,</tt> <tt class="py-string">'assert'</tt><tt class="py-op">,</tt> <tt class="py-string">'break'</tt><tt class="py-op">,</tt> <tt class="py-string">'class'</tt><tt class="py-op">,</tt> <tt class="py-string">'continue'</tt><tt class="py-op">,</tt> <tt class="py-string">'def'</tt><tt class="py-op">,</tt> <tt class="py-string">'del'</tt><tt class="py-op">,</tt> </tt>
-<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line">                  <tt class="py-string">'elif'</tt><tt class="py-op">,</tt> <tt class="py-string">'else'</tt><tt class="py-op">,</tt> <tt class="py-string">'except'</tt><tt class="py-op">,</tt> <tt class="py-string">'exec'</tt><tt class="py-op">,</tt> <tt class="py-string">'finally'</tt><tt class="py-op">,</tt> <tt class="py-string">'for'</tt><tt class="py-op">,</tt> <tt class="py-string">'from'</tt><tt class="py-op">,</tt> </tt>
-<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line">                  <tt class="py-string">'global'</tt><tt class="py-op">,</tt> <tt class="py-string">'if'</tt><tt class="py-op">,</tt> <tt class="py-string">'import'</tt><tt class="py-op">,</tt> <tt class="py-string">'in'</tt><tt class="py-op">,</tt> <tt class="py-string">'is'</tt><tt class="py-op">,</tt> <tt class="py-string">'lambda'</tt><tt class="py-op">,</tt> <tt class="py-string">'not'</tt><tt class="py-op">,</tt> <tt class="py-string">'or'</tt><tt class="py-op">,</tt> </tt>
-<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line">                  <tt class="py-string">'pass'</tt><tt class="py-op">,</tt> <tt class="py-string">'print'</tt><tt class="py-op">,</tt> <tt class="py-string">'raise'</tt><tt class="py-op">,</tt> <tt class="py-string">'return'</tt><tt class="py-op">,</tt> <tt class="py-string">'try'</tt><tt class="py-op">,</tt> <tt class="py-string">'while'</tt><tt class="py-op">,</tt> <tt class="py-string">'body'</tt><tt class="py-op">]</tt> </tt>
-<a name="fix_method_name"></a><div id="fix_method_name-def"><a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line"> </tt>
-<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line"> </tt>
-<a name="L83"></a><tt class="py-lineno"> 83</tt> <a class="py-toggle" href="#" id="fix_method_name-toggle" onclick="return toggle('fix_method_name');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#fix_method_name">fix_method_name</a><tt class="py-op">(</tt><tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="fix_method_name-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="fix_method_name-expanded"><a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line">  <tt class="py-docstring">"""Fix method names to avoid reserved word conflicts.</tt> </tt>
-<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line"><tt class="py-docstring">    name: string, method name.</tt> </tt>
-<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"><tt class="py-docstring">    The name with a '_' prefixed if the name is a reserved word.</tt> </tt>
-<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt id="link-52" class="py-name"><a title="apiclient.discovery.RESERVED_WORDS" class="py-name" href="#" onclick="return doclink('link-52', 'RESERVED_WORDS', 'link-51');">RESERVED_WORDS</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">name</tt> <tt class="py-op">+</tt> <tt class="py-string">'_'</tt> </tt>
-<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">name</tt> </tt>
-</div><a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line"> </tt>
-<a name="_add_query_parameter"></a><div id="_add_query_parameter-def"><a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line"> </tt>
-<a name="L98"></a><tt class="py-lineno"> 98</tt> <a class="py-toggle" href="#" id="_add_query_parameter-toggle" onclick="return toggle('_add_query_parameter');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#_add_query_parameter">_add_query_parameter</a><tt class="py-op">(</tt><tt class="py-param">url</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_add_query_parameter-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_add_query_parameter-expanded"><a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line">  <tt class="py-docstring">"""Adds a query parameter to a url.</tt> </tt>
-<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line"><tt class="py-docstring">  Replaces the current value if it already exists in the URL.</tt> </tt>
-<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line"><tt class="py-docstring">    url: string, url to add the query parameter to.</tt> </tt>
-<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line"><tt class="py-docstring">    name: string, query parameter name.</tt> </tt>
-<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line"><tt class="py-docstring">    value: string, query parameter value.</tt> </tt>
-<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line"><tt class="py-docstring">    Updated query parameter. Does not update the url if value is None.</tt> </tt>
-<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">url</tt> </tt>
-<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urlparse</tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line">    <tt class="py-name">q</tt> <tt class="py-op">=</tt> <tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-name">parse_qsl</tt><tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">    <tt class="py-name">q</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
-<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-name">q</tt><tt class="py-op">)</tt> </tt>
-<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urlunparse</tt><tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line"> </tt>
-<a name="key2param"></a><div id="key2param-def"><a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line"> </tt>
-<a name="L121"></a><tt class="py-lineno">121</tt> <a class="py-toggle" href="#" id="key2param-toggle" onclick="return toggle('key2param');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#key2param">key2param</a><tt class="py-op">(</tt><tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="key2param-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="key2param-expanded"><a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">  <tt class="py-docstring">"""Converts key names into parameter names.</tt> </tt>
-<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line"><tt class="py-docstring">  For example, converting "max-results" -&gt; "max_results"</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line"><tt id="link-48" class="py-name" targets="Variable apiclient.discovery.logger=apiclient.discovery-module.html#logger,Variable oauth2client.appengine.logger=oauth2client.appengine-module.html#logger,Variable oauth2client.client.logger=oauth2client.client-module.html#logger,Variable oauth2client.crypt.logger=oauth2client.crypt-module.html#logger,Variable oauth2client.gce.logger=oauth2client.gce-module.html#logger,Variable oauth2client.locked_file.logger=oauth2client.locked_file-module.html#logger,Variable oauth2client.multistore_file.logger=oauth2client.multistore_file-module.html#logger,Variable oauth2client.util.logger=oauth2client.util-module.html#logger"><a title="apiclient.discovery.logger
+oauth2client.appengine.logger
+oauth2client.client.logger
+oauth2client.crypt.logger
+oauth2client.gce.logger
+oauth2client.locked_file.logger
+oauth2client.multistore_file.logger
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-48', 'logger', 'link-48');">logger</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line"><tt id="link-49" class="py-name" targets="Variable apiclient.discovery.URITEMPLATE=apiclient.discovery-module.html#URITEMPLATE"><a title="apiclient.discovery.URITEMPLATE" class="py-name" href="#" onclick="return doclink('link-49', 'URITEMPLATE', 'link-49');">URITEMPLATE</a></tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'{[^}]*}'</tt><tt class="py-op">)</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line"><tt id="link-50" class="py-name" targets="Variable apiclient.discovery.VARNAME=apiclient.discovery-module.html#VARNAME"><a title="apiclient.discovery.VARNAME" class="py-name" href="#" onclick="return doclink('link-50', 'VARNAME', 'link-50');">VARNAME</a></tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'[a-zA-Z0-9_-]+'</tt><tt class="py-op">)</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line"><tt id="link-51" class="py-name" targets="Variable apiclient.discovery.DISCOVERY_URI=apiclient.discovery-module.html#DISCOVERY_URI"><a title="apiclient.discovery.DISCOVERY_URI" class="py-name" href="#" onclick="return doclink('link-51', 'DISCOVERY_URI', 'link-51');">DISCOVERY_URI</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'https://www.googleapis.com/discovery/v1/apis/'</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line">                 <tt class="py-string">'{api}/{apiVersion}/rest'</tt><tt class="py-op">)</tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"><tt id="link-52" class="py-name" targets="Variable apiclient.discovery.DEFAULT_METHOD_DOC=apiclient.discovery-module.html#DEFAULT_METHOD_DOC"><a title="apiclient.discovery.DEFAULT_METHOD_DOC" class="py-name" href="#" onclick="return doclink('link-52', 'DEFAULT_METHOD_DOC', 'link-52');">DEFAULT_METHOD_DOC</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'A description of how to use this function'</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"><tt id="link-53" class="py-name" targets="Variable apiclient.discovery.HTTP_PAYLOAD_METHODS=apiclient.discovery-module.html#HTTP_PAYLOAD_METHODS"><a title="apiclient.discovery.HTTP_PAYLOAD_METHODS" class="py-name" href="#" onclick="return doclink('link-53', 'HTTP_PAYLOAD_METHODS', 'link-53');">HTTP_PAYLOAD_METHODS</a></tt> <tt class="py-op">=</tt> <tt class="py-name">frozenset</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'PUT'</tt><tt class="py-op">,</tt> <tt class="py-string">'POST'</tt><tt class="py-op">,</tt> <tt class="py-string">'PATCH'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line"><tt id="link-54" class="py-name" targets="Variable apiclient.discovery._MEDIA_SIZE_BIT_SHIFTS=apiclient.discovery-module.html#_MEDIA_SIZE_BIT_SHIFTS"><a title="apiclient.discovery._MEDIA_SIZE_BIT_SHIFTS" class="py-name" href="#" onclick="return doclink('link-54', '_MEDIA_SIZE_BIT_SHIFTS', 'link-54');">_MEDIA_SIZE_BIT_SHIFTS</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'KB'</tt><tt class="py-op">:</tt> <tt class="py-number">10</tt><tt class="py-op">,</tt> <tt class="py-string">'MB'</tt><tt class="py-op">:</tt> <tt class="py-number">20</tt><tt class="py-op">,</tt> <tt class="py-string">'GB'</tt><tt class="py-op">:</tt> <tt class="py-number">30</tt><tt class="py-op">,</tt> <tt class="py-string">'TB'</tt><tt class="py-op">:</tt> <tt class="py-number">40</tt><tt class="py-op">}</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line"><tt id="link-55" class="py-name" targets="Variable apiclient.discovery.BODY_PARAMETER_DEFAULT_VALUE=apiclient.discovery-module.html#BODY_PARAMETER_DEFAULT_VALUE"><a title="apiclient.discovery.BODY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-55', 'BODY_PARAMETER_DEFAULT_VALUE', 'link-55');">BODY_PARAMETER_DEFAULT_VALUE</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line">    <tt class="py-string">'description'</tt><tt class="py-op">:</tt> <tt class="py-string">'The request body.'</tt><tt class="py-op">,</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line">    <tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-string">'object'</tt><tt class="py-op">,</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line">    <tt class="py-string">'required'</tt><tt class="py-op">:</tt> <tt class="py-name">True</tt><tt class="py-op">,</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line"><tt class="py-op">}</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line"><tt id="link-56" class="py-name" targets="Variable apiclient.discovery.MEDIA_BODY_PARAMETER_DEFAULT_VALUE=apiclient.discovery-module.html#MEDIA_BODY_PARAMETER_DEFAULT_VALUE"><a title="apiclient.discovery.MEDIA_BODY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-56', 'MEDIA_BODY_PARAMETER_DEFAULT_VALUE', 'link-56');">MEDIA_BODY_PARAMETER_DEFAULT_VALUE</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line">    <tt class="py-string">'description'</tt><tt class="py-op">:</tt> <tt class="py-op">(</tt><tt class="py-string">'The filename of the media request body, or an instance '</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line">                    <tt class="py-string">'of a MediaUpload object.'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line">    <tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-string">'string'</tt><tt class="py-op">,</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line">    <tt class="py-string">'required'</tt><tt class="py-op">:</tt> <tt class="py-name">False</tt><tt class="py-op">,</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line"><tt class="py-op">}</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line"> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line"><tt class="py-comment"># Parameters accepted by the stack, but not visible via discovery.</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line"><tt class="py-comment"># TODO(dhermes): Remove 'userip' in 'v2'.</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line"><tt id="link-57" class="py-name" targets="Variable apiclient.discovery.STACK_QUERY_PARAMETERS=apiclient.discovery-module.html#STACK_QUERY_PARAMETERS"><a title="apiclient.discovery.STACK_QUERY_PARAMETERS" class="py-name" href="#" onclick="return doclink('link-57', 'STACK_QUERY_PARAMETERS', 'link-57');">STACK_QUERY_PARAMETERS</a></tt> <tt class="py-op">=</tt> <tt class="py-name">frozenset</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'trace'</tt><tt class="py-op">,</tt> <tt class="py-string">'pp'</tt><tt class="py-op">,</tt> <tt class="py-string">'userip'</tt><tt class="py-op">,</tt> <tt class="py-string">'strict'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line"><tt id="link-58" class="py-name" targets="Variable apiclient.discovery.STACK_QUERY_PARAMETER_DEFAULT_VALUE=apiclient.discovery-module.html#STACK_QUERY_PARAMETER_DEFAULT_VALUE"><a title="apiclient.discovery.STACK_QUERY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-58', 'STACK_QUERY_PARAMETER_DEFAULT_VALUE', 'link-58');">STACK_QUERY_PARAMETER_DEFAULT_VALUE</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-string">'string'</tt><tt class="py-op">,</tt> <tt class="py-string">'location'</tt><tt class="py-op">:</tt> <tt class="py-string">'query'</tt><tt class="py-op">}</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line"> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line"><tt class="py-comment"># Library-specific reserved words beyond Python keywords.</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line"><tt id="link-59" class="py-name" targets="Variable apiclient.discovery.RESERVED_WORDS=apiclient.discovery-module.html#RESERVED_WORDS"><a title="apiclient.discovery.RESERVED_WORDS" class="py-name" href="#" onclick="return doclink('link-59', 'RESERVED_WORDS', 'link-59');">RESERVED_WORDS</a></tt> <tt class="py-op">=</tt> <tt class="py-name">frozenset</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="fix_method_name"></a><div id="fix_method_name-def"><a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line"> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line"> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt> <a class="py-toggle" href="#" id="fix_method_name-toggle" onclick="return toggle('fix_method_name');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#fix_method_name">fix_method_name</a><tt class="py-op">(</tt><tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="fix_method_name-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="fix_method_name-expanded"><a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line">  <tt class="py-docstring">"""Fix method names to avoid reserved word conflicts.</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line"><tt class="py-docstring">    name: string, method name.</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line"><tt class="py-docstring">    The name with a '_' prefixed if the name is a reserved word.</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">keyword</tt><tt class="py-op">.</tt><tt class="py-name">iskeyword</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt id="link-60" class="py-name"><a title="apiclient.discovery.RESERVED_WORDS" class="py-name" href="#" onclick="return doclink('link-60', 'RESERVED_WORDS', 'link-59');">RESERVED_WORDS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">name</tt> <tt class="py-op">+</tt> <tt class="py-string">'_'</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">name</tt> </tt>
+</div><a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line"> </tt>
+<a name="key2param"></a><div id="key2param-def"><a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line"> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt> <a class="py-toggle" href="#" id="key2param-toggle" onclick="return toggle('key2param');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#key2param">key2param</a><tt class="py-op">(</tt><tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="key2param-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="key2param-expanded"><a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line">  <tt class="py-docstring">"""Converts key names into parameter names.</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line"><tt class="py-docstring">  For example, converting "max-results" -&gt; "max_results"</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line"><tt class="py-docstring">    key: string, the method key name.</tt> </tt>
 <a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line"><tt class="py-docstring">    key: string, the method key name.</tt> </tt>
-<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"><tt class="py-docstring">    A safe method name based on the key name.</tt> </tt>
-<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">  <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line">  <tt class="py-name">key</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
-<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">key</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">isalpha</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line">    <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">)</tt> </tt>
-<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">key</tt><tt class="py-op">:</tt> </tt>
-<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">c</tt><tt class="py-op">.</tt><tt class="py-name">isalnum</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line">      <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> </tt>
-<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line">      <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'_'</tt><tt class="py-op">)</tt> </tt>
-<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line"> </tt>
-<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line"> </tt>
-<a name="build"></a><div id="build-def"><a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line"> </tt>
-<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">positional</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="L146"></a><tt class="py-lineno">146</tt> <a class="py-toggle" href="#" id="build-toggle" onclick="return toggle('build');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#build">build</a><tt class="py-op">(</tt><tt class="py-param">serviceName</tt><tt class="py-op">,</tt> </tt>
-<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line">          <tt class="py-param">version</tt><tt class="py-op">,</tt> </tt>
-<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line">          <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line">          <tt class="py-param">discoveryServiceUrl</tt><tt class="py-op">=</tt><tt id="link-53" class="py-name"><a title="apiclient.discovery.DISCOVERY_URI" class="py-name" href="#" onclick="return doclink('link-53', 'DISCOVERY_URI', 'link-48');">DISCOVERY_URI</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line">          <tt class="py-param">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line">          <tt class="py-param">model</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line">          <tt class="py-param">requestBuilder</tt><tt class="py-op">=</tt><tt id="link-54" class="py-name"><a title="apiclient.http.HttpRequest" class="py-name" href="#" onclick="return doclink('link-54', 'HttpRequest', 'link-21');">HttpRequest</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="build-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="build-expanded"><a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line">  <tt class="py-docstring">"""Construct a Resource for interacting with an API.</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line"><tt class="py-docstring">    A safe method name based on the key name.</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line">  <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line">  <tt class="py-name">key</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">key</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">isalpha</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">    <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">)</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">key</tt><tt class="py-op">:</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">c</tt><tt class="py-op">.</tt><tt class="py-name">isalnum</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line">      <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line">      <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'_'</tt><tt class="py-op">)</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line"> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line"> </tt>
+<a name="build"></a><div id="build-def"><a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line"> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">positional</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt> <a class="py-toggle" href="#" id="build-toggle" onclick="return toggle('build');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#build">build</a><tt class="py-op">(</tt><tt class="py-param">serviceName</tt><tt class="py-op">,</tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line">          <tt class="py-param">version</tt><tt class="py-op">,</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">          <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line">          <tt class="py-param">discoveryServiceUrl</tt><tt class="py-op">=</tt><tt id="link-61" class="py-name"><a title="apiclient.discovery.DISCOVERY_URI" class="py-name" href="#" onclick="return doclink('link-61', 'DISCOVERY_URI', 'link-51');">DISCOVERY_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line">          <tt class="py-param">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line">          <tt class="py-param">model</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line">          <tt class="py-param">requestBuilder</tt><tt class="py-op">=</tt><tt id="link-62" class="py-name"><a title="apiclient.http.HttpRequest" class="py-name" href="#" onclick="return doclink('link-62', 'HttpRequest', 'link-21');">HttpRequest</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="build-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="build-expanded"><a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line">  <tt class="py-docstring">"""Construct a Resource for interacting with an API.</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line"><tt class="py-docstring">  Construct a Resource object for interacting with an API. The serviceName and</tt> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line"><tt class="py-docstring">  version are the names from the Discovery service.</tt> </tt>
 <a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L155"></a><tt class="py-lineno">155</tt>  <tt class="py-line"><tt class="py-docstring">  Construct a Resource object for interacting with an API. The serviceName and</tt> </tt>
-<a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line"><tt class="py-docstring">  version are the names from the Discovery service.</tt> </tt>
-<a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line"><tt class="py-docstring">    serviceName: string, name of the service.</tt> </tt>
-<a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line"><tt class="py-docstring">    version: string, the version of the service.</tt> </tt>
-<a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, An instance of httplib2.Http or something that acts</tt> </tt>
-<a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line"><tt class="py-docstring">      like it that HTTP requests will be made through.</tt> </tt>
-<a name="L163"></a><tt class="py-lineno">163</tt>  <tt class="py-line"><tt class="py-docstring">    discoveryServiceUrl: string, a URI Template that points to the location of</tt> </tt>
-<a name="L164"></a><tt class="py-lineno">164</tt>  <tt class="py-line"><tt class="py-docstring">      the discovery service. It should have two parameters {api} and</tt> </tt>
-<a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line"><tt class="py-docstring">      {apiVersion} that when filled in produce an absolute URI to the discovery</tt> </tt>
-<a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line"><tt class="py-docstring">      document for that service.</tt> </tt>
-<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line"><tt class="py-docstring">    developerKey: string, key obtained from</tt> </tt>
-<a name="L168"></a><tt class="py-lineno">168</tt>  <tt class="py-line"><tt class="py-docstring">      https://code.google.com/apis/console.</tt> </tt>
-<a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line"><tt class="py-docstring">    model: apiclient.Model, converts to and from the wire format.</tt> </tt>
-<a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line"><tt class="py-docstring">    requestBuilder: apiclient.http.HttpRequest, encapsulator for an HTTP</tt> </tt>
-<a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line"><tt class="py-docstring">      request.</tt> </tt>
-<a name="L172"></a><tt class="py-lineno">172</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line"><tt class="py-docstring">    A Resource object with methods for interacting with the service.</tt> </tt>
-<a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L176"></a><tt class="py-lineno">176</tt>  <tt class="py-line">  <tt class="py-name">params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line">      <tt class="py-string">'api'</tt><tt class="py-op">:</tt> <tt class="py-name">serviceName</tt><tt class="py-op">,</tt> </tt>
-<a name="L178"></a><tt class="py-lineno">178</tt>  <tt class="py-line">      <tt class="py-string">'apiVersion'</tt><tt class="py-op">:</tt> <tt class="py-name">version</tt> </tt>
-<a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line">      <tt class="py-op">}</tt> </tt>
+<a name="L155"></a><tt class="py-lineno">155</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line"><tt class="py-docstring">    serviceName: string, name of the service.</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line"><tt class="py-docstring">    version: string, the version of the service.</tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, An instance of httplib2.Http or something that acts</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line"><tt class="py-docstring">      like it that HTTP requests will be made through.</tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line"><tt class="py-docstring">    discoveryServiceUrl: string, a URI Template that points to the location of</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line"><tt class="py-docstring">      the discovery service. It should have two parameters {api} and</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line"><tt class="py-docstring">      {apiVersion} that when filled in produce an absolute URI to the discovery</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt>  <tt class="py-line"><tt class="py-docstring">      document for that service.</tt> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt>  <tt class="py-line"><tt class="py-docstring">    developerKey: string, key obtained from</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line"><tt class="py-docstring">      https://code.google.com/apis/console.</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line"><tt class="py-docstring">    model: apiclient.Model, converts to and from the wire format.</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line"><tt class="py-docstring">    requestBuilder: apiclient.http.HttpRequest, encapsulator for an HTTP</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt>  <tt class="py-line"><tt class="py-docstring">      request.</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line"><tt class="py-docstring">    A Resource object with methods for interacting with the service.</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line">  <tt class="py-name">params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line">      <tt class="py-string">'api'</tt><tt class="py-op">:</tt> <tt class="py-name">serviceName</tt><tt class="py-op">,</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line">      <tt class="py-string">'apiVersion'</tt><tt class="py-op">:</tt> <tt class="py-name">version</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt>  <tt class="py-line">      <tt class="py-op">}</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line"> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt id="link-63" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-63', 'http', 'link-20');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line">    <tt id="link-64" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-64', 'http', 'link-20');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Http</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
 <a name="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line"> </tt>
-<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt id="link-55" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-55', 'http', 'link-20');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line">    <tt id="link-56" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-56', 'http', 'link-20');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Http</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line"> </tt>
-<a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line">  <tt class="py-name">requested_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt class="py-name">discoveryServiceUrl</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
-<a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line"> </tt>
-<a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line">  <tt class="py-comment"># REMOTE_ADDR is defined by the CGI spec [RFC3875] as the environment</tt> </tt>
-<a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line">  <tt class="py-comment"># variable that contains the network address of the client sending the</tt> </tt>
-<a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line">  <tt class="py-comment"># request. If it exists then add that to the request for the discovery</tt> </tt>
-<a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line">  <tt class="py-comment"># document to avoid exceeding the quota on discovery requests.</tt> </tt>
-<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'REMOTE_ADDR'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">:</tt> </tt>
-<a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line">    <tt class="py-name">requested_url</tt> <tt class="py-op">=</tt> <tt id="link-57" class="py-name" targets="Function apiclient.discovery._add_query_parameter()=apiclient.discovery-module.html#_add_query_parameter"><a title="apiclient.discovery._add_query_parameter" class="py-name" href="#" onclick="return doclink('link-57', '_add_query_parameter', 'link-57');">_add_query_parameter</a></tt><tt class="py-op">(</tt><tt class="py-name">requested_url</tt><tt class="py-op">,</tt> <tt class="py-string">'userIp'</tt><tt class="py-op">,</tt> </tt>
-<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line">                                         <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">'REMOTE_ADDR'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line">  <tt id="link-58" class="py-name"><a title="apiclient.discovery.logger
+<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line">  <tt class="py-name">requested_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt class="py-name">discoveryServiceUrl</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line"> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line">  <tt class="py-comment"># REMOTE_ADDR is defined by the CGI spec [RFC3875] as the environment</tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line">  <tt class="py-comment"># variable that contains the network address of the client sending the</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line">  <tt class="py-comment"># request. If it exists then add that to the request for the discovery</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line">  <tt class="py-comment"># document to avoid exceeding the quota on discovery requests.</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'REMOTE_ADDR'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">:</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line">    <tt class="py-name">requested_url</tt> <tt class="py-op">=</tt> <tt id="link-65" class="py-name"><a title="oauth2client.util._add_query_parameter" class="py-name" href="#" onclick="return doclink('link-65', '_add_query_parameter', 'link-44');">_add_query_parameter</a></tt><tt class="py-op">(</tt><tt class="py-name">requested_url</tt><tt class="py-op">,</tt> <tt class="py-string">'userIp'</tt><tt class="py-op">,</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line">                                         <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">'REMOTE_ADDR'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line">  <tt id="link-66" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-58', 'logger', 'link-45');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'URL being requested: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">requested_url</tt><tt class="py-op">)</tt> </tt>
-<a name="L194"></a><tt class="py-lineno">194</tt>  <tt class="py-line"> </tt>
-<a name="L195"></a><tt class="py-lineno">195</tt>  <tt class="py-line">  <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-59" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-59', 'http', 'link-20');">http</a></tt><tt class="py-op">.</tt><tt id="link-60" class="py-name" targets="Method apiclient.http.HttpMock.request()=apiclient.http.HttpMock-class.html#request,Method apiclient.http.HttpMockSequence.request()=apiclient.http.HttpMockSequence-class.html#request,Method apiclient.model.BaseModel.request()=apiclient.model.BaseModel-class.html#request,Method apiclient.model.Model.request()=apiclient.model.Model-class.html#request"><a title="apiclient.http.HttpMock.request
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-66', 'logger', 'link-48');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'URL being requested: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">requested_url</tt><tt class="py-op">)</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line"> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line">  <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-67" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-67', 'http', 'link-20');">http</a></tt><tt class="py-op">.</tt><tt id="link-68" class="py-name" targets="Method apiclient.http.HttpMock.request()=apiclient.http.HttpMock-class.html#request,Method apiclient.http.HttpMockSequence.request()=apiclient.http.HttpMockSequence-class.html#request,Method apiclient.model.BaseModel.request()=apiclient.model.BaseModel-class.html#request,Method apiclient.model.Model.request()=apiclient.model.Model-class.html#request"><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-60', 'request', 'link-60');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">requested_url</tt><tt class="py-op">)</tt> </tt>
-<a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line"> </tt>
-<a name="L197"></a><tt class="py-lineno">197</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">404</tt><tt class="py-op">:</tt> </tt>
-<a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-61" class="py-name"><a title="apiclient.errors.UnknownApiNameOrVersion" class="py-name" href="#" onclick="return doclink('link-61', 'UnknownApiNameOrVersion', 'link-15');">UnknownApiNameOrVersion</a></tt><tt class="py-op">(</tt><tt class="py-string">"name: %s  version: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">serviceName</tt><tt class="py-op">,</tt> </tt>
-<a name="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line">                                                            <tt class="py-name">version</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">400</tt><tt class="py-op">:</tt> </tt>
-<a name="L201"></a><tt class="py-lineno">201</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-62" class="py-name"><a title="apiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-62', 'HttpError', 'link-3');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">requested_url</tt><tt class="py-op">)</tt> </tt>
-<a name="L202"></a><tt class="py-lineno">202</tt>  <tt class="py-line"> </tt>
-<a name="L203"></a><tt class="py-lineno">203</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L204"></a><tt class="py-lineno">204</tt>  <tt class="py-line">    <tt class="py-name">service</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name" targets="Function oauth2client.clientsecrets.loads()=oauth2client.clientsecrets-module.html#loads"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-63', 'loads', 'link-63');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L205"></a><tt class="py-lineno">205</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
-<a name="L206"></a><tt class="py-lineno">206</tt>  <tt class="py-line">    <tt id="link-64" class="py-name"><a title="apiclient.discovery.logger
+apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-68', 'request', 'link-68');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">requested_url</tt><tt class="py-op">)</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line"> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">404</tt><tt class="py-op">:</tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-69" class="py-name"><a title="apiclient.errors.UnknownApiNameOrVersion" class="py-name" href="#" onclick="return doclink('link-69', 'UnknownApiNameOrVersion', 'link-15');">UnknownApiNameOrVersion</a></tt><tt class="py-op">(</tt><tt class="py-string">"name: %s  version: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">serviceName</tt><tt class="py-op">,</tt> </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line">                                                            <tt class="py-name">version</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">400</tt><tt class="py-op">:</tt> </tt>
+<a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-70" class="py-name"><a title="apiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-70', 'HttpError', 'link-3');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">requested_url</tt><tt class="py-op">)</tt> </tt>
+<a name="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line"> </tt>
+<a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L201"></a><tt class="py-lineno">201</tt>  <tt class="py-line">    <tt class="py-name">service</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name" targets="Function oauth2client.clientsecrets.loads()=oauth2client.clientsecrets-module.html#loads"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-71', 'loads', 'link-71');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L203"></a><tt class="py-lineno">203</tt>  <tt class="py-line">    <tt id="link-72" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-64', 'logger', 'link-45');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Failed to parse as JSON: '</tt> <tt class="py-op">+</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-65" class="py-name"><a title="apiclient.errors.InvalidJsonError" class="py-name" href="#" onclick="return doclink('link-65', 'InvalidJsonError', 'link-6');">InvalidJsonError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L208"></a><tt class="py-lineno">208</tt>  <tt class="py-line"> </tt>
-<a name="L209"></a><tt class="py-lineno">209</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-66" class="py-name" targets="Function apiclient.discovery.build_from_document()=apiclient.discovery-module.html#build_from_document"><a title="apiclient.discovery.build_from_document" class="py-name" href="#" onclick="return doclink('link-66', 'build_from_document', 'link-66');">build_from_document</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">base</tt><tt class="py-op">=</tt><tt class="py-name">discoveryServiceUrl</tt><tt class="py-op">,</tt> <tt id="link-67" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-67', 'http', 'link-20');">http</a></tt><tt class="py-op">=</tt><tt id="link-68" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-68', 'http', 'link-20');">http</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L210"></a><tt class="py-lineno">210</tt>  <tt class="py-line">      <tt class="py-name">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">developerKey</tt><tt class="py-op">,</tt> <tt id="link-69" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-69', 'model', 'link-29');">model</a></tt><tt class="py-op">=</tt><tt id="link-70" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-70', 'model', 'link-29');">model</a></tt><tt class="py-op">,</tt> <tt class="py-name">requestBuilder</tt><tt class="py-op">=</tt><tt class="py-name">requestBuilder</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L211"></a><tt class="py-lineno">211</tt>  <tt class="py-line"> </tt>
-<a name="build_from_document"></a><div id="build_from_document-def"><a name="L212"></a><tt class="py-lineno">212</tt>  <tt class="py-line"> </tt>
-<a name="L213"></a><tt class="py-lineno">213</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L214"></a><tt class="py-lineno">214</tt> <a class="py-toggle" href="#" id="build_from_document-toggle" onclick="return toggle('build_from_document');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#build_from_document">build_from_document</a><tt class="py-op">(</tt> </tt>
-<a name="L215"></a><tt class="py-lineno">215</tt>  <tt class="py-line">    <tt class="py-param">service</tt><tt class="py-op">,</tt> </tt>
-<a name="L216"></a><tt class="py-lineno">216</tt>  <tt class="py-line">    <tt class="py-param">base</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L217"></a><tt class="py-lineno">217</tt>  <tt class="py-line">    <tt class="py-param">future</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line">    <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line">    <tt class="py-param">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L220"></a><tt class="py-lineno">220</tt>  <tt class="py-line">    <tt class="py-param">model</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L221"></a><tt class="py-lineno">221</tt>  <tt class="py-line">    <tt class="py-param">requestBuilder</tt><tt class="py-op">=</tt><tt id="link-71" class="py-name"><a title="apiclient.http.HttpRequest" class="py-name" href="#" onclick="return doclink('link-71', 'HttpRequest', 'link-21');">HttpRequest</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="build_from_document-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="build_from_document-expanded"><a name="L222"></a><tt class="py-lineno">222</tt>  <tt class="py-line">  <tt class="py-docstring">"""Create a Resource for interacting with an API.</tt> </tt>
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-72', 'logger', 'link-48');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Failed to parse as JSON: '</tt> <tt class="py-op">+</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L204"></a><tt class="py-lineno">204</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-73" class="py-name"><a title="apiclient.errors.InvalidJsonError" class="py-name" href="#" onclick="return doclink('link-73', 'InvalidJsonError', 'link-6');">InvalidJsonError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L205"></a><tt class="py-lineno">205</tt>  <tt class="py-line"> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-74" class="py-name" targets="Function apiclient.discovery.build_from_document()=apiclient.discovery-module.html#build_from_document"><a title="apiclient.discovery.build_from_document" class="py-name" href="#" onclick="return doclink('link-74', 'build_from_document', 'link-74');">build_from_document</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">base</tt><tt class="py-op">=</tt><tt class="py-name">discoveryServiceUrl</tt><tt class="py-op">,</tt> <tt id="link-75" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-75', 'http', 'link-20');">http</a></tt><tt class="py-op">=</tt><tt id="link-76" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-76', 'http', 'link-20');">http</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line">      <tt class="py-name">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">developerKey</tt><tt class="py-op">,</tt> <tt id="link-77" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-77', 'model', 'link-29');">model</a></tt><tt class="py-op">=</tt><tt id="link-78" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-78', 'model', 'link-29');">model</a></tt><tt class="py-op">,</tt> <tt class="py-name">requestBuilder</tt><tt class="py-op">=</tt><tt class="py-name">requestBuilder</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L208"></a><tt class="py-lineno">208</tt>  <tt class="py-line"> </tt>
+<a name="build_from_document"></a><div id="build_from_document-def"><a name="L209"></a><tt class="py-lineno">209</tt>  <tt class="py-line"> </tt>
+<a name="L210"></a><tt class="py-lineno">210</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt> <a class="py-toggle" href="#" id="build_from_document-toggle" onclick="return toggle('build_from_document');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#build_from_document">build_from_document</a><tt class="py-op">(</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt>  <tt class="py-line">    <tt class="py-param">service</tt><tt class="py-op">,</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt>  <tt class="py-line">    <tt class="py-param">base</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L214"></a><tt class="py-lineno">214</tt>  <tt class="py-line">    <tt class="py-param">future</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L215"></a><tt class="py-lineno">215</tt>  <tt class="py-line">    <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L216"></a><tt class="py-lineno">216</tt>  <tt class="py-line">    <tt class="py-param">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt>  <tt class="py-line">    <tt class="py-param">model</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line">    <tt class="py-param">requestBuilder</tt><tt class="py-op">=</tt><tt id="link-79" class="py-name"><a title="apiclient.http.HttpRequest" class="py-name" href="#" onclick="return doclink('link-79', 'HttpRequest', 'link-21');">HttpRequest</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="build_from_document-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="build_from_document-expanded"><a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line">  <tt class="py-docstring">"""Create a Resource for interacting with an API.</tt> </tt>
+<a name="L220"></a><tt class="py-lineno">220</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L221"></a><tt class="py-lineno">221</tt>  <tt class="py-line"><tt class="py-docstring">  Same as `build()`, but constructs the Resource object from a discovery</tt> </tt>
+<a name="L222"></a><tt class="py-lineno">222</tt>  <tt class="py-line"><tt class="py-docstring">  document that is it given, as opposed to retrieving one over HTTP.</tt> </tt>
 <a name="L223"></a><tt class="py-lineno">223</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line"><tt class="py-docstring">  Same as `build()`, but constructs the Resource object from a discovery</tt> </tt>
-<a name="L225"></a><tt class="py-lineno">225</tt>  <tt class="py-line"><tt class="py-docstring">  document that is it given, as opposed to retrieving one over HTTP.</tt> </tt>
-<a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L227"></a><tt class="py-lineno">227</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L228"></a><tt class="py-lineno">228</tt>  <tt class="py-line"><tt class="py-docstring">    service: string or object, the JSON discovery document describing the API.</tt> </tt>
-<a name="L229"></a><tt class="py-lineno">229</tt>  <tt class="py-line"><tt class="py-docstring">      The value passed in may either be the JSON string or the deserialized</tt> </tt>
-<a name="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line"><tt class="py-docstring">      JSON.</tt> </tt>
-<a name="L231"></a><tt class="py-lineno">231</tt>  <tt class="py-line"><tt class="py-docstring">    base: string, base URI for all HTTP requests, usually the discovery URI.</tt> </tt>
-<a name="L232"></a><tt class="py-lineno">232</tt>  <tt class="py-line"><tt class="py-docstring">      This parameter is no longer used as rootUrl and servicePath are included</tt> </tt>
-<a name="L233"></a><tt class="py-lineno">233</tt>  <tt class="py-line"><tt class="py-docstring">      within the discovery document. (deprecated)</tt> </tt>
-<a name="L234"></a><tt class="py-lineno">234</tt>  <tt class="py-line"><tt class="py-docstring">    future: string, discovery document with future capabilities (deprecated).</tt> </tt>
-<a name="L235"></a><tt class="py-lineno">235</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, An instance of httplib2.Http or something that acts</tt> </tt>
-<a name="L236"></a><tt class="py-lineno">236</tt>  <tt class="py-line"><tt class="py-docstring">      like it that HTTP requests will be made through.</tt> </tt>
-<a name="L237"></a><tt class="py-lineno">237</tt>  <tt class="py-line"><tt class="py-docstring">    developerKey: string, Key for controlling API usage, generated</tt> </tt>
-<a name="L238"></a><tt class="py-lineno">238</tt>  <tt class="py-line"><tt class="py-docstring">      from the API Console.</tt> </tt>
-<a name="L239"></a><tt class="py-lineno">239</tt>  <tt class="py-line"><tt class="py-docstring">    model: Model class instance that serializes and de-serializes requests and</tt> </tt>
-<a name="L240"></a><tt class="py-lineno">240</tt>  <tt class="py-line"><tt class="py-docstring">      responses.</tt> </tt>
-<a name="L241"></a><tt class="py-lineno">241</tt>  <tt class="py-line"><tt class="py-docstring">    requestBuilder: Takes an http request and packages it up to be executed.</tt> </tt>
-<a name="L242"></a><tt class="py-lineno">242</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L243"></a><tt class="py-lineno">243</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L244"></a><tt class="py-lineno">244</tt>  <tt class="py-line"><tt class="py-docstring">    A Resource object with methods for interacting with the service.</tt> </tt>
-<a name="L245"></a><tt class="py-lineno">245</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt>  <tt class="py-line"><tt class="py-docstring">    service: string or object, the JSON discovery document describing the API.</tt> </tt>
+<a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line"><tt class="py-docstring">      The value passed in may either be the JSON string or the deserialized</tt> </tt>
+<a name="L227"></a><tt class="py-lineno">227</tt>  <tt class="py-line"><tt class="py-docstring">      JSON.</tt> </tt>
+<a name="L228"></a><tt class="py-lineno">228</tt>  <tt class="py-line"><tt class="py-docstring">    base: string, base URI for all HTTP requests, usually the discovery URI.</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt>  <tt class="py-line"><tt class="py-docstring">      This parameter is no longer used as rootUrl and servicePath are included</tt> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line"><tt class="py-docstring">      within the discovery document. (deprecated)</tt> </tt>
+<a name="L231"></a><tt class="py-lineno">231</tt>  <tt class="py-line"><tt class="py-docstring">    future: string, discovery document with future capabilities (deprecated).</tt> </tt>
+<a name="L232"></a><tt class="py-lineno">232</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, An instance of httplib2.Http or something that acts</tt> </tt>
+<a name="L233"></a><tt class="py-lineno">233</tt>  <tt class="py-line"><tt class="py-docstring">      like it that HTTP requests will be made through.</tt> </tt>
+<a name="L234"></a><tt class="py-lineno">234</tt>  <tt class="py-line"><tt class="py-docstring">    developerKey: string, Key for controlling API usage, generated</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt>  <tt class="py-line"><tt class="py-docstring">      from the API Console.</tt> </tt>
+<a name="L236"></a><tt class="py-lineno">236</tt>  <tt class="py-line"><tt class="py-docstring">    model: Model class instance that serializes and de-serializes requests and</tt> </tt>
+<a name="L237"></a><tt class="py-lineno">237</tt>  <tt class="py-line"><tt class="py-docstring">      responses.</tt> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt>  <tt class="py-line"><tt class="py-docstring">    requestBuilder: Takes an http request and packages it up to be executed.</tt> </tt>
+<a name="L239"></a><tt class="py-lineno">239</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L240"></a><tt class="py-lineno">240</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L241"></a><tt class="py-lineno">241</tt>  <tt class="py-line"><tt class="py-docstring">    A Resource object with methods for interacting with the service.</tt> </tt>
+<a name="L242"></a><tt class="py-lineno">242</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt>  <tt class="py-line"> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt>  <tt class="py-line">  <tt class="py-comment"># future is no longer used.</tt> </tt>
+<a name="L245"></a><tt class="py-lineno">245</tt>  <tt class="py-line">  <tt class="py-name">future</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
 <a name="L246"></a><tt class="py-lineno">246</tt>  <tt class="py-line"> </tt>
-<a name="L247"></a><tt class="py-lineno">247</tt>  <tt class="py-line">  <tt class="py-comment"># future is no longer used.</tt> </tt>
-<a name="L248"></a><tt class="py-lineno">248</tt>  <tt class="py-line">  <tt class="py-name">future</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L249"></a><tt class="py-lineno">249</tt>  <tt class="py-line"> </tt>
-<a name="L250"></a><tt class="py-lineno">250</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L251"></a><tt class="py-lineno">251</tt>  <tt class="py-line">    <tt class="py-name">service</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-72', 'loads', 'link-63');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">)</tt> </tt>
-<a name="L252"></a><tt class="py-lineno">252</tt>  <tt class="py-line">  <tt class="py-name">base</tt> <tt class="py-op">=</tt> <tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urljoin</tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">[</tt><tt class="py-string">'rootUrl'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">service</tt><tt class="py-op">[</tt><tt class="py-string">'servicePath'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L253"></a><tt class="py-lineno">253</tt>  <tt class="py-line">  <tt id="link-73" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-73', 'schema', 'link-38');">schema</a></tt> <tt class="py-op">=</tt> <tt id="link-74" class="py-name"><a title="apiclient.schema.Schemas" class="py-name" href="#" onclick="return doclink('link-74', 'Schemas', 'link-39');">Schemas</a></tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">)</tt> </tt>
-<a name="L254"></a><tt class="py-lineno">254</tt>  <tt class="py-line"> </tt>
-<a name="L255"></a><tt class="py-lineno">255</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt id="link-75" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-75', 'model', 'link-29');">model</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L256"></a><tt class="py-lineno">256</tt>  <tt class="py-line">    <tt class="py-name">features</tt> <tt class="py-op">=</tt> <tt class="py-name">service</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name" targets="Method apiclient.schema.Schemas.get()=apiclient.schema.Schemas-class.html#get,Method oauth2client.client.MemoryCache.get()=oauth2client.client.MemoryCache-class.html#get,Method oauth2client.client.Storage.get()=oauth2client.client.Storage-class.html#get"><a title="apiclient.schema.Schemas.get
+<a name="L247"></a><tt class="py-lineno">247</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L248"></a><tt class="py-lineno">248</tt>  <tt class="py-line">    <tt class="py-name">service</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-80" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-80', 'loads', 'link-71');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">)</tt> </tt>
+<a name="L249"></a><tt class="py-lineno">249</tt>  <tt class="py-line">  <tt class="py-name">base</tt> <tt class="py-op">=</tt> <tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urljoin</tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">[</tt><tt class="py-string">'rootUrl'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">service</tt><tt class="py-op">[</tt><tt class="py-string">'servicePath'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L250"></a><tt class="py-lineno">250</tt>  <tt class="py-line">  <tt id="link-81" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-81', 'schema', 'link-38');">schema</a></tt> <tt class="py-op">=</tt> <tt id="link-82" class="py-name"><a title="apiclient.schema.Schemas" class="py-name" href="#" onclick="return doclink('link-82', 'Schemas', 'link-39');">Schemas</a></tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">)</tt> </tt>
+<a name="L251"></a><tt class="py-lineno">251</tt>  <tt class="py-line"> </tt>
+<a name="L252"></a><tt class="py-lineno">252</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt id="link-83" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-83', 'model', 'link-29');">model</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L253"></a><tt class="py-lineno">253</tt>  <tt class="py-line">    <tt class="py-name">features</tt> <tt class="py-op">=</tt> <tt class="py-name">service</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name" targets="Method apiclient.schema.Schemas.get()=apiclient.schema.Schemas-class.html#get,Method oauth2client.client.MemoryCache.get()=oauth2client.client.MemoryCache-class.html#get,Method oauth2client.client.Storage.get()=oauth2client.client.Storage-class.html#get"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-76', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'features'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L257"></a><tt class="py-lineno">257</tt>  <tt class="py-line">    <tt id="link-77" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-77', 'model', 'link-29');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-78" class="py-name"><a title="apiclient.model.JsonModel" class="py-name" href="#" onclick="return doclink('link-78', 'JsonModel', 'link-30');">JsonModel</a></tt><tt class="py-op">(</tt><tt class="py-string">'dataWrapper'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">features</tt><tt class="py-op">)</tt> </tt>
-<a name="L258"></a><tt class="py-lineno">258</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-79" class="py-name" targets="Class apiclient.discovery.Resource=apiclient.discovery.Resource-class.html"><a title="apiclient.discovery.Resource" class="py-name" href="#" onclick="return doclink('link-79', 'Resource', 'link-79');">Resource</a></tt><tt class="py-op">(</tt><tt id="link-80" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-80', 'http', 'link-20');">http</a></tt><tt class="py-op">=</tt><tt id="link-81" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-81', 'http', 'link-20');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">baseUrl</tt><tt class="py-op">=</tt><tt class="py-name">base</tt><tt class="py-op">,</tt> <tt id="link-82" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-82', 'model', 'link-29');">model</a></tt><tt class="py-op">=</tt><tt id="link-83" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-83', 'model', 'link-29');">model</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L259"></a><tt class="py-lineno">259</tt>  <tt class="py-line">                  <tt class="py-name">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">developerKey</tt><tt class="py-op">,</tt> <tt class="py-name">requestBuilder</tt><tt class="py-op">=</tt><tt class="py-name">requestBuilder</tt><tt class="py-op">,</tt> </tt>
-<a name="L260"></a><tt class="py-lineno">260</tt>  <tt class="py-line">                  <tt class="py-name">resourceDesc</tt><tt class="py-op">=</tt><tt class="py-name">service</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">=</tt><tt class="py-name">service</tt><tt class="py-op">,</tt> <tt id="link-84" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-84', 'schema', 'link-38');">schema</a></tt><tt class="py-op">=</tt><tt id="link-85" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-85', 'schema', 'link-38');">schema</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L261"></a><tt class="py-lineno">261</tt>  <tt class="py-line"> </tt>
-<a name="_cast"></a><div id="_cast-def"><a name="L262"></a><tt class="py-lineno">262</tt>  <tt class="py-line"> </tt>
-<a name="L263"></a><tt class="py-lineno">263</tt> <a class="py-toggle" href="#" id="_cast-toggle" onclick="return toggle('_cast');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#_cast">_cast</a><tt class="py-op">(</tt><tt class="py-param">value</tt><tt class="py-op">,</tt> <tt class="py-param">schema_type</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_cast-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_cast-expanded"><a name="L264"></a><tt class="py-lineno">264</tt>  <tt class="py-line">  <tt class="py-docstring">"""Convert value to a string based on JSON Schema type.</tt> </tt>
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-84', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'features'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L254"></a><tt class="py-lineno">254</tt>  <tt class="py-line">    <tt id="link-85" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-85', 'model', 'link-29');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-86" class="py-name"><a title="apiclient.model.JsonModel" class="py-name" href="#" onclick="return doclink('link-86', 'JsonModel', 'link-30');">JsonModel</a></tt><tt class="py-op">(</tt><tt class="py-string">'dataWrapper'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">features</tt><tt class="py-op">)</tt> </tt>
+<a name="L255"></a><tt class="py-lineno">255</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-87" class="py-name" targets="Class apiclient.discovery.Resource=apiclient.discovery.Resource-class.html"><a title="apiclient.discovery.Resource" class="py-name" href="#" onclick="return doclink('link-87', 'Resource', 'link-87');">Resource</a></tt><tt class="py-op">(</tt><tt id="link-88" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-88', 'http', 'link-20');">http</a></tt><tt class="py-op">=</tt><tt id="link-89" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-89', 'http', 'link-20');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">baseUrl</tt><tt class="py-op">=</tt><tt class="py-name">base</tt><tt class="py-op">,</tt> <tt id="link-90" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-90', 'model', 'link-29');">model</a></tt><tt class="py-op">=</tt><tt id="link-91" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-91', 'model', 'link-29');">model</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L256"></a><tt class="py-lineno">256</tt>  <tt class="py-line">                  <tt class="py-name">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">developerKey</tt><tt class="py-op">,</tt> <tt class="py-name">requestBuilder</tt><tt class="py-op">=</tt><tt class="py-name">requestBuilder</tt><tt class="py-op">,</tt> </tt>
+<a name="L257"></a><tt class="py-lineno">257</tt>  <tt class="py-line">                  <tt class="py-name">resourceDesc</tt><tt class="py-op">=</tt><tt class="py-name">service</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">=</tt><tt class="py-name">service</tt><tt class="py-op">,</tt> <tt id="link-92" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-92', 'schema', 'link-38');">schema</a></tt><tt class="py-op">=</tt><tt id="link-93" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-93', 'schema', 'link-38');">schema</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L258"></a><tt class="py-lineno">258</tt>  <tt class="py-line"> </tt>
+<a name="_cast"></a><div id="_cast-def"><a name="L259"></a><tt class="py-lineno">259</tt>  <tt class="py-line"> </tt>
+<a name="L260"></a><tt class="py-lineno">260</tt> <a class="py-toggle" href="#" id="_cast-toggle" onclick="return toggle('_cast');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#_cast">_cast</a><tt class="py-op">(</tt><tt class="py-param">value</tt><tt class="py-op">,</tt> <tt class="py-param">schema_type</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_cast-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_cast-expanded"><a name="L261"></a><tt class="py-lineno">261</tt>  <tt class="py-line">  <tt class="py-docstring">"""Convert value to a string based on JSON Schema type.</tt> </tt>
+<a name="L262"></a><tt class="py-lineno">262</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L263"></a><tt class="py-lineno">263</tt>  <tt class="py-line"><tt class="py-docstring">  See http://tools.ietf.org/html/draft-zyp-json-schema-03 for more details on</tt> </tt>
+<a name="L264"></a><tt class="py-lineno">264</tt>  <tt class="py-line"><tt class="py-docstring">  JSON Schema.</tt> </tt>
 <a name="L265"></a><tt class="py-lineno">265</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L266"></a><tt class="py-lineno">266</tt>  <tt class="py-line"><tt class="py-docstring">  See http://tools.ietf.org/html/draft-zyp-json-schema-03 for more details on</tt> </tt>
-<a name="L267"></a><tt class="py-lineno">267</tt>  <tt class="py-line"><tt class="py-docstring">  JSON Schema.</tt> </tt>
-<a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line"><tt class="py-docstring">    value: any, the value to convert</tt> </tt>
-<a name="L271"></a><tt class="py-lineno">271</tt>  <tt class="py-line"><tt class="py-docstring">    schema_type: string, the type that value should be interpreted as</tt> </tt>
-<a name="L272"></a><tt class="py-lineno">272</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L273"></a><tt class="py-lineno">273</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line"><tt class="py-docstring">    A string representation of 'value' based on the schema_type.</tt> </tt>
-<a name="L275"></a><tt class="py-lineno">275</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'string'</tt><tt class="py-op">:</tt> </tt>
-<a name="L277"></a><tt class="py-lineno">277</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">u''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">value</tt> </tt>
-<a name="L279"></a><tt class="py-lineno">279</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
-<a name="L281"></a><tt class="py-lineno">281</tt>  <tt class="py-line">  <tt class="py-keyword">elif</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'integer'</tt><tt class="py-op">:</tt> </tt>
-<a name="L282"></a><tt class="py-lineno">282</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L283"></a><tt class="py-lineno">283</tt>  <tt class="py-line">  <tt class="py-keyword">elif</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'number'</tt><tt class="py-op">:</tt> </tt>
-<a name="L284"></a><tt class="py-lineno">284</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L285"></a><tt class="py-lineno">285</tt>  <tt class="py-line">  <tt class="py-keyword">elif</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'boolean'</tt><tt class="py-op">:</tt> </tt>
-<a name="L286"></a><tt class="py-lineno">286</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">bool</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L287"></a><tt class="py-lineno">287</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L288"></a><tt class="py-lineno">288</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">u''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">value</tt> </tt>
-<a name="L290"></a><tt class="py-lineno">290</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L291"></a><tt class="py-lineno">291</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L292"></a><tt class="py-lineno">292</tt>  <tt class="py-line"> </tt>
-<a name="L293"></a><tt class="py-lineno">293</tt>  <tt class="py-line"> </tt>
-<a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line"><tt id="link-86" class="py-name" targets="Variable apiclient.discovery.MULTIPLIERS=apiclient.discovery-module.html#MULTIPLIERS"><a title="apiclient.discovery.MULTIPLIERS" class="py-name" href="#" onclick="return doclink('link-86', 'MULTIPLIERS', 'link-86');">MULTIPLIERS</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line">    <tt class="py-string">"KB"</tt><tt class="py-op">:</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-number">10</tt><tt class="py-op">,</tt> </tt>
-<a name="L296"></a><tt class="py-lineno">296</tt>  <tt class="py-line">    <tt class="py-string">"MB"</tt><tt class="py-op">:</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-number">20</tt><tt class="py-op">,</tt> </tt>
-<a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line">    <tt class="py-string">"GB"</tt><tt class="py-op">:</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-number">30</tt><tt class="py-op">,</tt> </tt>
-<a name="L298"></a><tt class="py-lineno">298</tt>  <tt class="py-line">    <tt class="py-string">"TB"</tt><tt class="py-op">:</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-number">40</tt><tt class="py-op">,</tt> </tt>
-<a name="L299"></a><tt class="py-lineno">299</tt>  <tt class="py-line">    <tt class="py-op">}</tt> </tt>
-<a name="_media_size_to_long"></a><div id="_media_size_to_long-def"><a name="L300"></a><tt class="py-lineno">300</tt>  <tt class="py-line"> </tt>
-<a name="L301"></a><tt class="py-lineno">301</tt>  <tt class="py-line"> </tt>
-<a name="L302"></a><tt class="py-lineno">302</tt> <a class="py-toggle" href="#" id="_media_size_to_long-toggle" onclick="return toggle('_media_size_to_long');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#_media_size_to_long">_media_size_to_long</a><tt class="py-op">(</tt><tt class="py-param">maxSize</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_media_size_to_long-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_media_size_to_long-expanded"><a name="L303"></a><tt class="py-lineno">303</tt>  <tt class="py-line">  <tt class="py-docstring">"""Convert a string media size, such as 10GB or 3TB into an integer.</tt> </tt>
-<a name="L304"></a><tt class="py-lineno">304</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L305"></a><tt class="py-lineno">305</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L306"></a><tt class="py-lineno">306</tt>  <tt class="py-line"><tt class="py-docstring">    maxSize: string, size as a string, such as 2MB or 7GB.</tt> </tt>
-<a name="L307"></a><tt class="py-lineno">307</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L308"></a><tt class="py-lineno">308</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L309"></a><tt class="py-lineno">309</tt>  <tt class="py-line"><tt class="py-docstring">    The size as an integer value.</tt> </tt>
-<a name="L310"></a><tt class="py-lineno">310</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L311"></a><tt class="py-lineno">311</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">maxSize</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt>
-<a name="L312"></a><tt class="py-lineno">312</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
-<a name="L313"></a><tt class="py-lineno">313</tt>  <tt class="py-line">  <tt class="py-name">units</tt> <tt class="py-op">=</tt> <tt class="py-name">maxSize</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">upper</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L314"></a><tt class="py-lineno">314</tt>  <tt class="py-line">  <tt class="py-name">multiplier</tt> <tt class="py-op">=</tt> <tt id="link-87" class="py-name"><a title="apiclient.discovery.MULTIPLIERS" class="py-name" href="#" onclick="return doclink('link-87', 'MULTIPLIERS', 'link-86');">MULTIPLIERS</a></tt><tt class="py-op">.</tt><tt id="link-88" class="py-name"><a title="apiclient.schema.Schemas.get
+<a name="L266"></a><tt class="py-lineno">266</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L267"></a><tt class="py-lineno">267</tt>  <tt class="py-line"><tt class="py-docstring">    value: any, the value to convert</tt> </tt>
+<a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line"><tt class="py-docstring">    schema_type: string, the type that value should be interpreted as</tt> </tt>
+<a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L271"></a><tt class="py-lineno">271</tt>  <tt class="py-line"><tt class="py-docstring">    A string representation of 'value' based on the schema_type.</tt> </tt>
+<a name="L272"></a><tt class="py-lineno">272</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L273"></a><tt class="py-lineno">273</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'string'</tt><tt class="py-op">:</tt> </tt>
+<a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">u''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L275"></a><tt class="py-lineno">275</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">value</tt> </tt>
+<a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
+<a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line">  <tt class="py-keyword">elif</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'integer'</tt><tt class="py-op">:</tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line">  <tt class="py-keyword">elif</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'number'</tt><tt class="py-op">:</tt> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L282"></a><tt class="py-lineno">282</tt>  <tt class="py-line">  <tt class="py-keyword">elif</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'boolean'</tt><tt class="py-op">:</tt> </tt>
+<a name="L283"></a><tt class="py-lineno">283</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">bool</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L284"></a><tt class="py-lineno">284</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L285"></a><tt class="py-lineno">285</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">u''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L286"></a><tt class="py-lineno">286</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">value</tt> </tt>
+<a name="L287"></a><tt class="py-lineno">287</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L288"></a><tt class="py-lineno">288</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line"> </tt>
+<a name="_media_size_to_long"></a><div id="_media_size_to_long-def"><a name="L290"></a><tt class="py-lineno">290</tt>  <tt class="py-line"> </tt>
+<a name="L291"></a><tt class="py-lineno">291</tt> <a class="py-toggle" href="#" id="_media_size_to_long-toggle" onclick="return toggle('_media_size_to_long');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#_media_size_to_long">_media_size_to_long</a><tt class="py-op">(</tt><tt class="py-param">maxSize</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_media_size_to_long-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_media_size_to_long-expanded"><a name="L292"></a><tt class="py-lineno">292</tt>  <tt class="py-line">  <tt class="py-docstring">"""Convert a string media size, such as 10GB or 3TB into an integer.</tt> </tt>
+<a name="L293"></a><tt class="py-lineno">293</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line"><tt class="py-docstring">    maxSize: string, size as a string, such as 2MB or 7GB.</tt> </tt>
+<a name="L296"></a><tt class="py-lineno">296</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L298"></a><tt class="py-lineno">298</tt>  <tt class="py-line"><tt class="py-docstring">    The size as an integer value.</tt> </tt>
+<a name="L299"></a><tt class="py-lineno">299</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L300"></a><tt class="py-lineno">300</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">maxSize</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt>
+<a name="L301"></a><tt class="py-lineno">301</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-number">0L</tt> </tt>
+<a name="L302"></a><tt class="py-lineno">302</tt>  <tt class="py-line">  <tt class="py-name">units</tt> <tt class="py-op">=</tt> <tt class="py-name">maxSize</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">upper</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L303"></a><tt class="py-lineno">303</tt>  <tt class="py-line">  <tt class="py-name">bit_shift</tt> <tt class="py-op">=</tt> <tt id="link-94" class="py-name"><a title="apiclient.discovery._MEDIA_SIZE_BIT_SHIFTS" class="py-name" href="#" onclick="return doclink('link-94', '_MEDIA_SIZE_BIT_SHIFTS', 'link-54');">_MEDIA_SIZE_BIT_SHIFTS</a></tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-88', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">units</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
-<a name="L315"></a><tt class="py-lineno">315</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">multiplier</tt><tt class="py-op">:</tt> </tt>
-<a name="L316"></a><tt class="py-lineno">316</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">maxSize</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-name">multiplier</tt> </tt>
-<a name="L317"></a><tt class="py-lineno">317</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L318"></a><tt class="py-lineno">318</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">maxSize</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L319"></a><tt class="py-lineno">319</tt>  <tt class="py-line"> </tt>
-<a name="createMethod"></a><div id="createMethod-def"><a name="L320"></a><tt class="py-lineno">320</tt>  <tt class="py-line"> </tt>
-<a name="L321"></a><tt class="py-lineno">321</tt> <a class="py-toggle" href="#" id="createMethod-toggle" onclick="return toggle('createMethod');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#createMethod">createMethod</a><tt class="py-op">(</tt><tt class="py-param">methodName</tt><tt class="py-op">,</tt> <tt class="py-param">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="createMethod-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="createMethod-expanded"><a name="L322"></a><tt class="py-lineno">322</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates a method for attaching to a Resource.</tt> </tt>
-<a name="L323"></a><tt class="py-lineno">323</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L324"></a><tt class="py-lineno">324</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L325"></a><tt class="py-lineno">325</tt>  <tt class="py-line"><tt class="py-docstring">    methodName: string, name of the method to use.</tt> </tt>
-<a name="L326"></a><tt class="py-lineno">326</tt>  <tt class="py-line"><tt class="py-docstring">    methodDesc: object, fragment of deserialized discovery document that</tt> </tt>
-<a name="L327"></a><tt class="py-lineno">327</tt>  <tt class="py-line"><tt class="py-docstring">      describes the method.</tt> </tt>
-<a name="L328"></a><tt class="py-lineno">328</tt>  <tt class="py-line"><tt class="py-docstring">    rootDesc: object, the entire deserialized discovery document.</tt> </tt>
-<a name="L329"></a><tt class="py-lineno">329</tt>  <tt class="py-line"><tt class="py-docstring">    schema: object, mapping of schema names to schema descriptions.</tt> </tt>
-<a name="L330"></a><tt class="py-lineno">330</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L331"></a><tt class="py-lineno">331</tt>  <tt class="py-line">  <tt class="py-name">methodName</tt> <tt class="py-op">=</tt> <tt id="link-89" class="py-name" targets="Function apiclient.discovery.fix_method_name()=apiclient.discovery-module.html#fix_method_name"><a title="apiclient.discovery.fix_method_name" class="py-name" href="#" onclick="return doclink('link-89', 'fix_method_name', 'link-89');">fix_method_name</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">)</tt> </tt>
-<a name="L332"></a><tt class="py-lineno">332</tt>  <tt class="py-line">  <tt class="py-name">pathUrl</tt> <tt class="py-op">=</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'path'</tt><tt class="py-op">]</tt> </tt>
-<a name="L333"></a><tt class="py-lineno">333</tt>  <tt class="py-line">  <tt class="py-name">httpMethod</tt> <tt class="py-op">=</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'httpMethod'</tt><tt class="py-op">]</tt> </tt>
-<a name="L334"></a><tt class="py-lineno">334</tt>  <tt class="py-line">  <tt class="py-name">methodId</tt> <tt class="py-op">=</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'id'</tt><tt class="py-op">]</tt> </tt>
-<a name="L335"></a><tt class="py-lineno">335</tt>  <tt class="py-line"> </tt>
-<a name="L336"></a><tt class="py-lineno">336</tt>  <tt class="py-line">  <tt class="py-name">mediaPathUrl</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L337"></a><tt class="py-lineno">337</tt>  <tt class="py-line">  <tt id="link-90" class="py-name" targets="Variable apiclient.model.BaseModel.accept=apiclient.model.BaseModel-class.html#accept,Variable apiclient.model.JsonModel.accept=apiclient.model.JsonModel-class.html#accept,Variable apiclient.model.MediaModel.accept=apiclient.model.MediaModel-class.html#accept,Variable apiclient.model.ProtocolBufferModel.accept=apiclient.model.ProtocolBufferModel-class.html#accept,Variable apiclient.model.RawModel.accept=apiclient.model.RawModel-class.html#accept"><a title="apiclient.model.BaseModel.accept
-apiclient.model.JsonModel.accept
-apiclient.model.MediaModel.accept
-apiclient.model.ProtocolBufferModel.accept
-apiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-90', 'accept', 'link-90');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L338"></a><tt class="py-lineno">338</tt>  <tt class="py-line">  <tt class="py-name">maxSize</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L339"></a><tt class="py-lineno">339</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'mediaUpload'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L340"></a><tt class="py-lineno">340</tt>  <tt class="py-line">    <tt class="py-name">mediaUpload</tt> <tt class="py-op">=</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'mediaUpload'</tt><tt class="py-op">]</tt> </tt>
-<a name="L341"></a><tt class="py-lineno">341</tt>  <tt class="py-line">    <tt class="py-name">mediaPathUrl</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">rootDesc</tt><tt class="py-op">[</tt><tt class="py-string">'rootUrl'</tt><tt class="py-op">]</tt> <tt class="py-op">+</tt> <tt class="py-string">'upload/'</tt> <tt class="py-op">+</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">[</tt><tt class="py-string">'servicePath'</tt><tt class="py-op">]</tt> </tt>
-<a name="L342"></a><tt class="py-lineno">342</tt>  <tt class="py-line">                    <tt class="py-op">+</tt> <tt class="py-name">pathUrl</tt><tt class="py-op">)</tt> </tt>
-<a name="L343"></a><tt class="py-lineno">343</tt>  <tt class="py-line">    <tt id="link-91" class="py-name"><a title="apiclient.model.BaseModel.accept
-apiclient.model.JsonModel.accept
-apiclient.model.MediaModel.accept
-apiclient.model.ProtocolBufferModel.accept
-apiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-91', 'accept', 'link-90');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-name">mediaUpload</tt><tt class="py-op">[</tt><tt class="py-string">'accept'</tt><tt class="py-op">]</tt> </tt>
-<a name="L344"></a><tt class="py-lineno">344</tt>  <tt class="py-line">    <tt class="py-name">maxSize</tt> <tt class="py-op">=</tt> <tt id="link-92" class="py-name" targets="Function apiclient.discovery._media_size_to_long()=apiclient.discovery-module.html#_media_size_to_long"><a title="apiclient.discovery._media_size_to_long" class="py-name" href="#" onclick="return doclink('link-92', '_media_size_to_long', 'link-92');">_media_size_to_long</a></tt><tt class="py-op">(</tt><tt class="py-name">mediaUpload</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-95', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">units</tt><tt class="py-op">)</tt> </tt>
+<a name="L304"></a><tt class="py-lineno">304</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">bit_shift</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="L305"></a><tt class="py-lineno">305</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">long</tt><tt class="py-op">(</tt><tt class="py-name">maxSize</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-name">bit_shift</tt> </tt>
+<a name="L306"></a><tt class="py-lineno">306</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L307"></a><tt class="py-lineno">307</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">long</tt><tt class="py-op">(</tt><tt class="py-name">maxSize</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L308"></a><tt class="py-lineno">308</tt>  <tt class="py-line"> </tt>
+<a name="_media_path_url_from_info"></a><div id="_media_path_url_from_info-def"><a name="L309"></a><tt class="py-lineno">309</tt>  <tt class="py-line"> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt> <a class="py-toggle" href="#" id="_media_path_url_from_info-toggle" onclick="return toggle('_media_path_url_from_info');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#_media_path_url_from_info">_media_path_url_from_info</a><tt class="py-op">(</tt><tt class="py-param">root_desc</tt><tt class="py-op">,</tt> <tt class="py-param">path_url</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_media_path_url_from_info-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_media_path_url_from_info-expanded"><a name="L311"></a><tt class="py-lineno">311</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates an absolute media path URL.</tt> </tt>
+<a name="L312"></a><tt class="py-lineno">312</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L313"></a><tt class="py-lineno">313</tt>  <tt class="py-line"><tt class="py-docstring">  Constructed using the API root URI and service path from the discovery</tt> </tt>
+<a name="L314"></a><tt class="py-lineno">314</tt>  <tt class="py-line"><tt class="py-docstring">  document and the relative path for the API method.</tt> </tt>
+<a name="L315"></a><tt class="py-lineno">315</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L316"></a><tt class="py-lineno">316</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L317"></a><tt class="py-lineno">317</tt>  <tt class="py-line"><tt class="py-docstring">    root_desc: Dictionary; the entire original deserialized discovery document.</tt> </tt>
+<a name="L318"></a><tt class="py-lineno">318</tt>  <tt class="py-line"><tt class="py-docstring">    path_url: String; the relative URL for the API method. Relative to the API</tt> </tt>
+<a name="L319"></a><tt class="py-lineno">319</tt>  <tt class="py-line"><tt class="py-docstring">        root, which is specified in the discovery document.</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt>  <tt class="py-line"><tt class="py-docstring">    String; the absolute URI for media upload for the API method.</tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-string">'%(root)supload/%(service_path)s%(path)s'</tt> <tt class="py-op">%</tt> <tt class="py-op">{</tt> </tt>
+<a name="L325"></a><tt class="py-lineno">325</tt>  <tt class="py-line">      <tt class="py-string">'root'</tt><tt class="py-op">:</tt> <tt class="py-name">root_desc</tt><tt class="py-op">[</tt><tt class="py-string">'rootUrl'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L326"></a><tt class="py-lineno">326</tt>  <tt class="py-line">      <tt class="py-string">'service_path'</tt><tt class="py-op">:</tt> <tt class="py-name">root_desc</tt><tt class="py-op">[</tt><tt class="py-string">'servicePath'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L327"></a><tt class="py-lineno">327</tt>  <tt class="py-line">      <tt class="py-string">'path'</tt><tt class="py-op">:</tt> <tt class="py-name">path_url</tt><tt class="py-op">,</tt> </tt>
+<a name="L328"></a><tt class="py-lineno">328</tt>  <tt class="py-line">  <tt class="py-op">}</tt> </tt>
+</div><a name="L329"></a><tt class="py-lineno">329</tt>  <tt class="py-line"> </tt>
+<a name="_fix_up_parameters"></a><div id="_fix_up_parameters-def"><a name="L330"></a><tt class="py-lineno">330</tt>  <tt class="py-line"> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt> <a class="py-toggle" href="#" id="_fix_up_parameters-toggle" onclick="return toggle('_fix_up_parameters');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#_fix_up_parameters">_fix_up_parameters</a><tt class="py-op">(</tt><tt class="py-param">method_desc</tt><tt class="py-op">,</tt> <tt class="py-param">root_desc</tt><tt class="py-op">,</tt> <tt class="py-param">http_method</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_fix_up_parameters-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_fix_up_parameters-expanded"><a name="L332"></a><tt class="py-lineno">332</tt>  <tt class="py-line">  <tt class="py-docstring">"""Updates parameters of an API method with values specific to this library.</tt> </tt>
+<a name="L333"></a><tt class="py-lineno">333</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L334"></a><tt class="py-lineno">334</tt>  <tt class="py-line"><tt class="py-docstring">  Specifically, adds whatever global parameters are specified by the API to the</tt> </tt>
+<a name="L335"></a><tt class="py-lineno">335</tt>  <tt class="py-line"><tt class="py-docstring">  parameters for the individual method. Also adds parameters which don't</tt> </tt>
+<a name="L336"></a><tt class="py-lineno">336</tt>  <tt class="py-line"><tt class="py-docstring">  appear in the discovery document, but are available to all discovery based</tt> </tt>
+<a name="L337"></a><tt class="py-lineno">337</tt>  <tt class="py-line"><tt class="py-docstring">  APIs (these are listed in STACK_QUERY_PARAMETERS).</tt> </tt>
+<a name="L338"></a><tt class="py-lineno">338</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L339"></a><tt class="py-lineno">339</tt>  <tt class="py-line"><tt class="py-docstring">  SIDE EFFECTS: This updates the parameters dictionary object in the method</tt> </tt>
+<a name="L340"></a><tt class="py-lineno">340</tt>  <tt class="py-line"><tt class="py-docstring">  description.</tt> </tt>
+<a name="L341"></a><tt class="py-lineno">341</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L342"></a><tt class="py-lineno">342</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt>  <tt class="py-line"><tt class="py-docstring">    method_desc: Dictionary with metadata describing an API method. Value comes</tt> </tt>
+<a name="L344"></a><tt class="py-lineno">344</tt>  <tt class="py-line"><tt class="py-docstring">        from the dictionary of methods stored in the 'methods' key in the</tt> </tt>
+<a name="L345"></a><tt class="py-lineno">345</tt>  <tt class="py-line"><tt class="py-docstring">        deserialized discovery document.</tt> </tt>
+<a name="L346"></a><tt class="py-lineno">346</tt>  <tt class="py-line"><tt class="py-docstring">    root_desc: Dictionary; the entire original deserialized discovery document.</tt> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt>  <tt class="py-line"><tt class="py-docstring">    http_method: String; the HTTP method used to call the API method described</tt> </tt>
+<a name="L348"></a><tt class="py-lineno">348</tt>  <tt class="py-line"><tt class="py-docstring">        in method_desc.</tt> </tt>
+<a name="L349"></a><tt class="py-lineno">349</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L350"></a><tt class="py-lineno">350</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line"><tt class="py-docstring">    The updated Dictionary stored in the 'parameters' key of the method</tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line"><tt class="py-docstring">        description dictionary.</tt> </tt>
+<a name="L353"></a><tt class="py-lineno">353</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L354"></a><tt class="py-lineno">354</tt>  <tt class="py-line">  <tt class="py-name">parameters</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">.</tt><tt class="py-name">setdefault</tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line"> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt>  <tt class="py-line">  <tt class="py-comment"># Add in the parameters common to all methods.</tt> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">description</tt> <tt class="py-keyword">in</tt> <tt class="py-name">root_desc</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-93', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'maxSize'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L345"></a><tt class="py-lineno">345</tt>  <tt class="py-line"> </tt>
-<a name="L346"></a><tt class="py-lineno">346</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'parameters'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L347"></a><tt class="py-lineno">347</tt>  <tt class="py-line">    <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L348"></a><tt class="py-lineno">348</tt>  <tt class="py-line"> </tt>
-<a name="L349"></a><tt class="py-lineno">349</tt>  <tt class="py-line">  <tt class="py-comment"># Add in the parameters common to all methods.</tt> </tt>
-<a name="L350"></a><tt class="py-lineno">350</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-94', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line">    <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">desc</tt> </tt>
-<a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line"> </tt>
-<a name="L353"></a><tt class="py-lineno">353</tt>  <tt class="py-line">  <tt class="py-comment"># Add in undocumented query parameters.</tt> </tt>
-<a name="L354"></a><tt class="py-lineno">354</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt id="link-95" class="py-name"><a title="apiclient.discovery.STACK_QUERY_PARAMETERS" class="py-name" href="#" onclick="return doclink('link-95', 'STACK_QUERY_PARAMETERS', 'link-50');">STACK_QUERY_PARAMETERS</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line">    <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L356"></a><tt class="py-lineno">356</tt>  <tt class="py-line">        <tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-string">'string'</tt><tt class="py-op">,</tt> </tt>
-<a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line">        <tt class="py-string">'location'</tt><tt class="py-op">:</tt> <tt class="py-string">'query'</tt> </tt>
-<a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line">        <tt class="py-op">}</tt> </tt>
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-96', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line">    <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">description</tt> </tt>
 <a name="L359"></a><tt class="py-lineno">359</tt>  <tt class="py-line"> </tt>
-<a name="L360"></a><tt class="py-lineno">360</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">httpMethod</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-string">'PUT'</tt><tt class="py-op">,</tt> <tt class="py-string">'POST'</tt><tt class="py-op">,</tt> <tt class="py-string">'PATCH'</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'request'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L361"></a><tt class="py-lineno">361</tt>  <tt class="py-line">    <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line">        <tt class="py-string">'description'</tt><tt class="py-op">:</tt> <tt class="py-string">'The request body.'</tt><tt class="py-op">,</tt> </tt>
-<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line">        <tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-string">'object'</tt><tt class="py-op">,</tt> </tt>
-<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line">        <tt class="py-string">'required'</tt><tt class="py-op">:</tt> <tt class="py-name">True</tt><tt class="py-op">,</tt> </tt>
-<a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line">        <tt class="py-op">}</tt> </tt>
-<a name="L366"></a><tt class="py-lineno">366</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'request'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line">      <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'request'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L369"></a><tt class="py-lineno">369</tt>  <tt class="py-line">      <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'object'</tt> </tt>
-<a name="L370"></a><tt class="py-lineno">370</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'mediaUpload'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L371"></a><tt class="py-lineno">371</tt>  <tt class="py-line">    <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'media_body'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L372"></a><tt class="py-lineno">372</tt>  <tt class="py-line">        <tt class="py-string">'description'</tt><tt class="py-op">:</tt> </tt>
-<a name="L373"></a><tt class="py-lineno">373</tt>  <tt class="py-line">          <tt class="py-string">'The filename of the media request body, or an instance of a '</tt> </tt>
-<a name="L374"></a><tt class="py-lineno">374</tt>  <tt class="py-line">          <tt class="py-string">'MediaUpload object.'</tt><tt class="py-op">,</tt> </tt>
-<a name="L375"></a><tt class="py-lineno">375</tt>  <tt class="py-line">        <tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-string">'string'</tt><tt class="py-op">,</tt> </tt>
-<a name="L376"></a><tt class="py-lineno">376</tt>  <tt class="py-line">        <tt class="py-string">'required'</tt><tt class="py-op">:</tt> <tt class="py-name">False</tt><tt class="py-op">,</tt> </tt>
-<a name="L377"></a><tt class="py-lineno">377</tt>  <tt class="py-line">        <tt class="py-op">}</tt> </tt>
-<a name="L378"></a><tt class="py-lineno">378</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'body'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L379"></a><tt class="py-lineno">379</tt>  <tt class="py-line">      <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'required'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L380"></a><tt class="py-lineno">380</tt>  <tt class="py-line"> </tt>
-<a name="L381"></a><tt class="py-lineno">381</tt>  <tt class="py-line">  <tt class="py-name">argmap</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> <tt class="py-comment"># Map from method parameter name to query parameter name</tt> </tt>
-<a name="L382"></a><tt class="py-lineno">382</tt>  <tt class="py-line">  <tt class="py-name">required_params</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> <tt class="py-comment"># Required parameters</tt> </tt>
-<a name="L383"></a><tt class="py-lineno">383</tt>  <tt class="py-line">  <tt class="py-name">repeated_params</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> <tt class="py-comment"># Repeated parameters</tt> </tt>
-<a name="L384"></a><tt class="py-lineno">384</tt>  <tt class="py-line">  <tt class="py-name">pattern_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt>  <tt class="py-comment"># Parameters that must match a regex</tt> </tt>
-<a name="L385"></a><tt class="py-lineno">385</tt>  <tt class="py-line">  <tt id="link-96" class="py-name" targets="Variable oauth2client.tools.ClientRedirectServer.query_params=oauth2client.tools.ClientRedirectServer-class.html#query_params"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-96', 'query_params', 'link-96');">query_params</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> <tt class="py-comment"># Parameters that will be used in the query string</tt> </tt>
-<a name="L386"></a><tt class="py-lineno">386</tt>  <tt class="py-line">  <tt class="py-name">path_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> <tt class="py-comment"># Parameters that will be used in the base URL</tt> </tt>
-<a name="L387"></a><tt class="py-lineno">387</tt>  <tt class="py-line">  <tt class="py-name">param_type</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> <tt class="py-comment"># The type of the parameter</tt> </tt>
-<a name="L388"></a><tt class="py-lineno">388</tt>  <tt class="py-line">  <tt class="py-name">enum_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> <tt class="py-comment"># Allowable enumeration values for each parameter</tt> </tt>
-<a name="L389"></a><tt class="py-lineno">389</tt>  <tt class="py-line"> </tt>
-<a name="L390"></a><tt class="py-lineno">390</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'parameters'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L391"></a><tt class="py-lineno">391</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">arg</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L392"></a><tt class="py-lineno">392</tt>  <tt class="py-line">      <tt class="py-name">param</tt> <tt class="py-op">=</tt> <tt id="link-97" class="py-name" targets="Function apiclient.discovery.key2param()=apiclient.discovery-module.html#key2param"><a title="apiclient.discovery.key2param" class="py-name" href="#" onclick="return doclink('link-97', 'key2param', 'link-97');">key2param</a></tt><tt class="py-op">(</tt><tt class="py-name">arg</tt><tt class="py-op">)</tt> </tt>
-<a name="L393"></a><tt class="py-lineno">393</tt>  <tt class="py-line">      <tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">arg</tt> </tt>
-<a name="L394"></a><tt class="py-lineno">394</tt>  <tt class="py-line"> </tt>
-<a name="L395"></a><tt class="py-lineno">395</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name"><a title="apiclient.schema.Schemas.get
+<a name="L360"></a><tt class="py-lineno">360</tt>  <tt class="py-line">  <tt class="py-comment"># Add in undocumented query parameters.</tt> </tt>
+<a name="L361"></a><tt class="py-lineno">361</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt id="link-97" class="py-name"><a title="apiclient.discovery.STACK_QUERY_PARAMETERS" class="py-name" href="#" onclick="return doclink('link-97', 'STACK_QUERY_PARAMETERS', 'link-57');">STACK_QUERY_PARAMETERS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line">    <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-98" class="py-name"><a title="apiclient.discovery.STACK_QUERY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-98', 'STACK_QUERY_PARAMETER_DEFAULT_VALUE', 'link-58');">STACK_QUERY_PARAMETER_DEFAULT_VALUE</a></tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line"> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line">  <tt class="py-comment"># Add 'body' (our own reserved word) to parameters if the method supports</tt> </tt>
+<a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line">  <tt class="py-comment"># a request payload.</tt> </tt>
+<a name="L366"></a><tt class="py-lineno">366</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">http_method</tt> <tt class="py-keyword">in</tt> <tt id="link-99" class="py-name"><a title="apiclient.discovery.HTTP_PAYLOAD_METHODS" class="py-name" href="#" onclick="return doclink('link-99', 'HTTP_PAYLOAD_METHODS', 'link-53');">HTTP_PAYLOAD_METHODS</a></tt> <tt class="py-keyword">and</tt> <tt class="py-string">'request'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">method_desc</tt><tt class="py-op">:</tt> </tt>
+<a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line">    <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt id="link-100" class="py-name"><a title="apiclient.discovery.BODY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-100', 'BODY_PARAMETER_DEFAULT_VALUE', 'link-55');">BODY_PARAMETER_DEFAULT_VALUE</a></tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line">    <tt class="py-name">body</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'request'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L369"></a><tt class="py-lineno">369</tt>  <tt class="py-line">    <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">body</tt> </tt>
+<a name="L370"></a><tt class="py-lineno">370</tt>  <tt class="py-line"> </tt>
+<a name="L371"></a><tt class="py-lineno">371</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">parameters</tt> </tt>
+</div><a name="L372"></a><tt class="py-lineno">372</tt>  <tt class="py-line"> </tt>
+<a name="_fix_up_media_upload"></a><div id="_fix_up_media_upload-def"><a name="L373"></a><tt class="py-lineno">373</tt>  <tt class="py-line"> </tt>
+<a name="L374"></a><tt class="py-lineno">374</tt> <a class="py-toggle" href="#" id="_fix_up_media_upload-toggle" onclick="return toggle('_fix_up_media_upload');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#_fix_up_media_upload">_fix_up_media_upload</a><tt class="py-op">(</tt><tt class="py-param">method_desc</tt><tt class="py-op">,</tt> <tt class="py-param">root_desc</tt><tt class="py-op">,</tt> <tt class="py-param">path_url</tt><tt class="py-op">,</tt> <tt class="py-param">parameters</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_fix_up_media_upload-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_fix_up_media_upload-expanded"><a name="L375"></a><tt class="py-lineno">375</tt>  <tt class="py-line">  <tt class="py-docstring">"""Updates parameters of API by adding 'media_body' if supported by method.</tt> </tt>
+<a name="L376"></a><tt class="py-lineno">376</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L377"></a><tt class="py-lineno">377</tt>  <tt class="py-line"><tt class="py-docstring">  SIDE EFFECTS: If the method supports media upload and has a required body,</tt> </tt>
+<a name="L378"></a><tt class="py-lineno">378</tt>  <tt class="py-line"><tt class="py-docstring">  sets body to be optional (required=False) instead. Also, if there is a</tt> </tt>
+<a name="L379"></a><tt class="py-lineno">379</tt>  <tt class="py-line"><tt class="py-docstring">  'mediaUpload' in the method description, adds 'media_upload' key to</tt> </tt>
+<a name="L380"></a><tt class="py-lineno">380</tt>  <tt class="py-line"><tt class="py-docstring">  parameters.</tt> </tt>
+<a name="L381"></a><tt class="py-lineno">381</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L382"></a><tt class="py-lineno">382</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L383"></a><tt class="py-lineno">383</tt>  <tt class="py-line"><tt class="py-docstring">    method_desc: Dictionary with metadata describing an API method. Value comes</tt> </tt>
+<a name="L384"></a><tt class="py-lineno">384</tt>  <tt class="py-line"><tt class="py-docstring">        from the dictionary of methods stored in the 'methods' key in the</tt> </tt>
+<a name="L385"></a><tt class="py-lineno">385</tt>  <tt class="py-line"><tt class="py-docstring">        deserialized discovery document.</tt> </tt>
+<a name="L386"></a><tt class="py-lineno">386</tt>  <tt class="py-line"><tt class="py-docstring">    root_desc: Dictionary; the entire original deserialized discovery document.</tt> </tt>
+<a name="L387"></a><tt class="py-lineno">387</tt>  <tt class="py-line"><tt class="py-docstring">    path_url: String; the relative URL for the API method. Relative to the API</tt> </tt>
+<a name="L388"></a><tt class="py-lineno">388</tt>  <tt class="py-line"><tt class="py-docstring">        root, which is specified in the discovery document.</tt> </tt>
+<a name="L389"></a><tt class="py-lineno">389</tt>  <tt class="py-line"><tt class="py-docstring">    parameters: A dictionary describing method parameters for method described</tt> </tt>
+<a name="L390"></a><tt class="py-lineno">390</tt>  <tt class="py-line"><tt class="py-docstring">        in method_desc.</tt> </tt>
+<a name="L391"></a><tt class="py-lineno">391</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L392"></a><tt class="py-lineno">392</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L393"></a><tt class="py-lineno">393</tt>  <tt class="py-line"><tt class="py-docstring">    Triple (accept, max_size, media_path_url) where:</tt> </tt>
+<a name="L394"></a><tt class="py-lineno">394</tt>  <tt class="py-line"><tt class="py-docstring">      - accept is a list of strings representing what content types are</tt> </tt>
+<a name="L395"></a><tt class="py-lineno">395</tt>  <tt class="py-line"><tt class="py-docstring">        accepted for media upload. Defaults to empty list if not in the</tt> </tt>
+<a name="L396"></a><tt class="py-lineno">396</tt>  <tt class="py-line"><tt class="py-docstring">        discovery document.</tt> </tt>
+<a name="L397"></a><tt class="py-lineno">397</tt>  <tt class="py-line"><tt class="py-docstring">      - max_size is a long representing the max size in bytes allowed for a</tt> </tt>
+<a name="L398"></a><tt class="py-lineno">398</tt>  <tt class="py-line"><tt class="py-docstring">        media upload. Defaults to 0L if not in the discovery document.</tt> </tt>
+<a name="L399"></a><tt class="py-lineno">399</tt>  <tt class="py-line"><tt class="py-docstring">      - media_path_url is a String; the absolute URI for media upload for the</tt> </tt>
+<a name="L400"></a><tt class="py-lineno">400</tt>  <tt class="py-line"><tt class="py-docstring">        API method. Constructed using the API root URI and service path from</tt> </tt>
+<a name="L401"></a><tt class="py-lineno">401</tt>  <tt class="py-line"><tt class="py-docstring">        the discovery document and the relative path for the API method. If</tt> </tt>
+<a name="L402"></a><tt class="py-lineno">402</tt>  <tt class="py-line"><tt class="py-docstring">        media upload is not supported, this is None.</tt> </tt>
+<a name="L403"></a><tt class="py-lineno">403</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L404"></a><tt class="py-lineno">404</tt>  <tt class="py-line">  <tt class="py-name">media_upload</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-98', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'pattern'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L396"></a><tt class="py-lineno">396</tt>  <tt class="py-line">        <tt class="py-name">pattern_params</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">desc</tt><tt class="py-op">[</tt><tt class="py-string">'pattern'</tt><tt class="py-op">]</tt> </tt>
-<a name="L397"></a><tt class="py-lineno">397</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-99', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'enum'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L398"></a><tt class="py-lineno">398</tt>  <tt class="py-line">        <tt class="py-name">enum_params</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">desc</tt><tt class="py-op">[</tt><tt class="py-string">'enum'</tt><tt class="py-op">]</tt> </tt>
-<a name="L399"></a><tt class="py-lineno">399</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-100', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'required'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L400"></a><tt class="py-lineno">400</tt>  <tt class="py-line">        <tt class="py-name">required_params</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
-<a name="L401"></a><tt class="py-lineno">401</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-101', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'repeated'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L402"></a><tt class="py-lineno">402</tt>  <tt class="py-line">        <tt class="py-name">repeated_params</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
-<a name="L403"></a><tt class="py-lineno">403</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-102', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'location'</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'query'</tt><tt class="py-op">:</tt> </tt>
-<a name="L404"></a><tt class="py-lineno">404</tt>  <tt class="py-line">        <tt id="link-103" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-103', 'query_params', 'link-96');">query_params</a></tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
-<a name="L405"></a><tt class="py-lineno">405</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-104', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'location'</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'path'</tt><tt class="py-op">:</tt> </tt>
-<a name="L406"></a><tt class="py-lineno">406</tt>  <tt class="py-line">        <tt class="py-name">path_params</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">param</tt> </tt>
-<a name="L407"></a><tt class="py-lineno">407</tt>  <tt class="py-line">      <tt class="py-name">param_type</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-105', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">,</tt> <tt class="py-string">'string'</tt><tt class="py-op">)</tt> </tt>
-<a name="L408"></a><tt class="py-lineno">408</tt>  <tt class="py-line"> </tt>
-<a name="L409"></a><tt class="py-lineno">409</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">match</tt> <tt class="py-keyword">in</tt> <tt id="link-106" class="py-name"><a title="apiclient.discovery.URITEMPLATE" class="py-name" href="#" onclick="return doclink('link-106', 'URITEMPLATE', 'link-46');">URITEMPLATE</a></tt><tt class="py-op">.</tt><tt class="py-name">finditer</tt><tt class="py-op">(</tt><tt class="py-name">pathUrl</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L410"></a><tt class="py-lineno">410</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">namematch</tt> <tt class="py-keyword">in</tt> <tt id="link-107" class="py-name"><a title="apiclient.discovery.VARNAME" class="py-name" href="#" onclick="return doclink('link-107', 'VARNAME', 'link-47');">VARNAME</a></tt><tt class="py-op">.</tt><tt class="py-name">finditer</tt><tt class="py-op">(</tt><tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L411"></a><tt class="py-lineno">411</tt>  <tt class="py-line">      <tt class="py-name">name</tt> <tt class="py-op">=</tt> <tt id="link-108" class="py-name"><a title="apiclient.discovery.key2param" class="py-name" href="#" onclick="return doclink('link-108', 'key2param', 'link-97');">key2param</a></tt><tt class="py-op">(</tt><tt class="py-name">namematch</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L412"></a><tt class="py-lineno">412</tt>  <tt class="py-line">      <tt class="py-name">path_params</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">name</tt> </tt>
-<a name="L413"></a><tt class="py-lineno">413</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt id="link-109" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-109', 'query_params', 'link-96');">query_params</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L414"></a><tt class="py-lineno">414</tt>  <tt class="py-line">        <tt id="link-110" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-110', 'query_params', 'link-96');">query_params</a></tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
-<a name="L415"></a><tt class="py-lineno">415</tt>  <tt class="py-line"> </tt>
-<a name="L416"></a><tt class="py-lineno">416</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">method</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L417"></a><tt class="py-lineno">417</tt>  <tt class="py-line">    <tt class="py-comment"># Don't bother with doc string, it will be over-written by createMethod.</tt> </tt>
-<a name="L418"></a><tt class="py-lineno">418</tt>  <tt class="py-line"> </tt>
-<a name="L419"></a><tt class="py-lineno">419</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt class="py-name">iterkeys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L420"></a><tt class="py-lineno">420</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">argmap</tt><tt class="py-op">:</tt> </tt>
-<a name="L421"></a><tt class="py-lineno">421</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Got an unexpected keyword argument "%s"'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
-<a name="L422"></a><tt class="py-lineno">422</tt>  <tt class="py-line"> </tt>
-<a name="L423"></a><tt class="py-lineno">423</tt>  <tt class="py-line">    <tt class="py-comment"># Remove args that have a value of None.</tt> </tt>
-<a name="L424"></a><tt class="py-lineno">424</tt>  <tt class="py-line">    <tt class="py-name">keys</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L425"></a><tt class="py-lineno">425</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">keys</tt><tt class="py-op">:</tt> </tt>
-<a name="L426"></a><tt class="py-lineno">426</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L427"></a><tt class="py-lineno">427</tt>  <tt class="py-line">        <tt class="py-keyword">del</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
-<a name="L428"></a><tt class="py-lineno">428</tt>  <tt class="py-line"> </tt>
-<a name="L429"></a><tt class="py-lineno">429</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">required_params</tt><tt class="py-op">:</tt> </tt>
-<a name="L430"></a><tt class="py-lineno">430</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
-<a name="L431"></a><tt class="py-lineno">431</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Missing required parameter "%s"'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
-<a name="L432"></a><tt class="py-lineno">432</tt>  <tt class="py-line"> </tt>
-<a name="L433"></a><tt class="py-lineno">433</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt> <tt class="py-keyword">in</tt> <tt class="py-name">pattern_params</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L434"></a><tt class="py-lineno">434</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
-<a name="L435"></a><tt class="py-lineno">435</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L436"></a><tt class="py-lineno">436</tt>  <tt class="py-line">          <tt class="py-name">pvalues</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
-<a name="L437"></a><tt class="py-lineno">437</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L438"></a><tt class="py-lineno">438</tt>  <tt class="py-line">          <tt class="py-name">pvalues</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
-<a name="L439"></a><tt class="py-lineno">439</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">pvalue</tt> <tt class="py-keyword">in</tt> <tt class="py-name">pvalues</tt><tt class="py-op">:</tt> </tt>
-<a name="L440"></a><tt class="py-lineno">440</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">regex</tt><tt class="py-op">,</tt> <tt class="py-name">pvalue</tt><tt class="py-op">)</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L441"></a><tt class="py-lineno">441</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt> </tt>
-<a name="L442"></a><tt class="py-lineno">442</tt>  <tt class="py-line">                <tt class="py-string">'Parameter "%s" value "%s" does not match the pattern "%s"'</tt> <tt class="py-op">%</tt> </tt>
-<a name="L443"></a><tt class="py-lineno">443</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">pvalue</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L444"></a><tt class="py-lineno">444</tt>  <tt class="py-line"> </tt>
-<a name="L445"></a><tt class="py-lineno">445</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">enums</tt> <tt class="py-keyword">in</tt> <tt class="py-name">enum_params</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L446"></a><tt class="py-lineno">446</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
-<a name="L447"></a><tt class="py-lineno">447</tt>  <tt class="py-line">        <tt class="py-comment"># We need to handle the case of a repeated enum</tt> </tt>
-<a name="L448"></a><tt class="py-lineno">448</tt>  <tt class="py-line">        <tt class="py-comment"># name differently, since we want to handle both</tt> </tt>
-<a name="L449"></a><tt class="py-lineno">449</tt>  <tt class="py-line">        <tt class="py-comment"># arg='value' and arg=['value1', 'value2']</tt> </tt>
-<a name="L450"></a><tt class="py-lineno">450</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">repeated_params</tt> <tt class="py-keyword">and</tt> </tt>
-<a name="L451"></a><tt class="py-lineno">451</tt>  <tt class="py-line">            <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L452"></a><tt class="py-lineno">452</tt>  <tt class="py-line">          <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
-<a name="L453"></a><tt class="py-lineno">453</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L454"></a><tt class="py-lineno">454</tt>  <tt class="py-line">          <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
-<a name="L455"></a><tt class="py-lineno">455</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">values</tt><tt class="py-op">:</tt> </tt>
-<a name="L456"></a><tt class="py-lineno">456</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">enums</tt><tt class="py-op">:</tt> </tt>
-<a name="L457"></a><tt class="py-lineno">457</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt> </tt>
-<a name="L458"></a><tt class="py-lineno">458</tt>  <tt class="py-line">                <tt class="py-string">'Parameter "%s" value "%s" is not an allowed value in "%s"'</tt> <tt class="py-op">%</tt> </tt>
-<a name="L459"></a><tt class="py-lineno">459</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">enums</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L460"></a><tt class="py-lineno">460</tt>  <tt class="py-line"> </tt>
-<a name="L461"></a><tt class="py-lineno">461</tt>  <tt class="py-line">    <tt class="py-name">actual_query_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</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">actual_path_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</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">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</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-name">to_type</tt> <tt class="py-op">=</tt> <tt class="py-name">param_type</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-111', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-string">'string'</tt><tt class="py-op">)</tt> </tt>
-<a name="L465"></a><tt class="py-lineno">465</tt>  <tt class="py-line">      <tt class="py-comment"># For repeated parameters we cast each member of the list.</tt> </tt>
-<a name="L466"></a><tt class="py-lineno">466</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">repeated_params</tt> <tt class="py-keyword">and</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</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">cast_value</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt id="link-112" class="py-name" targets="Function apiclient.discovery._cast()=apiclient.discovery-module.html#_cast"><a title="apiclient.discovery._cast" class="py-name" href="#" onclick="return doclink('link-112', '_cast', 'link-112');">_cast</a></tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">to_type</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">x</tt> <tt class="py-keyword">in</tt> <tt class="py-name">value</tt><tt class="py-op">]</tt> </tt>
-<a name="L468"></a><tt class="py-lineno">468</tt>  <tt class="py-line">      <tt class="py-keyword">else</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">cast_value</tt> <tt class="py-op">=</tt> <tt id="link-113" class="py-name"><a title="apiclient.discovery._cast" class="py-name" href="#" onclick="return doclink('link-113', '_cast', 'link-112');">_cast</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">to_type</tt><tt class="py-op">)</tt> </tt>
-<a name="L470"></a><tt class="py-lineno">470</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt id="link-114" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-114', 'query_params', 'link-96');">query_params</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L471"></a><tt class="py-lineno">471</tt>  <tt class="py-line">        <tt class="py-name">actual_query_params</tt><tt class="py-op">[</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">cast_value</tt> </tt>
-<a name="L472"></a><tt class="py-lineno">472</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">path_params</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">actual_path_params</tt><tt class="py-op">[</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">cast_value</tt> </tt>
-<a name="L474"></a><tt class="py-lineno">474</tt>  <tt class="py-line">    <tt class="py-name">body_value</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-115" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-115', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
-<a name="L475"></a><tt class="py-lineno">475</tt>  <tt class="py-line">    <tt class="py-name">media_filename</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-116', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'media_body'</tt><tt class="py-op">,</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>
-<a name="L477"></a><tt class="py-lineno">477</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</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">actual_query_params</tt><tt class="py-op">[</tt><tt class="py-string">'key'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt> </tt>
-<a name="L479"></a><tt class="py-lineno">479</tt>  <tt class="py-line"> </tt>
-<a name="L480"></a><tt class="py-lineno">480</tt>  <tt class="py-line">    <tt id="link-117" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-117', 'model', 'link-29');">model</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt> </tt>
-<a name="L481"></a><tt class="py-lineno">481</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">methodName</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'_media'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L482"></a><tt class="py-lineno">482</tt>  <tt class="py-line">      <tt id="link-118" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-118', 'model', 'link-29');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-119" class="py-name"><a title="apiclient.model.MediaModel" class="py-name" href="#" onclick="return doclink('link-119', 'MediaModel', 'link-33');">MediaModel</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L483"></a><tt class="py-lineno">483</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-string">'response'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L484"></a><tt class="py-lineno">484</tt>  <tt class="py-line">      <tt id="link-120" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-120', 'model', 'link-29');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-121" class="py-name"><a title="apiclient.model.RawModel" class="py-name" href="#" onclick="return doclink('link-121', 'RawModel', 'link-36');">RawModel</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L485"></a><tt class="py-lineno">485</tt>  <tt class="py-line"> </tt>
-<a name="L486"></a><tt class="py-lineno">486</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L487"></a><tt class="py-lineno">487</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">,</tt> <tt class="py-name">query</tt><tt class="py-op">,</tt> <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt id="link-122" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-122', 'model', 'link-29');">model</a></tt><tt class="py-op">.</tt><tt id="link-123" 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-123', 'request', 'link-60');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">,</tt> </tt>
-<a name="L488"></a><tt class="py-lineno">488</tt>  <tt class="py-line">        <tt class="py-name">actual_path_params</tt><tt class="py-op">,</tt> <tt class="py-name">actual_query_params</tt><tt class="py-op">,</tt> <tt class="py-name">body_value</tt><tt class="py-op">)</tt> </tt>
-<a name="L489"></a><tt class="py-lineno">489</tt>  <tt class="py-line"> </tt>
-<a name="L490"></a><tt class="py-lineno">490</tt>  <tt class="py-line">    <tt class="py-name">expanded_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt class="py-name">pathUrl</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
-<a name="L491"></a><tt class="py-lineno">491</tt>  <tt class="py-line">    <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urljoin</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt><tt class="py-op">,</tt> <tt class="py-name">expanded_url</tt> <tt class="py-op">+</tt> <tt class="py-name">query</tt><tt class="py-op">)</tt> </tt>
-<a name="L492"></a><tt class="py-lineno">492</tt>  <tt class="py-line"> </tt>
-<a name="L493"></a><tt class="py-lineno">493</tt>  <tt class="py-line">    <tt id="link-124" class="py-name" targets="Method apiclient.http.MediaIoBaseUpload.resumable()=apiclient.http.MediaIoBaseUpload-class.html#resumable,Method apiclient.http.MediaUpload.resumable()=apiclient.http.MediaUpload-class.html#resumable"><a title="apiclient.http.MediaIoBaseUpload.resumable
-apiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-124', 'resumable', 'link-124');">resumable</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L494"></a><tt class="py-lineno">494</tt>  <tt class="py-line">    <tt class="py-name">multipart_boundary</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
-<a name="L495"></a><tt class="py-lineno">495</tt>  <tt class="py-line"> </tt>
-<a name="L496"></a><tt class="py-lineno">496</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">media_filename</tt><tt class="py-op">:</tt> </tt>
-<a name="L497"></a><tt class="py-lineno">497</tt>  <tt class="py-line">      <tt class="py-comment"># Ensure we end up with a valid MediaUpload object.</tt> </tt>
-<a name="L498"></a><tt class="py-lineno">498</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L499"></a><tt class="py-lineno">499</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">,</tt> <tt class="py-name">encoding</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">mimetypes</tt><tt class="py-op">.</tt><tt class="py-name">guess_type</tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">)</tt> </tt>
-<a name="L500"></a><tt class="py-lineno">500</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">media_mime_type</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L501"></a><tt class="py-lineno">501</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-125" class="py-name"><a title="apiclient.errors.UnknownFileType" class="py-name" href="#" onclick="return doclink('link-125', 'UnknownFileType', 'link-18');">UnknownFileType</a></tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">)</tt> </tt>
-<a name="L502"></a><tt class="py-lineno">502</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-126" class="py-name"><a title="apiclient.mimeparse" class="py-name" href="#" onclick="return doclink('link-126', 'mimeparse', 'link-0');">mimeparse</a></tt><tt class="py-op">.</tt><tt id="link-127" class="py-name" targets="Function apiclient.mimeparse.best_match()=apiclient.mimeparse-module.html#best_match"><a title="apiclient.mimeparse.best_match" class="py-name" href="#" onclick="return doclink('link-127', 'best_match', 'link-127');">best_match</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-string">','</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt id="link-128" class="py-name"><a title="apiclient.model.BaseModel.accept
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-101', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'mediaUpload'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L405"></a><tt class="py-lineno">405</tt>  <tt class="py-line">  <tt id="link-102" class="py-name" targets="Variable apiclient.model.BaseModel.accept=apiclient.model.BaseModel-class.html#accept,Variable apiclient.model.JsonModel.accept=apiclient.model.JsonModel-class.html#accept,Variable apiclient.model.MediaModel.accept=apiclient.model.MediaModel-class.html#accept,Variable apiclient.model.ProtocolBufferModel.accept=apiclient.model.ProtocolBufferModel-class.html#accept,Variable apiclient.model.RawModel.accept=apiclient.model.RawModel-class.html#accept"><a title="apiclient.model.BaseModel.accept
 apiclient.model.JsonModel.accept
 apiclient.model.MediaModel.accept
 apiclient.model.ProtocolBufferModel.accept
-apiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-128', 'accept', 'link-90');">accept</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L503"></a><tt class="py-lineno">503</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-129" class="py-name"><a title="apiclient.errors.UnacceptableMimeTypeError" class="py-name" href="#" onclick="return doclink('link-129', 'UnacceptableMimeTypeError', 'link-12');">UnacceptableMimeTypeError</a></tt><tt class="py-op">(</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">)</tt> </tt>
-<a name="L504"></a><tt class="py-lineno">504</tt>  <tt class="py-line">        <tt class="py-name">media_upload</tt> <tt class="py-op">=</tt> <tt id="link-130" class="py-name"><a title="apiclient.http.MediaFileUpload" class="py-name" href="#" onclick="return doclink('link-130', 'MediaFileUpload', 'link-24');">MediaFileUpload</a></tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">,</tt> </tt>
-<a name="L505"></a><tt class="py-lineno">505</tt>  <tt class="py-line">                                       <tt id="link-131" class="py-name" targets="Method apiclient.http.MediaIoBaseUpload.mimetype()=apiclient.http.MediaIoBaseUpload-class.html#mimetype,Method apiclient.http.MediaUpload.mimetype()=apiclient.http.MediaUpload-class.html#mimetype"><a title="apiclient.http.MediaIoBaseUpload.mimetype
-apiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-131', 'mimetype', 'link-131');">mimetype</a></tt><tt class="py-op">=</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">)</tt> </tt>
-<a name="L506"></a><tt class="py-lineno">506</tt>  <tt class="py-line">      <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">,</tt> <tt id="link-132" class="py-name"><a title="apiclient.http.MediaUpload" class="py-name" href="#" onclick="return doclink('link-132', 'MediaUpload', 'link-27');">MediaUpload</a></tt><tt class="py-op">)</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">media_upload</tt> <tt class="py-op">=</tt> <tt class="py-name">media_filename</tt> </tt>
-<a name="L508"></a><tt class="py-lineno">508</tt>  <tt class="py-line">      <tt class="py-keyword">else</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">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'media_filename must be str or MediaUpload.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L510"></a><tt class="py-lineno">510</tt>  <tt class="py-line"> </tt>
-<a name="L511"></a><tt class="py-lineno">511</tt>  <tt class="py-line">      <tt class="py-comment"># Check the maxSize</tt> </tt>
-<a name="L512"></a><tt class="py-lineno">512</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">maxSize</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-133" class="py-name" targets="Method apiclient.http.MediaIoBaseUpload.size()=apiclient.http.MediaIoBaseUpload-class.html#size,Method apiclient.http.MediaUpload.size()=apiclient.http.MediaUpload-class.html#size"><a title="apiclient.http.MediaIoBaseUpload.size
-apiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-133', 'size', 'link-133');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">maxSize</tt><tt class="py-op">:</tt> </tt>
-<a name="L513"></a><tt class="py-lineno">513</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt id="link-134" class="py-name"><a title="apiclient.errors.MediaUploadSizeError" class="py-name" href="#" onclick="return doclink('link-134', 'MediaUploadSizeError', 'link-9');">MediaUploadSizeError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Media larger than: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">maxSize</tt><tt class="py-op">)</tt> </tt>
-<a name="L514"></a><tt class="py-lineno">514</tt>  <tt class="py-line"> </tt>
-<a name="L515"></a><tt class="py-lineno">515</tt>  <tt class="py-line">      <tt class="py-comment"># Use the media path uri for media uploads</tt> </tt>
-<a name="L516"></a><tt class="py-lineno">516</tt>  <tt class="py-line">      <tt class="py-name">expanded_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt class="py-name">mediaPathUrl</tt><tt class="py-op">,</tt> <tt class="py-name">params</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">url</tt> <tt class="py-op">=</tt> <tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urljoin</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt><tt class="py-op">,</tt> <tt class="py-name">expanded_url</tt> <tt class="py-op">+</tt> <tt class="py-name">query</tt><tt class="py-op">)</tt> </tt>
-<a name="L518"></a><tt class="py-lineno">518</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-135" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.resumable
-apiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-135', 'resumable', 'link-124');">resumable</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L519"></a><tt class="py-lineno">519</tt>  <tt class="py-line">        <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt id="link-136" class="py-name"><a title="apiclient.discovery._add_query_parameter" class="py-name" href="#" onclick="return doclink('link-136', '_add_query_parameter', 'link-57');">_add_query_parameter</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'uploadType'</tt><tt class="py-op">,</tt> <tt class="py-string">'resumable'</tt><tt class="py-op">)</tt> </tt>
-<a name="L520"></a><tt class="py-lineno">520</tt>  <tt class="py-line"> </tt>
-<a name="L521"></a><tt class="py-lineno">521</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-137" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.resumable
-apiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-137', 'resumable', 'link-124');">resumable</a></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-comment"># This is all we need to do for resumable, if the body exists it gets</tt> </tt>
-<a name="L523"></a><tt class="py-lineno">523</tt>  <tt class="py-line">        <tt class="py-comment"># sent in the first request, otherwise an empty body is sent.</tt> </tt>
-<a name="L524"></a><tt class="py-lineno">524</tt>  <tt class="py-line">        <tt id="link-138" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.resumable
-apiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-138', 'resumable', 'link-124');">resumable</a></tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt> </tt>
-<a name="L525"></a><tt class="py-lineno">525</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L526"></a><tt class="py-lineno">526</tt>  <tt class="py-line">        <tt class="py-comment"># A non-resumable upload</tt> </tt>
-<a name="L527"></a><tt class="py-lineno">527</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">body</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L528"></a><tt class="py-lineno">528</tt>  <tt class="py-line">          <tt class="py-comment"># This is a simple media upload</tt> </tt>
-<a name="L529"></a><tt class="py-lineno">529</tt>  <tt class="py-line">          <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-139" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.mimetype
-apiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-139', 'mimetype', 'link-131');">mimetype</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L530"></a><tt class="py-lineno">530</tt>  <tt class="py-line">          <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-140" class="py-name" targets="Method apiclient.http.MediaIoBaseUpload.getbytes()=apiclient.http.MediaIoBaseUpload-class.html#getbytes,Method apiclient.http.MediaUpload.getbytes()=apiclient.http.MediaUpload-class.html#getbytes"><a title="apiclient.http.MediaIoBaseUpload.getbytes
-apiclient.http.MediaUpload.getbytes" class="py-name" href="#" onclick="return doclink('link-140', 'getbytes', 'link-140');">getbytes</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-141" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.size
-apiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-141', 'size', 'link-133');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L531"></a><tt class="py-lineno">531</tt>  <tt class="py-line">          <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt id="link-142" class="py-name"><a title="apiclient.discovery._add_query_parameter" class="py-name" href="#" onclick="return doclink('link-142', '_add_query_parameter', 'link-57');">_add_query_parameter</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'uploadType'</tt><tt class="py-op">,</tt> <tt class="py-string">'media'</tt><tt class="py-op">)</tt> </tt>
-<a name="L532"></a><tt class="py-lineno">532</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L533"></a><tt class="py-lineno">533</tt>  <tt class="py-line">          <tt class="py-comment"># This is a multipart/related upload.</tt> </tt>
-<a name="L534"></a><tt class="py-lineno">534</tt>  <tt class="py-line">          <tt class="py-name">msgRoot</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMEMultipart</tt><tt class="py-op">(</tt><tt class="py-string">'related'</tt><tt class="py-op">)</tt> </tt>
-<a name="L535"></a><tt class="py-lineno">535</tt>  <tt class="py-line">          <tt class="py-comment"># msgRoot should not write out it's own headers</tt> </tt>
-<a name="L536"></a><tt class="py-lineno">536</tt>  <tt class="py-line">          <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">msgRoot</tt><tt class="py-op">,</tt> <tt class="py-string">'_write_headers'</tt><tt class="py-op">,</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">self</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
-<a name="L537"></a><tt class="py-lineno">537</tt>  <tt class="py-line"> </tt>
-<a name="L538"></a><tt class="py-lineno">538</tt>  <tt class="py-line">          <tt class="py-comment"># attach the body as one part</tt> </tt>
-<a name="L539"></a><tt class="py-lineno">539</tt>  <tt class="py-line">          <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMENonMultipart</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L540"></a><tt class="py-lineno">540</tt>  <tt class="py-line">          <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_payload</tt><tt class="py-op">(</tt><tt class="py-name">body</tt><tt class="py-op">)</tt> </tt>
-<a name="L541"></a><tt class="py-lineno">541</tt>  <tt class="py-line">          <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">attach</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
-<a name="L542"></a><tt class="py-lineno">542</tt>  <tt class="py-line"> </tt>
-<a name="L543"></a><tt class="py-lineno">543</tt>  <tt class="py-line">          <tt class="py-comment"># attach the media as the second part</tt> </tt>
-<a name="L544"></a><tt class="py-lineno">544</tt>  <tt class="py-line">          <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMENonMultipart</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-143" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.mimetype
-apiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-143', 'mimetype', 'link-131');">mimetype</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L545"></a><tt class="py-lineno">545</tt>  <tt class="py-line">          <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'Content-Transfer-Encoding'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'binary'</tt> </tt>
-<a name="L546"></a><tt class="py-lineno">546</tt>  <tt class="py-line"> </tt>
-<a name="L547"></a><tt class="py-lineno">547</tt>  <tt class="py-line">          <tt class="py-name">payload</tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.getbytes
-apiclient.http.MediaUpload.getbytes" class="py-name" href="#" onclick="return doclink('link-144', 'getbytes', 'link-140');">getbytes</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-145" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.size
-apiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-145', 'size', 'link-133');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L548"></a><tt class="py-lineno">548</tt>  <tt class="py-line">          <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_payload</tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">)</tt> </tt>
-<a name="L549"></a><tt class="py-lineno">549</tt>  <tt class="py-line">          <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">attach</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
-<a name="L550"></a><tt class="py-lineno">550</tt>  <tt class="py-line">          <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">as_string</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L551"></a><tt class="py-lineno">551</tt>  <tt class="py-line"> </tt>
-<a name="L552"></a><tt class="py-lineno">552</tt>  <tt class="py-line">          <tt class="py-name">multipart_boundary</tt> <tt class="py-op">=</tt> <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">get_boundary</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L553"></a><tt class="py-lineno">553</tt>  <tt class="py-line">          <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'multipart/related; '</tt> </tt>
-<a name="L554"></a><tt class="py-lineno">554</tt>  <tt class="py-line">                                     <tt class="py-string">'boundary="%s"'</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">multipart_boundary</tt> </tt>
-<a name="L555"></a><tt class="py-lineno">555</tt>  <tt class="py-line">          <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt id="link-146" class="py-name"><a title="apiclient.discovery._add_query_parameter" class="py-name" href="#" onclick="return doclink('link-146', '_add_query_parameter', 'link-57');">_add_query_parameter</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'uploadType'</tt><tt class="py-op">,</tt> <tt class="py-string">'multipart'</tt><tt class="py-op">)</tt> </tt>
-<a name="L556"></a><tt class="py-lineno">556</tt>  <tt class="py-line"> </tt>
-<a name="L557"></a><tt class="py-lineno">557</tt>  <tt class="py-line">    <tt id="link-147" class="py-name"><a title="apiclient.discovery.logger
-oauth2client.appengine.logger
-oauth2client.client.logger
-oauth2client.crypt.logger
-oauth2client.gce.logger
-oauth2client.locked_file.logger
-oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-147', 'logger', 'link-45');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'URL being requested: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">url</tt><tt class="py-op">)</tt> </tt>
-<a name="L558"></a><tt class="py-lineno">558</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requestBuilder</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_http</tt><tt class="py-op">,</tt> </tt>
-<a name="L559"></a><tt class="py-lineno">559</tt>  <tt class="py-line">                                <tt id="link-148" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-148', 'model', 'link-29');">model</a></tt><tt class="py-op">.</tt><tt id="link-149" class="py-name" targets="Method apiclient.model.BaseModel.response()=apiclient.model.BaseModel-class.html#response,Method apiclient.model.Model.response()=apiclient.model.Model-class.html#response"><a title="apiclient.model.BaseModel.response
-apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-149', 'response', 'link-149');">response</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L560"></a><tt class="py-lineno">560</tt>  <tt class="py-line">                                <tt class="py-name">url</tt><tt class="py-op">,</tt> </tt>
-<a name="L561"></a><tt class="py-lineno">561</tt>  <tt class="py-line">                                <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-name">httpMethod</tt><tt class="py-op">,</tt> </tt>
-<a name="L562"></a><tt class="py-lineno">562</tt>  <tt class="py-line">                                <tt class="py-name">body</tt><tt class="py-op">=</tt><tt class="py-name">body</tt><tt class="py-op">,</tt> </tt>
-<a name="L563"></a><tt class="py-lineno">563</tt>  <tt class="py-line">                                <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">,</tt> </tt>
-<a name="L564"></a><tt class="py-lineno">564</tt>  <tt class="py-line">                                <tt class="py-name">methodId</tt><tt class="py-op">=</tt><tt class="py-name">methodId</tt><tt class="py-op">,</tt> </tt>
-<a name="L565"></a><tt class="py-lineno">565</tt>  <tt class="py-line">                                <tt id="link-150" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.resumable
-apiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-150', 'resumable', 'link-124');">resumable</a></tt><tt class="py-op">=</tt><tt id="link-151" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.resumable
-apiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-151', 'resumable', 'link-124');">resumable</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L566"></a><tt class="py-lineno">566</tt>  <tt class="py-line"> </tt>
-<a name="L567"></a><tt class="py-lineno">567</tt>  <tt class="py-line">  <tt class="py-name">docs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="apiclient.schema.Schemas.get
+apiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-102', 'accept', 'link-102');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-152', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'description'</tt><tt class="py-op">,</tt> <tt id="link-153" class="py-name"><a title="apiclient.discovery.DEFAULT_METHOD_DOC" class="py-name" href="#" onclick="return doclink('link-153', 'DEFAULT_METHOD_DOC', 'link-49');">DEFAULT_METHOD_DOC</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'\n\n'</tt><tt class="py-op">]</tt> </tt>
-<a name="L568"></a><tt class="py-lineno">568</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">argmap</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L569"></a><tt class="py-lineno">569</tt>  <tt class="py-line">    <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'Args:\n'</tt><tt class="py-op">)</tt> </tt>
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-103', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'accept'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L406"></a><tt class="py-lineno">406</tt>  <tt class="py-line">  <tt class="py-name">max_size</tt> <tt class="py-op">=</tt> <tt id="link-104" class="py-name" targets="Function apiclient.discovery._media_size_to_long()=apiclient.discovery-module.html#_media_size_to_long"><a title="apiclient.discovery._media_size_to_long" class="py-name" href="#" onclick="return doclink('link-104', '_media_size_to_long', 'link-104');">_media_size_to_long</a></tt><tt class="py-op">(</tt><tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-105', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'maxSize'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L407"></a><tt class="py-lineno">407</tt>  <tt class="py-line">  <tt class="py-name">media_path_url</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L408"></a><tt class="py-lineno">408</tt>  <tt class="py-line"> </tt>
+<a name="L409"></a><tt class="py-lineno">409</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">media_upload</tt><tt class="py-op">:</tt> </tt>
+<a name="L410"></a><tt class="py-lineno">410</tt>  <tt class="py-line">    <tt class="py-name">media_path_url</tt> <tt class="py-op">=</tt> <tt id="link-106" class="py-name" targets="Function apiclient.discovery._media_path_url_from_info()=apiclient.discovery-module.html#_media_path_url_from_info"><a title="apiclient.discovery._media_path_url_from_info" class="py-name" href="#" onclick="return doclink('link-106', '_media_path_url_from_info', 'link-106');">_media_path_url_from_info</a></tt><tt class="py-op">(</tt><tt class="py-name">root_desc</tt><tt class="py-op">,</tt> <tt class="py-name">path_url</tt><tt class="py-op">)</tt> </tt>
+<a name="L411"></a><tt class="py-lineno">411</tt>  <tt class="py-line">    <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-string">'media_body'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-107" class="py-name"><a title="apiclient.discovery.MEDIA_BODY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-107', 'MEDIA_BODY_PARAMETER_DEFAULT_VALUE', 'link-56');">MEDIA_BODY_PARAMETER_DEFAULT_VALUE</a></tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L412"></a><tt class="py-lineno">412</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'body'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">:</tt> </tt>
+<a name="L413"></a><tt class="py-lineno">413</tt>  <tt class="py-line">      <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'required'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L414"></a><tt class="py-lineno">414</tt>  <tt class="py-line"> </tt>
+<a name="L415"></a><tt class="py-lineno">415</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-108" class="py-name"><a title="apiclient.model.BaseModel.accept
+apiclient.model.JsonModel.accept
+apiclient.model.MediaModel.accept
+apiclient.model.ProtocolBufferModel.accept
+apiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-108', 'accept', 'link-102');">accept</a></tt><tt class="py-op">,</tt> <tt class="py-name">max_size</tt><tt class="py-op">,</tt> <tt class="py-name">media_path_url</tt> </tt>
+</div><a name="L416"></a><tt class="py-lineno">416</tt>  <tt class="py-line"> </tt>
+<a name="_fix_up_method_description"></a><div id="_fix_up_method_description-def"><a name="L417"></a><tt class="py-lineno">417</tt>  <tt class="py-line"> </tt>
+<a name="L418"></a><tt class="py-lineno">418</tt> <a class="py-toggle" href="#" id="_fix_up_method_description-toggle" onclick="return toggle('_fix_up_method_description');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#_fix_up_method_description">_fix_up_method_description</a><tt class="py-op">(</tt><tt class="py-param">method_desc</tt><tt class="py-op">,</tt> <tt class="py-param">root_desc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_fix_up_method_description-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_fix_up_method_description-expanded"><a name="L419"></a><tt class="py-lineno">419</tt>  <tt class="py-line">  <tt class="py-docstring">"""Updates a method description in a discovery document.</tt> </tt>
+<a name="L420"></a><tt class="py-lineno">420</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L421"></a><tt class="py-lineno">421</tt>  <tt class="py-line"><tt class="py-docstring">  SIDE EFFECTS: Changes the parameters dictionary in the method description with</tt> </tt>
+<a name="L422"></a><tt class="py-lineno">422</tt>  <tt class="py-line"><tt class="py-docstring">  extra parameters which are used locally.</tt> </tt>
+<a name="L423"></a><tt class="py-lineno">423</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L424"></a><tt class="py-lineno">424</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L425"></a><tt class="py-lineno">425</tt>  <tt class="py-line"><tt class="py-docstring">    method_desc: Dictionary with metadata describing an API method. Value comes</tt> </tt>
+<a name="L426"></a><tt class="py-lineno">426</tt>  <tt class="py-line"><tt class="py-docstring">        from the dictionary of methods stored in the 'methods' key in the</tt> </tt>
+<a name="L427"></a><tt class="py-lineno">427</tt>  <tt class="py-line"><tt class="py-docstring">        deserialized discovery document.</tt> </tt>
+<a name="L428"></a><tt class="py-lineno">428</tt>  <tt class="py-line"><tt class="py-docstring">    root_desc: Dictionary; the entire original deserialized discovery document.</tt> </tt>
+<a name="L429"></a><tt class="py-lineno">429</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L430"></a><tt class="py-lineno">430</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L431"></a><tt class="py-lineno">431</tt>  <tt class="py-line"><tt class="py-docstring">    Tuple (path_url, http_method, method_id, accept, max_size, media_path_url)</tt> </tt>
+<a name="L432"></a><tt class="py-lineno">432</tt>  <tt class="py-line"><tt class="py-docstring">    where:</tt> </tt>
+<a name="L433"></a><tt class="py-lineno">433</tt>  <tt class="py-line"><tt class="py-docstring">      - path_url is a String; the relative URL for the API method. Relative to</tt> </tt>
+<a name="L434"></a><tt class="py-lineno">434</tt>  <tt class="py-line"><tt class="py-docstring">        the API root, which is specified in the discovery document.</tt> </tt>
+<a name="L435"></a><tt class="py-lineno">435</tt>  <tt class="py-line"><tt class="py-docstring">      - http_method is a String; the HTTP method used to call the API method</tt> </tt>
+<a name="L436"></a><tt class="py-lineno">436</tt>  <tt class="py-line"><tt class="py-docstring">        described in the method description.</tt> </tt>
+<a name="L437"></a><tt class="py-lineno">437</tt>  <tt class="py-line"><tt class="py-docstring">      - method_id is a String; the name of the RPC method associated with the</tt> </tt>
+<a name="L438"></a><tt class="py-lineno">438</tt>  <tt class="py-line"><tt class="py-docstring">        API method, and is in the method description in the 'id' key.</tt> </tt>
+<a name="L439"></a><tt class="py-lineno">439</tt>  <tt class="py-line"><tt class="py-docstring">      - accept is a list of strings representing what content types are</tt> </tt>
+<a name="L440"></a><tt class="py-lineno">440</tt>  <tt class="py-line"><tt class="py-docstring">        accepted for media upload. Defaults to empty list if not in the</tt> </tt>
+<a name="L441"></a><tt class="py-lineno">441</tt>  <tt class="py-line"><tt class="py-docstring">        discovery document.</tt> </tt>
+<a name="L442"></a><tt class="py-lineno">442</tt>  <tt class="py-line"><tt class="py-docstring">      - max_size is a long representing the max size in bytes allowed for a</tt> </tt>
+<a name="L443"></a><tt class="py-lineno">443</tt>  <tt class="py-line"><tt class="py-docstring">        media upload. Defaults to 0L if not in the discovery document.</tt> </tt>
+<a name="L444"></a><tt class="py-lineno">444</tt>  <tt class="py-line"><tt class="py-docstring">      - media_path_url is a String; the absolute URI for media upload for the</tt> </tt>
+<a name="L445"></a><tt class="py-lineno">445</tt>  <tt class="py-line"><tt class="py-docstring">        API method. Constructed using the API root URI and service path from</tt> </tt>
+<a name="L446"></a><tt class="py-lineno">446</tt>  <tt class="py-line"><tt class="py-docstring">        the discovery document and the relative path for the API method. If</tt> </tt>
+<a name="L447"></a><tt class="py-lineno">447</tt>  <tt class="py-line"><tt class="py-docstring">        media upload is not supported, this is None.</tt> </tt>
+<a name="L448"></a><tt class="py-lineno">448</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L449"></a><tt class="py-lineno">449</tt>  <tt class="py-line">  <tt class="py-name">path_url</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'path'</tt><tt class="py-op">]</tt> </tt>
+<a name="L450"></a><tt class="py-lineno">450</tt>  <tt class="py-line">  <tt class="py-name">http_method</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'httpMethod'</tt><tt class="py-op">]</tt> </tt>
+<a name="L451"></a><tt class="py-lineno">451</tt>  <tt class="py-line">  <tt class="py-name">method_id</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'id'</tt><tt class="py-op">]</tt> </tt>
+<a name="L452"></a><tt class="py-lineno">452</tt>  <tt class="py-line"> </tt>
+<a name="L453"></a><tt class="py-lineno">453</tt>  <tt class="py-line">  <tt class="py-name">parameters</tt> <tt class="py-op">=</tt> <tt id="link-109" class="py-name" targets="Function apiclient.discovery._fix_up_parameters()=apiclient.discovery-module.html#_fix_up_parameters"><a title="apiclient.discovery._fix_up_parameters" class="py-name" href="#" onclick="return doclink('link-109', '_fix_up_parameters', 'link-109');">_fix_up_parameters</a></tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">,</tt> <tt class="py-name">root_desc</tt><tt class="py-op">,</tt> <tt class="py-name">http_method</tt><tt class="py-op">)</tt> </tt>
+<a name="L454"></a><tt class="py-lineno">454</tt>  <tt class="py-line">  <tt class="py-comment"># Order is important. `_fix_up_media_upload` needs `method_desc` to have a</tt> </tt>
+<a name="L455"></a><tt class="py-lineno">455</tt>  <tt class="py-line">  <tt class="py-comment"># 'parameters' key and needs to know if there is a 'body' parameter because it</tt> </tt>
+<a name="L456"></a><tt class="py-lineno">456</tt>  <tt class="py-line">  <tt class="py-comment"># also sets a 'media_body' parameter.</tt> </tt>
+<a name="L457"></a><tt class="py-lineno">457</tt>  <tt class="py-line">  <tt id="link-110" class="py-name"><a title="apiclient.model.BaseModel.accept
+apiclient.model.JsonModel.accept
+apiclient.model.MediaModel.accept
+apiclient.model.ProtocolBufferModel.accept
+apiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-110', 'accept', 'link-102');">accept</a></tt><tt class="py-op">,</tt> <tt class="py-name">max_size</tt><tt class="py-op">,</tt> <tt class="py-name">media_path_url</tt> <tt class="py-op">=</tt> <tt id="link-111" class="py-name" targets="Function apiclient.discovery._fix_up_media_upload()=apiclient.discovery-module.html#_fix_up_media_upload"><a title="apiclient.discovery._fix_up_media_upload" class="py-name" href="#" onclick="return doclink('link-111', '_fix_up_media_upload', 'link-111');">_fix_up_media_upload</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L458"></a><tt class="py-lineno">458</tt>  <tt class="py-line">      <tt class="py-name">method_desc</tt><tt class="py-op">,</tt> <tt class="py-name">root_desc</tt><tt class="py-op">,</tt> <tt class="py-name">path_url</tt><tt class="py-op">,</tt> <tt class="py-name">parameters</tt><tt class="py-op">)</tt> </tt>
+<a name="L459"></a><tt class="py-lineno">459</tt>  <tt class="py-line"> </tt>
+<a name="L460"></a><tt class="py-lineno">460</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">path_url</tt><tt class="py-op">,</tt> <tt class="py-name">http_method</tt><tt class="py-op">,</tt> <tt class="py-name">method_id</tt><tt class="py-op">,</tt> <tt id="link-112" class="py-name"><a title="apiclient.model.BaseModel.accept
+apiclient.model.JsonModel.accept
+apiclient.model.MediaModel.accept
+apiclient.model.ProtocolBufferModel.accept
+apiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-112', 'accept', 'link-102');">accept</a></tt><tt class="py-op">,</tt> <tt class="py-name">max_size</tt><tt class="py-op">,</tt> <tt class="py-name">media_path_url</tt> </tt>
+</div><a name="L461"></a><tt class="py-lineno">461</tt>  <tt class="py-line"> </tt>
+<a name="ResourceMethodParameters"></a><div id="ResourceMethodParameters-def"><a name="L462"></a><tt class="py-lineno">462</tt>  <tt class="py-line"> </tt>
+<a name="L463"></a><tt class="py-lineno">463</tt>  <tt class="py-line"><tt class="py-comment"># TODO(dhermes): Convert this class to ResourceMethod and make it callable</tt> </tt>
+<a name="L464"></a><tt class="py-lineno">464</tt> <a class="py-toggle" href="#" id="ResourceMethodParameters-toggle" onclick="return toggle('ResourceMethodParameters');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.discovery.ResourceMethodParameters-class.html">ResourceMethodParameters</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ResourceMethodParameters-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="ResourceMethodParameters-expanded"><a name="L465"></a><tt class="py-lineno">465</tt>  <tt class="py-line">  <tt class="py-docstring">"""Represents the parameters associated with a method.</tt> </tt>
+<a name="L466"></a><tt class="py-lineno">466</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L467"></a><tt class="py-lineno">467</tt>  <tt class="py-line"><tt class="py-docstring">  Attributes:</tt> </tt>
+<a name="L468"></a><tt class="py-lineno">468</tt>  <tt class="py-line"><tt class="py-docstring">    argmap: Map from method parameter name (string) to query parameter name</tt> </tt>
+<a name="L469"></a><tt class="py-lineno">469</tt>  <tt class="py-line"><tt class="py-docstring">        (string).</tt> </tt>
+<a name="L470"></a><tt class="py-lineno">470</tt>  <tt class="py-line"><tt class="py-docstring">    required_params: List of required parameters (represented by parameter</tt> </tt>
+<a name="L471"></a><tt class="py-lineno">471</tt>  <tt class="py-line"><tt class="py-docstring">        name as string).</tt> </tt>
+<a name="L472"></a><tt class="py-lineno">472</tt>  <tt class="py-line"><tt class="py-docstring">    repeated_params: List of repeated parameters (represented by parameter</tt> </tt>
+<a name="L473"></a><tt class="py-lineno">473</tt>  <tt class="py-line"><tt class="py-docstring">        name as string).</tt> </tt>
+<a name="L474"></a><tt class="py-lineno">474</tt>  <tt class="py-line"><tt class="py-docstring">    pattern_params: Map from method parameter name (string) to regular</tt> </tt>
+<a name="L475"></a><tt class="py-lineno">475</tt>  <tt class="py-line"><tt class="py-docstring">        expression (as a string). If the pattern is set for a parameter, the</tt> </tt>
+<a name="L476"></a><tt class="py-lineno">476</tt>  <tt class="py-line"><tt class="py-docstring">        value for that parameter must match the regular expression.</tt> </tt>
+<a name="L477"></a><tt class="py-lineno">477</tt>  <tt class="py-line"><tt class="py-docstring">    query_params: List of parameters (represented by parameter name as string)</tt> </tt>
+<a name="L478"></a><tt class="py-lineno">478</tt>  <tt class="py-line"><tt class="py-docstring">        that will be used in the query string.</tt> </tt>
+<a name="L479"></a><tt class="py-lineno">479</tt>  <tt class="py-line"><tt class="py-docstring">    path_params: Set of parameters (represented by parameter name as string)</tt> </tt>
+<a name="L480"></a><tt class="py-lineno">480</tt>  <tt class="py-line"><tt class="py-docstring">        that will be used in the base URL path.</tt> </tt>
+<a name="L481"></a><tt class="py-lineno">481</tt>  <tt class="py-line"><tt class="py-docstring">    param_types: Map from method parameter name (string) to parameter type. Type</tt> </tt>
+<a name="L482"></a><tt class="py-lineno">482</tt>  <tt class="py-line"><tt class="py-docstring">        can be any valid JSON schema type; valid values are 'any', 'array',</tt> </tt>
+<a name="L483"></a><tt class="py-lineno">483</tt>  <tt class="py-line"><tt class="py-docstring">        'boolean', 'integer', 'number', 'object', or 'string'. Reference:</tt> </tt>
+<a name="L484"></a><tt class="py-lineno">484</tt>  <tt class="py-line"><tt class="py-docstring">        http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.1</tt> </tt>
+<a name="L485"></a><tt class="py-lineno">485</tt>  <tt class="py-line"><tt class="py-docstring">    enum_params: Map from method parameter name (string) to list of strings,</tt> </tt>
+<a name="L486"></a><tt class="py-lineno">486</tt>  <tt class="py-line"><tt class="py-docstring">       where each list of strings is the list of acceptable enum values.</tt> </tt>
+<a name="L487"></a><tt class="py-lineno">487</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L488"></a><tt class="py-lineno">488</tt>  <tt class="py-line"> </tt>
+<a name="ResourceMethodParameters.__init__"></a><div id="ResourceMethodParameters.__init__-def"><a name="L489"></a><tt class="py-lineno">489</tt> <a class="py-toggle" href="#" id="ResourceMethodParameters.__init__-toggle" onclick="return toggle('ResourceMethodParameters.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.ResourceMethodParameters-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">method_desc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ResourceMethodParameters.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="ResourceMethodParameters.__init__-expanded"><a name="L490"></a><tt class="py-lineno">490</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for ResourceMethodParameters.</tt> </tt>
+<a name="L491"></a><tt class="py-lineno">491</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L492"></a><tt class="py-lineno">492</tt>  <tt class="py-line"><tt class="py-docstring">    Sets default values and defers to set_parameters to populate.</tt> </tt>
+<a name="L493"></a><tt class="py-lineno">493</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L494"></a><tt class="py-lineno">494</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L495"></a><tt class="py-lineno">495</tt>  <tt class="py-line"><tt class="py-docstring">      method_desc: Dictionary with metadata describing an API method. Value</tt> </tt>
+<a name="L496"></a><tt class="py-lineno">496</tt>  <tt class="py-line"><tt class="py-docstring">          comes from the dictionary of methods stored in the 'methods' key in</tt> </tt>
+<a name="L497"></a><tt class="py-lineno">497</tt>  <tt class="py-line"><tt class="py-docstring">          the deserialized discovery document.</tt> </tt>
+<a name="L498"></a><tt class="py-lineno">498</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L499"></a><tt class="py-lineno">499</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L500"></a><tt class="py-lineno">500</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">required_params</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L501"></a><tt class="py-lineno">501</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt> <tt class="py-op">=</tt> <tt class="py-op">[</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">self</tt><tt class="py-op">.</tt><tt class="py-name">pattern_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L503"></a><tt class="py-lineno">503</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-113" class="py-name" targets="Variable oauth2client.tools.ClientRedirectServer.query_params=oauth2client.tools.ClientRedirectServer-class.html#query_params"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-113', 'query_params', 'link-113');">query_params</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L504"></a><tt class="py-lineno">504</tt>  <tt class="py-line">    <tt class="py-comment"># TODO(dhermes): Change path_params to a list if the extra URITEMPLATE</tt> </tt>
+<a name="L505"></a><tt class="py-lineno">505</tt>  <tt class="py-line">    <tt class="py-comment">#                parsing is gotten rid of.</tt> </tt>
+<a name="L506"></a><tt class="py-lineno">506</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">path_params</tt> <tt class="py-op">=</tt> <tt id="link-114" class="py-name" targets="Method oauth2client.client.MemoryCache.set()=oauth2client.client.MemoryCache-class.html#set"><a title="oauth2client.client.MemoryCache.set" class="py-name" href="#" onclick="return doclink('link-114', 'set', 'link-114');">set</a></tt><tt class="py-op">(</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 class="py-name">param_types</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L508"></a><tt class="py-lineno">508</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">enum_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L509"></a><tt class="py-lineno">509</tt>  <tt class="py-line"> </tt>
+<a name="L510"></a><tt class="py-lineno">510</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-115" class="py-name" targets="Method apiclient.discovery.ResourceMethodParameters.set_parameters()=apiclient.discovery.ResourceMethodParameters-class.html#set_parameters"><a title="apiclient.discovery.ResourceMethodParameters.set_parameters" class="py-name" href="#" onclick="return doclink('link-115', 'set_parameters', 'link-115');">set_parameters</a></tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L511"></a><tt class="py-lineno">511</tt>  <tt class="py-line"> </tt>
+<a name="ResourceMethodParameters.set_parameters"></a><div id="ResourceMethodParameters.set_parameters-def"><a name="L512"></a><tt class="py-lineno">512</tt> <a class="py-toggle" href="#" id="ResourceMethodParameters.set_parameters-toggle" onclick="return toggle('ResourceMethodParameters.set_parameters');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.ResourceMethodParameters-class.html#set_parameters">set_parameters</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">method_desc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ResourceMethodParameters.set_parameters-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="ResourceMethodParameters.set_parameters-expanded"><a name="L513"></a><tt class="py-lineno">513</tt>  <tt class="py-line">    <tt class="py-docstring">"""Populates maps and lists based on method description.</tt> </tt>
+<a name="L514"></a><tt class="py-lineno">514</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L515"></a><tt class="py-lineno">515</tt>  <tt class="py-line"><tt class="py-docstring">    Iterates through each parameter for the method and parses the values from</tt> </tt>
+<a name="L516"></a><tt class="py-lineno">516</tt>  <tt class="py-line"><tt class="py-docstring">    the parameter dictionary.</tt> </tt>
+<a name="L517"></a><tt class="py-lineno">517</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L518"></a><tt class="py-lineno">518</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L519"></a><tt class="py-lineno">519</tt>  <tt class="py-line"><tt class="py-docstring">      method_desc: Dictionary with metadata describing an API method. Value</tt> </tt>
+<a name="L520"></a><tt class="py-lineno">520</tt>  <tt class="py-line"><tt class="py-docstring">          comes from the dictionary of methods stored in the 'methods' key in</tt> </tt>
+<a name="L521"></a><tt class="py-lineno">521</tt>  <tt class="py-line"><tt class="py-docstring">          the deserialized discovery document.</tt> </tt>
+<a name="L522"></a><tt class="py-lineno">522</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L523"></a><tt class="py-lineno">523</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">arg</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">method_desc</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-116', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L524"></a><tt class="py-lineno">524</tt>  <tt class="py-line">      <tt class="py-name">param</tt> <tt class="py-op">=</tt> <tt id="link-117" class="py-name" targets="Function apiclient.discovery.key2param()=apiclient.discovery-module.html#key2param"><a title="apiclient.discovery.key2param" class="py-name" href="#" onclick="return doclink('link-117', 'key2param', 'link-117');">key2param</a></tt><tt class="py-op">(</tt><tt class="py-name">arg</tt><tt class="py-op">)</tt> </tt>
+<a name="L525"></a><tt class="py-lineno">525</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">arg</tt> </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 class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-118" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-118', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'pattern'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L528"></a><tt class="py-lineno">528</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pattern_params</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">desc</tt><tt class="py-op">[</tt><tt class="py-string">'pattern'</tt><tt class="py-op">]</tt> </tt>
+<a name="L529"></a><tt class="py-lineno">529</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-119" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-119', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'enum'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L530"></a><tt class="py-lineno">530</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">enum_params</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">desc</tt><tt class="py-op">[</tt><tt class="py-string">'enum'</tt><tt class="py-op">]</tt> </tt>
+<a name="L531"></a><tt class="py-lineno">531</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-120" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-120', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'required'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L532"></a><tt class="py-lineno">532</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">required_params</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
+<a name="L533"></a><tt class="py-lineno">533</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-121" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-121', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'repeated'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L534"></a><tt class="py-lineno">534</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
+<a name="L535"></a><tt class="py-lineno">535</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-122" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-122', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'location'</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'query'</tt><tt class="py-op">:</tt> </tt>
+<a name="L536"></a><tt class="py-lineno">536</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-123" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-123', 'query_params', 'link-113');">query_params</a></tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
+<a name="L537"></a><tt class="py-lineno">537</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-124" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-124', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'location'</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'path'</tt><tt class="py-op">:</tt> </tt>
+<a name="L538"></a><tt class="py-lineno">538</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">path_params</tt><tt class="py-op">.</tt><tt id="link-125" class="py-name" targets="Method apiclient.http.BatchHttpRequest.add()=apiclient.http.BatchHttpRequest-class.html#add"><a title="apiclient.http.BatchHttpRequest.add" class="py-name" href="#" onclick="return doclink('link-125', 'add', 'link-125');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
+<a name="L539"></a><tt class="py-lineno">539</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">param_types</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-126" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-126', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">,</tt> <tt class="py-string">'string'</tt><tt class="py-op">)</tt> </tt>
+<a name="L540"></a><tt class="py-lineno">540</tt>  <tt class="py-line"> </tt>
+<a name="L541"></a><tt class="py-lineno">541</tt>  <tt class="py-line">    <tt class="py-comment"># TODO(dhermes): Determine if this is still necessary. Discovery based APIs</tt> </tt>
+<a name="L542"></a><tt class="py-lineno">542</tt>  <tt class="py-line">    <tt class="py-comment">#                should have all path parameters already marked with</tt> </tt>
+<a name="L543"></a><tt class="py-lineno">543</tt>  <tt class="py-line">    <tt class="py-comment">#                'location: path'.</tt> </tt>
+<a name="L544"></a><tt class="py-lineno">544</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">match</tt> <tt class="py-keyword">in</tt> <tt id="link-127" class="py-name"><a title="apiclient.discovery.URITEMPLATE" class="py-name" href="#" onclick="return doclink('link-127', 'URITEMPLATE', 'link-49');">URITEMPLATE</a></tt><tt class="py-op">.</tt><tt class="py-name">finditer</tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'path'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L545"></a><tt class="py-lineno">545</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">namematch</tt> <tt class="py-keyword">in</tt> <tt id="link-128" class="py-name"><a title="apiclient.discovery.VARNAME" class="py-name" href="#" onclick="return doclink('link-128', 'VARNAME', 'link-50');">VARNAME</a></tt><tt class="py-op">.</tt><tt class="py-name">finditer</tt><tt class="py-op">(</tt><tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L546"></a><tt class="py-lineno">546</tt>  <tt class="py-line">        <tt class="py-name">name</tt> <tt class="py-op">=</tt> <tt id="link-129" class="py-name"><a title="apiclient.discovery.key2param" class="py-name" href="#" onclick="return doclink('link-129', 'key2param', 'link-117');">key2param</a></tt><tt class="py-op">(</tt><tt class="py-name">namematch</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L547"></a><tt class="py-lineno">547</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">path_params</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name"><a title="apiclient.http.BatchHttpRequest.add" class="py-name" href="#" onclick="return doclink('link-130', 'add', 'link-125');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+<a name="L548"></a><tt class="py-lineno">548</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-131" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-131', 'query_params', 'link-113');">query_params</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L549"></a><tt class="py-lineno">549</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-132" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-132', 'query_params', 'link-113');">query_params</a></tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L550"></a><tt class="py-lineno">550</tt>  <tt class="py-line"> </tt>
+<a name="createMethod"></a><div id="createMethod-def"><a name="L551"></a><tt class="py-lineno">551</tt>  <tt class="py-line"> </tt>
+<a name="L552"></a><tt class="py-lineno">552</tt> <a class="py-toggle" href="#" id="createMethod-toggle" onclick="return toggle('createMethod');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#createMethod">createMethod</a><tt class="py-op">(</tt><tt class="py-param">methodName</tt><tt class="py-op">,</tt> <tt class="py-param">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="createMethod-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="createMethod-expanded"><a name="L553"></a><tt class="py-lineno">553</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates a method for attaching to a Resource.</tt> </tt>
+<a name="L554"></a><tt class="py-lineno">554</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L555"></a><tt class="py-lineno">555</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L556"></a><tt class="py-lineno">556</tt>  <tt class="py-line"><tt class="py-docstring">    methodName: string, name of the method to use.</tt> </tt>
+<a name="L557"></a><tt class="py-lineno">557</tt>  <tt class="py-line"><tt class="py-docstring">    methodDesc: object, fragment of deserialized discovery document that</tt> </tt>
+<a name="L558"></a><tt class="py-lineno">558</tt>  <tt class="py-line"><tt class="py-docstring">      describes the method.</tt> </tt>
+<a name="L559"></a><tt class="py-lineno">559</tt>  <tt class="py-line"><tt class="py-docstring">    rootDesc: object, the entire deserialized discovery document.</tt> </tt>
+<a name="L560"></a><tt class="py-lineno">560</tt>  <tt class="py-line"><tt class="py-docstring">    schema: object, mapping of schema names to schema descriptions.</tt> </tt>
+<a name="L561"></a><tt class="py-lineno">561</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L562"></a><tt class="py-lineno">562</tt>  <tt class="py-line">  <tt class="py-name">methodName</tt> <tt class="py-op">=</tt> <tt id="link-133" class="py-name" targets="Function apiclient.discovery.fix_method_name()=apiclient.discovery-module.html#fix_method_name"><a title="apiclient.discovery.fix_method_name" class="py-name" href="#" onclick="return doclink('link-133', 'fix_method_name', 'link-133');">fix_method_name</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">)</tt> </tt>
+<a name="L563"></a><tt class="py-lineno">563</tt>  <tt class="py-line">  <tt class="py-op">(</tt><tt class="py-name">pathUrl</tt><tt class="py-op">,</tt> <tt class="py-name">httpMethod</tt><tt class="py-op">,</tt> <tt class="py-name">methodId</tt><tt class="py-op">,</tt> <tt id="link-134" class="py-name"><a title="apiclient.model.BaseModel.accept
+apiclient.model.JsonModel.accept
+apiclient.model.MediaModel.accept
+apiclient.model.ProtocolBufferModel.accept
+apiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-134', 'accept', 'link-102');">accept</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L564"></a><tt class="py-lineno">564</tt>  <tt class="py-line">   <tt class="py-name">maxSize</tt><tt class="py-op">,</tt> <tt class="py-name">mediaPathUrl</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt id="link-135" class="py-name" targets="Function apiclient.discovery._fix_up_method_description()=apiclient.discovery-module.html#_fix_up_method_description"><a title="apiclient.discovery._fix_up_method_description" class="py-name" href="#" onclick="return doclink('link-135', '_fix_up_method_description', 'link-135');">_fix_up_method_description</a></tt><tt class="py-op">(</tt><tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">)</tt> </tt>
+<a name="L565"></a><tt class="py-lineno">565</tt>  <tt class="py-line"> </tt>
+<a name="L566"></a><tt class="py-lineno">566</tt>  <tt class="py-line">  <tt class="py-name">parameters</tt> <tt class="py-op">=</tt> <tt id="link-136" class="py-name" targets="Class apiclient.discovery.ResourceMethodParameters=apiclient.discovery.ResourceMethodParameters-class.html"><a title="apiclient.discovery.ResourceMethodParameters" class="py-name" href="#" onclick="return doclink('link-136', 'ResourceMethodParameters', 'link-136');">ResourceMethodParameters</a></tt><tt class="py-op">(</tt><tt class="py-name">methodDesc</tt><tt class="py-op">)</tt> </tt>
+<a name="L567"></a><tt class="py-lineno">567</tt>  <tt class="py-line"> </tt>
+<a name="L568"></a><tt class="py-lineno">568</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">method</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L569"></a><tt class="py-lineno">569</tt>  <tt class="py-line">    <tt class="py-comment"># Don't bother with doc string, it will be over-written by createMethod.</tt> </tt>
 <a name="L570"></a><tt class="py-lineno">570</tt>  <tt class="py-line"> </tt>
-<a name="L571"></a><tt class="py-lineno">571</tt>  <tt class="py-line">  <tt class="py-comment"># Skip undocumented params and params common to all methods.</tt> </tt>
-<a name="L572"></a><tt class="py-lineno">572</tt>  <tt class="py-line">  <tt class="py-name">skip_parameters</tt> <tt class="py-op">=</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">.</tt><tt id="link-154" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-154', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L573"></a><tt class="py-lineno">573</tt>  <tt class="py-line">  <tt class="py-name">skip_parameters</tt><tt class="py-op">.</tt><tt class="py-name">extend</tt><tt class="py-op">(</tt><tt id="link-155" class="py-name"><a title="apiclient.discovery.STACK_QUERY_PARAMETERS" class="py-name" href="#" onclick="return doclink('link-155', 'STACK_QUERY_PARAMETERS', 'link-50');">STACK_QUERY_PARAMETERS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L571"></a><tt class="py-lineno">571</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt class="py-name">iterkeys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L572"></a><tt class="py-lineno">572</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">:</tt> </tt>
+<a name="L573"></a><tt class="py-lineno">573</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Got an unexpected keyword argument "%s"'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
 <a name="L574"></a><tt class="py-lineno">574</tt>  <tt class="py-line"> </tt>
-<a name="L575"></a><tt class="py-lineno">575</tt>  <tt class="py-line">  <tt class="py-name">all_args</tt> <tt class="py-op">=</tt> <tt class="py-name">argmap</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L576"></a><tt class="py-lineno">576</tt>  <tt class="py-line">  <tt class="py-name">args_ordered</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt id="link-156" class="py-name"><a title="apiclient.discovery.key2param" class="py-name" href="#" onclick="return doclink('link-156', 'key2param', 'link-97');">key2param</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">s</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="apiclient.schema.Schemas.get
+<a name="L575"></a><tt class="py-lineno">575</tt>  <tt class="py-line">    <tt class="py-comment"># Remove args that have a value of None.</tt> </tt>
+<a name="L576"></a><tt class="py-lineno">576</tt>  <tt class="py-line">    <tt class="py-name">keys</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L577"></a><tt class="py-lineno">577</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">keys</tt><tt class="py-op">:</tt> </tt>
+<a name="L578"></a><tt class="py-lineno">578</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L579"></a><tt class="py-lineno">579</tt>  <tt class="py-line">        <tt class="py-keyword">del</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
+<a name="L580"></a><tt class="py-lineno">580</tt>  <tt class="py-line"> </tt>
+<a name="L581"></a><tt class="py-lineno">581</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">required_params</tt><tt class="py-op">:</tt> </tt>
+<a name="L582"></a><tt class="py-lineno">582</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
+<a name="L583"></a><tt class="py-lineno">583</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Missing required parameter "%s"'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+<a name="L584"></a><tt class="py-lineno">584</tt>  <tt class="py-line"> </tt>
+<a name="L585"></a><tt class="py-lineno">585</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">pattern_params</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L586"></a><tt class="py-lineno">586</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
+<a name="L587"></a><tt class="py-lineno">587</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L588"></a><tt class="py-lineno">588</tt>  <tt class="py-line">          <tt class="py-name">pvalues</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
+<a name="L589"></a><tt class="py-lineno">589</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L590"></a><tt class="py-lineno">590</tt>  <tt class="py-line">          <tt class="py-name">pvalues</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
+<a name="L591"></a><tt class="py-lineno">591</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">pvalue</tt> <tt class="py-keyword">in</tt> <tt class="py-name">pvalues</tt><tt class="py-op">:</tt> </tt>
+<a name="L592"></a><tt class="py-lineno">592</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">regex</tt><tt class="py-op">,</tt> <tt class="py-name">pvalue</tt><tt class="py-op">)</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L593"></a><tt class="py-lineno">593</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt> </tt>
+<a name="L594"></a><tt class="py-lineno">594</tt>  <tt class="py-line">                <tt class="py-string">'Parameter "%s" value "%s" does not match the pattern "%s"'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L595"></a><tt class="py-lineno">595</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">pvalue</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L596"></a><tt class="py-lineno">596</tt>  <tt class="py-line"> </tt>
+<a name="L597"></a><tt class="py-lineno">597</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">enums</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">enum_params</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L598"></a><tt class="py-lineno">598</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
+<a name="L599"></a><tt class="py-lineno">599</tt>  <tt class="py-line">        <tt class="py-comment"># We need to handle the case of a repeated enum</tt> </tt>
+<a name="L600"></a><tt class="py-lineno">600</tt>  <tt class="py-line">        <tt class="py-comment"># name differently, since we want to handle both</tt> </tt>
+<a name="L601"></a><tt class="py-lineno">601</tt>  <tt class="py-line">        <tt class="py-comment"># arg='value' and arg=['value1', 'value2']</tt> </tt>
+<a name="L602"></a><tt class="py-lineno">602</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt> <tt class="py-keyword">and</tt> </tt>
+<a name="L603"></a><tt class="py-lineno">603</tt>  <tt class="py-line">            <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L604"></a><tt class="py-lineno">604</tt>  <tt class="py-line">          <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
+<a name="L605"></a><tt class="py-lineno">605</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L606"></a><tt class="py-lineno">606</tt>  <tt class="py-line">          <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
+<a name="L607"></a><tt class="py-lineno">607</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">values</tt><tt class="py-op">:</tt> </tt>
+<a name="L608"></a><tt class="py-lineno">608</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">enums</tt><tt class="py-op">:</tt> </tt>
+<a name="L609"></a><tt class="py-lineno">609</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt> </tt>
+<a name="L610"></a><tt class="py-lineno">610</tt>  <tt class="py-line">                <tt class="py-string">'Parameter "%s" value "%s" is not an allowed value in "%s"'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L611"></a><tt class="py-lineno">611</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">enums</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L612"></a><tt class="py-lineno">612</tt>  <tt class="py-line"> </tt>
+<a name="L613"></a><tt class="py-lineno">613</tt>  <tt class="py-line">    <tt class="py-name">actual_query_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L614"></a><tt class="py-lineno">614</tt>  <tt class="py-line">    <tt class="py-name">actual_path_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L615"></a><tt class="py-lineno">615</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L616"></a><tt class="py-lineno">616</tt>  <tt class="py-line">      <tt class="py-name">to_type</tt> <tt class="py-op">=</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">param_types</tt><tt class="py-op">.</tt><tt id="link-137" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-157', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameterOrder'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
-<a name="L577"></a><tt class="py-lineno">577</tt>  <tt class="py-line"> </tt>
-<a name="L578"></a><tt class="py-lineno">578</tt>  <tt class="py-line">  <tt class="py-comment"># Move body to the front of the line.</tt> </tt>
-<a name="L579"></a><tt class="py-lineno">579</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'body'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">all_args</tt><tt class="py-op">:</tt> </tt>
-<a name="L580"></a><tt class="py-lineno">580</tt>  <tt class="py-line">    <tt class="py-name">args_ordered</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">)</tt> </tt>
-<a name="L581"></a><tt class="py-lineno">581</tt>  <tt class="py-line"> </tt>
-<a name="L582"></a><tt class="py-lineno">582</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">all_args</tt><tt class="py-op">:</tt> </tt>
-<a name="L583"></a><tt class="py-lineno">583</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">args_ordered</tt><tt class="py-op">:</tt> </tt>
-<a name="L584"></a><tt class="py-lineno">584</tt>  <tt class="py-line">      <tt class="py-name">args_ordered</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
-<a name="L585"></a><tt class="py-lineno">585</tt>  <tt class="py-line"> </tt>
-<a name="L586"></a><tt class="py-lineno">586</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">args_ordered</tt><tt class="py-op">:</tt> </tt>
-<a name="L587"></a><tt class="py-lineno">587</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">skip_parameters</tt><tt class="py-op">:</tt> </tt>
-<a name="L588"></a><tt class="py-lineno">588</tt>  <tt class="py-line">      <tt class="py-keyword">continue</tt> </tt>
-<a name="L589"></a><tt class="py-lineno">589</tt>  <tt class="py-line"> </tt>
-<a name="L590"></a><tt class="py-lineno">590</tt>  <tt class="py-line">    <tt class="py-name">repeated</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
-<a name="L591"></a><tt class="py-lineno">591</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">repeated_params</tt><tt class="py-op">:</tt> </tt>
-<a name="L592"></a><tt class="py-lineno">592</tt>  <tt class="py-line">      <tt class="py-name">repeated</tt> <tt class="py-op">=</tt> <tt class="py-string">' (repeated)'</tt> </tt>
-<a name="L593"></a><tt class="py-lineno">593</tt>  <tt class="py-line">    <tt class="py-name">required</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
-<a name="L594"></a><tt class="py-lineno">594</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">required_params</tt><tt class="py-op">:</tt> </tt>
-<a name="L595"></a><tt class="py-lineno">595</tt>  <tt class="py-line">      <tt class="py-name">required</tt> <tt class="py-op">=</tt> <tt class="py-string">' (required)'</tt> </tt>
-<a name="L596"></a><tt class="py-lineno">596</tt>  <tt class="py-line">    <tt class="py-name">paramdesc</tt> <tt class="py-op">=</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">arg</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
-<a name="L597"></a><tt class="py-lineno">597</tt>  <tt class="py-line">    <tt class="py-name">paramdoc</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-158" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-137', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-string">'string'</tt><tt class="py-op">)</tt> </tt>
+<a name="L617"></a><tt class="py-lineno">617</tt>  <tt class="py-line">      <tt class="py-comment"># For repeated parameters we cast each member of the list.</tt> </tt>
+<a name="L618"></a><tt class="py-lineno">618</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt> <tt class="py-keyword">and</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L619"></a><tt class="py-lineno">619</tt>  <tt class="py-line">        <tt class="py-name">cast_value</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt id="link-138" class="py-name" targets="Function apiclient.discovery._cast()=apiclient.discovery-module.html#_cast"><a title="apiclient.discovery._cast" class="py-name" href="#" onclick="return doclink('link-138', '_cast', 'link-138');">_cast</a></tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">to_type</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">x</tt> <tt class="py-keyword">in</tt> <tt class="py-name">value</tt><tt class="py-op">]</tt> </tt>
+<a name="L620"></a><tt class="py-lineno">620</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L621"></a><tt class="py-lineno">621</tt>  <tt class="py-line">        <tt class="py-name">cast_value</tt> <tt class="py-op">=</tt> <tt id="link-139" class="py-name"><a title="apiclient.discovery._cast" class="py-name" href="#" onclick="return doclink('link-139', '_cast', 'link-138');">_cast</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">to_type</tt><tt class="py-op">)</tt> </tt>
+<a name="L622"></a><tt class="py-lineno">622</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt id="link-140" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-140', 'query_params', 'link-113');">query_params</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L623"></a><tt class="py-lineno">623</tt>  <tt class="py-line">        <tt class="py-name">actual_query_params</tt><tt class="py-op">[</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">cast_value</tt> </tt>
+<a name="L624"></a><tt class="py-lineno">624</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">path_params</tt><tt class="py-op">:</tt> </tt>
+<a name="L625"></a><tt class="py-lineno">625</tt>  <tt class="py-line">        <tt class="py-name">actual_path_params</tt><tt class="py-op">[</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">cast_value</tt> </tt>
+<a name="L626"></a><tt class="py-lineno">626</tt>  <tt class="py-line">    <tt class="py-name">body_value</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-141" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-158', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'description'</tt><tt class="py-op">,</tt> <tt class="py-string">'A parameter'</tt><tt class="py-op">)</tt> </tt>
-<a name="L598"></a><tt class="py-lineno">598</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'$ref'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L599"></a><tt class="py-lineno">599</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt> </tt>
-<a name="L600"></a><tt class="py-lineno">600</tt>  <tt class="py-line">          <tt class="py-op">(</tt><tt class="py-string">'  %s: object, %s%s%s\n    The object takes the'</tt> </tt>
-<a name="L601"></a><tt class="py-lineno">601</tt>  <tt class="py-line">          <tt class="py-string">' form of:\n\n%s\n\n'</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">arg</tt><tt class="py-op">,</tt> <tt class="py-name">paramdoc</tt><tt class="py-op">,</tt> <tt class="py-name">required</tt><tt class="py-op">,</tt> <tt class="py-name">repeated</tt><tt class="py-op">,</tt> </tt>
-<a name="L602"></a><tt class="py-lineno">602</tt>  <tt class="py-line">            <tt id="link-159" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-159', 'schema', 'link-38');">schema</a></tt><tt class="py-op">.</tt><tt id="link-160" class="py-name" targets="Method apiclient.schema.Schemas.prettyPrintByName()=apiclient.schema.Schemas-class.html#prettyPrintByName"><a title="apiclient.schema.Schemas.prettyPrintByName" class="py-name" href="#" onclick="return doclink('link-160', 'prettyPrintByName', 'link-160');">prettyPrintByName</a></tt><tt class="py-op">(</tt><tt class="py-name">paramdesc</tt><tt class="py-op">[</tt><tt class="py-string">'$ref'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L603"></a><tt class="py-lineno">603</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L604"></a><tt class="py-lineno">604</tt>  <tt class="py-line">      <tt class="py-name">paramtype</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-141', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L627"></a><tt class="py-lineno">627</tt>  <tt class="py-line">    <tt class="py-name">media_filename</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-142" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-161', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">,</tt> <tt class="py-string">'string'</tt><tt class="py-op">)</tt> </tt>
-<a name="L605"></a><tt class="py-lineno">605</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'  %s: %s, %s%s%s\n'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">arg</tt><tt class="py-op">,</tt> <tt class="py-name">paramtype</tt><tt class="py-op">,</tt> <tt class="py-name">paramdoc</tt><tt class="py-op">,</tt> <tt class="py-name">required</tt><tt class="py-op">,</tt> </tt>
-<a name="L606"></a><tt class="py-lineno">606</tt>  <tt class="py-line">                                          <tt class="py-name">repeated</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L607"></a><tt class="py-lineno">607</tt>  <tt class="py-line">    <tt class="py-name">enum</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-162" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-162', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'enum'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L608"></a><tt class="py-lineno">608</tt>  <tt class="py-line">    <tt class="py-name">enumDesc</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-163', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'enumDescriptions'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L609"></a><tt class="py-lineno">609</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">enum</tt> <tt class="py-keyword">and</tt> <tt class="py-name">enumDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L610"></a><tt class="py-lineno">610</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'    Allowed values\n'</tt><tt class="py-op">)</tt> </tt>
-<a name="L611"></a><tt class="py-lineno">611</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">zip</tt><tt class="py-op">(</tt><tt class="py-name">enum</tt><tt class="py-op">,</tt> <tt class="py-name">enumDesc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L612"></a><tt class="py-lineno">612</tt>  <tt class="py-line">        <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'      %s - %s\n'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L613"></a><tt class="py-lineno">613</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'response'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L614"></a><tt class="py-lineno">614</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">methodName</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'_media'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L615"></a><tt class="py-lineno">615</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'\nReturns:\n  The media object as a string.\n\n    '</tt><tt class="py-op">)</tt> </tt>
-<a name="L616"></a><tt class="py-lineno">616</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L617"></a><tt class="py-lineno">617</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'\nReturns:\n  An object of the form:\n\n    '</tt><tt class="py-op">)</tt> </tt>
-<a name="L618"></a><tt class="py-lineno">618</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-164" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-164', 'schema', 'link-38');">schema</a></tt><tt class="py-op">.</tt><tt id="link-165" class="py-name" targets="Method apiclient.schema.Schemas.prettyPrintSchema()=apiclient.schema.Schemas-class.html#prettyPrintSchema"><a title="apiclient.schema.Schemas.prettyPrintSchema" class="py-name" href="#" onclick="return doclink('link-165', 'prettyPrintSchema', 'link-165');">prettyPrintSchema</a></tt><tt class="py-op">(</tt><tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'response'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L619"></a><tt class="py-lineno">619</tt>  <tt class="py-line"> </tt>
-<a name="L620"></a><tt class="py-lineno">620</tt>  <tt class="py-line">  <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-string">'__doc__'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">docs</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L621"></a><tt class="py-lineno">621</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L622"></a><tt class="py-lineno">622</tt>  <tt class="py-line"> </tt>
-<a name="createNextMethod"></a><div id="createNextMethod-def"><a name="L623"></a><tt class="py-lineno">623</tt>  <tt class="py-line"> </tt>
-<a name="L624"></a><tt class="py-lineno">624</tt> <a class="py-toggle" href="#" id="createNextMethod-toggle" onclick="return toggle('createNextMethod');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#createNextMethod">createNextMethod</a><tt class="py-op">(</tt><tt class="py-param">methodName</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="createNextMethod-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="createNextMethod-expanded"><a name="L625"></a><tt class="py-lineno">625</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates any _next methods for attaching to a Resource.</tt> </tt>
-<a name="L626"></a><tt class="py-lineno">626</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L627"></a><tt class="py-lineno">627</tt>  <tt class="py-line"><tt class="py-docstring">  The _next methods allow for easy iteration through list() responses.</tt> </tt>
-<a name="L628"></a><tt class="py-lineno">628</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L629"></a><tt class="py-lineno">629</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L630"></a><tt class="py-lineno">630</tt>  <tt class="py-line"><tt class="py-docstring">    methodName: string, name of the method to use.</tt> </tt>
-<a name="L631"></a><tt class="py-lineno">631</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L632"></a><tt class="py-lineno">632</tt>  <tt class="py-line">  <tt class="py-name">methodName</tt> <tt class="py-op">=</tt> <tt id="link-166" class="py-name"><a title="apiclient.discovery.fix_method_name" class="py-name" href="#" onclick="return doclink('link-166', 'fix_method_name', 'link-89');">fix_method_name</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">)</tt> </tt>
-<a name="L633"></a><tt class="py-lineno">633</tt>  <tt class="py-line"> </tt>
-<a name="L634"></a><tt class="py-lineno">634</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">methodNext</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">previous_request</tt><tt class="py-op">,</tt> <tt class="py-param">previous_response</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L635"></a><tt class="py-lineno">635</tt>  <tt class="py-line">    <tt class="py-docstring">"""Retrieves the next page of results.</tt> </tt>
-<a name="L636"></a><tt class="py-lineno">636</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L637"></a><tt class="py-lineno">637</tt>  <tt class="py-line"><tt class="py-docstring">Args:</tt> </tt>
-<a name="L638"></a><tt class="py-lineno">638</tt>  <tt class="py-line"><tt class="py-docstring">  previous_request: The request for the previous page. (required)</tt> </tt>
-<a name="L639"></a><tt class="py-lineno">639</tt>  <tt class="py-line"><tt class="py-docstring">  previous_response: The response from the request for the previous page. (required)</tt> </tt>
-<a name="L640"></a><tt class="py-lineno">640</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L641"></a><tt class="py-lineno">641</tt>  <tt class="py-line"><tt class="py-docstring">Returns:</tt> </tt>
-<a name="L642"></a><tt class="py-lineno">642</tt>  <tt class="py-line"><tt class="py-docstring">  A request object that you can call 'execute()' on to request the next</tt> </tt>
-<a name="L643"></a><tt class="py-lineno">643</tt>  <tt class="py-line"><tt class="py-docstring">  page. Returns None if there are no more items in the collection.</tt> </tt>
-<a name="L644"></a><tt class="py-lineno">644</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L645"></a><tt class="py-lineno">645</tt>  <tt class="py-line">    <tt class="py-comment"># Retrieve nextPageToken from previous_response</tt> </tt>
-<a name="L646"></a><tt class="py-lineno">646</tt>  <tt class="py-line">    <tt class="py-comment"># Use as pageToken in previous_request to create new request.</tt> </tt>
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-142', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'media_body'</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L628"></a><tt class="py-lineno">628</tt>  <tt class="py-line"> </tt>
+<a name="L629"></a><tt class="py-lineno">629</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt><tt class="py-op">:</tt> </tt>
+<a name="L630"></a><tt class="py-lineno">630</tt>  <tt class="py-line">      <tt class="py-name">actual_query_params</tt><tt class="py-op">[</tt><tt class="py-string">'key'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt> </tt>
+<a name="L631"></a><tt class="py-lineno">631</tt>  <tt class="py-line"> </tt>
+<a name="L632"></a><tt class="py-lineno">632</tt>  <tt class="py-line">    <tt id="link-143" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-143', 'model', 'link-29');">model</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt> </tt>
+<a name="L633"></a><tt class="py-lineno">633</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">methodName</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'_media'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L634"></a><tt class="py-lineno">634</tt>  <tt class="py-line">      <tt id="link-144" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-144', 'model', 'link-29');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-145" class="py-name"><a title="apiclient.model.MediaModel" class="py-name" href="#" onclick="return doclink('link-145', 'MediaModel', 'link-33');">MediaModel</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L635"></a><tt class="py-lineno">635</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-string">'response'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L636"></a><tt class="py-lineno">636</tt>  <tt class="py-line">      <tt id="link-146" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-146', 'model', 'link-29');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-147" class="py-name"><a title="apiclient.model.RawModel" class="py-name" href="#" onclick="return doclink('link-147', 'RawModel', 'link-36');">RawModel</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L637"></a><tt class="py-lineno">637</tt>  <tt class="py-line"> </tt>
+<a name="L638"></a><tt class="py-lineno">638</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L639"></a><tt class="py-lineno">639</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">,</tt> <tt class="py-name">query</tt><tt class="py-op">,</tt> <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt id="link-148" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-148', 'model', 'link-29');">model</a></tt><tt class="py-op">.</tt><tt id="link-149" 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-149', 'request', 'link-68');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">,</tt> </tt>
+<a name="L640"></a><tt class="py-lineno">640</tt>  <tt class="py-line">        <tt class="py-name">actual_path_params</tt><tt class="py-op">,</tt> <tt class="py-name">actual_query_params</tt><tt class="py-op">,</tt> <tt class="py-name">body_value</tt><tt class="py-op">)</tt> </tt>
+<a name="L641"></a><tt class="py-lineno">641</tt>  <tt class="py-line"> </tt>
+<a name="L642"></a><tt class="py-lineno">642</tt>  <tt class="py-line">    <tt class="py-name">expanded_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt class="py-name">pathUrl</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
+<a name="L643"></a><tt class="py-lineno">643</tt>  <tt class="py-line">    <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urljoin</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt><tt class="py-op">,</tt> <tt class="py-name">expanded_url</tt> <tt class="py-op">+</tt> <tt class="py-name">query</tt><tt class="py-op">)</tt> </tt>
+<a name="L644"></a><tt class="py-lineno">644</tt>  <tt class="py-line"> </tt>
+<a name="L645"></a><tt class="py-lineno">645</tt>  <tt class="py-line">    <tt id="link-150" class="py-name" targets="Method apiclient.http.MediaIoBaseUpload.resumable()=apiclient.http.MediaIoBaseUpload-class.html#resumable,Method apiclient.http.MediaUpload.resumable()=apiclient.http.MediaUpload-class.html#resumable"><a title="apiclient.http.MediaIoBaseUpload.resumable
+apiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-150', 'resumable', 'link-150');">resumable</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L646"></a><tt class="py-lineno">646</tt>  <tt class="py-line">    <tt class="py-name">multipart_boundary</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
 <a name="L647"></a><tt class="py-lineno">647</tt>  <tt class="py-line"> </tt>
-<a name="L648"></a><tt class="py-lineno">648</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'nextPageToken'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">previous_response</tt><tt class="py-op">:</tt> </tt>
-<a name="L649"></a><tt class="py-lineno">649</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L650"></a><tt class="py-lineno">650</tt>  <tt class="py-line"> </tt>
-<a name="L651"></a><tt class="py-lineno">651</tt>  <tt class="py-line">    <tt id="link-167" 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-167', 'request', 'link-60');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">previous_request</tt><tt class="py-op">)</tt> </tt>
-<a name="L652"></a><tt class="py-lineno">652</tt>  <tt class="py-line"> </tt>
-<a name="L653"></a><tt class="py-lineno">653</tt>  <tt class="py-line">    <tt class="py-name">pageToken</tt> <tt class="py-op">=</tt> <tt class="py-name">previous_response</tt><tt class="py-op">[</tt><tt class="py-string">'nextPageToken'</tt><tt class="py-op">]</tt> </tt>
-<a name="L654"></a><tt class="py-lineno">654</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urlparse</tt><tt class="py-op">(</tt><tt id="link-168" 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-168', 'request', 'link-60');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L655"></a><tt class="py-lineno">655</tt>  <tt class="py-line">    <tt class="py-name">q</tt> <tt class="py-op">=</tt> <tt class="py-name">parse_qsl</tt><tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L656"></a><tt class="py-lineno">656</tt>  <tt class="py-line"> </tt>
-<a name="L657"></a><tt class="py-lineno">657</tt>  <tt class="py-line">    <tt class="py-comment"># Find and remove old 'pageToken' value from URI</tt> </tt>
-<a name="L658"></a><tt class="py-lineno">658</tt>  <tt class="py-line">    <tt class="py-name">newq</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">q</tt> <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-op">!=</tt> <tt class="py-string">'pageToken'</tt><tt class="py-op">]</tt> </tt>
-<a name="L659"></a><tt class="py-lineno">659</tt>  <tt class="py-line">    <tt class="py-name">newq</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">'pageToken'</tt><tt class="py-op">,</tt> <tt class="py-name">pageToken</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L660"></a><tt class="py-lineno">660</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-name">newq</tt><tt class="py-op">)</tt> </tt>
-<a name="L661"></a><tt class="py-lineno">661</tt>  <tt class="py-line">    <tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urlunparse</tt><tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">)</tt> </tt>
+<a name="L648"></a><tt class="py-lineno">648</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">media_filename</tt><tt class="py-op">:</tt> </tt>
+<a name="L649"></a><tt class="py-lineno">649</tt>  <tt class="py-line">      <tt class="py-comment"># Ensure we end up with a valid MediaUpload object.</tt> </tt>
+<a name="L650"></a><tt class="py-lineno">650</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">,</tt> <tt class="py-name">basestring</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L651"></a><tt class="py-lineno">651</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">,</tt> <tt class="py-name">encoding</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">mimetypes</tt><tt class="py-op">.</tt><tt class="py-name">guess_type</tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">)</tt> </tt>
+<a name="L652"></a><tt class="py-lineno">652</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">media_mime_type</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L653"></a><tt class="py-lineno">653</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-151" class="py-name"><a title="apiclient.errors.UnknownFileType" class="py-name" href="#" onclick="return doclink('link-151', 'UnknownFileType', 'link-18');">UnknownFileType</a></tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">)</tt> </tt>
+<a name="L654"></a><tt class="py-lineno">654</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-152" class="py-name"><a title="apiclient.mimeparse" class="py-name" href="#" onclick="return doclink('link-152', 'mimeparse', 'link-0');">mimeparse</a></tt><tt class="py-op">.</tt><tt id="link-153" class="py-name" targets="Function apiclient.mimeparse.best_match()=apiclient.mimeparse-module.html#best_match"><a title="apiclient.mimeparse.best_match" class="py-name" href="#" onclick="return doclink('link-153', 'best_match', 'link-153');">best_match</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-string">','</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt id="link-154" class="py-name"><a title="apiclient.model.BaseModel.accept
+apiclient.model.JsonModel.accept
+apiclient.model.MediaModel.accept
+apiclient.model.ProtocolBufferModel.accept
+apiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-154', 'accept', 'link-102');">accept</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L655"></a><tt class="py-lineno">655</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-155" class="py-name"><a title="apiclient.errors.UnacceptableMimeTypeError" class="py-name" href="#" onclick="return doclink('link-155', 'UnacceptableMimeTypeError', 'link-12');">UnacceptableMimeTypeError</a></tt><tt class="py-op">(</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">)</tt> </tt>
+<a name="L656"></a><tt class="py-lineno">656</tt>  <tt class="py-line">        <tt class="py-name">media_upload</tt> <tt class="py-op">=</tt> <tt id="link-156" class="py-name"><a title="apiclient.http.MediaFileUpload" class="py-name" href="#" onclick="return doclink('link-156', 'MediaFileUpload', 'link-24');">MediaFileUpload</a></tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">,</tt> </tt>
+<a name="L657"></a><tt class="py-lineno">657</tt>  <tt class="py-line">                                       <tt id="link-157" class="py-name" targets="Method apiclient.http.MediaIoBaseUpload.mimetype()=apiclient.http.MediaIoBaseUpload-class.html#mimetype,Method apiclient.http.MediaUpload.mimetype()=apiclient.http.MediaUpload-class.html#mimetype"><a title="apiclient.http.MediaIoBaseUpload.mimetype
+apiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-157', 'mimetype', 'link-157');">mimetype</a></tt><tt class="py-op">=</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">)</tt> </tt>
+<a name="L658"></a><tt class="py-lineno">658</tt>  <tt class="py-line">      <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">,</tt> <tt id="link-158" class="py-name"><a title="apiclient.http.MediaUpload" class="py-name" href="#" onclick="return doclink('link-158', 'MediaUpload', 'link-27');">MediaUpload</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L659"></a><tt class="py-lineno">659</tt>  <tt class="py-line">        <tt class="py-name">media_upload</tt> <tt class="py-op">=</tt> <tt class="py-name">media_filename</tt> </tt>
+<a name="L660"></a><tt class="py-lineno">660</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L661"></a><tt class="py-lineno">661</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'media_filename must be str or MediaUpload.'</tt><tt class="py-op">)</tt> </tt>
 <a name="L662"></a><tt class="py-lineno">662</tt>  <tt class="py-line"> </tt>
-<a name="L663"></a><tt class="py-lineno">663</tt>  <tt class="py-line">    <tt id="link-169" 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-169', 'request', 'link-60');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">uri</tt> </tt>
-<a name="L664"></a><tt class="py-lineno">664</tt>  <tt class="py-line"> </tt>
-<a name="L665"></a><tt class="py-lineno">665</tt>  <tt class="py-line">    <tt id="link-170" class="py-name"><a title="apiclient.discovery.logger
+<a name="L663"></a><tt class="py-lineno">663</tt>  <tt class="py-line">      <tt class="py-comment"># Check the maxSize</tt> </tt>
+<a name="L664"></a><tt class="py-lineno">664</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">maxSize</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt> <tt class="py-keyword">and</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-159" class="py-name" targets="Method apiclient.http.MediaIoBaseUpload.size()=apiclient.http.MediaIoBaseUpload-class.html#size,Method apiclient.http.MediaUpload.size()=apiclient.http.MediaUpload-class.html#size"><a title="apiclient.http.MediaIoBaseUpload.size
+apiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-159', 'size', 'link-159');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">maxSize</tt><tt class="py-op">:</tt> </tt>
+<a name="L665"></a><tt class="py-lineno">665</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt id="link-160" class="py-name"><a title="apiclient.errors.MediaUploadSizeError" class="py-name" href="#" onclick="return doclink('link-160', 'MediaUploadSizeError', 'link-9');">MediaUploadSizeError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Media larger than: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">maxSize</tt><tt class="py-op">)</tt> </tt>
+<a name="L666"></a><tt class="py-lineno">666</tt>  <tt class="py-line"> </tt>
+<a name="L667"></a><tt class="py-lineno">667</tt>  <tt class="py-line">      <tt class="py-comment"># Use the media path uri for media uploads</tt> </tt>
+<a name="L668"></a><tt class="py-lineno">668</tt>  <tt class="py-line">      <tt class="py-name">expanded_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt class="py-name">mediaPathUrl</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
+<a name="L669"></a><tt class="py-lineno">669</tt>  <tt class="py-line">      <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urljoin</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt><tt class="py-op">,</tt> <tt class="py-name">expanded_url</tt> <tt class="py-op">+</tt> <tt class="py-name">query</tt><tt class="py-op">)</tt> </tt>
+<a name="L670"></a><tt class="py-lineno">670</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.resumable
+apiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-161', 'resumable', 'link-150');">resumable</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L671"></a><tt class="py-lineno">671</tt>  <tt class="py-line">        <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt id="link-162" class="py-name"><a title="oauth2client.util._add_query_parameter" class="py-name" href="#" onclick="return doclink('link-162', '_add_query_parameter', 'link-44');">_add_query_parameter</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'uploadType'</tt><tt class="py-op">,</tt> <tt class="py-string">'resumable'</tt><tt class="py-op">)</tt> </tt>
+<a name="L672"></a><tt class="py-lineno">672</tt>  <tt class="py-line"> </tt>
+<a name="L673"></a><tt class="py-lineno">673</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.resumable
+apiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-163', 'resumable', 'link-150');">resumable</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L674"></a><tt class="py-lineno">674</tt>  <tt class="py-line">        <tt class="py-comment"># This is all we need to do for resumable, if the body exists it gets</tt> </tt>
+<a name="L675"></a><tt class="py-lineno">675</tt>  <tt class="py-line">        <tt class="py-comment"># sent in the first request, otherwise an empty body is sent.</tt> </tt>
+<a name="L676"></a><tt class="py-lineno">676</tt>  <tt class="py-line">        <tt id="link-164" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.resumable
+apiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-164', 'resumable', 'link-150');">resumable</a></tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt> </tt>
+<a name="L677"></a><tt class="py-lineno">677</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L678"></a><tt class="py-lineno">678</tt>  <tt class="py-line">        <tt class="py-comment"># A non-resumable upload</tt> </tt>
+<a name="L679"></a><tt class="py-lineno">679</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">body</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L680"></a><tt class="py-lineno">680</tt>  <tt class="py-line">          <tt class="py-comment"># This is a simple media upload</tt> </tt>
+<a name="L681"></a><tt class="py-lineno">681</tt>  <tt class="py-line">          <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-165" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.mimetype
+apiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-165', 'mimetype', 'link-157');">mimetype</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L682"></a><tt class="py-lineno">682</tt>  <tt class="py-line">          <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-166" class="py-name" targets="Method apiclient.http.MediaIoBaseUpload.getbytes()=apiclient.http.MediaIoBaseUpload-class.html#getbytes,Method apiclient.http.MediaUpload.getbytes()=apiclient.http.MediaUpload-class.html#getbytes"><a title="apiclient.http.MediaIoBaseUpload.getbytes
+apiclient.http.MediaUpload.getbytes" class="py-name" href="#" onclick="return doclink('link-166', 'getbytes', 'link-166');">getbytes</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-167" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.size
+apiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-167', 'size', 'link-159');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L683"></a><tt class="py-lineno">683</tt>  <tt class="py-line">          <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt id="link-168" class="py-name"><a title="oauth2client.util._add_query_parameter" class="py-name" href="#" onclick="return doclink('link-168', '_add_query_parameter', 'link-44');">_add_query_parameter</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'uploadType'</tt><tt class="py-op">,</tt> <tt class="py-string">'media'</tt><tt class="py-op">)</tt> </tt>
+<a name="L684"></a><tt class="py-lineno">684</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L685"></a><tt class="py-lineno">685</tt>  <tt class="py-line">          <tt class="py-comment"># This is a multipart/related upload.</tt> </tt>
+<a name="L686"></a><tt class="py-lineno">686</tt>  <tt class="py-line">          <tt class="py-name">msgRoot</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMEMultipart</tt><tt class="py-op">(</tt><tt class="py-string">'related'</tt><tt class="py-op">)</tt> </tt>
+<a name="L687"></a><tt class="py-lineno">687</tt>  <tt class="py-line">          <tt class="py-comment"># msgRoot should not write out it's own headers</tt> </tt>
+<a name="L688"></a><tt class="py-lineno">688</tt>  <tt class="py-line">          <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">msgRoot</tt><tt class="py-op">,</tt> <tt class="py-string">'_write_headers'</tt><tt class="py-op">,</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">self</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L689"></a><tt class="py-lineno">689</tt>  <tt class="py-line"> </tt>
+<a name="L690"></a><tt class="py-lineno">690</tt>  <tt class="py-line">          <tt class="py-comment"># attach the body as one part</tt> </tt>
+<a name="L691"></a><tt class="py-lineno">691</tt>  <tt class="py-line">          <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMENonMultipart</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L692"></a><tt class="py-lineno">692</tt>  <tt class="py-line">          <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_payload</tt><tt class="py-op">(</tt><tt class="py-name">body</tt><tt class="py-op">)</tt> </tt>
+<a name="L693"></a><tt class="py-lineno">693</tt>  <tt class="py-line">          <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">attach</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
+<a name="L694"></a><tt class="py-lineno">694</tt>  <tt class="py-line"> </tt>
+<a name="L695"></a><tt class="py-lineno">695</tt>  <tt class="py-line">          <tt class="py-comment"># attach the media as the second part</tt> </tt>
+<a name="L696"></a><tt class="py-lineno">696</tt>  <tt class="py-line">          <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMENonMultipart</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-169" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.mimetype
+apiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-169', 'mimetype', 'link-157');">mimetype</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L697"></a><tt class="py-lineno">697</tt>  <tt class="py-line">          <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'Content-Transfer-Encoding'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'binary'</tt> </tt>
+<a name="L698"></a><tt class="py-lineno">698</tt>  <tt class="py-line"> </tt>
+<a name="L699"></a><tt class="py-lineno">699</tt>  <tt class="py-line">          <tt class="py-name">payload</tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-170" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.getbytes
+apiclient.http.MediaUpload.getbytes" class="py-name" href="#" onclick="return doclink('link-170', 'getbytes', 'link-166');">getbytes</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-171" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.size
+apiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-171', 'size', 'link-159');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L700"></a><tt class="py-lineno">700</tt>  <tt class="py-line">          <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_payload</tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">)</tt> </tt>
+<a name="L701"></a><tt class="py-lineno">701</tt>  <tt class="py-line">          <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">attach</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
+<a name="L702"></a><tt class="py-lineno">702</tt>  <tt class="py-line">          <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">as_string</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L703"></a><tt class="py-lineno">703</tt>  <tt class="py-line"> </tt>
+<a name="L704"></a><tt class="py-lineno">704</tt>  <tt class="py-line">          <tt class="py-name">multipart_boundary</tt> <tt class="py-op">=</tt> <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">get_boundary</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L705"></a><tt class="py-lineno">705</tt>  <tt class="py-line">          <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'multipart/related; '</tt> </tt>
+<a name="L706"></a><tt class="py-lineno">706</tt>  <tt class="py-line">                                     <tt class="py-string">'boundary="%s"'</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">multipart_boundary</tt> </tt>
+<a name="L707"></a><tt class="py-lineno">707</tt>  <tt class="py-line">          <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt id="link-172" class="py-name"><a title="oauth2client.util._add_query_parameter" class="py-name" href="#" onclick="return doclink('link-172', '_add_query_parameter', 'link-44');">_add_query_parameter</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'uploadType'</tt><tt class="py-op">,</tt> <tt class="py-string">'multipart'</tt><tt class="py-op">)</tt> </tt>
+<a name="L708"></a><tt class="py-lineno">708</tt>  <tt class="py-line"> </tt>
+<a name="L709"></a><tt class="py-lineno">709</tt>  <tt class="py-line">    <tt id="link-173" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-170', 'logger', 'link-45');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'URL being requested: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
-<a name="L666"></a><tt class="py-lineno">666</tt>  <tt class="py-line"> </tt>
-<a name="L667"></a><tt class="py-lineno">667</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-171" class="py-name"><a title="apiclient.http.HttpMock.request
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-173', 'logger', 'link-48');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'URL being requested: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">url</tt><tt class="py-op">)</tt> </tt>
+<a name="L710"></a><tt class="py-lineno">710</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requestBuilder</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_http</tt><tt class="py-op">,</tt> </tt>
+<a name="L711"></a><tt class="py-lineno">711</tt>  <tt class="py-line">                                <tt id="link-174" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-174', 'model', 'link-29');">model</a></tt><tt class="py-op">.</tt><tt id="link-175" class="py-name" targets="Method apiclient.model.BaseModel.response()=apiclient.model.BaseModel-class.html#response,Method apiclient.model.Model.response()=apiclient.model.Model-class.html#response"><a title="apiclient.model.BaseModel.response
+apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-175', 'response', 'link-175');">response</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L712"></a><tt class="py-lineno">712</tt>  <tt class="py-line">                                <tt class="py-name">url</tt><tt class="py-op">,</tt> </tt>
+<a name="L713"></a><tt class="py-lineno">713</tt>  <tt class="py-line">                                <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-name">httpMethod</tt><tt class="py-op">,</tt> </tt>
+<a name="L714"></a><tt class="py-lineno">714</tt>  <tt class="py-line">                                <tt class="py-name">body</tt><tt class="py-op">=</tt><tt class="py-name">body</tt><tt class="py-op">,</tt> </tt>
+<a name="L715"></a><tt class="py-lineno">715</tt>  <tt class="py-line">                                <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">,</tt> </tt>
+<a name="L716"></a><tt class="py-lineno">716</tt>  <tt class="py-line">                                <tt class="py-name">methodId</tt><tt class="py-op">=</tt><tt class="py-name">methodId</tt><tt class="py-op">,</tt> </tt>
+<a name="L717"></a><tt class="py-lineno">717</tt>  <tt class="py-line">                                <tt id="link-176" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.resumable
+apiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-176', 'resumable', 'link-150');">resumable</a></tt><tt class="py-op">=</tt><tt id="link-177" class="py-name"><a title="apiclient.http.MediaIoBaseUpload.resumable
+apiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-177', 'resumable', 'link-150');">resumable</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L718"></a><tt class="py-lineno">718</tt>  <tt class="py-line"> </tt>
+<a name="L719"></a><tt class="py-lineno">719</tt>  <tt class="py-line">  <tt class="py-name">docs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-178" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-178', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'description'</tt><tt class="py-op">,</tt> <tt id="link-179" class="py-name"><a title="apiclient.discovery.DEFAULT_METHOD_DOC" class="py-name" href="#" onclick="return doclink('link-179', 'DEFAULT_METHOD_DOC', 'link-52');">DEFAULT_METHOD_DOC</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'\n\n'</tt><tt class="py-op">]</tt> </tt>
+<a name="L720"></a><tt class="py-lineno">720</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L721"></a><tt class="py-lineno">721</tt>  <tt class="py-line">    <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'Args:\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L722"></a><tt class="py-lineno">722</tt>  <tt class="py-line"> </tt>
+<a name="L723"></a><tt class="py-lineno">723</tt>  <tt class="py-line">  <tt class="py-comment"># Skip undocumented params and params common to all methods.</tt> </tt>
+<a name="L724"></a><tt class="py-lineno">724</tt>  <tt class="py-line">  <tt class="py-name">skip_parameters</tt> <tt class="py-op">=</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">.</tt><tt id="link-180" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-180', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L725"></a><tt class="py-lineno">725</tt>  <tt class="py-line">  <tt class="py-name">skip_parameters</tt><tt class="py-op">.</tt><tt class="py-name">extend</tt><tt class="py-op">(</tt><tt id="link-181" class="py-name"><a title="apiclient.discovery.STACK_QUERY_PARAMETERS" class="py-name" href="#" onclick="return doclink('link-181', 'STACK_QUERY_PARAMETERS', 'link-57');">STACK_QUERY_PARAMETERS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L726"></a><tt class="py-lineno">726</tt>  <tt class="py-line"> </tt>
+<a name="L727"></a><tt class="py-lineno">727</tt>  <tt class="py-line">  <tt class="py-name">all_args</tt> <tt class="py-op">=</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L728"></a><tt class="py-lineno">728</tt>  <tt class="py-line">  <tt class="py-name">args_ordered</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt id="link-182" class="py-name"><a title="apiclient.discovery.key2param" class="py-name" href="#" onclick="return doclink('link-182', 'key2param', 'link-117');">key2param</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">s</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-183" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-183', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameterOrder'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
+<a name="L729"></a><tt class="py-lineno">729</tt>  <tt class="py-line"> </tt>
+<a name="L730"></a><tt class="py-lineno">730</tt>  <tt class="py-line">  <tt class="py-comment"># Move body to the front of the line.</tt> </tt>
+<a name="L731"></a><tt class="py-lineno">731</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'body'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">all_args</tt><tt class="py-op">:</tt> </tt>
+<a name="L732"></a><tt class="py-lineno">732</tt>  <tt class="py-line">    <tt class="py-name">args_ordered</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">)</tt> </tt>
+<a name="L733"></a><tt class="py-lineno">733</tt>  <tt class="py-line"> </tt>
+<a name="L734"></a><tt class="py-lineno">734</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">all_args</tt><tt class="py-op">:</tt> </tt>
+<a name="L735"></a><tt class="py-lineno">735</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">args_ordered</tt><tt class="py-op">:</tt> </tt>
+<a name="L736"></a><tt class="py-lineno">736</tt>  <tt class="py-line">      <tt class="py-name">args_ordered</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+<a name="L737"></a><tt class="py-lineno">737</tt>  <tt class="py-line"> </tt>
+<a name="L738"></a><tt class="py-lineno">738</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">args_ordered</tt><tt class="py-op">:</tt> </tt>
+<a name="L739"></a><tt class="py-lineno">739</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">skip_parameters</tt><tt class="py-op">:</tt> </tt>
+<a name="L740"></a><tt class="py-lineno">740</tt>  <tt class="py-line">      <tt class="py-keyword">continue</tt> </tt>
+<a name="L741"></a><tt class="py-lineno">741</tt>  <tt class="py-line"> </tt>
+<a name="L742"></a><tt class="py-lineno">742</tt>  <tt class="py-line">    <tt class="py-name">repeated</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L743"></a><tt class="py-lineno">743</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt><tt class="py-op">:</tt> </tt>
+<a name="L744"></a><tt class="py-lineno">744</tt>  <tt class="py-line">      <tt class="py-name">repeated</tt> <tt class="py-op">=</tt> <tt class="py-string">' (repeated)'</tt> </tt>
+<a name="L745"></a><tt class="py-lineno">745</tt>  <tt class="py-line">    <tt class="py-name">required</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L746"></a><tt class="py-lineno">746</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">required_params</tt><tt class="py-op">:</tt> </tt>
+<a name="L747"></a><tt class="py-lineno">747</tt>  <tt class="py-line">      <tt class="py-name">required</tt> <tt class="py-op">=</tt> <tt class="py-string">' (required)'</tt> </tt>
+<a name="L748"></a><tt class="py-lineno">748</tt>  <tt class="py-line">    <tt class="py-name">paramdesc</tt> <tt class="py-op">=</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">arg</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
+<a name="L749"></a><tt class="py-lineno">749</tt>  <tt class="py-line">    <tt class="py-name">paramdoc</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-184" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-184', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'description'</tt><tt class="py-op">,</tt> <tt class="py-string">'A parameter'</tt><tt class="py-op">)</tt> </tt>
+<a name="L750"></a><tt class="py-lineno">750</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'$ref'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L751"></a><tt class="py-lineno">751</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt> </tt>
+<a name="L752"></a><tt class="py-lineno">752</tt>  <tt class="py-line">          <tt class="py-op">(</tt><tt class="py-string">'  %s: object, %s%s%s\n    The object takes the'</tt> </tt>
+<a name="L753"></a><tt class="py-lineno">753</tt>  <tt class="py-line">          <tt class="py-string">' form of:\n\n%s\n\n'</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">arg</tt><tt class="py-op">,</tt> <tt class="py-name">paramdoc</tt><tt class="py-op">,</tt> <tt class="py-name">required</tt><tt class="py-op">,</tt> <tt class="py-name">repeated</tt><tt class="py-op">,</tt> </tt>
+<a name="L754"></a><tt class="py-lineno">754</tt>  <tt class="py-line">            <tt id="link-185" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-185', 'schema', 'link-38');">schema</a></tt><tt class="py-op">.</tt><tt id="link-186" class="py-name" targets="Method apiclient.schema.Schemas.prettyPrintByName()=apiclient.schema.Schemas-class.html#prettyPrintByName"><a title="apiclient.schema.Schemas.prettyPrintByName" class="py-name" href="#" onclick="return doclink('link-186', 'prettyPrintByName', 'link-186');">prettyPrintByName</a></tt><tt class="py-op">(</tt><tt class="py-name">paramdesc</tt><tt class="py-op">[</tt><tt class="py-string">'$ref'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L755"></a><tt class="py-lineno">755</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L756"></a><tt class="py-lineno">756</tt>  <tt class="py-line">      <tt class="py-name">paramtype</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-187" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-187', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">,</tt> <tt class="py-string">'string'</tt><tt class="py-op">)</tt> </tt>
+<a name="L757"></a><tt class="py-lineno">757</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'  %s: %s, %s%s%s\n'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">arg</tt><tt class="py-op">,</tt> <tt class="py-name">paramtype</tt><tt class="py-op">,</tt> <tt class="py-name">paramdoc</tt><tt class="py-op">,</tt> <tt class="py-name">required</tt><tt class="py-op">,</tt> </tt>
+<a name="L758"></a><tt class="py-lineno">758</tt>  <tt class="py-line">                                          <tt class="py-name">repeated</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L759"></a><tt class="py-lineno">759</tt>  <tt class="py-line">    <tt class="py-name">enum</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-188" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-188', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'enum'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L760"></a><tt class="py-lineno">760</tt>  <tt class="py-line">    <tt class="py-name">enumDesc</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-189" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-189', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'enumDescriptions'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L761"></a><tt class="py-lineno">761</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">enum</tt> <tt class="py-keyword">and</tt> <tt class="py-name">enumDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L762"></a><tt class="py-lineno">762</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'    Allowed values\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L763"></a><tt class="py-lineno">763</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">zip</tt><tt class="py-op">(</tt><tt class="py-name">enum</tt><tt class="py-op">,</tt> <tt class="py-name">enumDesc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L764"></a><tt class="py-lineno">764</tt>  <tt class="py-line">        <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'      %s - %s\n'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L765"></a><tt class="py-lineno">765</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'response'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L766"></a><tt class="py-lineno">766</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">methodName</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'_media'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L767"></a><tt class="py-lineno">767</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'\nReturns:\n  The media object as a string.\n\n    '</tt><tt class="py-op">)</tt> </tt>
+<a name="L768"></a><tt class="py-lineno">768</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L769"></a><tt class="py-lineno">769</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'\nReturns:\n  An object of the form:\n\n    '</tt><tt class="py-op">)</tt> </tt>
+<a name="L770"></a><tt class="py-lineno">770</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-190" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-190', 'schema', 'link-38');">schema</a></tt><tt class="py-op">.</tt><tt id="link-191" class="py-name" targets="Method apiclient.schema.Schemas.prettyPrintSchema()=apiclient.schema.Schemas-class.html#prettyPrintSchema"><a title="apiclient.schema.Schemas.prettyPrintSchema" class="py-name" href="#" onclick="return doclink('link-191', 'prettyPrintSchema', 'link-191');">prettyPrintSchema</a></tt><tt class="py-op">(</tt><tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'response'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L771"></a><tt class="py-lineno">771</tt>  <tt class="py-line"> </tt>
+<a name="L772"></a><tt class="py-lineno">772</tt>  <tt class="py-line">  <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-string">'__doc__'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">docs</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L773"></a><tt class="py-lineno">773</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L774"></a><tt class="py-lineno">774</tt>  <tt class="py-line"> </tt>
+<a name="createNextMethod"></a><div id="createNextMethod-def"><a name="L775"></a><tt class="py-lineno">775</tt>  <tt class="py-line"> </tt>
+<a name="L776"></a><tt class="py-lineno">776</tt> <a class="py-toggle" href="#" id="createNextMethod-toggle" onclick="return toggle('createNextMethod');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery-module.html#createNextMethod">createNextMethod</a><tt class="py-op">(</tt><tt class="py-param">methodName</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="createNextMethod-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="createNextMethod-expanded"><a name="L777"></a><tt class="py-lineno">777</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates any _next methods for attaching to a Resource.</tt> </tt>
+<a name="L778"></a><tt class="py-lineno">778</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L779"></a><tt class="py-lineno">779</tt>  <tt class="py-line"><tt class="py-docstring">  The _next methods allow for easy iteration through list() responses.</tt> </tt>
+<a name="L780"></a><tt class="py-lineno">780</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L781"></a><tt class="py-lineno">781</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L782"></a><tt class="py-lineno">782</tt>  <tt class="py-line"><tt class="py-docstring">    methodName: string, name of the method to use.</tt> </tt>
+<a name="L783"></a><tt class="py-lineno">783</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L784"></a><tt class="py-lineno">784</tt>  <tt class="py-line">  <tt class="py-name">methodName</tt> <tt class="py-op">=</tt> <tt id="link-192" class="py-name"><a title="apiclient.discovery.fix_method_name" class="py-name" href="#" onclick="return doclink('link-192', 'fix_method_name', 'link-133');">fix_method_name</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">)</tt> </tt>
+<a name="L785"></a><tt class="py-lineno">785</tt>  <tt class="py-line"> </tt>
+<a name="L786"></a><tt class="py-lineno">786</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">methodNext</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">previous_request</tt><tt class="py-op">,</tt> <tt class="py-param">previous_response</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L787"></a><tt class="py-lineno">787</tt>  <tt class="py-line">    <tt class="py-docstring">"""Retrieves the next page of results.</tt> </tt>
+<a name="L788"></a><tt class="py-lineno">788</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L789"></a><tt class="py-lineno">789</tt>  <tt class="py-line"><tt class="py-docstring">Args:</tt> </tt>
+<a name="L790"></a><tt class="py-lineno">790</tt>  <tt class="py-line"><tt class="py-docstring">  previous_request: The request for the previous page. (required)</tt> </tt>
+<a name="L791"></a><tt class="py-lineno">791</tt>  <tt class="py-line"><tt class="py-docstring">  previous_response: The response from the request for the previous page. (required)</tt> </tt>
+<a name="L792"></a><tt class="py-lineno">792</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L793"></a><tt class="py-lineno">793</tt>  <tt class="py-line"><tt class="py-docstring">Returns:</tt> </tt>
+<a name="L794"></a><tt class="py-lineno">794</tt>  <tt class="py-line"><tt class="py-docstring">  A request object that you can call 'execute()' on to request the next</tt> </tt>
+<a name="L795"></a><tt class="py-lineno">795</tt>  <tt class="py-line"><tt class="py-docstring">  page. Returns None if there are no more items in the collection.</tt> </tt>
+<a name="L796"></a><tt class="py-lineno">796</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L797"></a><tt class="py-lineno">797</tt>  <tt class="py-line">    <tt class="py-comment"># Retrieve nextPageToken from previous_response</tt> </tt>
+<a name="L798"></a><tt class="py-lineno">798</tt>  <tt class="py-line">    <tt class="py-comment"># Use as pageToken in previous_request to create new request.</tt> </tt>
+<a name="L799"></a><tt class="py-lineno">799</tt>  <tt class="py-line"> </tt>
+<a name="L800"></a><tt class="py-lineno">800</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'nextPageToken'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">previous_response</tt><tt class="py-op">:</tt> </tt>
+<a name="L801"></a><tt class="py-lineno">801</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L802"></a><tt class="py-lineno">802</tt>  <tt class="py-line"> </tt>
+<a name="L803"></a><tt class="py-lineno">803</tt>  <tt class="py-line">    <tt id="link-193" 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-171', 'request', 'link-60');">request</a></tt> </tt>
-</div><a name="L668"></a><tt class="py-lineno">668</tt>  <tt class="py-line"> </tt>
-<a name="L669"></a><tt class="py-lineno">669</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodNext</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L670"></a><tt class="py-lineno">670</tt>  <tt class="py-line"> </tt>
-<a name="Resource"></a><div id="Resource-def"><a name="L671"></a><tt class="py-lineno">671</tt>  <tt class="py-line"> </tt>
-<a name="L672"></a><tt class="py-lineno">672</tt> <a class="py-toggle" href="#" id="Resource-toggle" onclick="return toggle('Resource');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html">Resource</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Resource-expanded"><a name="L673"></a><tt class="py-lineno">673</tt>  <tt class="py-line">  <tt class="py-docstring">"""A class for interacting with a resource."""</tt> </tt>
-<a name="L674"></a><tt class="py-lineno">674</tt>  <tt class="py-line"> </tt>
-<a name="Resource.__init__"></a><div id="Resource.__init__-def"><a name="L675"></a><tt class="py-lineno">675</tt> <a class="py-toggle" href="#" id="Resource.__init__-toggle" onclick="return toggle('Resource.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-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">http</tt><tt class="py-op">,</tt> <tt class="py-param">baseUrl</tt><tt class="py-op">,</tt> <tt class="py-param">model</tt><tt class="py-op">,</tt> <tt class="py-param">requestBuilder</tt><tt class="py-op">,</tt> <tt class="py-param">developerKey</tt><tt class="py-op">,</tt> </tt>
-<a name="L676"></a><tt class="py-lineno">676</tt>  <tt class="py-line">               <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource.__init__-expanded"><a name="L677"></a><tt class="py-lineno">677</tt>  <tt class="py-line">    <tt class="py-docstring">"""Build a Resource from the API description.</tt> </tt>
-<a name="L678"></a><tt class="py-lineno">678</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L679"></a><tt class="py-lineno">679</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L680"></a><tt class="py-lineno">680</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, Object to make http requests with.</tt> </tt>
-<a name="L681"></a><tt class="py-lineno">681</tt>  <tt class="py-line"><tt class="py-docstring">      baseUrl: string, base URL for the API. All requests are relative to this</tt> </tt>
-<a name="L682"></a><tt class="py-lineno">682</tt>  <tt class="py-line"><tt class="py-docstring">          URI.</tt> </tt>
-<a name="L683"></a><tt class="py-lineno">683</tt>  <tt class="py-line"><tt class="py-docstring">      model: apiclient.Model, converts to and from the wire format.</tt> </tt>
-<a name="L684"></a><tt class="py-lineno">684</tt>  <tt class="py-line"><tt class="py-docstring">      requestBuilder: class or callable that instantiates an</tt> </tt>
-<a name="L685"></a><tt class="py-lineno">685</tt>  <tt class="py-line"><tt class="py-docstring">          apiclient.HttpRequest object.</tt> </tt>
-<a name="L686"></a><tt class="py-lineno">686</tt>  <tt class="py-line"><tt class="py-docstring">      developerKey: string, key obtained from</tt> </tt>
-<a name="L687"></a><tt class="py-lineno">687</tt>  <tt class="py-line"><tt class="py-docstring">          https://code.google.com/apis/console</tt> </tt>
-<a name="L688"></a><tt class="py-lineno">688</tt>  <tt class="py-line"><tt class="py-docstring">      resourceDesc: object, section of deserialized discovery document that</tt> </tt>
-<a name="L689"></a><tt class="py-lineno">689</tt>  <tt class="py-line"><tt class="py-docstring">          describes a resource. Note that the top level discovery document</tt> </tt>
-<a name="L690"></a><tt class="py-lineno">690</tt>  <tt class="py-line"><tt class="py-docstring">          is considered a resource.</tt> </tt>
-<a name="L691"></a><tt class="py-lineno">691</tt>  <tt class="py-line"><tt class="py-docstring">      rootDesc: object, the entire deserialized discovery document.</tt> </tt>
-<a name="L692"></a><tt class="py-lineno">692</tt>  <tt class="py-line"><tt class="py-docstring">      schema: object, mapping of schema names to schema descriptions.</tt> </tt>
-<a name="L693"></a><tt class="py-lineno">693</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L694"></a><tt class="py-lineno">694</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L695"></a><tt class="py-lineno">695</tt>  <tt class="py-line"> </tt>
-<a name="L696"></a><tt class="py-lineno">696</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_http</tt> <tt class="py-op">=</tt> <tt id="link-172" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-172', 'http', 'link-20');">http</a></tt> </tt>
-<a name="L697"></a><tt class="py-lineno">697</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt> <tt class="py-op">=</tt> <tt class="py-name">baseUrl</tt> </tt>
-<a name="L698"></a><tt class="py-lineno">698</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt> <tt class="py-op">=</tt> <tt id="link-173" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-173', 'model', 'link-29');">model</a></tt> </tt>
-<a name="L699"></a><tt class="py-lineno">699</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt> <tt class="py-op">=</tt> <tt class="py-name">developerKey</tt> </tt>
-<a name="L700"></a><tt class="py-lineno">700</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requestBuilder</tt> <tt class="py-op">=</tt> <tt class="py-name">requestBuilder</tt> </tt>
-<a name="L701"></a><tt class="py-lineno">701</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt> <tt class="py-op">=</tt> <tt class="py-name">resourceDesc</tt> </tt>
-<a name="L702"></a><tt class="py-lineno">702</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rootDesc</tt> <tt class="py-op">=</tt> <tt class="py-name">rootDesc</tt> </tt>
-<a name="L703"></a><tt class="py-lineno">703</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt> <tt class="py-op">=</tt> <tt id="link-174" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-174', 'schema', 'link-38');">schema</a></tt> </tt>
-<a name="L704"></a><tt class="py-lineno">704</tt>  <tt class="py-line"> </tt>
-<a name="L705"></a><tt class="py-lineno">705</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-175" class="py-name" targets="Method apiclient.discovery.Resource._set_service_methods()=apiclient.discovery.Resource-class.html#_set_service_methods"><a title="apiclient.discovery.Resource._set_service_methods" class="py-name" href="#" onclick="return doclink('link-175', '_set_service_methods', 'link-175');">_set_service_methods</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L706"></a><tt class="py-lineno">706</tt>  <tt class="py-line"> </tt>
-<a name="Resource._set_dynamic_attr"></a><div id="Resource._set_dynamic_attr-def"><a name="L707"></a><tt class="py-lineno">707</tt> <a class="py-toggle" href="#" id="Resource._set_dynamic_attr-toggle" onclick="return toggle('Resource._set_dynamic_attr');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#_set_dynamic_attr">_set_dynamic_attr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr_name</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource._set_dynamic_attr-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource._set_dynamic_attr-expanded"><a name="L708"></a><tt class="py-lineno">708</tt>  <tt class="py-line">    <tt class="py-docstring">"""Sets an instance attribute and tracks it in a list of dynamic attributes.</tt> </tt>
-<a name="L709"></a><tt class="py-lineno">709</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L710"></a><tt class="py-lineno">710</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L711"></a><tt class="py-lineno">711</tt>  <tt class="py-line"><tt class="py-docstring">      attr_name: string; The name of the attribute to be set</tt> </tt>
-<a name="L712"></a><tt class="py-lineno">712</tt>  <tt class="py-line"><tt class="py-docstring">      value: The value being set on the object and tracked in the dynamic cache.</tt> </tt>
-<a name="L713"></a><tt class="py-lineno">713</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L714"></a><tt class="py-lineno">714</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">attr_name</tt><tt class="py-op">)</tt> </tt>
-<a name="L715"></a><tt class="py-lineno">715</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-name">attr_name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
-</div><a name="L716"></a><tt class="py-lineno">716</tt>  <tt class="py-line"> </tt>
-<a name="Resource.__getstate__"></a><div id="Resource.__getstate__-def"><a name="L717"></a><tt class="py-lineno">717</tt> <a class="py-toggle" href="#" id="Resource.__getstate__-toggle" onclick="return toggle('Resource.__getstate__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#__getstate__">__getstate__</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="Resource.__getstate__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource.__getstate__-expanded"><a name="L718"></a><tt class="py-lineno">718</tt>  <tt class="py-line">    <tt class="py-docstring">"""Trim the state down to something that can be pickled.</tt> </tt>
-<a name="L719"></a><tt class="py-lineno">719</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L720"></a><tt class="py-lineno">720</tt>  <tt class="py-line"><tt class="py-docstring">    Uses the fact that the instance variable _dynamic_attrs holds attrs that</tt> </tt>
-<a name="L721"></a><tt class="py-lineno">721</tt>  <tt class="py-line"><tt class="py-docstring">    will be wiped and restored on pickle serialization.</tt> </tt>
-<a name="L722"></a><tt class="py-lineno">722</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L723"></a><tt class="py-lineno">723</tt>  <tt class="py-line">    <tt class="py-name">state_dict</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">)</tt> </tt>
-<a name="L724"></a><tt class="py-lineno">724</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">dynamic_attr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt><tt class="py-op">:</tt> </tt>
-<a name="L725"></a><tt class="py-lineno">725</tt>  <tt class="py-line">      <tt class="py-keyword">del</tt> <tt class="py-name">state_dict</tt><tt class="py-op">[</tt><tt class="py-name">dynamic_attr</tt><tt class="py-op">]</tt> </tt>
-<a name="L726"></a><tt class="py-lineno">726</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">state_dict</tt><tt class="py-op">[</tt><tt class="py-string">'_dynamic_attrs'</tt><tt class="py-op">]</tt> </tt>
-<a name="L727"></a><tt class="py-lineno">727</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">state_dict</tt> </tt>
-</div><a name="L728"></a><tt class="py-lineno">728</tt>  <tt class="py-line"> </tt>
-<a name="Resource.__setstate__"></a><div id="Resource.__setstate__-def"><a name="L729"></a><tt class="py-lineno">729</tt> <a class="py-toggle" href="#" id="Resource.__setstate__-toggle" onclick="return toggle('Resource.__setstate__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#__setstate__">__setstate__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">state</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource.__setstate__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource.__setstate__-expanded"><a name="L730"></a><tt class="py-lineno">730</tt>  <tt class="py-line">    <tt class="py-docstring">"""Reconstitute the state of the object from being pickled.</tt> </tt>
-<a name="L731"></a><tt class="py-lineno">731</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L732"></a><tt class="py-lineno">732</tt>  <tt class="py-line"><tt class="py-docstring">    Uses the fact that the instance variable _dynamic_attrs holds attrs that</tt> </tt>
-<a name="L733"></a><tt class="py-lineno">733</tt>  <tt class="py-line"><tt class="py-docstring">    will be wiped and restored on pickle serialization.</tt> </tt>
-<a name="L734"></a><tt class="py-lineno">734</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L735"></a><tt class="py-lineno">735</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">state</tt><tt class="py-op">)</tt> </tt>
-<a name="L736"></a><tt class="py-lineno">736</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L737"></a><tt class="py-lineno">737</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-176" class="py-name"><a title="apiclient.discovery.Resource._set_service_methods" class="py-name" href="#" onclick="return doclink('link-176', '_set_service_methods', 'link-175');">_set_service_methods</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L738"></a><tt class="py-lineno">738</tt>  <tt class="py-line"> </tt>
-<a name="Resource._set_service_methods"></a><div id="Resource._set_service_methods-def"><a name="L739"></a><tt class="py-lineno">739</tt> <a class="py-toggle" href="#" id="Resource._set_service_methods-toggle" onclick="return toggle('Resource._set_service_methods');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#_set_service_methods">_set_service_methods</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="Resource._set_service_methods-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource._set_service_methods-expanded"><a name="L740"></a><tt class="py-lineno">740</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-177" class="py-name" targets="Method apiclient.discovery.Resource._add_basic_methods()=apiclient.discovery.Resource-class.html#_add_basic_methods"><a title="apiclient.discovery.Resource._add_basic_methods" class="py-name" href="#" onclick="return doclink('link-177', '_add_basic_methods', 'link-177');">_add_basic_methods</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rootDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt><tt class="py-op">)</tt> </tt>
-<a name="L741"></a><tt class="py-lineno">741</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-178" class="py-name" targets="Method apiclient.discovery.Resource._add_nested_resources()=apiclient.discovery.Resource-class.html#_add_nested_resources"><a title="apiclient.discovery.Resource._add_nested_resources" class="py-name" href="#" onclick="return doclink('link-178', '_add_nested_resources', 'link-178');">_add_nested_resources</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rootDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt><tt class="py-op">)</tt> </tt>
-<a name="L742"></a><tt class="py-lineno">742</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-179" class="py-name" targets="Method apiclient.discovery.Resource._add_next_methods()=apiclient.discovery.Resource-class.html#_add_next_methods"><a title="apiclient.discovery.Resource._add_next_methods" class="py-name" href="#" onclick="return doclink('link-179', '_add_next_methods', 'link-179');">_add_next_methods</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L743"></a><tt class="py-lineno">743</tt>  <tt class="py-line"> </tt>
-<a name="Resource._add_basic_methods"></a><div id="Resource._add_basic_methods-def"><a name="L744"></a><tt class="py-lineno">744</tt> <a class="py-toggle" href="#" id="Resource._add_basic_methods-toggle" onclick="return toggle('Resource._add_basic_methods');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#_add_basic_methods">_add_basic_methods</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource._add_basic_methods-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource._add_basic_methods-expanded"><a name="L745"></a><tt class="py-lineno">745</tt>  <tt class="py-line">    <tt class="py-comment"># Add basic methods to Resource</tt> </tt>
-<a name="L746"></a><tt class="py-lineno">746</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'methods'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L747"></a><tt class="py-lineno">747</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">[</tt><tt class="py-string">'methods'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L748"></a><tt class="py-lineno">748</tt>  <tt class="py-line">        <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt id="link-180" class="py-name" targets="Function apiclient.discovery.createMethod()=apiclient.discovery-module.html#createMethod"><a title="apiclient.discovery.createMethod" class="py-name" href="#" onclick="return doclink('link-180', 'createMethod', 'link-180');">createMethod</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L749"></a><tt class="py-lineno">749</tt>  <tt class="py-line">            <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">,</tt> <tt id="link-181" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-181', 'schema', 'link-38');">schema</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L750"></a><tt class="py-lineno">750</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-182" class="py-name" targets="Method apiclient.discovery.Resource._set_dynamic_attr()=apiclient.discovery.Resource-class.html#_set_dynamic_attr"><a title="apiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-182', '_set_dynamic_attr', 'link-182');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
-<a name="L751"></a><tt class="py-lineno">751</tt>  <tt class="py-line">                               <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L752"></a><tt class="py-lineno">752</tt>  <tt class="py-line">        <tt class="py-comment"># Add in _media methods. The functionality of the attached method will</tt> </tt>
-<a name="L753"></a><tt class="py-lineno">753</tt>  <tt class="py-line">        <tt class="py-comment"># change when it sees that the method name ends in _media.</tt> </tt>
-<a name="L754"></a><tt class="py-lineno">754</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-183" class="py-name"><a title="apiclient.schema.Schemas.get
+apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-193', 'request', 'link-68');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">previous_request</tt><tt class="py-op">)</tt> </tt>
+<a name="L804"></a><tt class="py-lineno">804</tt>  <tt class="py-line"> </tt>
+<a name="L805"></a><tt class="py-lineno">805</tt>  <tt class="py-line">    <tt class="py-name">pageToken</tt> <tt class="py-op">=</tt> <tt class="py-name">previous_response</tt><tt class="py-op">[</tt><tt class="py-string">'nextPageToken'</tt><tt class="py-op">]</tt> </tt>
+<a name="L806"></a><tt class="py-lineno">806</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urlparse</tt><tt class="py-op">(</tt><tt id="link-194" 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-194', 'request', 'link-68');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L807"></a><tt class="py-lineno">807</tt>  <tt class="py-line">    <tt class="py-name">q</tt> <tt class="py-op">=</tt> <tt class="py-name">parse_qsl</tt><tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L808"></a><tt class="py-lineno">808</tt>  <tt class="py-line"> </tt>
+<a name="L809"></a><tt class="py-lineno">809</tt>  <tt class="py-line">    <tt class="py-comment"># Find and remove old 'pageToken' value from URI</tt> </tt>
+<a name="L810"></a><tt class="py-lineno">810</tt>  <tt class="py-line">    <tt class="py-name">newq</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">q</tt> <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-op">!=</tt> <tt class="py-string">'pageToken'</tt><tt class="py-op">]</tt> </tt>
+<a name="L811"></a><tt class="py-lineno">811</tt>  <tt class="py-line">    <tt class="py-name">newq</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">'pageToken'</tt><tt class="py-op">,</tt> <tt class="py-name">pageToken</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L812"></a><tt class="py-lineno">812</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-name">newq</tt><tt class="py-op">)</tt> </tt>
+<a name="L813"></a><tt class="py-lineno">813</tt>  <tt class="py-line">    <tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urlunparse</tt><tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">)</tt> </tt>
+<a name="L814"></a><tt class="py-lineno">814</tt>  <tt class="py-line"> </tt>
+<a name="L815"></a><tt class="py-lineno">815</tt>  <tt class="py-line">    <tt id="link-195" 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-195', 'request', 'link-68');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">uri</tt> </tt>
+<a name="L816"></a><tt class="py-lineno">816</tt>  <tt class="py-line"> </tt>
+<a name="L817"></a><tt class="py-lineno">817</tt>  <tt class="py-line">    <tt id="link-196" class="py-name"><a title="apiclient.discovery.logger
+oauth2client.appengine.logger
+oauth2client.client.logger
+oauth2client.crypt.logger
+oauth2client.gce.logger
+oauth2client.locked_file.logger
+oauth2client.multistore_file.logger
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-196', 'logger', 'link-48');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'URL being requested: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L818"></a><tt class="py-lineno">818</tt>  <tt class="py-line"> </tt>
+<a name="L819"></a><tt class="py-lineno">819</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-197" 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-197', 'request', 'link-68');">request</a></tt> </tt>
+</div><a name="L820"></a><tt class="py-lineno">820</tt>  <tt class="py-line"> </tt>
+<a name="L821"></a><tt class="py-lineno">821</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodNext</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L822"></a><tt class="py-lineno">822</tt>  <tt class="py-line"> </tt>
+<a name="Resource"></a><div id="Resource-def"><a name="L823"></a><tt class="py-lineno">823</tt>  <tt class="py-line"> </tt>
+<a name="L824"></a><tt class="py-lineno">824</tt> <a class="py-toggle" href="#" id="Resource-toggle" onclick="return toggle('Resource');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html">Resource</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Resource-expanded"><a name="L825"></a><tt class="py-lineno">825</tt>  <tt class="py-line">  <tt class="py-docstring">"""A class for interacting with a resource."""</tt> </tt>
+<a name="L826"></a><tt class="py-lineno">826</tt>  <tt class="py-line"> </tt>
+<a name="Resource.__init__"></a><div id="Resource.__init__-def"><a name="L827"></a><tt class="py-lineno">827</tt> <a class="py-toggle" href="#" id="Resource.__init__-toggle" onclick="return toggle('Resource.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-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">http</tt><tt class="py-op">,</tt> <tt class="py-param">baseUrl</tt><tt class="py-op">,</tt> <tt class="py-param">model</tt><tt class="py-op">,</tt> <tt class="py-param">requestBuilder</tt><tt class="py-op">,</tt> <tt class="py-param">developerKey</tt><tt class="py-op">,</tt> </tt>
+<a name="L828"></a><tt class="py-lineno">828</tt>  <tt class="py-line">               <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource.__init__-expanded"><a name="L829"></a><tt class="py-lineno">829</tt>  <tt class="py-line">    <tt class="py-docstring">"""Build a Resource from the API description.</tt> </tt>
+<a name="L830"></a><tt class="py-lineno">830</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L831"></a><tt class="py-lineno">831</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L832"></a><tt class="py-lineno">832</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, Object to make http requests with.</tt> </tt>
+<a name="L833"></a><tt class="py-lineno">833</tt>  <tt class="py-line"><tt class="py-docstring">      baseUrl: string, base URL for the API. All requests are relative to this</tt> </tt>
+<a name="L834"></a><tt class="py-lineno">834</tt>  <tt class="py-line"><tt class="py-docstring">          URI.</tt> </tt>
+<a name="L835"></a><tt class="py-lineno">835</tt>  <tt class="py-line"><tt class="py-docstring">      model: apiclient.Model, converts to and from the wire format.</tt> </tt>
+<a name="L836"></a><tt class="py-lineno">836</tt>  <tt class="py-line"><tt class="py-docstring">      requestBuilder: class or callable that instantiates an</tt> </tt>
+<a name="L837"></a><tt class="py-lineno">837</tt>  <tt class="py-line"><tt class="py-docstring">          apiclient.HttpRequest object.</tt> </tt>
+<a name="L838"></a><tt class="py-lineno">838</tt>  <tt class="py-line"><tt class="py-docstring">      developerKey: string, key obtained from</tt> </tt>
+<a name="L839"></a><tt class="py-lineno">839</tt>  <tt class="py-line"><tt class="py-docstring">          https://code.google.com/apis/console</tt> </tt>
+<a name="L840"></a><tt class="py-lineno">840</tt>  <tt class="py-line"><tt class="py-docstring">      resourceDesc: object, section of deserialized discovery document that</tt> </tt>
+<a name="L841"></a><tt class="py-lineno">841</tt>  <tt class="py-line"><tt class="py-docstring">          describes a resource. Note that the top level discovery document</tt> </tt>
+<a name="L842"></a><tt class="py-lineno">842</tt>  <tt class="py-line"><tt class="py-docstring">          is considered a resource.</tt> </tt>
+<a name="L843"></a><tt class="py-lineno">843</tt>  <tt class="py-line"><tt class="py-docstring">      rootDesc: object, the entire deserialized discovery document.</tt> </tt>
+<a name="L844"></a><tt class="py-lineno">844</tt>  <tt class="py-line"><tt class="py-docstring">      schema: object, mapping of schema names to schema descriptions.</tt> </tt>
+<a name="L845"></a><tt class="py-lineno">845</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L846"></a><tt class="py-lineno">846</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L847"></a><tt class="py-lineno">847</tt>  <tt class="py-line"> </tt>
+<a name="L848"></a><tt class="py-lineno">848</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_http</tt> <tt class="py-op">=</tt> <tt id="link-198" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-198', 'http', 'link-20');">http</a></tt> </tt>
+<a name="L849"></a><tt class="py-lineno">849</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt> <tt class="py-op">=</tt> <tt class="py-name">baseUrl</tt> </tt>
+<a name="L850"></a><tt class="py-lineno">850</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt> <tt class="py-op">=</tt> <tt id="link-199" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-199', 'model', 'link-29');">model</a></tt> </tt>
+<a name="L851"></a><tt class="py-lineno">851</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt> <tt class="py-op">=</tt> <tt class="py-name">developerKey</tt> </tt>
+<a name="L852"></a><tt class="py-lineno">852</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requestBuilder</tt> <tt class="py-op">=</tt> <tt class="py-name">requestBuilder</tt> </tt>
+<a name="L853"></a><tt class="py-lineno">853</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt> <tt class="py-op">=</tt> <tt class="py-name">resourceDesc</tt> </tt>
+<a name="L854"></a><tt class="py-lineno">854</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rootDesc</tt> <tt class="py-op">=</tt> <tt class="py-name">rootDesc</tt> </tt>
+<a name="L855"></a><tt class="py-lineno">855</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt> <tt class="py-op">=</tt> <tt id="link-200" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-200', 'schema', 'link-38');">schema</a></tt> </tt>
+<a name="L856"></a><tt class="py-lineno">856</tt>  <tt class="py-line"> </tt>
+<a name="L857"></a><tt class="py-lineno">857</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-201" class="py-name" targets="Method apiclient.discovery.Resource._set_service_methods()=apiclient.discovery.Resource-class.html#_set_service_methods"><a title="apiclient.discovery.Resource._set_service_methods" class="py-name" href="#" onclick="return doclink('link-201', '_set_service_methods', 'link-201');">_set_service_methods</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L858"></a><tt class="py-lineno">858</tt>  <tt class="py-line"> </tt>
+<a name="Resource._set_dynamic_attr"></a><div id="Resource._set_dynamic_attr-def"><a name="L859"></a><tt class="py-lineno">859</tt> <a class="py-toggle" href="#" id="Resource._set_dynamic_attr-toggle" onclick="return toggle('Resource._set_dynamic_attr');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#_set_dynamic_attr">_set_dynamic_attr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr_name</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource._set_dynamic_attr-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource._set_dynamic_attr-expanded"><a name="L860"></a><tt class="py-lineno">860</tt>  <tt class="py-line">    <tt class="py-docstring">"""Sets an instance attribute and tracks it in a list of dynamic attributes.</tt> </tt>
+<a name="L861"></a><tt class="py-lineno">861</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L862"></a><tt class="py-lineno">862</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L863"></a><tt class="py-lineno">863</tt>  <tt class="py-line"><tt class="py-docstring">      attr_name: string; The name of the attribute to be set</tt> </tt>
+<a name="L864"></a><tt class="py-lineno">864</tt>  <tt class="py-line"><tt class="py-docstring">      value: The value being set on the object and tracked in the dynamic cache.</tt> </tt>
+<a name="L865"></a><tt class="py-lineno">865</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L866"></a><tt class="py-lineno">866</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">attr_name</tt><tt class="py-op">)</tt> </tt>
+<a name="L867"></a><tt class="py-lineno">867</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-name">attr_name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
+</div><a name="L868"></a><tt class="py-lineno">868</tt>  <tt class="py-line"> </tt>
+<a name="Resource.__getstate__"></a><div id="Resource.__getstate__-def"><a name="L869"></a><tt class="py-lineno">869</tt> <a class="py-toggle" href="#" id="Resource.__getstate__-toggle" onclick="return toggle('Resource.__getstate__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#__getstate__">__getstate__</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="Resource.__getstate__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource.__getstate__-expanded"><a name="L870"></a><tt class="py-lineno">870</tt>  <tt class="py-line">    <tt class="py-docstring">"""Trim the state down to something that can be pickled.</tt> </tt>
+<a name="L871"></a><tt class="py-lineno">871</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L872"></a><tt class="py-lineno">872</tt>  <tt class="py-line"><tt class="py-docstring">    Uses the fact that the instance variable _dynamic_attrs holds attrs that</tt> </tt>
+<a name="L873"></a><tt class="py-lineno">873</tt>  <tt class="py-line"><tt class="py-docstring">    will be wiped and restored on pickle serialization.</tt> </tt>
+<a name="L874"></a><tt class="py-lineno">874</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L875"></a><tt class="py-lineno">875</tt>  <tt class="py-line">    <tt class="py-name">state_dict</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">)</tt> </tt>
+<a name="L876"></a><tt class="py-lineno">876</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">dynamic_attr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt><tt class="py-op">:</tt> </tt>
+<a name="L877"></a><tt class="py-lineno">877</tt>  <tt class="py-line">      <tt class="py-keyword">del</tt> <tt class="py-name">state_dict</tt><tt class="py-op">[</tt><tt class="py-name">dynamic_attr</tt><tt class="py-op">]</tt> </tt>
+<a name="L878"></a><tt class="py-lineno">878</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">state_dict</tt><tt class="py-op">[</tt><tt class="py-string">'_dynamic_attrs'</tt><tt class="py-op">]</tt> </tt>
+<a name="L879"></a><tt class="py-lineno">879</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">state_dict</tt> </tt>
+</div><a name="L880"></a><tt class="py-lineno">880</tt>  <tt class="py-line"> </tt>
+<a name="Resource.__setstate__"></a><div id="Resource.__setstate__-def"><a name="L881"></a><tt class="py-lineno">881</tt> <a class="py-toggle" href="#" id="Resource.__setstate__-toggle" onclick="return toggle('Resource.__setstate__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#__setstate__">__setstate__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">state</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource.__setstate__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource.__setstate__-expanded"><a name="L882"></a><tt class="py-lineno">882</tt>  <tt class="py-line">    <tt class="py-docstring">"""Reconstitute the state of the object from being pickled.</tt> </tt>
+<a name="L883"></a><tt class="py-lineno">883</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L884"></a><tt class="py-lineno">884</tt>  <tt class="py-line"><tt class="py-docstring">    Uses the fact that the instance variable _dynamic_attrs holds attrs that</tt> </tt>
+<a name="L885"></a><tt class="py-lineno">885</tt>  <tt class="py-line"><tt class="py-docstring">    will be wiped and restored on pickle serialization.</tt> </tt>
+<a name="L886"></a><tt class="py-lineno">886</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L887"></a><tt class="py-lineno">887</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">state</tt><tt class="py-op">)</tt> </tt>
+<a name="L888"></a><tt class="py-lineno">888</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L889"></a><tt class="py-lineno">889</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-202" class="py-name"><a title="apiclient.discovery.Resource._set_service_methods" class="py-name" href="#" onclick="return doclink('link-202', '_set_service_methods', 'link-201');">_set_service_methods</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L890"></a><tt class="py-lineno">890</tt>  <tt class="py-line"> </tt>
+<a name="Resource._set_service_methods"></a><div id="Resource._set_service_methods-def"><a name="L891"></a><tt class="py-lineno">891</tt> <a class="py-toggle" href="#" id="Resource._set_service_methods-toggle" onclick="return toggle('Resource._set_service_methods');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#_set_service_methods">_set_service_methods</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="Resource._set_service_methods-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource._set_service_methods-expanded"><a name="L892"></a><tt class="py-lineno">892</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-203" class="py-name" targets="Method apiclient.discovery.Resource._add_basic_methods()=apiclient.discovery.Resource-class.html#_add_basic_methods"><a title="apiclient.discovery.Resource._add_basic_methods" class="py-name" href="#" onclick="return doclink('link-203', '_add_basic_methods', 'link-203');">_add_basic_methods</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rootDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt><tt class="py-op">)</tt> </tt>
+<a name="L893"></a><tt class="py-lineno">893</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-204" class="py-name" targets="Method apiclient.discovery.Resource._add_nested_resources()=apiclient.discovery.Resource-class.html#_add_nested_resources"><a title="apiclient.discovery.Resource._add_nested_resources" class="py-name" href="#" onclick="return doclink('link-204', '_add_nested_resources', 'link-204');">_add_nested_resources</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rootDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt><tt class="py-op">)</tt> </tt>
+<a name="L894"></a><tt class="py-lineno">894</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-205" class="py-name" targets="Method apiclient.discovery.Resource._add_next_methods()=apiclient.discovery.Resource-class.html#_add_next_methods"><a title="apiclient.discovery.Resource._add_next_methods" class="py-name" href="#" onclick="return doclink('link-205', '_add_next_methods', 'link-205');">_add_next_methods</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L895"></a><tt class="py-lineno">895</tt>  <tt class="py-line"> </tt>
+<a name="Resource._add_basic_methods"></a><div id="Resource._add_basic_methods-def"><a name="L896"></a><tt class="py-lineno">896</tt> <a class="py-toggle" href="#" id="Resource._add_basic_methods-toggle" onclick="return toggle('Resource._add_basic_methods');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#_add_basic_methods">_add_basic_methods</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource._add_basic_methods-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource._add_basic_methods-expanded"><a name="L897"></a><tt class="py-lineno">897</tt>  <tt class="py-line">    <tt class="py-comment"># Add basic methods to Resource</tt> </tt>
+<a name="L898"></a><tt class="py-lineno">898</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'methods'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L899"></a><tt class="py-lineno">899</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">[</tt><tt class="py-string">'methods'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L900"></a><tt class="py-lineno">900</tt>  <tt class="py-line">        <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt id="link-206" class="py-name" targets="Function apiclient.discovery.createMethod()=apiclient.discovery-module.html#createMethod"><a title="apiclient.discovery.createMethod" class="py-name" href="#" onclick="return doclink('link-206', 'createMethod', 'link-206');">createMethod</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L901"></a><tt class="py-lineno">901</tt>  <tt class="py-line">            <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">,</tt> <tt id="link-207" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-207', 'schema', 'link-38');">schema</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L902"></a><tt class="py-lineno">902</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-208" class="py-name" targets="Method apiclient.discovery.Resource._set_dynamic_attr()=apiclient.discovery.Resource-class.html#_set_dynamic_attr"><a title="apiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-208', '_set_dynamic_attr', 'link-208');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
+<a name="L903"></a><tt class="py-lineno">903</tt>  <tt class="py-line">                               <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L904"></a><tt class="py-lineno">904</tt>  <tt class="py-line">        <tt class="py-comment"># Add in _media methods. The functionality of the attached method will</tt> </tt>
+<a name="L905"></a><tt class="py-lineno">905</tt>  <tt class="py-line">        <tt class="py-comment"># change when it sees that the method name ends in _media.</tt> </tt>
+<a name="L906"></a><tt class="py-lineno">906</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-209" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-183', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'supportsMediaDownload'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L755"></a><tt class="py-lineno">755</tt>  <tt class="py-line">          <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt id="link-184" class="py-name"><a title="apiclient.discovery.createMethod" class="py-name" href="#" onclick="return doclink('link-184', 'createMethod', 'link-180');">createMethod</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L756"></a><tt class="py-lineno">756</tt>  <tt class="py-line">              <tt class="py-name">methodName</tt> <tt class="py-op">+</tt> <tt class="py-string">'_media'</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">,</tt> <tt id="link-185" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-185', 'schema', 'link-38');">schema</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L757"></a><tt class="py-lineno">757</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-186" class="py-name"><a title="apiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-186', '_set_dynamic_attr', 'link-182');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
-<a name="L758"></a><tt class="py-lineno">758</tt>  <tt class="py-line">                                 <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L759"></a><tt class="py-lineno">759</tt>  <tt class="py-line"> </tt>
-<a name="Resource._add_nested_resources"></a><div id="Resource._add_nested_resources-def"><a name="L760"></a><tt class="py-lineno">760</tt> <a class="py-toggle" href="#" id="Resource._add_nested_resources-toggle" onclick="return toggle('Resource._add_nested_resources');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#_add_nested_resources">_add_nested_resources</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource._add_nested_resources-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource._add_nested_resources-expanded"><a name="L761"></a><tt class="py-lineno">761</tt>  <tt class="py-line">    <tt class="py-comment"># Add in nested resources</tt> </tt>
-<a name="L762"></a><tt class="py-lineno">762</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'resources'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L763"></a><tt class="py-lineno">763</tt>  <tt class="py-line"> </tt>
-<a name="L764"></a><tt class="py-lineno">764</tt>  <tt class="py-line">      <tt class="py-keyword">def</tt> <tt class="py-def-name">createResourceMethod</tt><tt class="py-op">(</tt><tt class="py-param">methodName</tt><tt class="py-op">,</tt> <tt class="py-param">methodDesc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L765"></a><tt class="py-lineno">765</tt>  <tt class="py-line">        <tt class="py-docstring">"""Create a method on the Resource to access a nested Resource.</tt> </tt>
-<a name="L766"></a><tt class="py-lineno">766</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L767"></a><tt class="py-lineno">767</tt>  <tt class="py-line"><tt class="py-docstring">        Args:</tt> </tt>
-<a name="L768"></a><tt class="py-lineno">768</tt>  <tt class="py-line"><tt class="py-docstring">          methodName: string, name of the method to use.</tt> </tt>
-<a name="L769"></a><tt class="py-lineno">769</tt>  <tt class="py-line"><tt class="py-docstring">          methodDesc: object, fragment of deserialized discovery document that</tt> </tt>
-<a name="L770"></a><tt class="py-lineno">770</tt>  <tt class="py-line"><tt class="py-docstring">            describes the method.</tt> </tt>
-<a name="L771"></a><tt class="py-lineno">771</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
-<a name="L772"></a><tt class="py-lineno">772</tt>  <tt class="py-line">        <tt class="py-name">methodName</tt> <tt class="py-op">=</tt> <tt id="link-187" class="py-name"><a title="apiclient.discovery.fix_method_name" class="py-name" href="#" onclick="return doclink('link-187', 'fix_method_name', 'link-89');">fix_method_name</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">)</tt> </tt>
-<a name="L773"></a><tt class="py-lineno">773</tt>  <tt class="py-line"> </tt>
-<a name="L774"></a><tt class="py-lineno">774</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">methodResource</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L775"></a><tt class="py-lineno">775</tt>  <tt class="py-line">          <tt class="py-keyword">return</tt> <tt id="link-188" class="py-name"><a title="apiclient.discovery.Resource" class="py-name" href="#" onclick="return doclink('link-188', 'Resource', 'link-79');">Resource</a></tt><tt class="py-op">(</tt><tt id="link-189" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-189', 'http', 'link-20');">http</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_http</tt><tt class="py-op">,</tt> <tt class="py-name">baseUrl</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt><tt class="py-op">,</tt> </tt>
-<a name="L776"></a><tt class="py-lineno">776</tt>  <tt class="py-line">                          <tt id="link-190" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-190', 'model', 'link-29');">model</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt> <tt class="py-name">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt><tt class="py-op">,</tt> </tt>
-<a name="L777"></a><tt class="py-lineno">777</tt>  <tt class="py-line">                          <tt class="py-name">requestBuilder</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requestBuilder</tt><tt class="py-op">,</tt> </tt>
-<a name="L778"></a><tt class="py-lineno">778</tt>  <tt class="py-line">                          <tt class="py-name">resourceDesc</tt><tt class="py-op">=</tt><tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">=</tt><tt class="py-name">rootDesc</tt><tt class="py-op">,</tt> </tt>
-<a name="L779"></a><tt class="py-lineno">779</tt>  <tt class="py-line">                          <tt id="link-191" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-191', 'schema', 'link-38');">schema</a></tt><tt class="py-op">=</tt><tt id="link-192" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-192', 'schema', 'link-38');">schema</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L780"></a><tt class="py-lineno">780</tt>  <tt class="py-line"> </tt>
-<a name="L781"></a><tt class="py-lineno">781</tt>  <tt class="py-line">        <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">methodResource</tt><tt class="py-op">,</tt> <tt class="py-string">'__doc__'</tt><tt class="py-op">,</tt> <tt class="py-string">'A collection resource.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L782"></a><tt class="py-lineno">782</tt>  <tt class="py-line">        <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">methodResource</tt><tt class="py-op">,</tt> <tt class="py-string">'__is_resource__'</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
-<a name="L783"></a><tt class="py-lineno">783</tt>  <tt class="py-line"> </tt>
-<a name="L784"></a><tt class="py-lineno">784</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodResource</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L785"></a><tt class="py-lineno">785</tt>  <tt class="py-line"> </tt>
-<a name="L786"></a><tt class="py-lineno">786</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L787"></a><tt class="py-lineno">787</tt>  <tt class="py-line">        <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-name">createResourceMethod</tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">)</tt> </tt>
-<a name="L788"></a><tt class="py-lineno">788</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-193" class="py-name"><a title="apiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-193', '_set_dynamic_attr', 'link-182');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
-<a name="L789"></a><tt class="py-lineno">789</tt>  <tt class="py-line">                               <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L790"></a><tt class="py-lineno">790</tt>  <tt class="py-line"> </tt>
-<a name="Resource._add_next_methods"></a><div id="Resource._add_next_methods-def"><a name="L791"></a><tt class="py-lineno">791</tt> <a class="py-toggle" href="#" id="Resource._add_next_methods-toggle" onclick="return toggle('Resource._add_next_methods');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#_add_next_methods">_add_next_methods</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource._add_next_methods-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource._add_next_methods-expanded"><a name="L792"></a><tt class="py-lineno">792</tt>  <tt class="py-line">    <tt class="py-comment"># Add _next() methods</tt> </tt>
-<a name="L793"></a><tt class="py-lineno">793</tt>  <tt class="py-line">    <tt class="py-comment"># Look for response bodies in schema that contain nextPageToken, and methods</tt> </tt>
-<a name="L794"></a><tt class="py-lineno">794</tt>  <tt class="py-line">    <tt class="py-comment"># that take a pageToken parameter.</tt> </tt>
-<a name="L795"></a><tt class="py-lineno">795</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'methods'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L796"></a><tt class="py-lineno">796</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">[</tt><tt class="py-string">'methods'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L797"></a><tt class="py-lineno">797</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'response'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L798"></a><tt class="py-lineno">798</tt>  <tt class="py-line">          <tt class="py-name">responseSchema</tt> <tt class="py-op">=</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'response'</tt><tt class="py-op">]</tt> </tt>
-<a name="L799"></a><tt class="py-lineno">799</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-string">'$ref'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">responseSchema</tt><tt class="py-op">:</tt> </tt>
-<a name="L800"></a><tt class="py-lineno">800</tt>  <tt class="py-line">            <tt class="py-name">responseSchema</tt> <tt class="py-op">=</tt> <tt id="link-194" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-194', 'schema', 'link-38');">schema</a></tt><tt class="py-op">.</tt><tt id="link-195" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-209', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'supportsMediaDownload'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L907"></a><tt class="py-lineno">907</tt>  <tt class="py-line">          <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt id="link-210" class="py-name"><a title="apiclient.discovery.createMethod" class="py-name" href="#" onclick="return doclink('link-210', 'createMethod', 'link-206');">createMethod</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L908"></a><tt class="py-lineno">908</tt>  <tt class="py-line">              <tt class="py-name">methodName</tt> <tt class="py-op">+</tt> <tt class="py-string">'_media'</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">,</tt> <tt id="link-211" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-211', 'schema', 'link-38');">schema</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L909"></a><tt class="py-lineno">909</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-212" class="py-name"><a title="apiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-212', '_set_dynamic_attr', 'link-208');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
+<a name="L910"></a><tt class="py-lineno">910</tt>  <tt class="py-line">                                 <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L911"></a><tt class="py-lineno">911</tt>  <tt class="py-line"> </tt>
+<a name="Resource._add_nested_resources"></a><div id="Resource._add_nested_resources-def"><a name="L912"></a><tt class="py-lineno">912</tt> <a class="py-toggle" href="#" id="Resource._add_nested_resources-toggle" onclick="return toggle('Resource._add_nested_resources');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#_add_nested_resources">_add_nested_resources</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource._add_nested_resources-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource._add_nested_resources-expanded"><a name="L913"></a><tt class="py-lineno">913</tt>  <tt class="py-line">    <tt class="py-comment"># Add in nested resources</tt> </tt>
+<a name="L914"></a><tt class="py-lineno">914</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'resources'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L915"></a><tt class="py-lineno">915</tt>  <tt class="py-line"> </tt>
+<a name="L916"></a><tt class="py-lineno">916</tt>  <tt class="py-line">      <tt class="py-keyword">def</tt> <tt class="py-def-name">createResourceMethod</tt><tt class="py-op">(</tt><tt class="py-param">methodName</tt><tt class="py-op">,</tt> <tt class="py-param">methodDesc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L917"></a><tt class="py-lineno">917</tt>  <tt class="py-line">        <tt class="py-docstring">"""Create a method on the Resource to access a nested Resource.</tt> </tt>
+<a name="L918"></a><tt class="py-lineno">918</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L919"></a><tt class="py-lineno">919</tt>  <tt class="py-line"><tt class="py-docstring">        Args:</tt> </tt>
+<a name="L920"></a><tt class="py-lineno">920</tt>  <tt class="py-line"><tt class="py-docstring">          methodName: string, name of the method to use.</tt> </tt>
+<a name="L921"></a><tt class="py-lineno">921</tt>  <tt class="py-line"><tt class="py-docstring">          methodDesc: object, fragment of deserialized discovery document that</tt> </tt>
+<a name="L922"></a><tt class="py-lineno">922</tt>  <tt class="py-line"><tt class="py-docstring">            describes the method.</tt> </tt>
+<a name="L923"></a><tt class="py-lineno">923</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L924"></a><tt class="py-lineno">924</tt>  <tt class="py-line">        <tt class="py-name">methodName</tt> <tt class="py-op">=</tt> <tt id="link-213" class="py-name"><a title="apiclient.discovery.fix_method_name" class="py-name" href="#" onclick="return doclink('link-213', 'fix_method_name', 'link-133');">fix_method_name</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">)</tt> </tt>
+<a name="L925"></a><tt class="py-lineno">925</tt>  <tt class="py-line"> </tt>
+<a name="L926"></a><tt class="py-lineno">926</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">methodResource</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L927"></a><tt class="py-lineno">927</tt>  <tt class="py-line">          <tt class="py-keyword">return</tt> <tt id="link-214" class="py-name"><a title="apiclient.discovery.Resource" class="py-name" href="#" onclick="return doclink('link-214', 'Resource', 'link-87');">Resource</a></tt><tt class="py-op">(</tt><tt id="link-215" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-215', 'http', 'link-20');">http</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_http</tt><tt class="py-op">,</tt> <tt class="py-name">baseUrl</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt><tt class="py-op">,</tt> </tt>
+<a name="L928"></a><tt class="py-lineno">928</tt>  <tt class="py-line">                          <tt id="link-216" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-216', 'model', 'link-29');">model</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt> <tt class="py-name">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt><tt class="py-op">,</tt> </tt>
+<a name="L929"></a><tt class="py-lineno">929</tt>  <tt class="py-line">                          <tt class="py-name">requestBuilder</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requestBuilder</tt><tt class="py-op">,</tt> </tt>
+<a name="L930"></a><tt class="py-lineno">930</tt>  <tt class="py-line">                          <tt class="py-name">resourceDesc</tt><tt class="py-op">=</tt><tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">=</tt><tt class="py-name">rootDesc</tt><tt class="py-op">,</tt> </tt>
+<a name="L931"></a><tt class="py-lineno">931</tt>  <tt class="py-line">                          <tt id="link-217" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-217', 'schema', 'link-38');">schema</a></tt><tt class="py-op">=</tt><tt id="link-218" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-218', 'schema', 'link-38');">schema</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L932"></a><tt class="py-lineno">932</tt>  <tt class="py-line"> </tt>
+<a name="L933"></a><tt class="py-lineno">933</tt>  <tt class="py-line">        <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">methodResource</tt><tt class="py-op">,</tt> <tt class="py-string">'__doc__'</tt><tt class="py-op">,</tt> <tt class="py-string">'A collection resource.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L934"></a><tt class="py-lineno">934</tt>  <tt class="py-line">        <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">methodResource</tt><tt class="py-op">,</tt> <tt class="py-string">'__is_resource__'</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L935"></a><tt class="py-lineno">935</tt>  <tt class="py-line"> </tt>
+<a name="L936"></a><tt class="py-lineno">936</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodResource</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L937"></a><tt class="py-lineno">937</tt>  <tt class="py-line"> </tt>
+<a name="L938"></a><tt class="py-lineno">938</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L939"></a><tt class="py-lineno">939</tt>  <tt class="py-line">        <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-name">createResourceMethod</tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">)</tt> </tt>
+<a name="L940"></a><tt class="py-lineno">940</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-219" class="py-name"><a title="apiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-219', '_set_dynamic_attr', 'link-208');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
+<a name="L941"></a><tt class="py-lineno">941</tt>  <tt class="py-line">                               <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L942"></a><tt class="py-lineno">942</tt>  <tt class="py-line"> </tt>
+<a name="Resource._add_next_methods"></a><div id="Resource._add_next_methods-def"><a name="L943"></a><tt class="py-lineno">943</tt> <a class="py-toggle" href="#" id="Resource._add_next_methods-toggle" onclick="return toggle('Resource._add_next_methods');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.discovery.Resource-class.html#_add_next_methods">_add_next_methods</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource._add_next_methods-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Resource._add_next_methods-expanded"><a name="L944"></a><tt class="py-lineno">944</tt>  <tt class="py-line">    <tt class="py-comment"># Add _next() methods</tt> </tt>
+<a name="L945"></a><tt class="py-lineno">945</tt>  <tt class="py-line">    <tt class="py-comment"># Look for response bodies in schema that contain nextPageToken, and methods</tt> </tt>
+<a name="L946"></a><tt class="py-lineno">946</tt>  <tt class="py-line">    <tt class="py-comment"># that take a pageToken parameter.</tt> </tt>
+<a name="L947"></a><tt class="py-lineno">947</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'methods'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L948"></a><tt class="py-lineno">948</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">[</tt><tt class="py-string">'methods'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L949"></a><tt class="py-lineno">949</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'response'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L950"></a><tt class="py-lineno">950</tt>  <tt class="py-line">          <tt class="py-name">responseSchema</tt> <tt class="py-op">=</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'response'</tt><tt class="py-op">]</tt> </tt>
+<a name="L951"></a><tt class="py-lineno">951</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-string">'$ref'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">responseSchema</tt><tt class="py-op">:</tt> </tt>
+<a name="L952"></a><tt class="py-lineno">952</tt>  <tt class="py-line">            <tt class="py-name">responseSchema</tt> <tt class="py-op">=</tt> <tt id="link-220" class="py-name"><a title="apiclient.schema" class="py-name" href="#" onclick="return doclink('link-220', 'schema', 'link-38');">schema</a></tt><tt class="py-op">.</tt><tt id="link-221" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-195', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">responseSchema</tt><tt class="py-op">[</tt><tt class="py-string">'$ref'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L801"></a><tt class="py-lineno">801</tt>  <tt class="py-line">          <tt class="py-name">hasNextPageToken</tt> <tt class="py-op">=</tt> <tt class="py-string">'nextPageToken'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">responseSchema</tt><tt class="py-op">.</tt><tt id="link-196" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-221', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">responseSchema</tt><tt class="py-op">[</tt><tt class="py-string">'$ref'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L953"></a><tt class="py-lineno">953</tt>  <tt class="py-line">          <tt class="py-name">hasNextPageToken</tt> <tt class="py-op">=</tt> <tt class="py-string">'nextPageToken'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">responseSchema</tt><tt class="py-op">.</tt><tt id="link-222" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-196', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'properties'</tt><tt class="py-op">,</tt> </tt>
-<a name="L802"></a><tt class="py-lineno">802</tt>  <tt class="py-line">                                                                   <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
-<a name="L803"></a><tt class="py-lineno">803</tt>  <tt class="py-line">          <tt class="py-name">hasPageToken</tt> <tt class="py-op">=</tt> <tt class="py-string">'pageToken'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-197" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-222', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'properties'</tt><tt class="py-op">,</tt> </tt>
+<a name="L954"></a><tt class="py-lineno">954</tt>  <tt class="py-line">                                                                   <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L955"></a><tt class="py-lineno">955</tt>  <tt class="py-line">          <tt class="py-name">hasPageToken</tt> <tt class="py-op">=</tt> <tt class="py-string">'pageToken'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-223" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-197', 'get', 'link-76');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
-<a name="L804"></a><tt class="py-lineno">804</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">hasNextPageToken</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasPageToken</tt><tt class="py-op">:</tt> </tt>
-<a name="L805"></a><tt class="py-lineno">805</tt>  <tt class="py-line">            <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt id="link-198" class="py-name" targets="Function apiclient.discovery.createNextMethod()=apiclient.discovery-module.html#createNextMethod"><a title="apiclient.discovery.createNextMethod" class="py-name" href="#" onclick="return doclink('link-198', 'createNextMethod', 'link-198');">createNextMethod</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt> <tt class="py-op">+</tt> <tt class="py-string">'_next'</tt><tt class="py-op">)</tt> </tt>
-<a name="L806"></a><tt class="py-lineno">806</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-199" class="py-name"><a title="apiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-199', '_set_dynamic_attr', 'link-182');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
-<a name="L807"></a><tt class="py-lineno">807</tt>  <tt class="py-line">                                   <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L808"></a><tt class="py-lineno">808</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-223', 'get', 'link-84');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L956"></a><tt class="py-lineno">956</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">hasNextPageToken</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasPageToken</tt><tt class="py-op">:</tt> </tt>
+<a name="L957"></a><tt class="py-lineno">957</tt>  <tt class="py-line">            <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt id="link-224" class="py-name" targets="Function apiclient.discovery.createNextMethod()=apiclient.discovery-module.html#createNextMethod"><a title="apiclient.discovery.createNextMethod" class="py-name" href="#" onclick="return doclink('link-224', 'createNextMethod', 'link-224');">createNextMethod</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt> <tt class="py-op">+</tt> <tt class="py-string">'_next'</tt><tt class="py-op">)</tt> </tt>
+<a name="L958"></a><tt class="py-lineno">958</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-225" class="py-name"><a title="apiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-225', '_set_dynamic_attr', 'link-208');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
+<a name="L959"></a><tt class="py-lineno">959</tt>  <tt class="py-line">                                   <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L960"></a><tt class="py-lineno">960</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -1032,7 +1202,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:47 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.discovery.Resource-class.html b/docs/epy/apiclient.discovery.Resource-class.html
index 061c331..f71899c 100644
--- a/docs/epy/apiclient.discovery.Resource-class.html
+++ b/docs/epy/apiclient.discovery.Resource-class.html
@@ -449,7 +449,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:32 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors-module.html b/docs/epy/apiclient.errors-module.html
index bce77c8..6fdfd73 100644
--- a/docs/epy/apiclient.errors-module.html
+++ b/docs/epy/apiclient.errors-module.html
@@ -210,7 +210,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors-pysrc.html b/docs/epy/apiclient.errors-pysrc.html
index c9e9986..070ab2c 100644
--- a/docs/epy/apiclient.errors-pysrc.html
+++ b/docs/epy/apiclient.errors-pysrc.html
@@ -104,82 +104,85 @@
 <a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line">      <tt class="py-name">reason</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'error'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'message'</tt><tt class="py-op">]</tt> </tt>
 <a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-op">(</tt><tt class="py-name">ValueError</tt><tt class="py-op">,</tt> <tt class="py-name">KeyError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
 <a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line">      <tt class="py-keyword">pass</tt> </tt>
-<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">reason</tt> </tt>
-</div><a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"> </tt>
-<a name="HttpError.__repr__"></a><div id="HttpError.__repr__-def"><a name="L54"></a><tt class="py-lineno"> 54</tt> <a class="py-toggle" href="#" id="HttpError.__repr__-toggle" onclick="return toggle('HttpError.__repr__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.errors.HttpError-class.html#__repr__">__repr__</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="HttpError.__repr__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="HttpError.__repr__-expanded"><a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">:</tt> </tt>
-<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-string">'&lt;HttpError %s when requesting %s returned "%s"&gt;'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
-<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Method apiclient.errors.HttpError._get_reason()=apiclient.errors.HttpError-class.html#_get_reason"><a title="apiclient.errors.HttpError._get_reason" class="py-name" href="#" onclick="return doclink('link-6', '_get_reason', 'link-6');">_get_reason</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-string">'&lt;HttpError %s "%s"&gt;'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-7" class="py-name"><a title="apiclient.errors.HttpError._get_reason" class="py-name" href="#" onclick="return doclink('link-7', '_get_reason', 'link-6');">_get_reason</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"> </tt>
-<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line">  <tt class="py-name">__str__</tt> <tt class="py-op">=</tt> <tt id="link-8" class="py-name" targets="Method apiclient.errors.BatchError.__repr__()=apiclient.errors.BatchError-class.html#__repr__,Method apiclient.errors.HttpError.__repr__()=apiclient.errors.HttpError-class.html#__repr__"><a title="apiclient.errors.BatchError.__repr__
-apiclient.errors.HttpError.__repr__" class="py-name" href="#" onclick="return doclink('link-8', '__repr__', 'link-8');">__repr__</a></tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">reason</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line">      <tt class="py-name">reason</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">reason</tt> </tt>
+</div><a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line"> </tt>
+<a name="HttpError.__repr__"></a><div id="HttpError.__repr__-def"><a name="L56"></a><tt class="py-lineno"> 56</tt> <a class="py-toggle" href="#" id="HttpError.__repr__-toggle" onclick="return toggle('HttpError.__repr__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.errors.HttpError-class.html#__repr__">__repr__</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="HttpError.__repr__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="HttpError.__repr__-expanded"><a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">:</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-string">'&lt;HttpError %s when requesting %s returned "%s"&gt;'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Method apiclient.errors.HttpError._get_reason()=apiclient.errors.HttpError-class.html#_get_reason"><a title="apiclient.errors.HttpError._get_reason" class="py-name" href="#" onclick="return doclink('link-6', '_get_reason', 'link-6');">_get_reason</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-string">'&lt;HttpError %s "%s"&gt;'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-7" class="py-name"><a title="apiclient.errors.HttpError._get_reason" class="py-name" href="#" onclick="return doclink('link-7', '_get_reason', 'link-6');">_get_reason</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
 </div><a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line"> </tt>
-<a name="InvalidJsonError"></a><div id="InvalidJsonError-def"><a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"> </tt>
-<a name="L64"></a><tt class="py-lineno"> 64</tt> <a class="py-toggle" href="#" id="InvalidJsonError-toggle" onclick="return toggle('InvalidJsonError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.InvalidJsonError-class.html">InvalidJsonError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="InvalidJsonError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="InvalidJsonError-expanded"><a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line">  <tt class="py-docstring">"""The JSON returned could not be parsed."""</tt> </tt>
-<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line"> </tt>
-<a name="UnknownFileType"></a><div id="UnknownFileType-def"><a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line"> </tt>
-<a name="L69"></a><tt class="py-lineno"> 69</tt> <a class="py-toggle" href="#" id="UnknownFileType-toggle" onclick="return toggle('UnknownFileType');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.UnknownFileType-class.html">UnknownFileType</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="UnknownFileType-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="UnknownFileType-expanded"><a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line">  <tt class="py-docstring">"""File type unknown or unexpected."""</tt> </tt>
-<a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line"> </tt>
-<a name="UnknownLinkType"></a><div id="UnknownLinkType-def"><a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line"> </tt>
-<a name="L74"></a><tt class="py-lineno"> 74</tt> <a class="py-toggle" href="#" id="UnknownLinkType-toggle" onclick="return toggle('UnknownLinkType');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.UnknownLinkType-class.html">UnknownLinkType</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="UnknownLinkType-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="UnknownLinkType-expanded"><a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line">  <tt class="py-docstring">"""Link type unknown or unexpected."""</tt> </tt>
-<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line"> </tt>
-<a name="UnknownApiNameOrVersion"></a><div id="UnknownApiNameOrVersion-def"><a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line"> </tt>
-<a name="L79"></a><tt class="py-lineno"> 79</tt> <a class="py-toggle" href="#" id="UnknownApiNameOrVersion-toggle" onclick="return toggle('UnknownApiNameOrVersion');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.UnknownApiNameOrVersion-class.html">UnknownApiNameOrVersion</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="UnknownApiNameOrVersion-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="UnknownApiNameOrVersion-expanded"><a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line">  <tt class="py-docstring">"""No API with that name and version exists."""</tt> </tt>
-<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line"> </tt>
-<a name="UnacceptableMimeTypeError"></a><div id="UnacceptableMimeTypeError-def"><a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line"> </tt>
-<a name="L84"></a><tt class="py-lineno"> 84</tt> <a class="py-toggle" href="#" id="UnacceptableMimeTypeError-toggle" onclick="return toggle('UnacceptableMimeTypeError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.UnacceptableMimeTypeError-class.html">UnacceptableMimeTypeError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="UnacceptableMimeTypeError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="UnacceptableMimeTypeError-expanded"><a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line">  <tt class="py-docstring">"""That is an unacceptable mimetype for this operation."""</tt> </tt>
-<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line"> </tt>
-<a name="MediaUploadSizeError"></a><div id="MediaUploadSizeError-def"><a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line"> </tt>
-<a name="L89"></a><tt class="py-lineno"> 89</tt> <a class="py-toggle" href="#" id="MediaUploadSizeError-toggle" onclick="return toggle('MediaUploadSizeError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.MediaUploadSizeError-class.html">MediaUploadSizeError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUploadSizeError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="MediaUploadSizeError-expanded"><a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line">  <tt class="py-docstring">"""Media is larger than the method can accept."""</tt> </tt>
-<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line"> </tt>
-<a name="ResumableUploadError"></a><div id="ResumableUploadError-def"><a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line"> </tt>
-<a name="L94"></a><tt class="py-lineno"> 94</tt> <a class="py-toggle" href="#" id="ResumableUploadError-toggle" onclick="return toggle('ResumableUploadError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.ResumableUploadError-class.html">ResumableUploadError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ResumableUploadError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="ResumableUploadError-expanded"><a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line">  <tt class="py-docstring">"""Error occured during resumable upload."""</tt> </tt>
-<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line"> </tt>
-<a name="InvalidChunkSizeError"></a><div id="InvalidChunkSizeError-def"><a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line"> </tt>
-<a name="L99"></a><tt class="py-lineno"> 99</tt> <a class="py-toggle" href="#" id="InvalidChunkSizeError-toggle" onclick="return toggle('InvalidChunkSizeError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.InvalidChunkSizeError-class.html">InvalidChunkSizeError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="InvalidChunkSizeError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="InvalidChunkSizeError-expanded"><a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line">  <tt class="py-docstring">"""The given chunksize is not valid."""</tt> </tt>
-<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line"> </tt>
-<a name="BatchError"></a><div id="BatchError-def"><a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line"> </tt>
-<a name="L104"></a><tt class="py-lineno">104</tt> <a class="py-toggle" href="#" id="BatchError-toggle" onclick="return toggle('BatchError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.BatchError-class.html">BatchError</a><tt class="py-op">(</tt><tt class="py-base-class">HttpError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BatchError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="BatchError-expanded"><a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line">  <tt class="py-docstring">"""Error occured during batch operations."""</tt> </tt>
-<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line"> </tt>
-<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-9', 'positional', 'link-4');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="BatchError.__init__"></a><div id="BatchError.__init__-def"><a name="L108"></a><tt class="py-lineno">108</tt> <a class="py-toggle" href="#" id="BatchError.__init__-toggle" onclick="return toggle('BatchError.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.errors.BatchError-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">reason</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">content</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="BatchError.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BatchError.__init__-expanded"><a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt> </tt>
-<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt> </tt>
-<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reason</tt> <tt class="py-op">=</tt> <tt class="py-name">reason</tt> </tt>
-</div><a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line"> </tt>
-<a name="BatchError.__repr__"></a><div id="BatchError.__repr__-def"><a name="L113"></a><tt class="py-lineno">113</tt> <a class="py-toggle" href="#" id="BatchError.__repr__-toggle" onclick="return toggle('BatchError.__repr__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.errors.BatchError-class.html#__repr__">__repr__</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="BatchError.__repr__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BatchError.__repr__-expanded"><a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-string">'&lt;BatchError %s "%s"&gt;'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reason</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line"> </tt>
-<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">  <tt class="py-name">__str__</tt> <tt class="py-op">=</tt> <tt id="link-10" class="py-name"><a title="apiclient.errors.BatchError.__repr__
-apiclient.errors.HttpError.__repr__" class="py-name" href="#" onclick="return doclink('link-10', '__repr__', 'link-8');">__repr__</a></tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line">  <tt class="py-name">__str__</tt> <tt class="py-op">=</tt> <tt id="link-8" class="py-name" targets="Method apiclient.errors.BatchError.__repr__()=apiclient.errors.BatchError-class.html#__repr__,Method apiclient.errors.HttpError.__repr__()=apiclient.errors.HttpError-class.html#__repr__"><a title="apiclient.errors.BatchError.__repr__
+apiclient.errors.HttpError.__repr__" class="py-name" href="#" onclick="return doclink('link-8', '__repr__', 'link-8');">__repr__</a></tt> </tt>
+</div><a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line"> </tt>
+<a name="InvalidJsonError"></a><div id="InvalidJsonError-def"><a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line"> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt> <a class="py-toggle" href="#" id="InvalidJsonError-toggle" onclick="return toggle('InvalidJsonError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.InvalidJsonError-class.html">InvalidJsonError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="InvalidJsonError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="InvalidJsonError-expanded"><a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line">  <tt class="py-docstring">"""The JSON returned could not be parsed."""</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line"> </tt>
+<a name="UnknownFileType"></a><div id="UnknownFileType-def"><a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line"> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt> <a class="py-toggle" href="#" id="UnknownFileType-toggle" onclick="return toggle('UnknownFileType');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.UnknownFileType-class.html">UnknownFileType</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UnknownFileType-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="UnknownFileType-expanded"><a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line">  <tt class="py-docstring">"""File type unknown or unexpected."""</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"> </tt>
+<a name="UnknownLinkType"></a><div id="UnknownLinkType-def"><a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line"> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt> <a class="py-toggle" href="#" id="UnknownLinkType-toggle" onclick="return toggle('UnknownLinkType');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.UnknownLinkType-class.html">UnknownLinkType</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UnknownLinkType-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="UnknownLinkType-expanded"><a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line">  <tt class="py-docstring">"""Link type unknown or unexpected."""</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"> </tt>
+<a name="UnknownApiNameOrVersion"></a><div id="UnknownApiNameOrVersion-def"><a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt> <a class="py-toggle" href="#" id="UnknownApiNameOrVersion-toggle" onclick="return toggle('UnknownApiNameOrVersion');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.UnknownApiNameOrVersion-class.html">UnknownApiNameOrVersion</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UnknownApiNameOrVersion-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="UnknownApiNameOrVersion-expanded"><a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line">  <tt class="py-docstring">"""No API with that name and version exists."""</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line"> </tt>
+<a name="UnacceptableMimeTypeError"></a><div id="UnacceptableMimeTypeError-def"><a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line"> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt> <a class="py-toggle" href="#" id="UnacceptableMimeTypeError-toggle" onclick="return toggle('UnacceptableMimeTypeError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.UnacceptableMimeTypeError-class.html">UnacceptableMimeTypeError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UnacceptableMimeTypeError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="UnacceptableMimeTypeError-expanded"><a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line">  <tt class="py-docstring">"""That is an unacceptable mimetype for this operation."""</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line"> </tt>
+<a name="MediaUploadSizeError"></a><div id="MediaUploadSizeError-def"><a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt> <a class="py-toggle" href="#" id="MediaUploadSizeError-toggle" onclick="return toggle('MediaUploadSizeError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.MediaUploadSizeError-class.html">MediaUploadSizeError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUploadSizeError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="MediaUploadSizeError-expanded"><a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line">  <tt class="py-docstring">"""Media is larger than the method can accept."""</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line"> </tt>
+<a name="ResumableUploadError"></a><div id="ResumableUploadError-def"><a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line"> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt> <a class="py-toggle" href="#" id="ResumableUploadError-toggle" onclick="return toggle('ResumableUploadError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.ResumableUploadError-class.html">ResumableUploadError</a><tt class="py-op">(</tt><tt class="py-base-class">HttpError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ResumableUploadError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="ResumableUploadError-expanded"><a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line">  <tt class="py-docstring">"""Error occured during resumable upload."""</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line"> </tt>
+<a name="InvalidChunkSizeError"></a><div id="InvalidChunkSizeError-def"><a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line"> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt> <a class="py-toggle" href="#" id="InvalidChunkSizeError-toggle" onclick="return toggle('InvalidChunkSizeError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.InvalidChunkSizeError-class.html">InvalidChunkSizeError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="InvalidChunkSizeError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="InvalidChunkSizeError-expanded"><a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line">  <tt class="py-docstring">"""The given chunksize is not valid."""</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line"> </tt>
+<a name="BatchError"></a><div id="BatchError-def"><a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line"> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt> <a class="py-toggle" href="#" id="BatchError-toggle" onclick="return toggle('BatchError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.BatchError-class.html">BatchError</a><tt class="py-op">(</tt><tt class="py-base-class">HttpError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BatchError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="BatchError-expanded"><a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line">  <tt class="py-docstring">"""Error occured during batch operations."""</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line"> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-9', 'positional', 'link-4');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="BatchError.__init__"></a><div id="BatchError.__init__-def"><a name="L110"></a><tt class="py-lineno">110</tt> <a class="py-toggle" href="#" id="BatchError.__init__-toggle" onclick="return toggle('BatchError.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.errors.BatchError-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">reason</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">content</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="BatchError.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BatchError.__init__-expanded"><a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reason</tt> <tt class="py-op">=</tt> <tt class="py-name">reason</tt> </tt>
+</div><a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line"> </tt>
+<a name="BatchError.__repr__"></a><div id="BatchError.__repr__-def"><a name="L115"></a><tt class="py-lineno">115</tt> <a class="py-toggle" href="#" id="BatchError.__repr__-toggle" onclick="return toggle('BatchError.__repr__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.errors.BatchError-class.html#__repr__">__repr__</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="BatchError.__repr__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BatchError.__repr__-expanded"><a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-string">'&lt;BatchError %s "%s"&gt;'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">reason</tt><tt class="py-op">)</tt> </tt>
 </div><a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line"> </tt>
-<a name="UnexpectedMethodError"></a><div id="UnexpectedMethodError-def"><a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line"> </tt>
-<a name="L119"></a><tt class="py-lineno">119</tt> <a class="py-toggle" href="#" id="UnexpectedMethodError-toggle" onclick="return toggle('UnexpectedMethodError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.UnexpectedMethodError-class.html">UnexpectedMethodError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="UnexpectedMethodError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="UnexpectedMethodError-expanded"><a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line">  <tt class="py-docstring">"""Exception raised by RequestMockBuilder on unexpected calls."""</tt> </tt>
-<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line"> </tt>
-<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-11', 'positional', 'link-4');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="UnexpectedMethodError.__init__"></a><div id="UnexpectedMethodError.__init__-def"><a name="L123"></a><tt class="py-lineno">123</tt> <a class="py-toggle" href="#" id="UnexpectedMethodError.__init__-toggle" onclick="return toggle('UnexpectedMethodError.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.errors.UnexpectedMethodError-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">methodId</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="UnexpectedMethodError.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="UnexpectedMethodError.__init__-expanded"><a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for an UnexpectedMethodError."""</tt> </tt>
-<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-12" class="py-name" targets="Class apiclient.errors.UnexpectedMethodError=apiclient.errors.UnexpectedMethodError-class.html"><a title="apiclient.errors.UnexpectedMethodError" class="py-name" href="#" onclick="return doclink('link-12', 'UnexpectedMethodError', 'link-12');">UnexpectedMethodError</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
+<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line">  <tt class="py-name">__str__</tt> <tt class="py-op">=</tt> <tt id="link-10" class="py-name"><a title="apiclient.errors.BatchError.__repr__
+apiclient.errors.HttpError.__repr__" class="py-name" href="#" onclick="return doclink('link-10', '__repr__', 'link-8');">__repr__</a></tt> </tt>
+</div><a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line"> </tt>
+<a name="UnexpectedMethodError"></a><div id="UnexpectedMethodError-def"><a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line"> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt> <a class="py-toggle" href="#" id="UnexpectedMethodError-toggle" onclick="return toggle('UnexpectedMethodError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.UnexpectedMethodError-class.html">UnexpectedMethodError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UnexpectedMethodError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="UnexpectedMethodError-expanded"><a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">  <tt class="py-docstring">"""Exception raised by RequestMockBuilder on unexpected calls."""</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line"> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-11', 'positional', 'link-4');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="UnexpectedMethodError.__init__"></a><div id="UnexpectedMethodError.__init__-def"><a name="L125"></a><tt class="py-lineno">125</tt> <a class="py-toggle" href="#" id="UnexpectedMethodError.__init__-toggle" onclick="return toggle('UnexpectedMethodError.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.errors.UnexpectedMethodError-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">methodId</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="UnexpectedMethodError.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="UnexpectedMethodError.__init__-expanded"><a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for an UnexpectedMethodError."""</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-12" class="py-name" targets="Class apiclient.errors.UnexpectedMethodError=apiclient.errors.UnexpectedMethodError-class.html"><a title="apiclient.errors.UnexpectedMethodError" class="py-name" href="#" onclick="return doclink('link-12', 'UnexpectedMethodError', 'link-12');">UnexpectedMethodError</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.discovery.ResourceMethodParameters.__init__()=apiclient.discovery.ResourceMethodParameters-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
 apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
@@ -225,15 +228,16 @@
 oauth2client.locked_file._Opener.__init__
 oauth2client.multistore_file._MultiStore._Storage.__init__
 oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-13', '__init__', 'link-13');">__init__</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line">        <tt class="py-string">'Received unexpected call %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">methodId</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line"> </tt>
-<a name="UnexpectedBodyError"></a><div id="UnexpectedBodyError-def"><a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line"> </tt>
-<a name="L129"></a><tt class="py-lineno">129</tt> <a class="py-toggle" href="#" id="UnexpectedBodyError-toggle" onclick="return toggle('UnexpectedBodyError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.UnexpectedBodyError-class.html">UnexpectedBodyError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="UnexpectedBodyError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="UnexpectedBodyError-expanded"><a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line">  <tt class="py-docstring">"""Exception raised by RequestMockBuilder on unexpected bodies."""</tt> </tt>
-<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line"> </tt>
-<a name="UnexpectedBodyError.__init__"></a><div id="UnexpectedBodyError.__init__-def"><a name="L132"></a><tt class="py-lineno">132</tt> <a class="py-toggle" href="#" id="UnexpectedBodyError.__init__-toggle" onclick="return toggle('UnexpectedBodyError.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.errors.UnexpectedBodyError-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">expected</tt><tt class="py-op">,</tt> <tt class="py-param">provided</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="UnexpectedBodyError.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="UnexpectedBodyError.__init__-expanded"><a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for an UnexpectedMethodError."""</tt> </tt>
-<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-14" class="py-name" targets="Class apiclient.errors.UnexpectedBodyError=apiclient.errors.UnexpectedBodyError-class.html"><a title="apiclient.errors.UnexpectedBodyError" class="py-name" href="#" onclick="return doclink('link-14', 'UnexpectedBodyError', 'link-14');">UnexpectedBodyError</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name"><a title="apiclient.discovery.Resource.__init__
+<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line">        <tt class="py-string">'Received unexpected call %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">methodId</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line"> </tt>
+<a name="UnexpectedBodyError"></a><div id="UnexpectedBodyError-def"><a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt> <a class="py-toggle" href="#" id="UnexpectedBodyError-toggle" onclick="return toggle('UnexpectedBodyError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="apiclient.errors.UnexpectedBodyError-class.html">UnexpectedBodyError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UnexpectedBodyError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="UnexpectedBodyError-expanded"><a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">  <tt class="py-docstring">"""Exception raised by RequestMockBuilder on unexpected bodies."""</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line"> </tt>
+<a name="UnexpectedBodyError.__init__"></a><div id="UnexpectedBodyError.__init__-def"><a name="L134"></a><tt class="py-lineno">134</tt> <a class="py-toggle" href="#" id="UnexpectedBodyError.__init__-toggle" onclick="return toggle('UnexpectedBodyError.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.errors.UnexpectedBodyError-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">expected</tt><tt class="py-op">,</tt> <tt class="py-param">provided</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UnexpectedBodyError.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="UnexpectedBodyError.__init__-expanded"><a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for an UnexpectedMethodError."""</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-14" class="py-name" targets="Class apiclient.errors.UnexpectedBodyError=apiclient.errors.UnexpectedBodyError-class.html"><a title="apiclient.errors.UnexpectedBodyError" class="py-name" href="#" onclick="return doclink('link-14', 'UnexpectedBodyError', 'link-14');">UnexpectedBodyError</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
 apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
@@ -279,8 +283,8 @@
 oauth2client.locked_file._Opener.__init__
 oauth2client.multistore_file._MultiStore._Storage.__init__
 oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-15', '__init__', 'link-13');">__init__</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line">        <tt class="py-string">'Expected: [%s] - Provided: [%s]'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">expected</tt><tt class="py-op">,</tt> <tt class="py-name">provided</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line">        <tt class="py-string">'Expected: [%s] - Provided: [%s]'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">expected</tt><tt class="py-op">,</tt> <tt class="py-name">provided</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -310,7 +314,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:48 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors.BatchError-class.html b/docs/epy/apiclient.errors.BatchError-class.html
index bb51bc0..f867105 100644
--- a/docs/epy/apiclient.errors.BatchError-class.html
+++ b/docs/epy/apiclient.errors.BatchError-class.html
@@ -329,7 +329,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:32 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors.Error-class.html b/docs/epy/apiclient.errors.Error-class.html
index 70b5c2a..1db9530 100644
--- a/docs/epy/apiclient.errors.Error-class.html
+++ b/docs/epy/apiclient.errors.Error-class.html
@@ -166,7 +166,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:32 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors.HttpError-class.html b/docs/epy/apiclient.errors.HttpError-class.html
index 14b7619..2b29047 100644
--- a/docs/epy/apiclient.errors.HttpError-class.html
+++ b/docs/epy/apiclient.errors.HttpError-class.html
@@ -342,7 +342,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:32 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors.InvalidChunkSizeError-class.html b/docs/epy/apiclient.errors.InvalidChunkSizeError-class.html
index bb788ae..c816adf 100644
--- a/docs/epy/apiclient.errors.InvalidChunkSizeError-class.html
+++ b/docs/epy/apiclient.errors.InvalidChunkSizeError-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:32 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors.InvalidJsonError-class.html b/docs/epy/apiclient.errors.InvalidJsonError-class.html
index 06f2772..80da4d9 100644
--- a/docs/epy/apiclient.errors.InvalidJsonError-class.html
+++ b/docs/epy/apiclient.errors.InvalidJsonError-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:33 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors.MediaUploadSizeError-class.html b/docs/epy/apiclient.errors.MediaUploadSizeError-class.html
index 53353b7..58ed307 100644
--- a/docs/epy/apiclient.errors.MediaUploadSizeError-class.html
+++ b/docs/epy/apiclient.errors.MediaUploadSizeError-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:33 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors.ResumableUploadError-class.html b/docs/epy/apiclient.errors.ResumableUploadError-class.html
index e87848b..fe62180 100644
--- a/docs/epy/apiclient.errors.ResumableUploadError-class.html
+++ b/docs/epy/apiclient.errors.ResumableUploadError-class.html
@@ -57,9 +57,10 @@
 <center>
 <center>  <map id="class_hierarchy_for_resumableu" name="class_hierarchy_for_resumableu">
 <area shape="rect" id="node1" href="apiclient.errors.Error-class.html" title="Error" alt="" coords="68,123,119,151"/>
-<area shape="rect" id="node2" href="apiclient.errors.ResumableUploadError-class.html" title="ResumableUploadError" alt="" coords="205,6,363,34"/>
-<area shape="rect" id="node3" href="javascript:void(0);" title="exceptions.BaseException" alt="" coords="5,6,181,34"/>
-<area shape="rect" id="node4" href="javascript:void(0);" title="exceptions.Exception" alt="" coords="20,65,167,93"/>
+<area shape="rect" id="node2" href="apiclient.errors.HttpError-class.html" title="HttpError" alt="" coords="205,6,280,34"/>
+<area shape="rect" id="node3" href="apiclient.errors.ResumableUploadError-class.html" title="ResumableUploadError" alt="" coords="304,6,461,34"/>
+<area shape="rect" id="node4" href="javascript:void(0);" title="exceptions.BaseException" alt="" coords="5,6,181,34"/>
+<area shape="rect" id="node5" href="javascript:void(0);" title="exceptions.Exception" alt="" coords="20,65,167,93"/>
 </map>
   <img src="class_hierarchy_for_resumableu.gif" alt='' usemap="#class_hierarchy_for_resumableu" ismap="ismap" class="graph-without-title" />
 </center>
@@ -89,8 +90,15 @@
 </tr>
   <tr>
     <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="apiclient.errors.HttpError-class.html">HttpError</a></code></b>:
+      <code><a href="apiclient.errors.HttpError-class.html#__init__">__init__</a></code>,
+      <code><a href="apiclient.errors.HttpError-class.html#__repr__">__repr__</a></code>,
+      <code><a href="apiclient.errors.HttpError-class.html#__str__">__str__</a></code>
+      </p>
+    <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="apiclient.errors.HttpError-class.html">HttpError</a></code></b> (private):
+      <code><a href="apiclient.errors.HttpError-class.html#_get_reason" onclick="show_private();">_get_reason</a></code>
+      </p></div>
     <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
-      <code>__init__</code>,
       <code>__new__</code>
       </p>
     <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
@@ -99,10 +107,8 @@
       <code>__getitem__</code>,
       <code>__getslice__</code>,
       <code>__reduce__</code>,
-      <code>__repr__</code>,
       <code>__setattr__</code>,
       <code>__setstate__</code>,
-      <code>__str__</code>,
       <code>__unicode__</code>
       </p>
     <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
@@ -167,7 +173,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:33 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors.UnacceptableMimeTypeError-class.html b/docs/epy/apiclient.errors.UnacceptableMimeTypeError-class.html
index c1074db..0286cd8 100644
--- a/docs/epy/apiclient.errors.UnacceptableMimeTypeError-class.html
+++ b/docs/epy/apiclient.errors.UnacceptableMimeTypeError-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:33 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors.UnexpectedBodyError-class.html b/docs/epy/apiclient.errors.UnexpectedBodyError-class.html
index 1adb1bd..64c5b71 100644
--- a/docs/epy/apiclient.errors.UnexpectedBodyError-class.html
+++ b/docs/epy/apiclient.errors.UnexpectedBodyError-class.html
@@ -232,7 +232,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:33 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors.UnexpectedMethodError-class.html b/docs/epy/apiclient.errors.UnexpectedMethodError-class.html
index e0700f9..a3bb52d 100644
--- a/docs/epy/apiclient.errors.UnexpectedMethodError-class.html
+++ b/docs/epy/apiclient.errors.UnexpectedMethodError-class.html
@@ -234,7 +234,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:33 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors.UnknownApiNameOrVersion-class.html b/docs/epy/apiclient.errors.UnknownApiNameOrVersion-class.html
index 3a068c9..e34bc8a 100644
--- a/docs/epy/apiclient.errors.UnknownApiNameOrVersion-class.html
+++ b/docs/epy/apiclient.errors.UnknownApiNameOrVersion-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:33 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors.UnknownFileType-class.html b/docs/epy/apiclient.errors.UnknownFileType-class.html
index 5cccf08..eb95fae 100644
--- a/docs/epy/apiclient.errors.UnknownFileType-class.html
+++ b/docs/epy/apiclient.errors.UnknownFileType-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:34 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.errors.UnknownLinkType-class.html b/docs/epy/apiclient.errors.UnknownLinkType-class.html
index 65fb5bc..0243625 100644
--- a/docs/epy/apiclient.errors.UnknownLinkType-class.html
+++ b/docs/epy/apiclient.errors.UnknownLinkType-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:34 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.ext-module.html b/docs/epy/apiclient.ext-module.html
index a1990bd..4fcfd39 100644
--- a/docs/epy/apiclient.ext-module.html
+++ b/docs/epy/apiclient.ext-module.html
@@ -76,7 +76,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.ext-pysrc.html b/docs/epy/apiclient.ext-pysrc.html
index a701683..7570ee0 100644
--- a/docs/epy/apiclient.ext-pysrc.html
+++ b/docs/epy/apiclient.ext-pysrc.html
@@ -84,7 +84,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:47 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http-module.html b/docs/epy/apiclient.http-module.html
index c43587e..007c012 100644
--- a/docs/epy/apiclient.http-module.html
+++ b/docs/epy/apiclient.http-module.html
@@ -399,7 +399,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http-pysrc.html b/docs/epy/apiclient.http-pysrc.html
index a8c7ded..ad4b775 100644
--- a/docs/epy/apiclient.http-pysrc.html
+++ b/docs/epy/apiclient.http-pysrc.html
@@ -362,7 +362,8 @@
 <a name="L292"></a><tt class="py-lineno"> 292</tt>  <tt class="py-line"><tt class="py-docstring">      resumable: bool, True if this is a resumable upload. False means upload</tt> </tt>
 <a name="L293"></a><tt class="py-lineno"> 293</tt>  <tt class="py-line"><tt class="py-docstring">        in a single request.</tt> </tt>
 <a name="L294"></a><tt class="py-lineno"> 294</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L295"></a><tt class="py-lineno"> 295</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-28" class="py-name" targets="Class apiclient.http.MediaIoBaseUpload=apiclient.http.MediaIoBaseUpload-class.html"><a title="apiclient.http.MediaIoBaseUpload" class="py-name" href="#" onclick="return doclink('link-28', 'MediaIoBaseUpload', 'link-28');">MediaIoBaseUpload</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
+<a name="L295"></a><tt class="py-lineno"> 295</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-28" class="py-name" targets="Class apiclient.http.MediaIoBaseUpload=apiclient.http.MediaIoBaseUpload-class.html"><a title="apiclient.http.MediaIoBaseUpload" class="py-name" href="#" onclick="return doclink('link-28', 'MediaIoBaseUpload', 'link-28');">MediaIoBaseUpload</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.discovery.ResourceMethodParameters.__init__()=apiclient.discovery.ResourceMethodParameters-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
 apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
@@ -545,6 +546,7 @@
 apiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-41', 'mimetype', 'link-30');">mimetype</a></tt><tt class="py-op">,</tt> <tt class="py-name">encoding</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">mimetypes</tt><tt class="py-op">.</tt><tt class="py-name">guess_type</tt><tt class="py-op">(</tt><tt id="link-42" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
 oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-42', 'filename', 'link-39');">filename</a></tt><tt class="py-op">)</tt> </tt>
 <a name="L422"></a><tt class="py-lineno"> 422</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-43" class="py-name" targets="Class apiclient.http.MediaFileUpload=apiclient.http.MediaFileUpload-class.html"><a title="apiclient.http.MediaFileUpload" class="py-name" href="#" onclick="return doclink('link-43', 'MediaFileUpload', 'link-43');">MediaFileUpload</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
 apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
@@ -643,6 +645,7 @@
 <a name="L464"></a><tt class="py-lineno"> 464</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
 <a name="L465"></a><tt class="py-lineno"> 465</tt>  <tt class="py-line">    <tt class="py-name">fd</tt> <tt class="py-op">=</tt> <tt class="py-name">StringIO</tt><tt class="py-op">.</tt><tt class="py-name">StringIO</tt><tt class="py-op">(</tt><tt class="py-name">body</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">super</tt><tt class="py-op">(</tt><tt id="link-58" class="py-name" targets="Class apiclient.http.MediaInMemoryUpload=apiclient.http.MediaInMemoryUpload-class.html"><a title="apiclient.http.MediaInMemoryUpload" class="py-name" href="#" onclick="return doclink('link-58', 'MediaInMemoryUpload', 'link-58');">MediaInMemoryUpload</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-59" class="py-name"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
 apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
@@ -1028,7 +1031,7 @@
 <a name="L744"></a><tt class="py-lineno"> 744</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">200</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'location'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
 <a name="L745"></a><tt class="py-lineno"> 745</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'location'</tt><tt class="py-op">]</tt> </tt>
 <a name="L746"></a><tt class="py-lineno"> 746</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L747"></a><tt class="py-lineno"> 747</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt id="link-120" class="py-name"><a title="apiclient.errors.ResumableUploadError" class="py-name" href="#" onclick="return doclink('link-120', 'ResumableUploadError', 'link-8');">ResumableUploadError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Failed to retrieve starting URI."</tt><tt class="py-op">)</tt> </tt>
+<a name="L747"></a><tt class="py-lineno"> 747</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt id="link-120" class="py-name"><a title="apiclient.errors.ResumableUploadError" class="py-name" href="#" onclick="return doclink('link-120', 'ResumableUploadError', 'link-8');">ResumableUploadError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
 <a name="L748"></a><tt class="py-lineno"> 748</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error_state</tt><tt class="py-op">:</tt> </tt>
 <a name="L749"></a><tt class="py-lineno"> 749</tt>  <tt class="py-line">      <tt class="py-comment"># If we are in an error state then query the server for current state of</tt> </tt>
 <a name="L750"></a><tt class="py-lineno"> 750</tt>  <tt class="py-line">      <tt class="py-comment"># the upload by sending an empty PUT and reading the 'range' header in</tt> </tt>
@@ -2068,7 +2071,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:46 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http.BatchHttpRequest-class.html b/docs/epy/apiclient.http.BatchHttpRequest-class.html
index c3b045c..f1500f7 100644
--- a/docs/epy/apiclient.http.BatchHttpRequest-class.html
+++ b/docs/epy/apiclient.http.BatchHttpRequest-class.html
@@ -731,7 +731,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:34 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http.HttpMock-class.html b/docs/epy/apiclient.http.HttpMock-class.html
index 08dc819..8ccde33 100644
--- a/docs/epy/apiclient.http.HttpMock-class.html
+++ b/docs/epy/apiclient.http.HttpMock-class.html
@@ -242,7 +242,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:34 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http.HttpMockSequence-class.html b/docs/epy/apiclient.http.HttpMockSequence-class.html
index 7010354..bce8435 100644
--- a/docs/epy/apiclient.http.HttpMockSequence-class.html
+++ b/docs/epy/apiclient.http.HttpMockSequence-class.html
@@ -259,7 +259,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:34 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http.HttpRequest-class.html b/docs/epy/apiclient.http.HttpRequest-class.html
index d64fe78..5f1d48a 100644
--- a/docs/epy/apiclient.http.HttpRequest-class.html
+++ b/docs/epy/apiclient.http.HttpRequest-class.html
@@ -533,7 +533,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:34 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http.HttpRequestMock-class.html b/docs/epy/apiclient.http.HttpRequestMock-class.html
index 170fdc5..5248a2b 100644
--- a/docs/epy/apiclient.http.HttpRequestMock-class.html
+++ b/docs/epy/apiclient.http.HttpRequestMock-class.html
@@ -271,7 +271,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:35 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http.MediaDownloadProgress-class.html b/docs/epy/apiclient.http.MediaDownloadProgress-class.html
index 028bcde..ad7eb67 100644
--- a/docs/epy/apiclient.http.MediaDownloadProgress-class.html
+++ b/docs/epy/apiclient.http.MediaDownloadProgress-class.html
@@ -264,7 +264,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:35 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http.MediaFileUpload-class.html b/docs/epy/apiclient.http.MediaFileUpload-class.html
index 0fa532a..f5171d1 100644
--- a/docs/epy/apiclient.http.MediaFileUpload-class.html
+++ b/docs/epy/apiclient.http.MediaFileUpload-class.html
@@ -375,7 +375,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:35 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http.MediaInMemoryUpload-class.html b/docs/epy/apiclient.http.MediaInMemoryUpload-class.html
index a6688d6..264313f 100644
--- a/docs/epy/apiclient.http.MediaInMemoryUpload-class.html
+++ b/docs/epy/apiclient.http.MediaInMemoryUpload-class.html
@@ -281,7 +281,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:35 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http.MediaIoBaseDownload-class.html b/docs/epy/apiclient.http.MediaIoBaseDownload-class.html
index c3fa418..eb6cc24 100644
--- a/docs/epy/apiclient.http.MediaIoBaseDownload-class.html
+++ b/docs/epy/apiclient.http.MediaIoBaseDownload-class.html
@@ -294,7 +294,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:35 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http.MediaIoBaseUpload-class.html b/docs/epy/apiclient.http.MediaIoBaseUpload-class.html
index a262f22..715c7d6 100644
--- a/docs/epy/apiclient.http.MediaIoBaseUpload-class.html
+++ b/docs/epy/apiclient.http.MediaIoBaseUpload-class.html
@@ -658,7 +658,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:35 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http.MediaUpload-class.html b/docs/epy/apiclient.http.MediaUpload-class.html
index e9609dd..7860a1f 100644
--- a/docs/epy/apiclient.http.MediaUpload-class.html
+++ b/docs/epy/apiclient.http.MediaUpload-class.html
@@ -666,7 +666,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:35 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http.MediaUploadProgress-class.html b/docs/epy/apiclient.http.MediaUploadProgress-class.html
index 336c35c..32626c0 100644
--- a/docs/epy/apiclient.http.MediaUploadProgress-class.html
+++ b/docs/epy/apiclient.http.MediaUploadProgress-class.html
@@ -265,7 +265,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:36 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http.RequestMockBuilder-class.html b/docs/epy/apiclient.http.RequestMockBuilder-class.html
index b66d5c0..a641f15 100644
--- a/docs/epy/apiclient.http.RequestMockBuilder-class.html
+++ b/docs/epy/apiclient.http.RequestMockBuilder-class.html
@@ -311,7 +311,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:36 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.http._StreamSlice-class.html b/docs/epy/apiclient.http._StreamSlice-class.html
index f83ae7e..540dfdf 100644
--- a/docs/epy/apiclient.http._StreamSlice-class.html
+++ b/docs/epy/apiclient.http._StreamSlice-class.html
@@ -277,7 +277,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:36 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.mimeparse-module.html b/docs/epy/apiclient.mimeparse-module.html
index e74b7f1..1fe286d 100644
--- a/docs/epy/apiclient.mimeparse-module.html
+++ b/docs/epy/apiclient.mimeparse-module.html
@@ -484,7 +484,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.mimeparse-pysrc.html b/docs/epy/apiclient.mimeparse-pysrc.html
index f0f9967..471a2a1 100644
--- a/docs/epy/apiclient.mimeparse-pysrc.html
+++ b/docs/epy/apiclient.mimeparse-pysrc.html
@@ -255,7 +255,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:48 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.model-module.html b/docs/epy/apiclient.model-module.html
index d22d3ec..290e0d2 100644
--- a/docs/epy/apiclient.model-module.html
+++ b/docs/epy/apiclient.model-module.html
@@ -293,7 +293,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.model-pysrc.html b/docs/epy/apiclient.model-pysrc.html
index 6f601fb..c94eb82 100644
--- a/docs/epy/apiclient.model-pysrc.html
+++ b/docs/epy/apiclient.model-pysrc.html
@@ -572,7 +572,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:48 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.model.BaseModel-class.html b/docs/epy/apiclient.model.BaseModel-class.html
index f4d8b4e..98df4d2 100644
--- a/docs/epy/apiclient.model.BaseModel-class.html
+++ b/docs/epy/apiclient.model.BaseModel-class.html
@@ -531,7 +531,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:36 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.model.JsonModel-class.html b/docs/epy/apiclient.model.JsonModel-class.html
index 16b4407..882dce2 100644
--- a/docs/epy/apiclient.model.JsonModel-class.html
+++ b/docs/epy/apiclient.model.JsonModel-class.html
@@ -417,7 +417,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:36 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.model.MediaModel-class.html b/docs/epy/apiclient.model.MediaModel-class.html
index 8ff66f1..31be56e 100644
--- a/docs/epy/apiclient.model.MediaModel-class.html
+++ b/docs/epy/apiclient.model.MediaModel-class.html
@@ -324,7 +324,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:36 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.model.Model-class.html b/docs/epy/apiclient.model.Model-class.html
index a9fb6a1..606056b 100644
--- a/docs/epy/apiclient.model.Model-class.html
+++ b/docs/epy/apiclient.model.Model-class.html
@@ -289,7 +289,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:36 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.model.ProtocolBufferModel-class.html b/docs/epy/apiclient.model.ProtocolBufferModel-class.html
index bf4e822..e0ed7d9 100644
--- a/docs/epy/apiclient.model.ProtocolBufferModel-class.html
+++ b/docs/epy/apiclient.model.ProtocolBufferModel-class.html
@@ -421,7 +421,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:37 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.model.RawModel-class.html b/docs/epy/apiclient.model.RawModel-class.html
index 4198c4b..e8c0589 100644
--- a/docs/epy/apiclient.model.RawModel-class.html
+++ b/docs/epy/apiclient.model.RawModel-class.html
@@ -324,7 +324,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:37 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.push-module.html b/docs/epy/apiclient.push-module.html
index eb40b6c..ed010fa 100644
--- a/docs/epy/apiclient.push-module.html
+++ b/docs/epy/apiclient.push-module.html
@@ -291,7 +291,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.push-pysrc.html b/docs/epy/apiclient.push-pysrc.html
index dbf8b94..690d6ba 100644
--- a/docs/epy/apiclient.push-pysrc.html
+++ b/docs/epy/apiclient.push-pysrc.html
@@ -144,7 +144,8 @@
 <a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line"><tt class="py-docstring">      app_engine: bool, default=False, whether the destination for the</tt> </tt>
 <a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"><tt class="py-docstring">      notifications is an App Engine application.</tt> </tt>
 <a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-9" class="py-name" targets="Class apiclient.push.WebhookChannel=apiclient.push.WebhookChannel-class.html"><a title="apiclient.push.WebhookChannel" class="py-name" href="#" onclick="return doclink('link-9', 'WebhookChannel', 'link-9');">WebhookChannel</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
+<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-9" class="py-name" targets="Class apiclient.push.WebhookChannel=apiclient.push.WebhookChannel-class.html"><a title="apiclient.push.WebhookChannel" class="py-name" href="#" onclick="return doclink('link-9', 'WebhookChannel', 'link-9');">WebhookChannel</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.discovery.ResourceMethodParameters.__init__()=apiclient.discovery.ResourceMethodParameters-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
 apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
@@ -208,6 +209,7 @@
 <a name="Headers.__init__"></a><div id="Headers.__init__-def"><a name="L108"></a><tt class="py-lineno">108</tt> <a class="py-toggle" href="#" id="Headers.__init__-toggle" onclick="return toggle('Headers.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="apiclient.push.Headers-class.html#__init__">__init__</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="Headers.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Headers.__init__-expanded"><a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line">    <tt class="py-docstring">"""Create a new subscription configuration instance."""</tt> </tt>
 <a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line">    <tt class="py-name">collections</tt><tt class="py-op">.</tt><tt class="py-name">defaultdict</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
 apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
@@ -462,7 +464,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:49 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.push.Channel-class.html b/docs/epy/apiclient.push.Channel-class.html
index 5108eb6..a34c36f 100644
--- a/docs/epy/apiclient.push.Channel-class.html
+++ b/docs/epy/apiclient.push.Channel-class.html
@@ -311,7 +311,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:37 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.push.Headers-class.html b/docs/epy/apiclient.push.Headers-class.html
index 76a41bf..e4b0074 100644
--- a/docs/epy/apiclient.push.Headers-class.html
+++ b/docs/epy/apiclient.push.Headers-class.html
@@ -431,7 +431,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:37 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.push.InvalidSubscriptionRequestError-class.html b/docs/epy/apiclient.push.InvalidSubscriptionRequestError-class.html
index 5d4579f..913d2da 100644
--- a/docs/epy/apiclient.push.InvalidSubscriptionRequestError-class.html
+++ b/docs/epy/apiclient.push.InvalidSubscriptionRequestError-class.html
@@ -168,7 +168,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:37 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.push.Subscription-class.html b/docs/epy/apiclient.push.Subscription-class.html
index d524fcb..6df582a 100644
--- a/docs/epy/apiclient.push.Subscription-class.html
+++ b/docs/epy/apiclient.push.Subscription-class.html
@@ -686,7 +686,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:37 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.push.WebhookChannel-class.html b/docs/epy/apiclient.push.WebhookChannel-class.html
index 67bd0ab..207b402 100644
--- a/docs/epy/apiclient.push.WebhookChannel-class.html
+++ b/docs/epy/apiclient.push.WebhookChannel-class.html
@@ -227,7 +227,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:38 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.schema-module.html b/docs/epy/apiclient.schema-module.html
index 73902d2..e7f7d37 100644
--- a/docs/epy/apiclient.schema-module.html
+++ b/docs/epy/apiclient.schema-module.html
@@ -161,7 +161,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.schema-pysrc.html b/docs/epy/apiclient.schema-pysrc.html
index 43a3433..708cc5d 100644
--- a/docs/epy/apiclient.schema-pysrc.html
+++ b/docs/epy/apiclient.schema-pysrc.html
@@ -427,7 +427,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:48 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.schema.Schemas-class.html b/docs/epy/apiclient.schema.Schemas-class.html
index 6ae447f..f6f6d58 100644
--- a/docs/epy/apiclient.schema.Schemas-class.html
+++ b/docs/epy/apiclient.schema.Schemas-class.html
@@ -475,7 +475,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:38 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/apiclient.schema._SchemaToStruct-class.html b/docs/epy/apiclient.schema._SchemaToStruct-class.html
index d94e59f..eae119e 100644
--- a/docs/epy/apiclient.schema._SchemaToStruct-class.html
+++ b/docs/epy/apiclient.schema._SchemaToStruct-class.html
@@ -496,7 +496,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:38 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/class-tree.html b/docs/epy/class-tree.html
index e6d6aba..f1577c0 100644
--- a/docs/epy/class-tree.html
+++ b/docs/epy/class-tree.html
@@ -52,32 +52,24 @@
 </b></center><br />
 <h1 class="epydoc">Class Hierarchy</h1>
 <ul class="nomargin-top">
+    <li> <strong class="uidlink"><i>unreachable</i></strong>
+    </li>
+    <li> <strong class="uidlink"><i>unreachable</i></strong>
+    </li>
+    <li> <strong class="uidlink"><i>unreachable</i></strong>
+    </li>
+    <li> <strong class="uidlink"><i>unreachable</i></strong>
+    </li>
     <li> <strong class="uidlink">SocketServer.BaseRequestHandler</strong>:
       <em class="summary">Base class for request handler classes.</em>
     </li>
     <li> <strong class="uidlink">SocketServer.BaseServer</strong>:
       <em class="summary">Base class for server classes.</em>
     </li>
-    <li> <strong class="uidlink">google.appengine.ext.ndb.BlobProperty</strong>
-    </li>
     <li> <strong class="uidlink">django.db.models.Field</strong>
     </li>
     <li> <strong class="uidlink">django.db.models.Field</strong>
     </li>
-    <li> <strong class="uidlink">google.appengine.ext.db.Model</strong>
-    </li>
-    <li> <strong class="uidlink">google.appengine.ext.db.Model</strong>
-    </li>
-    <li> <strong class="uidlink">google.appengine.ext.ndb.Model</strong>
-    </li>
-    <li> <strong class="uidlink">google.appengine.ext.ndb.Model</strong>
-    </li>
-    <li> <strong class="uidlink">google.appengine.ext.ndb.PickleProperty</strong>
-    </li>
-    <li> <strong class="uidlink">google.appengine.ext.db.Property</strong>
-    </li>
-    <li> <strong class="uidlink">google.appengine.ext.db.Property</strong>
-    </li>
     <li> <strong class="uidlink">collections.defaultdict</strong>
     </li>
     <li> <strong class="uidlink">object</strong>:
@@ -100,7 +92,7 @@
     <li> <strong class="uidlink"><a href="oauth2client.locked_file.CredentialsFileSymbolicLinkError-class.html">oauth2client.locked_file.CredentialsFileSymbolicLinkError</a></strong>:
       <em class="summary">Credentials files must not be symbolic links.</em>
     </li>
-    <li> <strong class="uidlink"><a href="oauth2client.multistore_file.Error-class.html">oauth2client.multistore_file.Error</a></strong>:
+    <li> <strong class="uidlink"><a href="apiclient.errors.Error-class.html">apiclient.errors.Error</a></strong>:
       <em class="summary">Base error for this module.</em>
     </li>
     <li> <strong class="uidlink"><a href="oauth2client.client.Error-class.html">oauth2client.client.Error</a></strong>:
@@ -109,7 +101,7 @@
     <li> <strong class="uidlink"><a href="oauth2client.clientsecrets.Error-class.html">oauth2client.clientsecrets.Error</a></strong>:
       <em class="summary">Base error for this module.</em>
     </li>
-    <li> <strong class="uidlink"><a href="apiclient.errors.Error-class.html">apiclient.errors.Error</a></strong>:
+    <li> <strong class="uidlink"><a href="oauth2client.multistore_file.Error-class.html">oauth2client.multistore_file.Error</a></strong>:
       <em class="summary">Base error for this module.</em>
     </li>
     <li> <strong class="uidlink"><a href="oauth2client.appengine.InvalidClientSecretsError-class.html">oauth2client.appengine.InvalidClientSecretsError</a></strong>:
@@ -178,18 +170,27 @@
     <li> <strong class="uidlink"><a href="oauth2client.client.MemoryCache-class.html">oauth2client.client.MemoryCache</a></strong>:
       <em class="summary">httplib2 Cache implementation which only caches locally.</em>
     </li>
+    <li> <strong class="uidlink">google.appengine.ext.db.Model</strong>:
+      <em class="summary">Model is the superclass of all object entities in the datastore.</em>
+    </li>
     <li> <strong class="uidlink"><a href="apiclient.model.Model-class.html">apiclient.model.Model</a></strong>:
       <em class="summary">Model base class.</em>
     </li>
     <li> <strong class="uidlink"><a href="oauth2client.appengine.OAuth2Decorator-class.html">oauth2client.appengine.OAuth2Decorator</a></strong>:
       <em class="summary">Utility for making OAuth 2.0 easier.</em>
     </li>
+    <li> <strong class="uidlink">google.appengine.ext.db.Property</strong>:
+      <em class="summary">A Property is an attribute of a Model.</em>
+    </li>
     <li> <strong class="uidlink"><a href="apiclient.http.RequestMockBuilder-class.html">apiclient.http.RequestMockBuilder</a></strong>:
       <em class="summary">A simple mock of HttpRequest</em>
     </li>
-    <li> <strong class="uidlink"><a href="apiclient.discovery.Resource-class.html">apiclient.discovery.Resource</a></strong>:
+    <li> <strong class="uidlink"><a href="apiclient.discovery.Resource-class.html" onclick="show_private();">apiclient.discovery.Resource</a></strong>:
       <em class="summary">A class for interacting with a resource.</em>
     </li>
+    <li> <strong class="uidlink"><a href="apiclient.discovery.ResourceMethodParameters-class.html" onclick="show_private();">apiclient.discovery.ResourceMethodParameters</a></strong>:
+      <em class="summary">Represents the parameters associated with a method.</em>
+    </li>
     <li> <strong class="uidlink"><a href="apiclient.schema.Schemas-class.html">apiclient.schema.Schemas</a></strong>:
       <em class="summary">Schemas for an API.</em>
     </li>
@@ -211,6 +212,9 @@
     <li> <strong class="uidlink"><a href="apiclient.http._StreamSlice-class.html" onclick="show_private();">apiclient.http._StreamSlice</a></strong>:
       <em class="summary">Truncated stream.</em>
     </li>
+    <li> <strong class="uidlink">type</strong>:
+      <em class="summary">type(object) -&gt; the object's type...</em>
+    </li>
     </ul>
     </li>
 </ul>
@@ -237,7 +241,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:29 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:22 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/class_hierarchy_for_credential_2.gif b/docs/epy/class_hierarchy_for_credential_2.gif
index 1102bcd..fa83cf4 100644
--- a/docs/epy/class_hierarchy_for_credential_2.gif
+++ b/docs/epy/class_hierarchy_for_credential_2.gif
Binary files differ
diff --git a/docs/epy/class_hierarchy_for_credential_3.gif b/docs/epy/class_hierarchy_for_credential_3.gif
index 9663a91..d7314f0 100644
--- a/docs/epy/class_hierarchy_for_credential_3.gif
+++ b/docs/epy/class_hierarchy_for_credential_3.gif
Binary files differ
diff --git a/docs/epy/class_hierarchy_for_flowndbpro.gif b/docs/epy/class_hierarchy_for_flowndbpro.gif
index 963f344..ae06883 100644
--- a/docs/epy/class_hierarchy_for_flowndbpro.gif
+++ b/docs/epy/class_hierarchy_for_flowndbpro.gif
Binary files differ
diff --git a/docs/epy/class_hierarchy_for_propertied.gif b/docs/epy/class_hierarchy_for_propertied.gif
index cf7c0d8..ba2073c 100644
--- a/docs/epy/class_hierarchy_for_propertied.gif
+++ b/docs/epy/class_hierarchy_for_propertied.gif
Binary files differ
diff --git a/docs/epy/class_hierarchy_for_resumableu.gif b/docs/epy/class_hierarchy_for_resumableu.gif
index 6569652..9667f4c 100644
--- a/docs/epy/class_hierarchy_for_resumableu.gif
+++ b/docs/epy/class_hierarchy_for_resumableu.gif
Binary files differ
diff --git a/docs/epy/class_hierarchy_for_sitexsrfse_2.gif b/docs/epy/class_hierarchy_for_sitexsrfse_2.gif
index 56aa48b..0501be9 100644
--- a/docs/epy/class_hierarchy_for_sitexsrfse_2.gif
+++ b/docs/epy/class_hierarchy_for_sitexsrfse_2.gif
Binary files differ
diff --git a/docs/epy/google.appengine.ext.db.PropertiedClass-class.html b/docs/epy/google.appengine.ext.db.PropertiedClass-class.html
index f1b812e..e56a94f 100644
--- a/docs/epy/google.appengine.ext.db.PropertiedClass-class.html
+++ b/docs/epy/google.appengine.ext.db.PropertiedClass-class.html
@@ -59,8 +59,8 @@
 <h1 class="epydoc">Type PropertiedClass</h1><p class="nomargin-top"></p>
 <center>
 <center>  <map id="class_hierarchy_for_propertied" name="class_hierarchy_for_propertied">
-<area shape="rect" href="google.appengine.ext.db.PropertiedClass-class.html" title="PropertiedClass" alt="" coords="5,5,117,32"/>
-<area shape="rect" href="javascript:void(0);" title="type" alt="" coords="141,5,187,32"/>
+<area shape="rect" id="node1" href="google.appengine.ext.db.PropertiedClass-class.html" title="PropertiedClass" alt="" coords="5,6,120,34"/>
+<area shape="rect" id="node2" href="javascript:void(0);" title="type" alt="" coords="144,6,189,34"/>
 </map>
   <img src="class_hierarchy_for_propertied.gif" alt='' usemap="#class_hierarchy_for_propertied" ismap="ismap" class="graph-without-title" />
 </center>
@@ -131,12 +131,14 @@
       <code>__getattribute__</code>,
       <code>__gt__</code>,
       <code>__hash__</code>,
+      <code>__instancecheck__</code>,
       <code>__le__</code>,
       <code>__lt__</code>,
       <code>__ne__</code>,
       <code>__new__</code>,
       <code>__repr__</code>,
       <code>__setattr__</code>,
+      <code>__subclasscheck__</code>,
       <code>__subclasses__</code>,
       <code>mro</code>
       </p>
@@ -177,11 +179,9 @@
       <code>__basicsize__</code>,
       <code>__dictoffset__</code>,
       <code>__flags__</code>,
-      <code>__instancecheck__</code>,
       <code>__itemsize__</code>,
       <code>__mro__</code>,
       <code>__name__</code>,
-      <code>__subclasscheck__</code>,
       <code>__weakrefoffset__</code>
       </p>
     <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
@@ -294,7 +294,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Tue Nov  6 12:07:13 2012
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/help.html b/docs/epy/help.html
index c1060e7..a01e84a 100644
--- a/docs/epy/help.html
+++ b/docs/epy/help.html
@@ -240,7 +240,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:29 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:22 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/identifier-index.html b/docs/epy/identifier-index.html
index 72e74bf..b80c7f8 100644
--- a/docs/epy/identifier-index.html
+++ b/docs/epy/identifier-index.html
@@ -187,18 +187,24 @@
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.model.BaseModel-class.html">BaseModel</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model-module.html">apiclient.model</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#build">build()</a><br />
+<td width="33%" class="link-index"><a href="apiclient.mimeparse-module.html#best_match">best_match()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.mimeparse-module.html">apiclient.mimeparse</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#build_from_document">build_from_document()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.errors.BatchError-class.html">BatchError</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.errors-module.html">apiclient.errors</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.mimeparse-module.html#best_match">best_match()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.mimeparse-module.html">apiclient.mimeparse</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#build_from_document">build_from_document()</a><br />
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#BODY_PARAMETER_DEFAULT_VALUE">BODY_PARAMETER_DEFAULT_VALUE</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#build">build()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
 </tr>
 </table>
 </td></tr>
@@ -487,47 +493,55 @@
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.gce-module.html">gce</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client-module.html">oauth2client</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file-module.html#get_credential_storage_custom_key">get_credential_storage_custom_key()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file-module.html">oauth2client.multistore_file</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.CredentialsProperty-class.html#get_value_for_datastore">get_value_for_datastore()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.CredentialsProperty-class.html">CredentialsProperty</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="oauth2client.xsrfutil-module.html#generate_token">generate_token()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.xsrfutil-module.html">oauth2client.xsrfutil</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.multistore_file-module.html#get_credential_storage_custom_string_key">get_credential_storage_custom_string_key()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file-module.html">oauth2client.multistore_file</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.FlowProperty-class.html#get_value_for_datastore">get_value_for_datastore()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.FlowProperty-class.html">FlowProperty</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="apiclient.schema.Schemas-class.html#get">get()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.schema.Schemas-class.html">Schemas</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.django_orm.CredentialsField-class.html#get_db_prep_value">get_db_prep_value()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.CredentialsField-class.html">CredentialsField</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaIoBaseUpload-class.html#getbytes">getbytes()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaIoBaseUpload-class.html">MediaIoBaseUpload</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="oauth2client.client.MemoryCache-class.html#get">get()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.MemoryCache-class.html">MemoryCache</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.django_orm.FlowField-class.html#get_db_prep_value">get_db_prep_value()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.FlowField-class.html">FlowField</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.xsrfutil-module.html#generate_token">generate_token()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.xsrfutil-module.html">oauth2client.xsrfutil</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.django_orm.CredentialsField-class.html#get_db_prep_value">get_db_prep_value()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.CredentialsField-class.html">CredentialsField</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaUpload-class.html#getbytes">getbytes()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaUpload-class.html">MediaUpload</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="oauth2client.client.Storage-class.html#get">get()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.Storage-class.html">Storage</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.schema.Schemas-class.html#get">get()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.schema.Schemas-class.html">Schemas</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.django_orm.FlowField-class.html#get_db_prep_value">get_db_prep_value()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.FlowField-class.html">FlowField</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client-module.html#GOOGLE_AUTH_URI">GOOGLE_AUTH_URI</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client-module.html">oauth2client</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="oauth2client.client.MemoryCache-class.html#get">get()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.MemoryCache-class.html">MemoryCache</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.django_orm.CredentialsField-class.html#get_internal_type">get_internal_type()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.CredentialsField-class.html">CredentialsField</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
+<td width="33%" class="link-index"><a href="oauth2client-module.html#GOOGLE_REVOKE_URI">GOOGLE_REVOKE_URI</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client-module.html">oauth2client</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="oauth2client.client.Storage-class.html#get">get()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.Storage-class.html">Storage</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.django_orm.FlowField-class.html#get_internal_type">get_internal_type()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.FlowField-class.html">FlowField</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client-module.html#GOOGLE_TOKEN_URI">GOOGLE_TOKEN_URI</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client-module.html">oauth2client</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.multistore_file-module.html#get_credential_storage">get_credential_storage()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file-module.html">oauth2client.multistore_file</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.django_orm.FlowField-class.html#get_internal_type">get_internal_type()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.FlowField-class.html">FlowField</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.CredentialsProperty-class.html#get_value_for_datastore">get_value_for_datastore()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.CredentialsProperty-class.html">CredentialsProperty</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file-module.html#get_credential_storage_custom_key">get_credential_storage_custom_key()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file-module.html">oauth2client.multistore_file</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.FlowProperty-class.html#get_value_for_datastore">get_value_for_datastore()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.FlowProperty-class.html">FlowProperty</a>)</span></td>
 <td width="33%" class="link-index">&nbsp;</td>
 </tr>
 </table>
@@ -552,20 +566,27 @@
 <span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="apiclient.http.MediaIoBaseUpload-class.html#has_stream">has_stream()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http.MediaIoBaseUpload-class.html">MediaIoBaseUpload</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client-module.html#HAS_OPENSSL">HAS_OPENSSL</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.appengine.OAuth2Decorator-class.html#http">http()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.appengine.OAuth2Decorator-class.html">OAuth2Decorator</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.HttpRequest-class.html">HttpRequest</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
 </tr>
 <tr>
+<td width="33%" class="link-index"><a href="apiclient.http.MediaIoBaseUpload-class.html#has_stream">has_stream()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http.MediaIoBaseUpload-class.html">MediaIoBaseUpload</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#HTTP_PAYLOAD_METHODS">HTTP_PAYLOAD_METHODS</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.http.HttpRequestMock-class.html">HttpRequestMock</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaUpload-class.html#has_stream">has_stream()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaUpload-class.html">MediaUpload</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.errors.HttpError-class.html">HttpError</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.errors-module.html">apiclient.errors</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.http.HttpRequestMock-class.html">HttpRequestMock</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
 </tr>
 </table>
 </td></tr>
@@ -728,79 +749,87 @@
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.crypt-module.html#make_signed_jwt">make_signed_jwt()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.crypt-module.html">oauth2client.crypt</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.http.MediaFileUpload-class.html">MediaFileUpload</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.gce-module.html#META">META</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.gce-module.html">oauth2client.gce</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.CredentialsProperty-class.html#make_value_from_datastore">make_value_from_datastore()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.CredentialsProperty-class.html">CredentialsProperty</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaInMemoryUpload-class.html">MediaInMemoryUpload</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.mimeparse-module.html">mimeparse</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient-module.html">apiclient</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.CredentialsProperty-class.html#make_value_from_datastore">make_value_from_datastore()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.CredentialsProperty-class.html">CredentialsProperty</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.FlowProperty-class.html#make_value_from_datastore">make_value_from_datastore()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.FlowProperty-class.html">FlowProperty</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaIoBaseDownload-class.html">MediaIoBaseDownload</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaIoBaseUpload-class.html#mimetype">mimetype()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaIoBaseUpload-class.html">MediaIoBaseUpload</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.FlowProperty-class.html#make_value_from_datastore">make_value_from_datastore()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.FlowProperty-class.html">FlowProperty</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.model-module.html#makepatch">makepatch()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.model-module.html">apiclient.model</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaIoBaseUpload-class.html">MediaIoBaseUpload</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaUpload-class.html#mimetype">mimetype()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaUpload-class.html">MediaUpload</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="apiclient.model-module.html#makepatch">makepatch()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.model-module.html">apiclient.model</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.SignedJwtAssertionCredentials-class.html#MAX_TOKEN_LIFETIME_SECS">MAX_TOKEN_LIFETIME_SECS</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.SignedJwtAssertionCredentials-class.html">SignedJwtAssertionCredentials</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.model.MediaModel-class.html">MediaModel</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model-module.html">apiclient.model</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.model-module.html">model</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient-module.html">apiclient</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="oauth2client.client.SignedJwtAssertionCredentials-class.html#MAX_TOKEN_LIFETIME_SECS">MAX_TOKEN_LIFETIME_SECS</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.SignedJwtAssertionCredentials-class.html">SignedJwtAssertionCredentials</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.crypt-module.html#MAX_TOKEN_LIFETIME_SECS">MAX_TOKEN_LIFETIME_SECS</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.crypt-module.html">oauth2client.crypt</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaUpload-class.html">MediaUpload</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.model.Model-class.html">Model</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model-module.html">apiclient.model</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="oauth2client.crypt-module.html#MAX_TOKEN_LIFETIME_SECS">MAX_TOKEN_LIFETIME_SECS</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.crypt-module.html">oauth2client.crypt</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.http.MediaUploadProgress-class.html">MediaUploadProgress</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#MULTIPLIERS">MULTIPLIERS</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
-</tr>
-<tr>
 <td width="33%" class="link-index"><a href="apiclient.http-module.html#MAX_URI_LENGTH">MAX_URI_LENGTH</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.errors.MediaUploadSizeError-class.html">MediaUploadSizeError</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.errors-module.html">apiclient.errors</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.http.MediaUploadProgress-class.html">MediaUploadProgress</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.multistore_file-module.html">multistore_file</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client-module.html">oauth2client</a>)</span></td>
 </tr>
 <tr>
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#MEDIA_BODY_PARAMETER_DEFAULT_VALUE">MEDIA_BODY_PARAMETER_DEFAULT_VALUE</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.errors.MediaUploadSizeError-class.html">MediaUploadSizeError</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.errors-module.html">apiclient.errors</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaDownloadProgress-class.html">MediaDownloadProgress</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.client.MemoryCache-class.html">MemoryCache</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
 <td width="33%" class="link-index">&nbsp;</td>
 </tr>
-<tr>
-<td width="33%" class="link-index"><a href="apiclient.http.MediaFileUpload-class.html">MediaFileUpload</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.gce-module.html#META">META</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.gce-module.html">oauth2client.gce</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="N">N</a></h2></td>
 <td valign="top">
 <table class="link-index" width="100%" border="1">
 <tr>
+<td width="33%" class="link-index"><a href="oauth2client.appengine-module.html#ndb">ndb</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine-module.html">oauth2client.appengine</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.http.HttpRequest-class.html#next_chunk">next_chunk()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http.HttpRequest-class.html">HttpRequest</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.model.ProtocolBufferModel-class.html#no_content_response">no_content_response()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.model.ProtocolBufferModel-class.html">ProtocolBufferModel</a>)</span></td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaUpload-class.html#new_from_json">new_from_json()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaUpload-class.html">MediaUpload</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaIoBaseDownload-class.html#next_chunk">next_chunk()</a><br />
@@ -831,13 +860,6 @@
 <span class="index-where">(in&nbsp;<a href="apiclient.model.MediaModel-class.html">MediaModel</a>)</span></td>
 <td width="33%" class="link-index">&nbsp;</td>
 </tr>
-<tr>
-<td width="33%" class="link-index"><a href="apiclient.http.HttpRequest-class.html#next_chunk">next_chunk()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http.HttpRequest-class.html">HttpRequest</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.model.ProtocolBufferModel-class.html#no_content_response">no_content_response()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.model.ProtocolBufferModel-class.html">ProtocolBufferModel</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="O">O</a></h2></td>
@@ -890,34 +912,39 @@
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.mimeparse-module.html#parse_media_range">parse_media_range()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.mimeparse-module.html">apiclient.mimeparse</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.schema.Schemas-class.html#prettyPrintSchema">prettyPrintSchema()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.schema.Schemas-class.html">Schemas</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.push-module.html">push</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient-module.html">apiclient</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="apiclient.mimeparse-module.html#parse_mime_type">parse_mime_type()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.mimeparse-module.html">apiclient.mimeparse</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaDownloadProgress-class.html#progress">progress()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaDownloadProgress-class.html">MediaDownloadProgress</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.client.Storage-class.html#put">put()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.Storage-class.html">Storage</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="oauth2client.util-module.html#positional">positional()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.util-module.html">oauth2client.util</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.mimeparse-module.html#parse_mime_type">parse_mime_type()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.mimeparse-module.html">apiclient.mimeparse</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaUploadProgress-class.html#progress">progress()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaUploadProgress-class.html">MediaUploadProgress</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.crypt-module.html#PyCryptoSigner">PyCryptoSigner</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.crypt-module.html">oauth2client.crypt</a>)</span></td>
 </tr>
 <tr>
+<td width="33%" class="link-index"><a href="oauth2client.util-module.html#positional">positional()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.util-module.html">oauth2client.util</a>)</span></td>
+<td width="33%" class="link-index"><a href="google.appengine.ext.db.PropertiedClass-class.html">PropertiedClass</a></td>
+<td width="33%" class="link-index"><a href="oauth2client.crypt-module.html#PyCryptoVerifier">PyCryptoVerifier</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.crypt-module.html">oauth2client.crypt</a>)</span></td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="apiclient.schema.Schemas-class.html#prettyPrintByName">prettyPrintByName()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.schema.Schemas-class.html">Schemas</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.model.ProtocolBufferModel-class.html">ProtocolBufferModel</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model-module.html">apiclient.model</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.crypt-module.html#PyCryptoVerifier">PyCryptoVerifier</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.crypt-module.html">oauth2client.crypt</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="apiclient.schema.Schemas-class.html#prettyPrintSchema">prettyPrintSchema()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.schema.Schemas-class.html">Schemas</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.push-module.html">push</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient-module.html">apiclient</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
 </tr>
 </table>
 </td></tr>
@@ -941,63 +968,71 @@
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.model.RawModel-class.html">RawModel</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model-module.html">apiclient.model</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.keyring_storage.Storage-class.html#release_lock">release_lock()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.keyring_storage.Storage-class.html">Storage</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html">Resource</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="apiclient.http._StreamSlice-class.html#read">read()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http._StreamSlice-class.html" onclick="show_private();">_StreamSlice</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore._Storage-class.html#release_lock">release_lock()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore._Storage-class.html" onclick="show_private();">_Storage</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.model.BaseModel-class.html#response">response()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model.BaseModel-class.html">BaseModel</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="apiclient.push.Headers-class.html#read">read()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.push.Headers-class.html">Headers</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.http._StreamSlice-class.html#read">read()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http._StreamSlice-class.html" onclick="show_private();">_StreamSlice</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.HttpMock-class.html#request">request()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.HttpMock-class.html">HttpMock</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.model.Model-class.html#response">response()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model.Model-class.html">Model</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="oauth2client.client.Credentials-class.html#refresh">refresh()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.Credentials-class.html">Credentials</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.push.Headers-class.html#read">read()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.push.Headers-class.html">Headers</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.HttpMockSequence-class.html#request">request()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.HttpMockSequence-class.html">HttpMockSequence</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaIoBaseUpload-class.html#resumable">resumable()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaIoBaseUpload-class.html">MediaIoBaseUpload</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#refresh">refresh()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.Credentials-class.html#refresh">refresh()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.Credentials-class.html">Credentials</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.model.BaseModel-class.html#request">request()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model.BaseModel-class.html">BaseModel</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaUpload-class.html#resumable">resumable()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaUpload-class.html">MediaUpload</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="oauth2client.client-module.html#REFRESH_STATUS_CODES">REFRESH_STATUS_CODES</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#refresh">refresh()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.model.Model-class.html#request">request()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model.Model-class.html">Model</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.errors.ResumableUploadError-class.html">ResumableUploadError</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.errors-module.html">apiclient.errors</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="oauth2client.client.Storage-class.html#release_lock">release_lock()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.Storage-class.html">Storage</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client-module.html#REFRESH_STATUS_CODES">REFRESH_STATUS_CODES</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.RequestMockBuilder-class.html">RequestMockBuilder</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.tools-module.html#run">run()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.tools-module.html">oauth2client.tools</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.Credentials-class.html#revoke">revoke()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.Credentials-class.html">Credentials</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="oauth2client.client.Storage-class.html#release_lock">release_lock()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.Storage-class.html">Storage</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#RESERVED_WORDS">RESERVED_WORDS</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#revoke">revoke()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.file.Storage-class.html#release_lock">release_lock()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.file.Storage-class.html">Storage</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#RESERVED_WORDS">RESERVED_WORDS</a><br />
+<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html">Resource</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.tools-module.html#run">run()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.tools-module.html">oauth2client.tools</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="oauth2client.keyring_storage.Storage-class.html#release_lock">release_lock()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.keyring_storage.Storage-class.html">Storage</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery.ResourceMethodParameters-class.html">ResourceMethodParameters</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
 <td width="33%" class="link-index">&nbsp;</td>
 </tr>
@@ -1057,7 +1092,7 @@
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.model.JsonModel-class.html#serialize">serialize()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model.JsonModel-class.html">JsonModel</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#STACK_QUERY_PARAMETERS">STACK_QUERY_PARAMETERS</a><br />
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#STACK_QUERY_PARAMETER_DEFAULT_VALUE">STACK_QUERY_PARAMETER_DEFAULT_VALUE</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.push.Subscription-class.html#subscribe">subscribe()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.push.Subscription-class.html">Subscription</a>)</span></td>
@@ -1065,26 +1100,33 @@
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.model.ProtocolBufferModel-class.html#serialize">serialize()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model.ProtocolBufferModel-class.html">ProtocolBufferModel</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2WebServerFlow-class.html#step1_get_authorize_url">step1_get_authorize_url()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2WebServerFlow-class.html">OAuth2WebServerFlow</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#STACK_QUERY_PARAMETERS">STACK_QUERY_PARAMETERS</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.push.Subscription-class.html">Subscription</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.push-module.html">apiclient.push</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.client.MemoryCache-class.html#set">set()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.MemoryCache-class.html">MemoryCache</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2WebServerFlow-class.html#step2_exchange">step2_exchange()</a><br />
+<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2WebServerFlow-class.html#step1_get_authorize_url">step1_get_authorize_url()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2WebServerFlow-class.html">OAuth2WebServerFlow</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.push-module.html#SUBSCRIPTION_ID">SUBSCRIPTION_ID</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.push-module.html">apiclient.push</a>)</span></td>
 </tr>
 <tr>
+<td width="33%" class="link-index"><a href="apiclient.discovery.ResourceMethodParameters-class.html#set_parameters">set_parameters()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery.ResourceMethodParameters-class.html" onclick="show_private();">ResourceMethodParameters</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2WebServerFlow-class.html#step2_exchange">step2_exchange()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2WebServerFlow-class.html">OAuth2WebServerFlow</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.push.Subscription-class.html#subscription_id">subscription_id()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.push.Subscription-class.html">Subscription</a>)</span></td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#set_store">set_store()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.client.Storage-class.html">Storage</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.push.Subscription-class.html#subscription_id">subscription_id()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.push.Subscription-class.html">Subscription</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http-module.html#set_user_agent">set_user_agent()</a><br />
@@ -1103,48 +1145,49 @@
 <span class="index-where">(in&nbsp;<a href="apiclient.http.HttpRequest-class.html">HttpRequest</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.django_orm.CredentialsField-class.html#to_python">to_python()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.CredentialsField-class.html">CredentialsField</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.push-module.html#TOPIC_URI">TOPIC_URI</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.push-module.html">apiclient.push</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.push.Subscription-class.html#topic_id">topic_id()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.push.Subscription-class.html">Subscription</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaFileUpload-class.html#to_json">to_json()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaFileUpload-class.html">MediaFileUpload</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.django_orm.FlowField-class.html#to_python">to_python()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.FlowField-class.html">FlowField</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.push.Subscription-class.html#topic_uri">topic_uri()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.push.Subscription-class.html">Subscription</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.push-module.html#TOPIC_URI">TOPIC_URI</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.push-module.html">apiclient.push</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaIoBaseUpload-class.html#to_json">to_json()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaIoBaseUpload-class.html">MediaIoBaseUpload</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.schema._SchemaToStruct-class.html#to_str">to_str()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.schema._SchemaToStruct-class.html" onclick="show_private();">_SchemaToStruct</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.http-module.html#tunnel_patch">tunnel_patch()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.push.Subscription-class.html#topic_uri">topic_uri()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.push.Subscription-class.html">Subscription</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaUpload-class.html#to_json">to_json()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaUpload-class.html">MediaUpload</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.TokenRevokeError-class.html">TokenRevokeError</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.http-module.html#tunnel_patch">tunnel_patch()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="oauth2client.client.Credentials-class.html#to_json">to_json()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.Credentials-class.html">Credentials</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.tools-module.html">tools</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client-module.html">oauth2client</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.clientsecrets-module.html#TYPE_INSTALLED">TYPE_INSTALLED</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.clientsecrets-module.html">oauth2client.clientsecrets</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="oauth2client.client.Credentials-class.html#to_json">to_json()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.Credentials-class.html">Credentials</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#to_json">to_json()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.push-module.html#TOPIC_ID">TOPIC_ID</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.push-module.html">apiclient.push</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.clientsecrets-module.html#TYPE_WEB">TYPE_WEB</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.clientsecrets-module.html">oauth2client.clientsecrets</a>)</span></td>
 </tr>
-<tr>
-<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#to_json">to_json()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.push.Subscription-class.html#topic_id">topic_id()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.push.Subscription-class.html">Subscription</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="U">U</a></h2></td>
@@ -1262,167 +1305,175 @@
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.RequestMockBuilder-class.html#__call__">__call__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.RequestMockBuilder-class.html">RequestMockBuilder</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore._Storage-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore._Storage-class.html" onclick="show_private();">_Storage</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_lock">_lock()</a><br />
+<td width="33%" class="link-index"><a href="oauth2client.django_orm.CredentialsField-class.html#__metaclass__">__metaclass__</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.CredentialsField-class.html">CredentialsField</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_locked_json_read">_locked_json_read()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.mimeparse-module.html#__credits__">__credits__</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.mimeparse-module.html">apiclient.mimeparse</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_locked_json_read">_locked_json_read()</a><br />
+<td width="33%" class="link-index"><a href="oauth2client.django_orm.FlowField-class.html#__metaclass__">__metaclass__</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.FlowField-class.html">FlowField</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_locked_json_write">_locked_json_write()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.mimeparse-module.html#__email__">__email__</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.mimeparse-module.html">apiclient.mimeparse</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.django_orm.CredentialsField-class.html#__metaclass__">__metaclass__</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.CredentialsField-class.html">CredentialsField</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_locked_json_write">_locked_json_write()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="apiclient.push.Headers-class.html#__getitem__">__getitem__()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.push.Headers-class.html">Headers</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.django_orm.FlowField-class.html#__metaclass__">__metaclass__</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.FlowField-class.html">FlowField</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.errors.BatchError-class.html#__repr__">__repr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.errors.BatchError-class.html">BatchError</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.model.BaseModel-class.html#_log_request">_log_request()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model.BaseModel-class.html">BaseModel</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#__getstate__">__getstate__()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html">Resource</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.errors.BatchError-class.html#__repr__">__repr__()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.errors.BatchError-class.html">BatchError</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.push.Headers-class.html#__getitem__">__getitem__()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.push.Headers-class.html">Headers</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.errors.HttpError-class.html#__repr__">__repr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.errors.HttpError-class.html">HttpError</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.model.BaseModel-class.html#_log_response">_log_response()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model.BaseModel-class.html">BaseModel</a>)</span></td>
 </tr>
 <tr>
+<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#__getstate__">__getstate__()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.push.Headers-class.html#__setitem__">__setitem__()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.push.Headers-class.html">Headers</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#_media_path_url_from_info">_media_path_url_from_info()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#__getstate__">__getstate__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.errors.HttpError-class.html#__repr__">__repr__()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.errors.HttpError-class.html">HttpError</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#_media_size_to_long">_media_size_to_long()</a><br />
+<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#__setstate__">__setstate__()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#_MEDIA_SIZE_BIT_SHIFTS">_MEDIA_SIZE_BIT_SHIFTS</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html">Resource</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.push.Headers-class.html#__setitem__">__setitem__()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.push.Headers-class.html">Headers</a>)</span></td>
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#__setstate__">__setstate__()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#_media_size_to_long">_media_size_to_long()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="apiclient.discovery.ResourceMethodParameters-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery.ResourceMethodParameters-class.html" onclick="show_private();">ResourceMethodParameters</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.model-module.html#_abstract">_abstract()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.model-module.html">apiclient.model</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html">_MultiStore</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file-module.html">oauth2client.multistore_file</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.errors.BatchError-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.errors.BatchError-class.html">BatchError</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#__setstate__">__setstate__()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client-module.html#_abstract">_abstract()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.multistore_file-module.html#_multistores">_multistores</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file-module.html">oauth2client.multistore_file</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.errors.HttpError-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.errors.HttpError-class.html">HttpError</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#__setstate__">__setstate__()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#_add_basic_methods">_add_basic_methods()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.multistore_file-module.html#_multistores_lock">_multistores_lock</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file-module.html">oauth2client.multistore_file</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.errors.UnexpectedBodyError-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.errors.UnexpectedBodyError-class.html">UnexpectedBodyError</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.model-module.html#_abstract">_abstract()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.model-module.html">apiclient.model</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#_add_nested_resources">_add_nested_resources()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html#_new_id">_new_id()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.errors.UnexpectedMethodError-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.errors.UnexpectedMethodError-class.html">UnexpectedMethodError</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client-module.html#_abstract">_abstract()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#_add_next_methods">_add_next_methods()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.push.Headers-class.html#_normalize_key">_normalize_key()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.push.Headers-class.html">Headers</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#_add_basic_methods">_add_basic_methods()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.util-module.html#_add_query_parameter">_add_query_parameter()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.util-module.html">oauth2client.util</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.locked_file._Opener-class.html">_Opener</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.locked_file-module.html">oauth2client.locked_file</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.HttpMock-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.HttpMock-class.html">HttpMock</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#_add_nested_resources">_add_nested_resources()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.model.BaseModel-class.html#_build_query">_build_query()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.model.BaseModel-class.html">BaseModel</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.client-module.html#_parse_exchange_token_response">_parse_exchange_token_response()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.HttpMockSequence-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.HttpMockSequence-class.html">HttpMockSequence</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#_add_next_methods">_add_next_methods()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine-module.html#_build_state_value">_build_state_value()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine-module.html">oauth2client.appengine</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.appengine-module.html#_parse_state_value">_parse_state_value()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.appengine-module.html">oauth2client.appengine</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.HttpRequest-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.HttpRequest-class.html">HttpRequest</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#_add_query_parameter">_add_query_parameter()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client-module.html#_cached_http">_cached_http</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.locked_file._PosixOpener-class.html#_posix_lockfile">_posix_lockfile()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.locked_file._PosixOpener-class.html" onclick="show_private();">_PosixOpener</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.HttpRequestMock-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.HttpRequestMock-class.html">HttpRequestMock</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.model.BaseModel-class.html#_build_query">_build_query()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.model.BaseModel-class.html">BaseModel</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#_cast">_cast()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.locked_file._PosixOpener-class.html">_PosixOpener</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.locked_file-module.html">oauth2client.locked_file</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaDownloadProgress-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaDownloadProgress-class.html">MediaDownloadProgress</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine-module.html#_build_state_value">_build_state_value()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine-module.html">oauth2client.appengine</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.file.Storage-class.html#_create_file_if_needed">_create_file_if_needed()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.file.Storage-class.html">Storage</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.schema.Schemas-class.html#_prettyPrintByName">_prettyPrintByName()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.schema.Schemas-class.html">Schemas</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaFileUpload-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaFileUpload-class.html">MediaFileUpload</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client-module.html#_cached_http">_cached_http</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_create_file_if_needed">_create_file_if_needed()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.schema.Schemas-class.html#_prettyPrintSchema">_prettyPrintSchema()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.schema.Schemas-class.html">Schemas</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaInMemoryUpload-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaInMemoryUpload-class.html">MediaInMemoryUpload</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#_cast">_cast()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.OAuth2Decorator-class.html#_create_flow">_create_flow()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.OAuth2Decorator-class.html">OAuth2Decorator</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.HttpRequest-class.html#_process_response">_process_response()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.HttpRequest-class.html">HttpRequest</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaIoBaseDownload-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaIoBaseDownload-class.html">MediaIoBaseDownload</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.file.Storage-class.html#_create_file_if_needed">_create_file_if_needed()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.file.Storage-class.html">Storage</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_decode_credential_from_json">_decode_credential_from_json()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.appengine.AppAssertionCredentials-class.html#_refresh">_refresh()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.appengine.AppAssertionCredentials-class.html">AppAssertionCredentials</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaIoBaseUpload-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaIoBaseUpload-class.html">MediaIoBaseUpload</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_create_file_if_needed">_create_file_if_needed()</a><br />
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_delete_credential">_delete_credential()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.client.AccessTokenCredentials-class.html#_refresh">_refresh()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.AccessTokenCredentials-class.html">AccessTokenCredentials</a>)</span></td>
@@ -1430,232 +1481,250 @@
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.MediaUploadProgress-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.MediaUploadProgress-class.html">MediaUploadProgress</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.OAuth2Decorator-class.html#_create_flow">_create_flow()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.OAuth2Decorator-class.html">OAuth2Decorator</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.StorageByKeyName-class.html#_delete_entity">_delete_entity()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.StorageByKeyName-class.html">StorageByKeyName</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#_refresh">_refresh()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http.RequestMockBuilder-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.RequestMockBuilder-class.html">RequestMockBuilder</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_decode_credential_from_json">_decode_credential_from_json()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html#_deserialize_response">_deserialize_response()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.gce.AppAssertionCredentials-class.html#_refresh">_refresh()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.gce.AppAssertionCredentials-class.html">AppAssertionCredentials</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.http._StreamSlice-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http._StreamSlice-class.html" onclick="show_private();">_StreamSlice</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_delete_credential">_delete_credential()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.OAuth2Decorator-class.html#_display_error_message">_display_error_message()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.OAuth2Decorator-class.html">OAuth2Decorator</a>)</span></td>
 <td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html#_refresh_and_apply_credentials">_refresh_and_apply_credentials()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.model.JsonModel-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model.JsonModel-class.html">JsonModel</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.StorageByKeyName-class.html#_delete_entity">_delete_entity()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.StorageByKeyName-class.html">StorageByKeyName</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request">_do_refresh_request()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_refresh_data_cache">_refresh_data_cache()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.model.ProtocolBufferModel-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.model.ProtocolBufferModel-class.html">ProtocolBufferModel</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html#_deserialize_response">_deserialize_response()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine-module.html#_safe_html">_safe_html()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine-module.html">oauth2client.appengine</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#_do_revoke">_do_revoke()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.AccessTokenCredentials-class.html#_revoke">_revoke()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.AccessTokenCredentials-class.html">AccessTokenCredentials</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.push.Channel-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.push.Channel-class.html">Channel</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.OAuth2Decorator-class.html#_display_error_message">_display_error_message()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.OAuth2Decorator-class.html">OAuth2Decorator</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.schema._SchemaToStruct-class.html">_SchemaToStruct</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.schema-module.html">apiclient.schema</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html#_execute">_execute()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.AssertionCredentials-class.html#_revoke">_revoke()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.AssertionCredentials-class.html">AssertionCredentials</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.push.Headers-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.push.Headers-class.html">Headers</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request">_do_refresh_request()</a><br />
+<td width="33%" class="link-index"><a href="oauth2client.client-module.html#_extract_id_token">_extract_id_token()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#_revoke">_revoke()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html#_serialize_request">_serialize_request()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.push.Subscription-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.push.Subscription-class.html">Subscription</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html#_execute">_execute()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#_set_dynamic_attr">_set_dynamic_attr()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.locked_file-module.html#_FcntlOpener">_FcntlOpener</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.locked_file-module.html">oauth2client.locked_file</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine-module.html#_safe_html">_safe_html()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine-module.html">oauth2client.appengine</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.push.WebhookChannel-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.push.WebhookChannel-class.html">WebhookChannel</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client-module.html#_extract_id_token">_extract_id_token()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#_set_service_methods">_set_service_methods()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.mimeparse-module.html#_filter_blank">_filter_blank()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.mimeparse-module.html">apiclient.mimeparse</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.schema._SchemaToStruct-class.html">_SchemaToStruct</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.schema-module.html">apiclient.schema</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.schema.Schemas-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.schema.Schemas-class.html">Schemas</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.locked_file-module.html#_FcntlOpener">_FcntlOpener</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.locked_file-module.html">oauth2client.locked_file</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore._Storage-class.html">_Storage</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#_fix_up_media_upload">_fix_up_media_upload()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html#_serialize_request">_serialize_request()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="apiclient.schema._SchemaToStruct-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.schema._SchemaToStruct-class.html" onclick="show_private();">_SchemaToStruct</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.mimeparse-module.html#_filter_blank">_filter_blank()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.mimeparse-module.html">apiclient.mimeparse</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.http._StreamSlice-class.html">_StreamSlice</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#_fix_up_method_description">_fix_up_method_description()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#_set_dynamic_attr">_set_dynamic_attr()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.appengine.AppAssertionCredentials-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.appengine.AppAssertionCredentials-class.html">AppAssertionCredentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.CredentialsNDBProperty-class.html#_from_base_type">_from_base_type()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.CredentialsNDBProperty-class.html">CredentialsNDBProperty</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.CredentialsNDBProperty-class.html#_to_base_type">_to_base_type()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.CredentialsNDBProperty-class.html">CredentialsNDBProperty</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery-module.html#_fix_up_parameters">_fix_up_parameters()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery-module.html">apiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.discovery.Resource-class.html#_set_service_methods">_set_service_methods()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.appengine.OAuth2Decorator-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.appengine.OAuth2Decorator-class.html">OAuth2Decorator</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client.AssertionCredentials-class.html#_generate_assertion">_generate_assertion()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.AssertionCredentials-class.html">AssertionCredentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.http.MediaUpload-class.html#_to_json">_to_json()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http.MediaUpload-class.html">MediaUpload</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.CredentialsNDBProperty-class.html#_from_base_type">_from_base_type()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.CredentialsNDBProperty-class.html">CredentialsNDBProperty</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore._Storage-class.html">_Storage</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html">OAuth2DecoratorFromClientSecrets</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client.SignedJwtAssertionCredentials-class.html#_generate_assertion">_generate_assertion()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.SignedJwtAssertionCredentials-class.html">SignedJwtAssertionCredentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client.Credentials-class.html#_to_json">_to_json()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.Credentials-class.html">Credentials</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.AssertionCredentials-class.html#_generate_assertion">_generate_assertion()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.AssertionCredentials-class.html">AssertionCredentials</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.http._StreamSlice-class.html">_StreamSlice</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http-module.html">apiclient.http</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.appengine.StorageByKeyName-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.appengine.StorageByKeyName-class.html">StorageByKeyName</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine-module.html#_generate_new_xsrf_secret_key">_generate_new_xsrf_secret_key()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine-module.html">oauth2client.appengine</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.schema._SchemaToStruct-class.html#_to_str_impl">_to_str_impl()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.schema._SchemaToStruct-class.html" onclick="show_private();">_SchemaToStruct</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.SignedJwtAssertionCredentials-class.html#_generate_assertion">_generate_assertion()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.SignedJwtAssertionCredentials-class.html">SignedJwtAssertionCredentials</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.CredentialsNDBProperty-class.html#_to_base_type">_to_base_type()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.CredentialsNDBProperty-class.html">CredentialsNDBProperty</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.client.AccessTokenCredentials-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.AccessTokenCredentials-class.html">AccessTokenCredentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body">_generate_refresh_request_body()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.AssertionCredentials-class.html">AssertionCredentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_unlock">_unlock()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine-module.html#_generate_new_xsrf_secret_key">_generate_new_xsrf_secret_key()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine-module.html">oauth2client.appengine</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.http.MediaUpload-class.html#_to_json">_to_json()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http.MediaUpload-class.html">MediaUpload</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.client.AssertionCredentials-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.AssertionCredentials-class.html">AssertionCredentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_body">_generate_refresh_request_body()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_update_credential">_update_credential()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body">_generate_refresh_request_body()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.AssertionCredentials-class.html">AssertionCredentials</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.Credentials-class.html#_to_json">_to_json()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.Credentials-class.html">Credentials</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.client.MemoryCache-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.MemoryCache-class.html">MemoryCache</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers">_generate_refresh_request_headers()</a><br />
+<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_body">_generate_refresh_request_body()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential">_updateFromCredential()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.schema._SchemaToStruct-class.html#_to_str_impl">_to_str_impl()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.schema._SchemaToStruct-class.html" onclick="show_private();">_SchemaToStruct</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_get_credential">_get_credential()</a><br />
+<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers">_generate_refresh_request_headers()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_unlock">_unlock()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.client-module.html#_urlsafe_b64decode">_urlsafe_b64decode()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.client.OAuth2WebServerFlow-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2WebServerFlow-class.html">OAuth2WebServerFlow</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.StorageByKeyName-class.html#_get_entity">_get_entity()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.StorageByKeyName-class.html">StorageByKeyName</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.crypt-module.html#_urlsafe_b64decode">_urlsafe_b64decode()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.crypt-module.html">oauth2client.crypt</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_get_credential">_get_credential()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_update_credential">_update_credential()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.client.SignedJwtAssertionCredentials-class.html">SignedJwtAssertionCredentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.CredentialsNDBModel-class.html#_get_kind">_get_kind()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.CredentialsNDBModel-class.html">CredentialsNDBModel</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.crypt-module.html#_urlsafe_b64encode">_urlsafe_b64encode()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.crypt-module.html">oauth2client.crypt</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.StorageByKeyName-class.html#_get_entity">_get_entity()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.StorageByKeyName-class.html">StorageByKeyName</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client-module.html#_update_query_params">_update_query_params()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.django_orm.CredentialsField-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.CredentialsField-class.html">CredentialsField</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html#_get_kind">_get_kind()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html">SiteXsrfSecretKeyNDB</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.CredentialsNDBProperty-class.html#_validate">_validate()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.CredentialsNDBProperty-class.html">CredentialsNDBProperty</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.CredentialsNDBModel-class.html#_get_kind">_get_kind()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.CredentialsNDBModel-class.html">CredentialsNDBModel</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential">_updateFromCredential()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.django_orm.FlowField-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.FlowField-class.html">FlowField</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.errors.HttpError-class.html#_get_reason">_get_reason()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.errors.HttpError-class.html">HttpError</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.FlowNDBProperty-class.html#_validate">_validate()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.FlowNDBProperty-class.html">FlowNDBProperty</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html#_get_kind">_get_kind()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html">SiteXsrfSecretKeyNDB</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.client-module.html#_urlsafe_b64decode">_urlsafe_b64decode()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.client-module.html">oauth2client.client</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.django_orm.Storage-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.django_orm.Storage-class.html">Storage</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_get_storage">_get_storage()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.clientsecrets-module.html#_validate_clientsecrets">_validate_clientsecrets()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.clientsecrets-module.html">oauth2client.clientsecrets</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.errors.HttpError-class.html#_get_reason">_get_reason()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.errors.HttpError-class.html">HttpError</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.crypt-module.html#_urlsafe_b64decode">_urlsafe_b64decode()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.crypt-module.html">oauth2client.crypt</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.file.Storage-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.file.Storage-class.html">Storage</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html#_header_to_id">_header_to_id()</a><br />
-<span class="index-where">(in&nbsp;<a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.file.Storage-class.html#_validate_file">_validate_file()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.file.Storage-class.html">Storage</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_get_storage">_get_storage()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.crypt-module.html#_urlsafe_b64encode">_urlsafe_b64encode()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.crypt-module.html">oauth2client.crypt</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.gce.AppAssertionCredentials-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.gce.AppAssertionCredentials-class.html">AppAssertionCredentials</a>)</span></td>
-<td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html#_id_to_header">_id_to_header()</a><br />
+<td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html#_header_to_id">_header_to_id()</a><br />
 <span class="index-where">(in&nbsp;<a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.locked_file-module.html#_Win32Opener">_Win32Opener</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.locked_file-module.html">oauth2client.locked_file</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.CredentialsNDBProperty-class.html#_validate">_validate()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.CredentialsNDBProperty-class.html">CredentialsNDBProperty</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.keyring_storage.Storage-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.keyring_storage.Storage-class.html">Storage</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.appengine.StorageByKeyName-class.html#_is_ndb">_is_ndb()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.StorageByKeyName-class.html">StorageByKeyName</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_write">_write()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
+<td width="33%" class="link-index"><a href="apiclient.http.BatchHttpRequest-class.html#_id_to_header">_id_to_header()</a><br />
+<span class="index-where">(in&nbsp;<a href="apiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.FlowNDBProperty-class.html#_validate">_validate()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.FlowNDBProperty-class.html">FlowNDBProperty</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.locked_file.LockedFile-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.locked_file.LockedFile-class.html">LockedFile</a>)</span></td>
-<td width="33%" class="link-index"><a href="oauth2client.crypt-module.html#_json_encode">_json_encode()</a><br />
-<span class="index-where">(in&nbsp;<a href="oauth2client.crypt-module.html">oauth2client.crypt</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
+<td width="33%" class="link-index"><a href="oauth2client.appengine.StorageByKeyName-class.html#_is_ndb">_is_ndb()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.appengine.StorageByKeyName-class.html">StorageByKeyName</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.clientsecrets-module.html#_validate_clientsecrets">_validate_clientsecrets()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.clientsecrets-module.html">oauth2client.clientsecrets</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="oauth2client.locked_file._Opener-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.locked_file._Opener-class.html" onclick="show_private();">_Opener</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.crypt-module.html#_json_encode">_json_encode()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.crypt-module.html">oauth2client.crypt</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.file.Storage-class.html#_validate_file">_validate_file()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.file.Storage-class.html">Storage</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore._Storage-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore._Storage-class.html" onclick="show_private();">_Storage</a>)</span></td>
 <td width="33%" class="link-index"><a href="oauth2client.clientsecrets-module.html#_loadfile">_loadfile()</a><br />
 <span class="index-where">(in&nbsp;<a href="oauth2client.clientsecrets-module.html">oauth2client.clientsecrets</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
+<td width="33%" class="link-index"><a href="oauth2client.locked_file-module.html#_Win32Opener">_Win32Opener</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.locked_file-module.html">oauth2client.locked_file</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_lock">_lock()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
+<td width="33%" class="link-index"><a href="oauth2client.multistore_file._MultiStore-class.html#_write">_write()</a><br />
+<span class="index-where">(in&nbsp;<a href="oauth2client.multistore_file._MultiStore-class.html" onclick="show_private();">_MultiStore</a>)</span></td>
 </tr>
 </table>
 </td></tr>
@@ -1683,7 +1752,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:29 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:22 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/module-tree.html b/docs/epy/module-tree.html
index 82efb15..2385908 100644
--- a/docs/epy/module-tree.html
+++ b/docs/epy/module-tree.html
@@ -54,7 +54,7 @@
 <ul class="nomargin-top">
     <li> <strong class="uidlink"><a href="apiclient-module.html">apiclient</a></strong>
     <ul>
-    <li> <strong class="uidlink"><a href="apiclient.discovery-module.html">apiclient.discovery</a></strong>: <em class="summary">Client for discovery based APIs</em>    </li>
+    <li> <strong class="uidlink"><a href="apiclient.discovery-module.html">apiclient.discovery</a></strong>: <em class="summary">Client for discovery based APIs.</em>    </li>
     <li> <strong class="uidlink"><a href="apiclient.errors-module.html">apiclient.errors</a></strong>: <em class="summary">Errors for the library.</em>    </li>
     <li> <strong class="uidlink"><a href="apiclient.ext-module.html">apiclient.ext</a></strong>    </li>
     <li> <strong class="uidlink"><a href="apiclient.http-module.html">apiclient.http</a></strong>: <em class="summary">Classes to encapsulate a single HTTP request.</em>    </li>
@@ -106,7 +106,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:29 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:22 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client-module.html b/docs/epy/oauth2client-module.html
index 53b51f0..f223090 100644
--- a/docs/epy/oauth2client-module.html
+++ b/docs/epy/oauth2client-module.html
@@ -54,7 +54,7 @@
 <h1 class="epydoc">Package oauth2client</h1><p class="nomargin-top"><span class="codelink"><a href="oauth2client-pysrc.html">source&nbsp;code</a></span></p>
 <hr />
 <div class="fields">      <p><strong>Version:</strong>
-        1.0
+        1.1
       </p>
 </div><!-- ==================== SUBMODULES ==================== -->
 <a name="section-Submodules"></a>
@@ -93,6 +93,45 @@
 </table>
 
 <br />
+<!-- ==================== VARIABLES ==================== -->
+<a name="section-Variables"></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">Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Variables"
+         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">
+        <a name="GOOGLE_AUTH_URI"></a><span class="summary-name">GOOGLE_AUTH_URI</span> = <code title="'https://accounts.google.com/o/oauth2/auth'">'https://accounts.google.com/o/oauth2/auth'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="GOOGLE_REVOKE_URI"></a><span class="summary-name">GOOGLE_REVOKE_URI</span> = <code title="'https://accounts.google.com/o/oauth2/revoke'">'https://accounts.google.com/o/oauth2/revoke'</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="GOOGLE_TOKEN_URI"></a><span class="summary-name">GOOGLE_TOKEN_URI</span> = <code title="'https://accounts.google.com/o/oauth2/token'">'https://accounts.google.com/o/oauth2/token'</code>
+    </td>
+  </tr>
+</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -116,7 +155,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client-pysrc.html b/docs/epy/oauth2client-pysrc.html
index 25a0874..846861a 100644
--- a/docs/epy/oauth2client-pysrc.html
+++ b/docs/epy/oauth2client-pysrc.html
@@ -52,8 +52,12 @@
 </table>
 <h1 class="epydoc">Source Code for <a href="oauth2client-module.html">Package oauth2client</a></h1>
 <pre class="py-src">
-<a name="L1"></a><tt class="py-lineno">1</tt>  <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt> <tt class="py-docstring">"1.0"</tt> </tt>
-<a name="L2"></a><tt class="py-lineno">2</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<a name="L1"></a><tt class="py-lineno">1</tt>  <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt> <tt class="py-docstring">"1.1"</tt> </tt>
+<a name="L2"></a><tt class="py-lineno">2</tt>  <tt class="py-line"> </tt>
+<a name="L3"></a><tt class="py-lineno">3</tt>  <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable oauth2client.GOOGLE_AUTH_URI=oauth2client-module.html#GOOGLE_AUTH_URI"><a title="oauth2client.GOOGLE_AUTH_URI" class="py-name" href="#" onclick="return doclink('link-0', 'GOOGLE_AUTH_URI', 'link-0');">GOOGLE_AUTH_URI</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'https://accounts.google.com/o/oauth2/auth'</tt> </tt>
+<a name="L4"></a><tt class="py-lineno">4</tt>  <tt class="py-line"><tt id="link-1" class="py-name" targets="Variable oauth2client.GOOGLE_REVOKE_URI=oauth2client-module.html#GOOGLE_REVOKE_URI"><a title="oauth2client.GOOGLE_REVOKE_URI" class="py-name" href="#" onclick="return doclink('link-1', 'GOOGLE_REVOKE_URI', 'link-1');">GOOGLE_REVOKE_URI</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'https://accounts.google.com/o/oauth2/revoke'</tt> </tt>
+<a name="L5"></a><tt class="py-lineno">5</tt>  <tt class="py-line"><tt id="link-2" class="py-name" targets="Variable oauth2client.GOOGLE_TOKEN_URI=oauth2client-module.html#GOOGLE_TOKEN_URI"><a title="oauth2client.GOOGLE_TOKEN_URI" class="py-name" href="#" onclick="return doclink('link-2', 'GOOGLE_TOKEN_URI', 'link-2');">GOOGLE_TOKEN_URI</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'https://accounts.google.com/o/oauth2/token'</tt> </tt>
+<a name="L6"></a><tt class="py-lineno">6</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -83,7 +87,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:49 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.anyjson-module.html b/docs/epy/oauth2client.anyjson-module.html
index 09cc59f..c4a7dfb 100644
--- a/docs/epy/oauth2client.anyjson-module.html
+++ b/docs/epy/oauth2client.anyjson-module.html
@@ -88,7 +88,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.anyjson-pysrc.html b/docs/epy/oauth2client.anyjson-pysrc.html
index 1e88455..0158dbd 100644
--- a/docs/epy/oauth2client.anyjson-pysrc.html
+++ b/docs/epy/oauth2client.anyjson-pysrc.html
@@ -115,7 +115,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:48 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine-module.html b/docs/epy/oauth2client.appengine-module.html
index 5348848..598e682 100644
--- a/docs/epy/oauth2client.appengine-module.html
+++ b/docs/epy/oauth2client.appengine-module.html
@@ -340,6 +340,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
+        <a name="ndb"></a><span class="summary-name">ndb</span> = <code title="None">None</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
         <a name="logger"></a><span class="summary-name">logger</span> = <code title="logging.getLogger(__name__)">logging.getLogger(__name__)</code>
     </td>
   </tr>
@@ -566,7 +573,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine-pysrc.html b/docs/epy/oauth2client.appengine-pysrc.html
index 539e4f8..17ab61f 100644
--- a/docs/epy/oauth2client.appengine-pysrc.html
+++ b/docs/epy/oauth2client.appengine-pysrc.html
@@ -86,150 +86,162 @@
 <a name="L31"></a><tt class="py-lineno"> 31</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">google</tt><tt class="py-op">.</tt><tt id="link-1" class="py-name"><a title="oauth2client.appengine" class="py-name" href="#" onclick="return doclink('link-1', 'appengine', 'link-0');">appengine</a></tt><tt class="py-op">.</tt><tt class="py-name">api</tt> <tt class="py-keyword">import</tt> <tt class="py-name">memcache</tt> </tt>
 <a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">google</tt><tt class="py-op">.</tt><tt id="link-2" class="py-name"><a title="oauth2client.appengine" class="py-name" href="#" onclick="return doclink('link-2', 'appengine', 'link-0');">appengine</a></tt><tt class="py-op">.</tt><tt class="py-name">api</tt> <tt class="py-keyword">import</tt> <tt class="py-name">users</tt> </tt>
 <a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">google</tt><tt class="py-op">.</tt><tt id="link-3" class="py-name"><a title="oauth2client.appengine" class="py-name" href="#" onclick="return doclink('link-3', 'appengine', 'link-0');">appengine</a></tt><tt class="py-op">.</tt><tt id="link-4" class="py-name" targets="Package apiclient.ext=apiclient.ext-module.html"><a title="apiclient.ext" class="py-name" href="#" onclick="return doclink('link-4', 'ext', 'link-4');">ext</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">db</tt> </tt>
-<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">google</tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="oauth2client.appengine" class="py-name" href="#" onclick="return doclink('link-5', 'appengine', 'link-0');">appengine</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name"><a title="apiclient.ext" class="py-name" href="#" onclick="return doclink('link-6', 'ext', 'link-4');">ext</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">ndb</tt> </tt>
-<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">google</tt><tt class="py-op">.</tt><tt id="link-7" class="py-name"><a title="oauth2client.appengine" class="py-name" href="#" onclick="return doclink('link-7', 'appengine', 'link-0');">appengine</a></tt><tt class="py-op">.</tt><tt id="link-8" class="py-name"><a title="apiclient.ext" class="py-name" href="#" onclick="return doclink('link-8', 'ext', 'link-4');">ext</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">webapp</tt> </tt>
-<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">google</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="oauth2client.appengine" class="py-name" href="#" onclick="return doclink('link-9', 'appengine', 'link-0');">appengine</a></tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="apiclient.ext" class="py-name" href="#" onclick="return doclink('link-10', 'ext', 'link-4');">ext</a></tt><tt class="py-op">.</tt><tt class="py-name">webapp</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Module oauth2client.util=oauth2client.util-module.html"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-11', 'util', 'link-11');">util</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">login_required</tt> </tt>
-<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">google</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name"><a title="oauth2client.appengine" class="py-name" href="#" onclick="return doclink('link-12', 'appengine', 'link-0');">appengine</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name"><a title="apiclient.ext" class="py-name" href="#" onclick="return doclink('link-13', 'ext', 'link-4');">ext</a></tt><tt class="py-op">.</tt><tt class="py-name">webapp</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-14', 'util', 'link-11');">util</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">run_wsgi_app</tt> </tt>
-<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-15" class="py-name" targets="Package oauth2client=oauth2client-module.html"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-15', 'oauth2client', 'link-15');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-16" class="py-name" targets="Module oauth2client.clientsecrets=oauth2client.clientsecrets-module.html"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-16', 'clientsecrets', 'link-16');">clientsecrets</a></tt> </tt>
-<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-17" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-17', 'oauth2client', 'link-15');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-18" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-18', 'util', 'link-11');">util</a></tt> </tt>
-<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-19" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-19', 'oauth2client', 'link-15');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-20" class="py-name" targets="Module oauth2client.xsrfutil=oauth2client.xsrfutil-module.html"><a title="oauth2client.xsrfutil" class="py-name" href="#" onclick="return doclink('link-20', 'xsrfutil', 'link-20');">xsrfutil</a></tt> </tt>
-<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-21" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-21', 'oauth2client', 'link-15');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Module oauth2client.anyjson=oauth2client.anyjson-module.html"><a title="oauth2client.anyjson" class="py-name" href="#" onclick="return doclink('link-22', 'anyjson', 'link-22');">anyjson</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">simplejson</tt> </tt>
-<a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-23" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-23', 'oauth2client', 'link-15');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-24" class="py-name" targets="Module oauth2client.client=oauth2client.client-module.html"><a title="oauth2client.client" class="py-name" href="#" onclick="return doclink('link-24', 'client', 'link-24');">client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-25" class="py-name" targets="Class oauth2client.client.AccessTokenRefreshError=oauth2client.client.AccessTokenRefreshError-class.html"><a title="oauth2client.client.AccessTokenRefreshError" class="py-name" href="#" onclick="return doclink('link-25', 'AccessTokenRefreshError', 'link-25');">AccessTokenRefreshError</a></tt> </tt>
-<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-26" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-26', 'oauth2client', 'link-15');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-27" class="py-name"><a title="oauth2client.client" class="py-name" href="#" onclick="return doclink('link-27', 'client', 'link-24');">client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-28" class="py-name" targets="Class oauth2client.client.AssertionCredentials=oauth2client.client.AssertionCredentials-class.html"><a title="oauth2client.client.AssertionCredentials" class="py-name" href="#" onclick="return doclink('link-28', 'AssertionCredentials', 'link-28');">AssertionCredentials</a></tt> </tt>
-<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-29" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-29', 'oauth2client', 'link-15');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-30" class="py-name"><a title="oauth2client.client" class="py-name" href="#" onclick="return doclink('link-30', 'client', 'link-24');">client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-31" class="py-name" targets="Class oauth2client.client.Credentials=oauth2client.client.Credentials-class.html"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-31', 'Credentials', 'link-31');">Credentials</a></tt> </tt>
-<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-32" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-32', 'oauth2client', 'link-15');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-33" class="py-name"><a title="oauth2client.client" class="py-name" href="#" onclick="return doclink('link-33', 'client', 'link-24');">client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-34" class="py-name" targets="Class oauth2client.client.Flow=oauth2client.client.Flow-class.html"><a title="oauth2client.client.Flow" class="py-name" href="#" onclick="return doclink('link-34', 'Flow', 'link-34');">Flow</a></tt> </tt>
-<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-35" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-35', 'oauth2client', 'link-15');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-36" class="py-name"><a title="oauth2client.client" class="py-name" href="#" onclick="return doclink('link-36', 'client', 'link-24');">client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-37" class="py-name" targets="Class oauth2client.client.OAuth2WebServerFlow=oauth2client.client.OAuth2WebServerFlow-class.html"><a title="oauth2client.client.OAuth2WebServerFlow" class="py-name" href="#" onclick="return doclink('link-37', 'OAuth2WebServerFlow', 'link-37');">OAuth2WebServerFlow</a></tt> </tt>
-<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-38" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-38', 'oauth2client', 'link-15');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-39" class="py-name"><a title="oauth2client.client" class="py-name" href="#" onclick="return doclink('link-39', 'client', 'link-24');">client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-40" class="py-name" targets="Class oauth2client.client.Storage=oauth2client.client.Storage-class.html,Class oauth2client.django_orm.Storage=oauth2client.django_orm.Storage-class.html,Class oauth2client.file.Storage=oauth2client.file.Storage-class.html,Class oauth2client.keyring_storage.Storage=oauth2client.keyring_storage.Storage-class.html"><a title="oauth2client.client.Storage
+<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">google</tt><tt class="py-op">.</tt><tt id="link-5" class="py-name"><a title="oauth2client.appengine" class="py-name" href="#" onclick="return doclink('link-5', 'appengine', 'link-0');">appengine</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name"><a title="apiclient.ext" class="py-name" href="#" onclick="return doclink('link-6', 'ext', 'link-4');">ext</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">webapp</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">google</tt><tt class="py-op">.</tt><tt id="link-7" class="py-name"><a title="oauth2client.appengine" class="py-name" href="#" onclick="return doclink('link-7', 'appengine', 'link-0');">appengine</a></tt><tt class="py-op">.</tt><tt id="link-8" class="py-name"><a title="apiclient.ext" class="py-name" href="#" onclick="return doclink('link-8', 'ext', 'link-4');">ext</a></tt><tt class="py-op">.</tt><tt class="py-name">webapp</tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Module oauth2client.util=oauth2client.util-module.html"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-9', 'util', 'link-9');">util</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">login_required</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">google</tt><tt class="py-op">.</tt><tt id="link-10" class="py-name"><a title="oauth2client.appengine" class="py-name" href="#" onclick="return doclink('link-10', 'appengine', 'link-0');">appengine</a></tt><tt class="py-op">.</tt><tt id="link-11" class="py-name"><a title="apiclient.ext" class="py-name" href="#" onclick="return doclink('link-11', 'ext', 'link-4');">ext</a></tt><tt class="py-op">.</tt><tt class="py-name">webapp</tt><tt class="py-op">.</tt><tt id="link-12" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-12', 'util', 'link-9');">util</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">run_wsgi_app</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-13" class="py-name" targets="Package oauth2client=oauth2client-module.html"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-13', 'oauth2client', 'link-13');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-14" class="py-name" targets="Variable oauth2client.GOOGLE_AUTH_URI=oauth2client-module.html#GOOGLE_AUTH_URI"><a title="oauth2client.GOOGLE_AUTH_URI" class="py-name" href="#" onclick="return doclink('link-14', 'GOOGLE_AUTH_URI', 'link-14');">GOOGLE_AUTH_URI</a></tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-15" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-15', 'oauth2client', 'link-13');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-16" class="py-name" targets="Variable oauth2client.GOOGLE_REVOKE_URI=oauth2client-module.html#GOOGLE_REVOKE_URI"><a title="oauth2client.GOOGLE_REVOKE_URI" class="py-name" href="#" onclick="return doclink('link-16', 'GOOGLE_REVOKE_URI', 'link-16');">GOOGLE_REVOKE_URI</a></tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-17" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-17', 'oauth2client', 'link-13');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-18" class="py-name" targets="Variable oauth2client.GOOGLE_TOKEN_URI=oauth2client-module.html#GOOGLE_TOKEN_URI"><a title="oauth2client.GOOGLE_TOKEN_URI" class="py-name" href="#" onclick="return doclink('link-18', 'GOOGLE_TOKEN_URI', 'link-18');">GOOGLE_TOKEN_URI</a></tt> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-19" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-19', 'oauth2client', 'link-13');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-20" class="py-name" targets="Module oauth2client.clientsecrets=oauth2client.clientsecrets-module.html"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-20', 'clientsecrets', 'link-20');">clientsecrets</a></tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-21" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-21', 'oauth2client', 'link-13');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-22" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-22', 'util', 'link-9');">util</a></tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-23" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-23', 'oauth2client', 'link-13');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-24" class="py-name" targets="Module oauth2client.xsrfutil=oauth2client.xsrfutil-module.html"><a title="oauth2client.xsrfutil" class="py-name" href="#" onclick="return doclink('link-24', 'xsrfutil', 'link-24');">xsrfutil</a></tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-25" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-25', 'oauth2client', 'link-13');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Module oauth2client.anyjson=oauth2client.anyjson-module.html"><a title="oauth2client.anyjson" class="py-name" href="#" onclick="return doclink('link-26', 'anyjson', 'link-26');">anyjson</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">simplejson</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-27" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-27', 'oauth2client', 'link-13');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Module oauth2client.client=oauth2client.client-module.html"><a title="oauth2client.client" class="py-name" href="#" onclick="return doclink('link-28', 'client', 'link-28');">client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-29" class="py-name" targets="Class oauth2client.client.AccessTokenRefreshError=oauth2client.client.AccessTokenRefreshError-class.html"><a title="oauth2client.client.AccessTokenRefreshError" class="py-name" href="#" onclick="return doclink('link-29', 'AccessTokenRefreshError', 'link-29');">AccessTokenRefreshError</a></tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-30" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-30', 'oauth2client', 'link-13');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-31" class="py-name"><a title="oauth2client.client" class="py-name" href="#" onclick="return doclink('link-31', 'client', 'link-28');">client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-32" class="py-name" targets="Class oauth2client.client.AssertionCredentials=oauth2client.client.AssertionCredentials-class.html"><a title="oauth2client.client.AssertionCredentials" class="py-name" href="#" onclick="return doclink('link-32', 'AssertionCredentials', 'link-32');">AssertionCredentials</a></tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-33" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-33', 'oauth2client', 'link-13');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-34" class="py-name"><a title="oauth2client.client" class="py-name" href="#" onclick="return doclink('link-34', 'client', 'link-28');">client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-35" class="py-name" targets="Class oauth2client.client.Credentials=oauth2client.client.Credentials-class.html"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-35', 'Credentials', 'link-35');">Credentials</a></tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-36" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-36', 'oauth2client', 'link-13');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="oauth2client.client" class="py-name" href="#" onclick="return doclink('link-37', 'client', 'link-28');">client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-38" class="py-name" targets="Class oauth2client.client.Flow=oauth2client.client.Flow-class.html"><a title="oauth2client.client.Flow" class="py-name" href="#" onclick="return doclink('link-38', 'Flow', 'link-38');">Flow</a></tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-39" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-39', 'oauth2client', 'link-13');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-40" class="py-name"><a title="oauth2client.client" class="py-name" href="#" onclick="return doclink('link-40', 'client', 'link-28');">client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-41" class="py-name" targets="Class oauth2client.client.OAuth2WebServerFlow=oauth2client.client.OAuth2WebServerFlow-class.html"><a title="oauth2client.client.OAuth2WebServerFlow" class="py-name" href="#" onclick="return doclink('link-41', 'OAuth2WebServerFlow', 'link-41');">OAuth2WebServerFlow</a></tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-42" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-42', 'oauth2client', 'link-13');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-43" class="py-name"><a title="oauth2client.client" class="py-name" href="#" onclick="return doclink('link-43', 'client', 'link-28');">client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-44" class="py-name" targets="Class oauth2client.client.Storage=oauth2client.client.Storage-class.html,Class oauth2client.django_orm.Storage=oauth2client.django_orm.Storage-class.html,Class oauth2client.file.Storage=oauth2client.file.Storage-class.html,Class oauth2client.keyring_storage.Storage=oauth2client.keyring_storage.Storage-class.html"><a title="oauth2client.client.Storage
 oauth2client.django_orm.Storage
 oauth2client.file.Storage
-oauth2client.keyring_storage.Storage" class="py-name" href="#" onclick="return doclink('link-40', 'Storage', 'link-40');">Storage</a></tt> </tt>
-<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line"> </tt>
-<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line"><tt id="link-41" class="py-name" targets="Variable apiclient.discovery.logger=apiclient.discovery-module.html#logger,Variable oauth2client.appengine.logger=oauth2client.appengine-module.html#logger,Variable oauth2client.client.logger=oauth2client.client-module.html#logger,Variable oauth2client.crypt.logger=oauth2client.crypt-module.html#logger,Variable oauth2client.gce.logger=oauth2client.gce-module.html#logger,Variable oauth2client.locked_file.logger=oauth2client.locked_file-module.html#logger,Variable oauth2client.multistore_file.logger=oauth2client.multistore_file-module.html#logger,Variable oauth2client.util.logger=oauth2client.util-module.html#logger"><a title="apiclient.discovery.logger
+oauth2client.keyring_storage.Storage" class="py-name" href="#" onclick="return doclink('link-44', 'Storage', 'link-44');">Storage</a></tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line"><tt class="py-comment"># TODO(dhermes): Resolve import issue.</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line"><tt class="py-comment"># This is a temporary fix for a Google internal issue.</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt class="py-name">google</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="oauth2client.appengine" class="py-name" href="#" onclick="return doclink('link-45', 'appengine', 'link-0');">appengine</a></tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="apiclient.ext" class="py-name" href="#" onclick="return doclink('link-46', 'ext', 'link-4');">ext</a></tt> <tt class="py-keyword">import</tt> <tt id="link-47" class="py-name" targets="Variable oauth2client.appengine.ndb=oauth2client.appengine-module.html#ndb"><a title="oauth2client.appengine.ndb" class="py-name" href="#" onclick="return doclink('link-47', 'ndb', 'link-47');">ndb</a></tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line">  <tt id="link-48" class="py-name"><a title="oauth2client.appengine.ndb" class="py-name" href="#" onclick="return doclink('link-48', 'ndb', 'link-47');">ndb</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line"> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"><tt id="link-49" class="py-name" targets="Variable apiclient.discovery.logger=apiclient.discovery-module.html#logger,Variable oauth2client.appengine.logger=oauth2client.appengine-module.html#logger,Variable oauth2client.client.logger=oauth2client.client-module.html#logger,Variable oauth2client.crypt.logger=oauth2client.crypt-module.html#logger,Variable oauth2client.gce.logger=oauth2client.gce-module.html#logger,Variable oauth2client.locked_file.logger=oauth2client.locked_file-module.html#logger,Variable oauth2client.multistore_file.logger=oauth2client.multistore_file-module.html#logger,Variable oauth2client.util.logger=oauth2client.util-module.html#logger"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-41', 'logger', 'link-41');">logger</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
-<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"> </tt>
-<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line"><tt id="link-42" class="py-name" targets="Variable oauth2client.appengine.OAUTH2CLIENT_NAMESPACE=oauth2client.appengine-module.html#OAUTH2CLIENT_NAMESPACE"><a title="oauth2client.appengine.OAUTH2CLIENT_NAMESPACE" class="py-name" href="#" onclick="return doclink('link-42', 'OAUTH2CLIENT_NAMESPACE', 'link-42');">OAUTH2CLIENT_NAMESPACE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'oauth2client#ns'</tt> </tt>
-<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line"> </tt>
-<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"><tt id="link-43" class="py-name" targets="Variable oauth2client.appengine.XSRF_MEMCACHE_ID=oauth2client.appengine-module.html#XSRF_MEMCACHE_ID"><a title="oauth2client.appengine.XSRF_MEMCACHE_ID" class="py-name" href="#" onclick="return doclink('link-43', 'XSRF_MEMCACHE_ID', 'link-43');">XSRF_MEMCACHE_ID</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'xsrf_secret_key'</tt> </tt>
-<a name="_safe_html"></a><div id="_safe_html-def"><a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line"> </tt>
-<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line"> </tt>
-<a name="L56"></a><tt class="py-lineno"> 56</tt> <a class="py-toggle" href="#" id="_safe_html-toggle" onclick="return toggle('_safe_html');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine-module.html#_safe_html">_safe_html</a><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_safe_html-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_safe_html-expanded"><a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line">  <tt class="py-docstring">"""Escape text to make it safe to display.</tt> </tt>
-<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"><tt class="py-docstring">    s: string, The text to escape.</tt> </tt>
-<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"><tt class="py-docstring">    The escaped text as a string.</tt> </tt>
-<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">cgi</tt><tt class="py-op">.</tt><tt class="py-name">escape</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">,</tt> <tt class="py-name">quote</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">"'"</tt><tt class="py-op">,</tt> <tt class="py-string">'&amp;#39;'</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line"> </tt>
-<a name="InvalidClientSecretsError"></a><div id="InvalidClientSecretsError-def"><a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line"> </tt>
-<a name="L68"></a><tt class="py-lineno"> 68</tt> <a class="py-toggle" href="#" id="InvalidClientSecretsError-toggle" onclick="return toggle('InvalidClientSecretsError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.InvalidClientSecretsError-class.html">InvalidClientSecretsError</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="InvalidClientSecretsError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="InvalidClientSecretsError-expanded"><a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line">  <tt class="py-docstring">"""The client_secrets.json file is malformed or missing required fields."""</tt> </tt>
-</div><a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line"> </tt>
-<a name="InvalidXsrfTokenError"></a><div id="InvalidXsrfTokenError-def"><a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line"> </tt>
-<a name="L72"></a><tt class="py-lineno"> 72</tt> <a class="py-toggle" href="#" id="InvalidXsrfTokenError-toggle" onclick="return toggle('InvalidXsrfTokenError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.InvalidXsrfTokenError-class.html">InvalidXsrfTokenError</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="InvalidXsrfTokenError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="InvalidXsrfTokenError-expanded"><a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line">  <tt class="py-docstring">"""The XSRF token is invalid or expired."""</tt> </tt>
-</div><a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"> </tt>
-<a name="SiteXsrfSecretKey"></a><div id="SiteXsrfSecretKey-def"><a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line"> </tt>
-<a name="L76"></a><tt class="py-lineno"> 76</tt> <a class="py-toggle" href="#" id="SiteXsrfSecretKey-toggle" onclick="return toggle('SiteXsrfSecretKey');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.SiteXsrfSecretKey-class.html">SiteXsrfSecretKey</a><tt class="py-op">(</tt><tt class="py-base-class">db</tt><tt class="py-op">.</tt><tt class="py-base-class">Model</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="SiteXsrfSecretKey-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="SiteXsrfSecretKey-expanded"><a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line">  <tt class="py-docstring">"""Storage for the sites XSRF secret key.</tt> </tt>
-<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"><tt class="py-docstring">  There will only be one instance stored of this model, the one used for the</tt> </tt>
-<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"><tt class="py-docstring">  site.</tt> </tt>
-<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line">  <tt id="link-44" class="py-name" targets="Variable oauth2client.appengine.SiteXsrfSecretKey.secret=oauth2client.appengine.SiteXsrfSecretKey-class.html#secret,Variable oauth2client.appengine.SiteXsrfSecretKeyNDB.secret=oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html#secret"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
-oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-44', 'secret', 'link-44');">secret</a></tt> <tt class="py-op">=</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt class="py-name">StringProperty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line"> </tt>
-<a name="SiteXsrfSecretKeyNDB"></a><div id="SiteXsrfSecretKeyNDB-def"><a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line"> </tt>
-<a name="L85"></a><tt class="py-lineno"> 85</tt> <a class="py-toggle" href="#" id="SiteXsrfSecretKeyNDB-toggle" onclick="return toggle('SiteXsrfSecretKeyNDB');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html">SiteXsrfSecretKeyNDB</a><tt class="py-op">(</tt><tt class="py-base-class">ndb</tt><tt class="py-op">.</tt><tt class="py-base-class">Model</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="SiteXsrfSecretKeyNDB-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="SiteXsrfSecretKeyNDB-expanded"><a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line">  <tt class="py-docstring">"""NDB Model for storage for the sites XSRF secret key.</tt> </tt>
-<a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line"><tt class="py-docstring">  Since this model uses the same kind as SiteXsrfSecretKey, it can be used</tt> </tt>
-<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line"><tt class="py-docstring">  interchangeably. This simply provides an NDB model for interacting with the</tt> </tt>
-<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"><tt class="py-docstring">  same data the DB model interacts with.</tt> </tt>
-<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line"><tt class="py-docstring">  There should only be one instance stored of this model, the one used for the</tt> </tt>
-<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line"><tt class="py-docstring">  site.</tt> </tt>
-<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line">  <tt id="link-45" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
-oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-45', 'secret', 'link-44');">secret</a></tt> <tt class="py-op">=</tt> <tt class="py-name">ndb</tt><tt class="py-op">.</tt><tt class="py-name">StringProperty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line"> </tt>
-<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
-<a name="SiteXsrfSecretKeyNDB._get_kind"></a><div id="SiteXsrfSecretKeyNDB._get_kind-def"><a name="L98"></a><tt class="py-lineno"> 98</tt> <a class="py-toggle" href="#" id="SiteXsrfSecretKeyNDB._get_kind-toggle" onclick="return toggle('SiteXsrfSecretKeyNDB._get_kind');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html#_get_kind">_get_kind</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="SiteXsrfSecretKeyNDB._get_kind-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="SiteXsrfSecretKeyNDB._get_kind-expanded"><a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line">    <tt class="py-docstring">"""Return the kind name for this class."""</tt> </tt>
-<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'SiteXsrfSecretKey'</tt> </tt>
-</div></div><a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line"> </tt>
-<a name="_generate_new_xsrf_secret_key"></a><div id="_generate_new_xsrf_secret_key-def"><a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line"> </tt>
-<a name="L103"></a><tt class="py-lineno">103</tt> <a class="py-toggle" href="#" id="_generate_new_xsrf_secret_key-toggle" onclick="return toggle('_generate_new_xsrf_secret_key');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine-module.html#_generate_new_xsrf_secret_key">_generate_new_xsrf_secret_key</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_generate_new_xsrf_secret_key-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_generate_new_xsrf_secret_key-expanded"><a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line">  <tt class="py-docstring">"""Returns a random XSRF secret key.</tt> </tt>
-<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">urandom</tt><tt class="py-op">(</tt><tt class="py-number">16</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">"hex"</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line"> </tt>
-<a name="xsrf_secret_key"></a><div id="xsrf_secret_key-def"><a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line"> </tt>
-<a name="L109"></a><tt class="py-lineno">109</tt> <a class="py-toggle" href="#" id="xsrf_secret_key-toggle" onclick="return toggle('xsrf_secret_key');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine-module.html#xsrf_secret_key">xsrf_secret_key</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="xsrf_secret_key-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="xsrf_secret_key-expanded"><a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line">  <tt class="py-docstring">"""Return the secret key for use for XSRF protection.</tt> </tt>
-<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line"><tt class="py-docstring">  If the Site entity does not have a secret key, this method will also create</tt> </tt>
-<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line"><tt class="py-docstring">  one and persist it.</tt> </tt>
-<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line"><tt class="py-docstring">    The secret key.</tt> </tt>
-<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line">  <tt id="link-46" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
-oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-46', 'secret', 'link-44');">secret</a></tt> <tt class="py-op">=</tt> <tt class="py-name">memcache</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name" targets="Method apiclient.schema.Schemas.get()=apiclient.schema.Schemas-class.html#get,Method oauth2client.client.MemoryCache.get()=oauth2client.client.MemoryCache-class.html#get,Method oauth2client.client.Storage.get()=oauth2client.client.Storage-class.html#get"><a title="apiclient.schema.Schemas.get
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-49', 'logger', 'link-49');">logger</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line"><tt id="link-50" class="py-name" targets="Variable oauth2client.appengine.OAUTH2CLIENT_NAMESPACE=oauth2client.appengine-module.html#OAUTH2CLIENT_NAMESPACE"><a title="oauth2client.appengine.OAUTH2CLIENT_NAMESPACE" class="py-name" href="#" onclick="return doclink('link-50', 'OAUTH2CLIENT_NAMESPACE', 'link-50');">OAUTH2CLIENT_NAMESPACE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'oauth2client#ns'</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line"> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"><tt id="link-51" class="py-name" targets="Variable oauth2client.appengine.XSRF_MEMCACHE_ID=oauth2client.appengine-module.html#XSRF_MEMCACHE_ID"><a title="oauth2client.appengine.XSRF_MEMCACHE_ID" class="py-name" href="#" onclick="return doclink('link-51', 'XSRF_MEMCACHE_ID', 'link-51');">XSRF_MEMCACHE_ID</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'xsrf_secret_key'</tt> </tt>
+<a name="_safe_html"></a><div id="_safe_html-def"><a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line"> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line"> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt> <a class="py-toggle" href="#" id="_safe_html-toggle" onclick="return toggle('_safe_html');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine-module.html#_safe_html">_safe_html</a><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_safe_html-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_safe_html-expanded"><a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line">  <tt class="py-docstring">"""Escape text to make it safe to display.</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line"><tt class="py-docstring">    s: string, The text to escape.</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line"><tt class="py-docstring">    The escaped text as a string.</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">cgi</tt><tt class="py-op">.</tt><tt class="py-name">escape</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">,</tt> <tt class="py-name">quote</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">"'"</tt><tt class="py-op">,</tt> <tt class="py-string">'&amp;#39;'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line"> </tt>
+<a name="InvalidClientSecretsError"></a><div id="InvalidClientSecretsError-def"><a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line"> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt> <a class="py-toggle" href="#" id="InvalidClientSecretsError-toggle" onclick="return toggle('InvalidClientSecretsError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.InvalidClientSecretsError-class.html">InvalidClientSecretsError</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="InvalidClientSecretsError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="InvalidClientSecretsError-expanded"><a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line">  <tt class="py-docstring">"""The client_secrets.json file is malformed or missing required fields."""</tt> </tt>
+</div><a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"> </tt>
+<a name="InvalidXsrfTokenError"></a><div id="InvalidXsrfTokenError-def"><a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line"> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt> <a class="py-toggle" href="#" id="InvalidXsrfTokenError-toggle" onclick="return toggle('InvalidXsrfTokenError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.InvalidXsrfTokenError-class.html">InvalidXsrfTokenError</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="InvalidXsrfTokenError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="InvalidXsrfTokenError-expanded"><a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line">  <tt class="py-docstring">"""The XSRF token is invalid or expired."""</tt> </tt>
+</div><a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line"> </tt>
+<a name="SiteXsrfSecretKey"></a><div id="SiteXsrfSecretKey-def"><a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line"> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt> <a class="py-toggle" href="#" id="SiteXsrfSecretKey-toggle" onclick="return toggle('SiteXsrfSecretKey');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.SiteXsrfSecretKey-class.html">SiteXsrfSecretKey</a><tt class="py-op">(</tt><tt class="py-base-class">db</tt><tt class="py-op">.</tt><tt class="py-base-class">Model</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SiteXsrfSecretKey-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="SiteXsrfSecretKey-expanded"><a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line">  <tt class="py-docstring">"""Storage for the sites XSRF secret key.</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line"><tt class="py-docstring">  There will only be one instance stored of this model, the one used for the</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"><tt class="py-docstring">  site.</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line">  <tt id="link-52" class="py-name" targets="Variable oauth2client.appengine.SiteXsrfSecretKey.secret=oauth2client.appengine.SiteXsrfSecretKey-class.html#secret,Variable oauth2client.appengine.SiteXsrfSecretKeyNDB.secret=oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html#secret"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
+oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-52', 'secret', 'link-52');">secret</a></tt> <tt class="py-op">=</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt class="py-name">StringProperty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line"> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt id="link-53" class="py-name"><a title="oauth2client.appengine.ndb" class="py-name" href="#" onclick="return doclink('link-53', 'ndb', 'link-47');">ndb</a></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="SiteXsrfSecretKeyNDB"></a><div id="SiteXsrfSecretKeyNDB-def"><a name="L95"></a><tt class="py-lineno"> 95</tt> <a class="py-toggle" href="#" id="SiteXsrfSecretKeyNDB-toggle" onclick="return toggle('SiteXsrfSecretKeyNDB');">-</a><tt class="py-line">  <tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html">SiteXsrfSecretKeyNDB</a><tt class="py-op">(</tt><tt class="py-base-class">ndb</tt><tt class="py-op">.</tt><tt class="py-base-class">Model</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SiteXsrfSecretKeyNDB-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="SiteXsrfSecretKeyNDB-expanded"><a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line">    <tt class="py-docstring">"""NDB Model for storage for the sites XSRF secret key.</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line"><tt class="py-docstring">    Since this model uses the same kind as SiteXsrfSecretKey, it can be used</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line"><tt class="py-docstring">    interchangeably. This simply provides an NDB model for interacting with the</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line"><tt class="py-docstring">    same data the DB model interacts with.</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line"><tt class="py-docstring">    There should only be one instance stored of this model, the one used for the</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line"><tt class="py-docstring">    site.</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line">    <tt id="link-54" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
+oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-54', 'secret', 'link-52');">secret</a></tt> <tt class="py-op">=</tt> <tt id="link-55" class="py-name"><a title="oauth2client.appengine.ndb" class="py-name" href="#" onclick="return doclink('link-55', 'ndb', 'link-47');">ndb</a></tt><tt class="py-op">.</tt><tt class="py-name">StringProperty</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line"> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="SiteXsrfSecretKeyNDB._get_kind"></a><div id="SiteXsrfSecretKeyNDB._get_kind-def"><a name="L108"></a><tt class="py-lineno">108</tt> <a class="py-toggle" href="#" id="SiteXsrfSecretKeyNDB._get_kind-toggle" onclick="return toggle('SiteXsrfSecretKeyNDB._get_kind');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html#_get_kind">_get_kind</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SiteXsrfSecretKeyNDB._get_kind-collapsed" style="display:none;" pad="+++" indent="++++++++++"></div><div id="SiteXsrfSecretKeyNDB._get_kind-expanded"><a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line">      <tt class="py-docstring">"""Return the kind name for this class."""</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-string">'SiteXsrfSecretKey'</tt> </tt>
+</div></div><a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line"> </tt>
+<a name="_generate_new_xsrf_secret_key"></a><div id="_generate_new_xsrf_secret_key-def"><a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line"> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt> <a class="py-toggle" href="#" id="_generate_new_xsrf_secret_key-toggle" onclick="return toggle('_generate_new_xsrf_secret_key');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine-module.html#_generate_new_xsrf_secret_key">_generate_new_xsrf_secret_key</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_generate_new_xsrf_secret_key-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_generate_new_xsrf_secret_key-expanded"><a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line">  <tt class="py-docstring">"""Returns a random XSRF secret key.</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">urandom</tt><tt class="py-op">(</tt><tt class="py-number">16</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">"hex"</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line"> </tt>
+<a name="xsrf_secret_key"></a><div id="xsrf_secret_key-def"><a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line"> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt> <a class="py-toggle" href="#" id="xsrf_secret_key-toggle" onclick="return toggle('xsrf_secret_key');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine-module.html#xsrf_secret_key">xsrf_secret_key</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="xsrf_secret_key-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="xsrf_secret_key-expanded"><a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line">  <tt class="py-docstring">"""Return the secret key for use for XSRF protection.</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line"><tt class="py-docstring">  If the Site entity does not have a secret key, this method will also create</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line"><tt class="py-docstring">  one and persist it.</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line"><tt class="py-docstring">    The secret key.</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line">  <tt id="link-56" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
+oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-56', 'secret', 'link-52');">secret</a></tt> <tt class="py-op">=</tt> <tt class="py-name">memcache</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name" targets="Method apiclient.schema.Schemas.get()=apiclient.schema.Schemas-class.html#get,Method oauth2client.client.MemoryCache.get()=oauth2client.client.MemoryCache-class.html#get,Method oauth2client.client.Storage.get()=oauth2client.client.Storage-class.html#get"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-47', 'get', 'link-47');">get</a></tt><tt class="py-op">(</tt><tt id="link-48" class="py-name"><a title="oauth2client.appengine.XSRF_MEMCACHE_ID" class="py-name" href="#" onclick="return doclink('link-48', 'XSRF_MEMCACHE_ID', 'link-43');">XSRF_MEMCACHE_ID</a></tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-49" class="py-name"><a title="oauth2client.appengine.OAUTH2CLIENT_NAMESPACE" class="py-name" href="#" onclick="return doclink('link-49', 'OAUTH2CLIENT_NAMESPACE', 'link-42');">OAUTH2CLIENT_NAMESPACE</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-50" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
-oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-50', 'secret', 'link-44');">secret</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line">    <tt class="py-comment"># Load the one and only instance of SiteXsrfSecretKey.</tt> </tt>
-<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line">    <tt id="link-51" class="py-name" targets="Module apiclient.model=apiclient.model-module.html"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-51', 'model', 'link-51');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-52" class="py-name" targets="Class oauth2client.appengine.SiteXsrfSecretKey=oauth2client.appengine.SiteXsrfSecretKey-class.html"><a title="oauth2client.appengine.SiteXsrfSecretKey" class="py-name" href="#" onclick="return doclink('link-52', 'SiteXsrfSecretKey', 'link-52');">SiteXsrfSecretKey</a></tt><tt class="py-op">.</tt><tt class="py-name">get_or_insert</tt><tt class="py-op">(</tt><tt class="py-name">key_name</tt><tt class="py-op">=</tt><tt class="py-string">'site'</tt><tt class="py-op">)</tt> </tt>
-<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-53" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-53', 'model', 'link-51');">model</a></tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
-oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-54', 'secret', 'link-44');">secret</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line">      <tt id="link-55" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-55', 'model', 'link-51');">model</a></tt><tt class="py-op">.</tt><tt id="link-56" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
-oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-56', 'secret', 'link-44');">secret</a></tt> <tt class="py-op">=</tt> <tt id="link-57" class="py-name" targets="Function oauth2client.appengine._generate_new_xsrf_secret_key()=oauth2client.appengine-module.html#_generate_new_xsrf_secret_key"><a title="oauth2client.appengine._generate_new_xsrf_secret_key" class="py-name" href="#" onclick="return doclink('link-57', '_generate_new_xsrf_secret_key', 'link-57');">_generate_new_xsrf_secret_key</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line">      <tt id="link-58" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-58', 'model', 'link-51');">model</a></tt><tt class="py-op">.</tt><tt id="link-59" class="py-name" targets="Method oauth2client.client.Storage.put()=oauth2client.client.Storage-class.html#put"><a title="oauth2client.client.Storage.put" class="py-name" href="#" onclick="return doclink('link-59', 'put', 'link-59');">put</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line">    <tt id="link-60" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
-oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-60', 'secret', 'link-44');">secret</a></tt> <tt class="py-op">=</tt> <tt id="link-61" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-61', 'model', 'link-51');">model</a></tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
-oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-62', 'secret', 'link-44');">secret</a></tt> </tt>
-<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line">    <tt class="py-name">memcache</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name" targets="Method apiclient.http.BatchHttpRequest.add()=apiclient.http.BatchHttpRequest-class.html#add"><a title="apiclient.http.BatchHttpRequest.add" class="py-name" href="#" onclick="return doclink('link-63', 'add', 'link-63');">add</a></tt><tt class="py-op">(</tt><tt id="link-64" class="py-name"><a title="oauth2client.appengine.XSRF_MEMCACHE_ID" class="py-name" href="#" onclick="return doclink('link-64', 'XSRF_MEMCACHE_ID', 'link-43');">XSRF_MEMCACHE_ID</a></tt><tt class="py-op">,</tt> <tt id="link-65" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
-oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-65', 'secret', 'link-44');">secret</a></tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-66" class="py-name"><a title="oauth2client.appengine.OAUTH2CLIENT_NAMESPACE" class="py-name" href="#" onclick="return doclink('link-66', 'OAUTH2CLIENT_NAMESPACE', 'link-42');">OAUTH2CLIENT_NAMESPACE</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line"> </tt>
-<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-67" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
-oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-67', 'secret', 'link-44');">secret</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line"> </tt>
-<a name="AppAssertionCredentials"></a><div id="AppAssertionCredentials-def"><a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"> </tt>
-<a name="L131"></a><tt class="py-lineno">131</tt> <a class="py-toggle" href="#" id="AppAssertionCredentials-toggle" onclick="return toggle('AppAssertionCredentials');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.AppAssertionCredentials-class.html">AppAssertionCredentials</a><tt class="py-op">(</tt><tt class="py-base-class">AssertionCredentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AppAssertionCredentials-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="AppAssertionCredentials-expanded"><a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">  <tt class="py-docstring">"""Credentials object for App Engine Assertion Grants</tt> </tt>
-<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line"><tt class="py-docstring">  This object will allow an App Engine application to identify itself to Google</tt> </tt>
-<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line"><tt class="py-docstring">  and other OAuth 2.0 servers that can verify assertions. It can be used for the</tt> </tt>
-<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"><tt class="py-docstring">  purpose of accessing data stored under an account assigned to the App Engine</tt> </tt>
-<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line"><tt class="py-docstring">  application itself.</tt> </tt>
-<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line"><tt class="py-docstring">  This credential does not require a flow to instantiate because it represents</tt> </tt>
-<a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line"><tt class="py-docstring">  a two legged flow, and therefore has all of the required information to</tt> </tt>
-<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line"><tt class="py-docstring">  generate and refresh its own access tokens.</tt> </tt>
-<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line"> </tt>
-<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name" targets="Function oauth2client.util.positional()=oauth2client.util-module.html#positional"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-68', 'positional', 'link-68');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="AppAssertionCredentials.__init__"></a><div id="AppAssertionCredentials.__init__-def"><a name="L145"></a><tt class="py-lineno">145</tt> <a class="py-toggle" href="#" id="AppAssertionCredentials.__init__-toggle" onclick="return toggle('AppAssertionCredentials.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.AppAssertionCredentials-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">scope</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AppAssertionCredentials.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="AppAssertionCredentials.__init__-expanded"><a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for AppAssertionCredentials</tt> </tt>
-<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line"><tt class="py-docstring">      scope: string or iterable of strings, scope(s) of the credentials being</tt> </tt>
-<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line"><tt class="py-docstring">        requested.</tt> </tt>
-<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt> <tt class="py-op">=</tt> <tt id="link-69" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-69', 'util', 'link-11');">util</a></tt><tt class="py-op">.</tt><tt id="link-70" class="py-name" targets="Function oauth2client.util.scopes_to_string()=oauth2client.util-module.html#scopes_to_string"><a title="oauth2client.util.scopes_to_string" class="py-name" href="#" onclick="return doclink('link-70', 'scopes_to_string', 'link-70');">scopes_to_string</a></tt><tt class="py-op">(</tt><tt class="py-name">scope</tt><tt class="py-op">)</tt> </tt>
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-57', 'get', 'link-57');">get</a></tt><tt class="py-op">(</tt><tt id="link-58" class="py-name"><a title="oauth2client.appengine.XSRF_MEMCACHE_ID" class="py-name" href="#" onclick="return doclink('link-58', 'XSRF_MEMCACHE_ID', 'link-51');">XSRF_MEMCACHE_ID</a></tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-59" class="py-name"><a title="oauth2client.appengine.OAUTH2CLIENT_NAMESPACE" class="py-name" href="#" onclick="return doclink('link-59', 'OAUTH2CLIENT_NAMESPACE', 'link-50');">OAUTH2CLIENT_NAMESPACE</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-60" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
+oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-60', 'secret', 'link-52');">secret</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line">    <tt class="py-comment"># Load the one and only instance of SiteXsrfSecretKey.</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line">    <tt id="link-61" class="py-name" targets="Module apiclient.model=apiclient.model-module.html"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-61', 'model', 'link-61');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-62" class="py-name" targets="Class oauth2client.appengine.SiteXsrfSecretKey=oauth2client.appengine.SiteXsrfSecretKey-class.html"><a title="oauth2client.appengine.SiteXsrfSecretKey" class="py-name" href="#" onclick="return doclink('link-62', 'SiteXsrfSecretKey', 'link-62');">SiteXsrfSecretKey</a></tt><tt class="py-op">.</tt><tt class="py-name">get_or_insert</tt><tt class="py-op">(</tt><tt class="py-name">key_name</tt><tt class="py-op">=</tt><tt class="py-string">'site'</tt><tt class="py-op">)</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-63" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-63', 'model', 'link-61');">model</a></tt><tt class="py-op">.</tt><tt id="link-64" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
+oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-64', 'secret', 'link-52');">secret</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line">      <tt id="link-65" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-65', 'model', 'link-61');">model</a></tt><tt class="py-op">.</tt><tt id="link-66" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
+oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-66', 'secret', 'link-52');">secret</a></tt> <tt class="py-op">=</tt> <tt id="link-67" class="py-name" targets="Function oauth2client.appengine._generate_new_xsrf_secret_key()=oauth2client.appengine-module.html#_generate_new_xsrf_secret_key"><a title="oauth2client.appengine._generate_new_xsrf_secret_key" class="py-name" href="#" onclick="return doclink('link-67', '_generate_new_xsrf_secret_key', 'link-67');">_generate_new_xsrf_secret_key</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line">      <tt id="link-68" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-68', 'model', 'link-61');">model</a></tt><tt class="py-op">.</tt><tt id="link-69" class="py-name" targets="Method oauth2client.client.Storage.put()=oauth2client.client.Storage-class.html#put"><a title="oauth2client.client.Storage.put" class="py-name" href="#" onclick="return doclink('link-69', 'put', 'link-69');">put</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line">    <tt id="link-70" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
+oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-70', 'secret', 'link-52');">secret</a></tt> <tt class="py-op">=</tt> <tt id="link-71" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-71', 'model', 'link-61');">model</a></tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
+oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-72', 'secret', 'link-52');">secret</a></tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line">    <tt class="py-name">memcache</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name" targets="Method apiclient.http.BatchHttpRequest.add()=apiclient.http.BatchHttpRequest-class.html#add"><a title="apiclient.http.BatchHttpRequest.add" class="py-name" href="#" onclick="return doclink('link-73', 'add', 'link-73');">add</a></tt><tt class="py-op">(</tt><tt id="link-74" class="py-name"><a title="oauth2client.appengine.XSRF_MEMCACHE_ID" class="py-name" href="#" onclick="return doclink('link-74', 'XSRF_MEMCACHE_ID', 'link-51');">XSRF_MEMCACHE_ID</a></tt><tt class="py-op">,</tt> <tt id="link-75" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
+oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-75', 'secret', 'link-52');">secret</a></tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-76" class="py-name"><a title="oauth2client.appengine.OAUTH2CLIENT_NAMESPACE" class="py-name" href="#" onclick="return doclink('link-76', 'OAUTH2CLIENT_NAMESPACE', 'link-50');">OAUTH2CLIENT_NAMESPACE</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line"> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-77" class="py-name"><a title="oauth2client.appengine.SiteXsrfSecretKey.secret
+oauth2client.appengine.SiteXsrfSecretKeyNDB.secret" class="py-name" href="#" onclick="return doclink('link-77', 'secret', 'link-52');">secret</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line"> </tt>
+<a name="AppAssertionCredentials"></a><div id="AppAssertionCredentials-def"><a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line"> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt> <a class="py-toggle" href="#" id="AppAssertionCredentials-toggle" onclick="return toggle('AppAssertionCredentials');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.AppAssertionCredentials-class.html">AppAssertionCredentials</a><tt class="py-op">(</tt><tt class="py-base-class">AssertionCredentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AppAssertionCredentials-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="AppAssertionCredentials-expanded"><a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line">  <tt class="py-docstring">"""Credentials object for App Engine Assertion Grants</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line"><tt class="py-docstring">  This object will allow an App Engine application to identify itself to Google</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line"><tt class="py-docstring">  and other OAuth 2.0 servers that can verify assertions. It can be used for the</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line"><tt class="py-docstring">  purpose of accessing data stored under an account assigned to the App Engine</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line"><tt class="py-docstring">  application itself.</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line"><tt class="py-docstring">  This credential does not require a flow to instantiate because it represents</tt> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line"><tt class="py-docstring">  a two legged flow, and therefore has all of the required information to</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line"><tt class="py-docstring">  generate and refresh its own access tokens.</tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
 <a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line"> </tt>
-<a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-71" class="py-name" targets="Class oauth2client.appengine.AppAssertionCredentials=oauth2client.appengine.AppAssertionCredentials-class.html,Class oauth2client.gce.AppAssertionCredentials=oauth2client.gce.AppAssertionCredentials-class.html"><a title="oauth2client.appengine.AppAssertionCredentials
-oauth2client.gce.AppAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-71', 'AppAssertionCredentials', 'link-71');">AppAssertionCredentials</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
+<a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name" targets="Function oauth2client.util.positional()=oauth2client.util-module.html#positional"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-78', 'positional', 'link-78');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="AppAssertionCredentials.__init__"></a><div id="AppAssertionCredentials.__init__-def"><a name="L155"></a><tt class="py-lineno">155</tt> <a class="py-toggle" href="#" id="AppAssertionCredentials.__init__-toggle" onclick="return toggle('AppAssertionCredentials.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.AppAssertionCredentials-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">scope</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AppAssertionCredentials.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="AppAssertionCredentials.__init__-expanded"><a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for AppAssertionCredentials</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line"><tt class="py-docstring">      scope: string or iterable of strings, scope(s) of the credentials being</tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line"><tt class="py-docstring">        requested.</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt> <tt class="py-op">=</tt> <tt id="link-79" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-79', 'util', 'link-9');">util</a></tt><tt class="py-op">.</tt><tt id="link-80" class="py-name" targets="Function oauth2client.util.scopes_to_string()=oauth2client.util-module.html#scopes_to_string"><a title="oauth2client.util.scopes_to_string" class="py-name" href="#" onclick="return doclink('link-80', 'scopes_to_string', 'link-80');">scopes_to_string</a></tt><tt class="py-op">(</tt><tt class="py-name">scope</tt><tt class="py-op">)</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt>  <tt class="py-line"> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt>  <tt class="py-line">    <tt class="py-comment"># Assertion type is no longer used, but still in the parent class signature.</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-81" class="py-name" targets="Class oauth2client.appengine.AppAssertionCredentials=oauth2client.appengine.AppAssertionCredentials-class.html,Class oauth2client.gce.AppAssertionCredentials=oauth2client.gce.AppAssertionCredentials-class.html"><a title="oauth2client.appengine.AppAssertionCredentials
+oauth2client.gce.AppAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-81', 'AppAssertionCredentials', 'link-81');">AppAssertionCredentials</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.discovery.ResourceMethodParameters.__init__()=apiclient.discovery.ResourceMethodParameters-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
 apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
@@ -274,822 +286,853 @@
 oauth2client.locked_file.LockedFile.__init__
 oauth2client.locked_file._Opener.__init__
 oauth2client.multistore_file._MultiStore._Storage.__init__
-oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-72', '__init__', 'link-72');">__init__</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L155"></a><tt class="py-lineno">155</tt>  <tt class="py-line">        <tt class="py-string">'ignored'</tt> <tt class="py-comment"># assertion_type is ignore in this subclass.</tt> </tt>
-<a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line">        <tt class="py-op">)</tt> </tt>
-</div><a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line"> </tt>
-<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
-<a name="AppAssertionCredentials.from_json"></a><div id="AppAssertionCredentials.from_json-def"><a name="L159"></a><tt class="py-lineno">159</tt> <a class="py-toggle" href="#" id="AppAssertionCredentials.from_json-toggle" onclick="return toggle('AppAssertionCredentials.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.AppAssertionCredentials-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">json</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AppAssertionCredentials.from_json-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="AppAssertionCredentials.from_json-expanded"><a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line">    <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name" targets="Function oauth2client.clientsecrets.loads()=oauth2client.clientsecrets-module.html#loads"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-73', 'loads', 'link-73');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">json</tt><tt class="py-op">)</tt> </tt>
-<a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-74" class="py-name"><a title="oauth2client.appengine.AppAssertionCredentials
-oauth2client.gce.AppAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-74', 'AppAssertionCredentials', 'link-71');">AppAssertionCredentials</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'scope'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line"> </tt>
-<a name="AppAssertionCredentials._refresh"></a><div id="AppAssertionCredentials._refresh-def"><a name="L163"></a><tt class="py-lineno">163</tt> <a class="py-toggle" href="#" id="AppAssertionCredentials._refresh-toggle" onclick="return toggle('AppAssertionCredentials._refresh');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.AppAssertionCredentials-class.html#_refresh">_refresh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AppAssertionCredentials._refresh-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="AppAssertionCredentials._refresh-expanded"><a name="L164"></a><tt class="py-lineno">164</tt>  <tt class="py-line">    <tt class="py-docstring">"""Refreshes the access_token.</tt> </tt>
-<a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line"><tt class="py-docstring">    Since the underlying App Engine app_identity implementation does its own</tt> </tt>
-<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line"><tt class="py-docstring">    caching we can skip all the storage hoops and just to a refresh using the</tt> </tt>
-<a name="L168"></a><tt class="py-lineno">168</tt>  <tt class="py-line"><tt class="py-docstring">    API.</tt> </tt>
-<a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line"><tt class="py-docstring">      http_request: callable, a callable that matches the method signature of</tt> </tt>
-<a name="L172"></a><tt class="py-lineno">172</tt>  <tt class="py-line"><tt class="py-docstring">        httplib2.Http.request, used to make the refresh request.</tt> </tt>
-<a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line"><tt class="py-docstring">      AccessTokenRefreshError: When the refresh fails.</tt> </tt>
-<a name="L176"></a><tt class="py-lineno">176</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L178"></a><tt class="py-lineno">178</tt>  <tt class="py-line">      <tt class="py-name">scopes</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line">      <tt class="py-op">(</tt><tt class="py-name">token</tt><tt class="py-op">,</tt> <tt class="py-name">_</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">app_identity</tt><tt class="py-op">.</tt><tt class="py-name">get_access_token</tt><tt class="py-op">(</tt><tt class="py-name">scopes</tt><tt class="py-op">)</tt> </tt>
-<a name="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">app_identity</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name" targets="Class apiclient.errors.Error=apiclient.errors.Error-class.html,Class oauth2client.client.Error=oauth2client.client.Error-class.html,Class oauth2client.clientsecrets.Error=oauth2client.clientsecrets.Error-class.html,Class oauth2client.multistore_file.Error=oauth2client.multistore_file.Error-class.html"><a title="apiclient.errors.Error
+oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-82', '__init__', 'link-82');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line"> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="AppAssertionCredentials.from_json"></a><div id="AppAssertionCredentials.from_json-def"><a name="L168"></a><tt class="py-lineno">168</tt> <a class="py-toggle" href="#" id="AppAssertionCredentials.from_json-toggle" onclick="return toggle('AppAssertionCredentials.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.AppAssertionCredentials-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">json</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AppAssertionCredentials.from_json-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="AppAssertionCredentials.from_json-expanded"><a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line">    <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name" targets="Function oauth2client.clientsecrets.loads()=oauth2client.clientsecrets-module.html#loads"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-83', 'loads', 'link-83');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">json</tt><tt class="py-op">)</tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-84" class="py-name"><a title="oauth2client.appengine.AppAssertionCredentials
+oauth2client.gce.AppAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-84', 'AppAssertionCredentials', 'link-81');">AppAssertionCredentials</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'scope'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line"> </tt>
+<a name="AppAssertionCredentials._refresh"></a><div id="AppAssertionCredentials._refresh-def"><a name="L172"></a><tt class="py-lineno">172</tt> <a class="py-toggle" href="#" id="AppAssertionCredentials._refresh-toggle" onclick="return toggle('AppAssertionCredentials._refresh');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.AppAssertionCredentials-class.html#_refresh">_refresh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AppAssertionCredentials._refresh-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="AppAssertionCredentials._refresh-expanded"><a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line">    <tt class="py-docstring">"""Refreshes the access_token.</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line"><tt class="py-docstring">    Since the underlying App Engine app_identity implementation does its own</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt>  <tt class="py-line"><tt class="py-docstring">    caching we can skip all the storage hoops and just to a refresh using the</tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line"><tt class="py-docstring">    API.</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line"><tt class="py-docstring">      http_request: callable, a callable that matches the method signature of</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line"><tt class="py-docstring">        httplib2.Http.request, used to make the refresh request.</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line"><tt class="py-docstring">      AccessTokenRefreshError: When the refresh fails.</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line">      <tt class="py-name">scopes</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line">      <tt class="py-op">(</tt><tt class="py-name">token</tt><tt class="py-op">,</tt> <tt class="py-name">_</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">app_identity</tt><tt class="py-op">.</tt><tt class="py-name">get_access_token</tt><tt class="py-op">(</tt><tt class="py-name">scopes</tt><tt class="py-op">)</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">app_identity</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name" targets="Class apiclient.errors.Error=apiclient.errors.Error-class.html,Class oauth2client.client.Error=oauth2client.client.Error-class.html,Class oauth2client.clientsecrets.Error=oauth2client.clientsecrets.Error-class.html,Class oauth2client.multistore_file.Error=oauth2client.multistore_file.Error-class.html"><a title="apiclient.errors.Error
 oauth2client.client.Error
 oauth2client.clientsecrets.Error
-oauth2client.multistore_file.Error" class="py-name" href="#" onclick="return doclink('link-75', 'Error', 'link-75');">Error</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
-<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-76" class="py-name"><a title="oauth2client.client.AccessTokenRefreshError" class="py-name" href="#" onclick="return doclink('link-76', 'AccessTokenRefreshError', 'link-25');">AccessTokenRefreshError</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> <tt class="py-op">=</tt> <tt class="py-name">token</tt> </tt>
-</div></div><a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line"> </tt>
-<a name="FlowProperty"></a><div id="FlowProperty-def"><a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line"> </tt>
-<a name="L185"></a><tt class="py-lineno">185</tt> <a class="py-toggle" href="#" id="FlowProperty-toggle" onclick="return toggle('FlowProperty');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.FlowProperty-class.html">FlowProperty</a><tt class="py-op">(</tt><tt class="py-base-class">db</tt><tt class="py-op">.</tt><tt class="py-base-class">Property</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FlowProperty-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="FlowProperty-expanded"><a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line">  <tt class="py-docstring">"""App Engine datastore Property for Flow.</tt> </tt>
-<a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line"><tt class="py-docstring">  Utility property that allows easy storage and retrieval of an</tt> </tt>
-<a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line"><tt class="py-docstring">  oauth2client.Flow"""</tt> </tt>
-<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line"> </tt>
-<a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line">  <tt class="py-comment"># Tell what the user type is.</tt> </tt>
-<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line">  <tt id="link-77" class="py-name" targets="Variable oauth2client.appengine.CredentialsProperty.data_type=oauth2client.appengine.CredentialsProperty-class.html#data_type,Variable oauth2client.appengine.FlowProperty.data_type=oauth2client.appengine.FlowProperty-class.html#data_type"><a title="oauth2client.appengine.CredentialsProperty.data_type
-oauth2client.appengine.FlowProperty.data_type" class="py-name" href="#" onclick="return doclink('link-77', 'data_type', 'link-77');">data_type</a></tt> <tt class="py-op">=</tt> <tt id="link-78" class="py-name"><a title="oauth2client.client.Flow" class="py-name" href="#" onclick="return doclink('link-78', 'Flow', 'link-34');">Flow</a></tt> </tt>
-<a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line"> </tt>
-<a name="L194"></a><tt class="py-lineno">194</tt>  <tt class="py-line">  <tt class="py-comment"># For writing to datastore.</tt> </tt>
-<a name="FlowProperty.get_value_for_datastore"></a><div id="FlowProperty.get_value_for_datastore-def"><a name="L195"></a><tt class="py-lineno">195</tt> <a class="py-toggle" href="#" id="FlowProperty.get_value_for_datastore-toggle" onclick="return toggle('FlowProperty.get_value_for_datastore');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.FlowProperty-class.html#get_value_for_datastore">get_value_for_datastore</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">model_instance</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FlowProperty.get_value_for_datastore-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="FlowProperty.get_value_for_datastore-expanded"><a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line">    <tt class="py-name">flow</tt> <tt class="py-op">=</tt> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-79" class="py-name" targets="Class oauth2client.appengine.FlowProperty=oauth2client.appengine.FlowProperty-class.html"><a title="oauth2client.appengine.FlowProperty" class="py-name" href="#" onclick="return doclink('link-79', 'FlowProperty', 'link-79');">FlowProperty</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L197"></a><tt class="py-lineno">197</tt>  <tt class="py-line">                 <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-80" class="py-name" targets="Method oauth2client.appengine.CredentialsProperty.get_value_for_datastore()=oauth2client.appengine.CredentialsProperty-class.html#get_value_for_datastore,Method oauth2client.appengine.FlowProperty.get_value_for_datastore()=oauth2client.appengine.FlowProperty-class.html#get_value_for_datastore"><a title="oauth2client.appengine.CredentialsProperty.get_value_for_datastore
-oauth2client.appengine.FlowProperty.get_value_for_datastore" class="py-name" href="#" onclick="return doclink('link-80', 'get_value_for_datastore', 'link-80');">get_value_for_datastore</a></tt><tt class="py-op">(</tt><tt class="py-name">model_instance</tt><tt class="py-op">)</tt> </tt>
-<a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt class="py-name">Blob</tt><tt class="py-op">(</tt><tt class="py-name">pickle</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">flow</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line"> </tt>
-<a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line">  <tt class="py-comment"># For reading from datastore.</tt> </tt>
-<a name="FlowProperty.make_value_from_datastore"></a><div id="FlowProperty.make_value_from_datastore-def"><a name="L201"></a><tt class="py-lineno">201</tt> <a class="py-toggle" href="#" id="FlowProperty.make_value_from_datastore-toggle" onclick="return toggle('FlowProperty.make_value_from_datastore');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.FlowProperty-class.html#make_value_from_datastore">make_value_from_datastore</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FlowProperty.make_value_from_datastore-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="FlowProperty.make_value_from_datastore-expanded"><a name="L202"></a><tt class="py-lineno">202</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L203"></a><tt class="py-lineno">203</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L204"></a><tt class="py-lineno">204</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">pickle</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-81', 'loads', 'link-73');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L205"></a><tt class="py-lineno">205</tt>  <tt class="py-line"> </tt>
-<a name="FlowProperty.validate"></a><div id="FlowProperty.validate-def"><a name="L206"></a><tt class="py-lineno">206</tt> <a class="py-toggle" href="#" id="FlowProperty.validate-toggle" onclick="return toggle('FlowProperty.validate');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.FlowProperty-class.html#validate">validate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FlowProperty.validate-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="FlowProperty.validate-expanded"><a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt id="link-82" class="py-name"><a title="oauth2client.client.Flow" class="py-name" href="#" onclick="return doclink('link-82', 'Flow', 'link-34');">Flow</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L208"></a><tt class="py-lineno">208</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt class="py-name">BadValueError</tt><tt class="py-op">(</tt><tt class="py-string">'Property %s must be convertible '</tt> </tt>
-<a name="L209"></a><tt class="py-lineno">209</tt>  <tt class="py-line">                          <tt class="py-string">'to a FlowThreeLegged instance (%s)'</tt> <tt class="py-op">%</tt> </tt>
-<a name="L210"></a><tt class="py-lineno">210</tt>  <tt class="py-line">                          <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L211"></a><tt class="py-lineno">211</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-83" class="py-name"><a title="oauth2client.appengine.FlowProperty" class="py-name" href="#" onclick="return doclink('link-83', 'FlowProperty', 'link-79');">FlowProperty</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name" targets="Method oauth2client.appengine.CredentialsProperty.validate()=oauth2client.appengine.CredentialsProperty-class.html#validate,Method oauth2client.appengine.FlowProperty.validate()=oauth2client.appengine.FlowProperty-class.html#validate"><a title="oauth2client.appengine.CredentialsProperty.validate
-oauth2client.appengine.FlowProperty.validate" class="py-name" href="#" onclick="return doclink('link-84', 'validate', 'link-84');">validate</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L212"></a><tt class="py-lineno">212</tt>  <tt class="py-line"> </tt>
-<a name="FlowProperty.empty"></a><div id="FlowProperty.empty-def"><a name="L213"></a><tt class="py-lineno">213</tt> <a class="py-toggle" href="#" id="FlowProperty.empty-toggle" onclick="return toggle('FlowProperty.empty');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.FlowProperty-class.html#empty">empty</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FlowProperty.empty-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="FlowProperty.empty-expanded"><a name="L214"></a><tt class="py-lineno">214</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-keyword">not</tt> <tt class="py-name">value</tt> </tt>
-</div></div><a name="L215"></a><tt class="py-lineno">215</tt>  <tt class="py-line"> </tt>
-<a name="FlowNDBProperty"></a><div id="FlowNDBProperty-def"><a name="L216"></a><tt class="py-lineno">216</tt>  <tt class="py-line"> </tt>
-<a name="L217"></a><tt class="py-lineno">217</tt> <a class="py-toggle" href="#" id="FlowNDBProperty-toggle" onclick="return toggle('FlowNDBProperty');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.FlowNDBProperty-class.html">FlowNDBProperty</a><tt class="py-op">(</tt><tt class="py-base-class">ndb</tt><tt class="py-op">.</tt><tt class="py-base-class">PickleProperty</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FlowNDBProperty-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="FlowNDBProperty-expanded"><a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line">  <tt class="py-docstring">"""App Engine NDB datastore Property for Flow.</tt> </tt>
-<a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L220"></a><tt class="py-lineno">220</tt>  <tt class="py-line"><tt class="py-docstring">  Serves the same purpose as the DB FlowProperty, but for NDB models. Since</tt> </tt>
-<a name="L221"></a><tt class="py-lineno">221</tt>  <tt class="py-line"><tt class="py-docstring">  PickleProperty inherits from BlobProperty, the underlying representation of</tt> </tt>
-<a name="L222"></a><tt class="py-lineno">222</tt>  <tt class="py-line"><tt class="py-docstring">  the data in the datastore will be the same as in the DB case.</tt> </tt>
-<a name="L223"></a><tt class="py-lineno">223</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line"><tt class="py-docstring">  Utility property that allows easy storage and retrieval of an</tt> </tt>
-<a name="L225"></a><tt class="py-lineno">225</tt>  <tt class="py-line"><tt class="py-docstring">  oauth2client.Flow</tt> </tt>
-<a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L227"></a><tt class="py-lineno">227</tt>  <tt class="py-line"> </tt>
-<a name="FlowNDBProperty._validate"></a><div id="FlowNDBProperty._validate-def"><a name="L228"></a><tt class="py-lineno">228</tt> <a class="py-toggle" href="#" id="FlowNDBProperty._validate-toggle" onclick="return toggle('FlowNDBProperty._validate');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.FlowNDBProperty-class.html#_validate">_validate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FlowNDBProperty._validate-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="FlowNDBProperty._validate-expanded"><a name="L229"></a><tt class="py-lineno">229</tt>  <tt class="py-line">    <tt class="py-docstring">"""Validates a value as a proper Flow object.</tt> </tt>
-<a name="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L231"></a><tt class="py-lineno">231</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L232"></a><tt class="py-lineno">232</tt>  <tt class="py-line"><tt class="py-docstring">      value: A value to be set on the property.</tt> </tt>
+oauth2client.multistore_file.Error" class="py-name" href="#" onclick="return doclink('link-85', 'Error', 'link-85');">Error</a></tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-86" class="py-name"><a title="oauth2client.client.AccessTokenRefreshError" class="py-name" href="#" onclick="return doclink('link-86', 'AccessTokenRefreshError', 'link-29');">AccessTokenRefreshError</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> <tt class="py-op">=</tt> <tt class="py-name">token</tt> </tt>
+</div></div><a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line"> </tt>
+<a name="FlowProperty"></a><div id="FlowProperty-def"><a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line"> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt> <a class="py-toggle" href="#" id="FlowProperty-toggle" onclick="return toggle('FlowProperty');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.FlowProperty-class.html">FlowProperty</a><tt class="py-op">(</tt><tt class="py-base-class">db</tt><tt class="py-op">.</tt><tt class="py-base-class">Property</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="FlowProperty-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="FlowProperty-expanded"><a name="L195"></a><tt class="py-lineno">195</tt>  <tt class="py-line">  <tt class="py-docstring">"""App Engine datastore Property for Flow.</tt> </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt>  <tt class="py-line"><tt class="py-docstring">  Utility property that allows easy storage and retrieval of an</tt> </tt>
+<a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line"><tt class="py-docstring">  oauth2client.Flow"""</tt> </tt>
+<a name="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line"> </tt>
+<a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line">  <tt class="py-comment"># Tell what the user type is.</tt> </tt>
+<a name="L201"></a><tt class="py-lineno">201</tt>  <tt class="py-line">  <tt id="link-87" class="py-name" targets="Variable oauth2client.appengine.CredentialsProperty.data_type=oauth2client.appengine.CredentialsProperty-class.html#data_type,Variable oauth2client.appengine.FlowProperty.data_type=oauth2client.appengine.FlowProperty-class.html#data_type"><a title="oauth2client.appengine.CredentialsProperty.data_type
+oauth2client.appengine.FlowProperty.data_type" class="py-name" href="#" onclick="return doclink('link-87', 'data_type', 'link-87');">data_type</a></tt> <tt class="py-op">=</tt> <tt id="link-88" class="py-name"><a title="oauth2client.client.Flow" class="py-name" href="#" onclick="return doclink('link-88', 'Flow', 'link-38');">Flow</a></tt> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt>  <tt class="py-line"> </tt>
+<a name="L203"></a><tt class="py-lineno">203</tt>  <tt class="py-line">  <tt class="py-comment"># For writing to datastore.</tt> </tt>
+<a name="FlowProperty.get_value_for_datastore"></a><div id="FlowProperty.get_value_for_datastore-def"><a name="L204"></a><tt class="py-lineno">204</tt> <a class="py-toggle" href="#" id="FlowProperty.get_value_for_datastore-toggle" onclick="return toggle('FlowProperty.get_value_for_datastore');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.FlowProperty-class.html#get_value_for_datastore">get_value_for_datastore</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">model_instance</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="FlowProperty.get_value_for_datastore-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="FlowProperty.get_value_for_datastore-expanded"><a name="L205"></a><tt class="py-lineno">205</tt>  <tt class="py-line">    <tt class="py-name">flow</tt> <tt class="py-op">=</tt> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-89" class="py-name" targets="Class oauth2client.appengine.FlowProperty=oauth2client.appengine.FlowProperty-class.html"><a title="oauth2client.appengine.FlowProperty" class="py-name" href="#" onclick="return doclink('link-89', 'FlowProperty', 'link-89');">FlowProperty</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt>  <tt class="py-line">                 <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name" targets="Method oauth2client.appengine.CredentialsProperty.get_value_for_datastore()=oauth2client.appengine.CredentialsProperty-class.html#get_value_for_datastore,Method oauth2client.appengine.FlowProperty.get_value_for_datastore()=oauth2client.appengine.FlowProperty-class.html#get_value_for_datastore"><a title="oauth2client.appengine.CredentialsProperty.get_value_for_datastore
+oauth2client.appengine.FlowProperty.get_value_for_datastore" class="py-name" href="#" onclick="return doclink('link-90', 'get_value_for_datastore', 'link-90');">get_value_for_datastore</a></tt><tt class="py-op">(</tt><tt class="py-name">model_instance</tt><tt class="py-op">)</tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt class="py-name">Blob</tt><tt class="py-op">(</tt><tt class="py-name">pickle</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">flow</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L208"></a><tt class="py-lineno">208</tt>  <tt class="py-line"> </tt>
+<a name="L209"></a><tt class="py-lineno">209</tt>  <tt class="py-line">  <tt class="py-comment"># For reading from datastore.</tt> </tt>
+<a name="FlowProperty.make_value_from_datastore"></a><div id="FlowProperty.make_value_from_datastore-def"><a name="L210"></a><tt class="py-lineno">210</tt> <a class="py-toggle" href="#" id="FlowProperty.make_value_from_datastore-toggle" onclick="return toggle('FlowProperty.make_value_from_datastore');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.FlowProperty-class.html#make_value_from_datastore">make_value_from_datastore</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="FlowProperty.make_value_from_datastore-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="FlowProperty.make_value_from_datastore-expanded"><a name="L211"></a><tt class="py-lineno">211</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L213"></a><tt class="py-lineno">213</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">pickle</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-91', 'loads', 'link-83');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L214"></a><tt class="py-lineno">214</tt>  <tt class="py-line"> </tt>
+<a name="FlowProperty.validate"></a><div id="FlowProperty.validate-def"><a name="L215"></a><tt class="py-lineno">215</tt> <a class="py-toggle" href="#" id="FlowProperty.validate-toggle" onclick="return toggle('FlowProperty.validate');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.FlowProperty-class.html#validate">validate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="FlowProperty.validate-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="FlowProperty.validate-expanded"><a name="L216"></a><tt class="py-lineno">216</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt id="link-92" class="py-name"><a title="oauth2client.client.Flow" class="py-name" href="#" onclick="return doclink('link-92', 'Flow', 'link-38');">Flow</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt class="py-name">BadValueError</tt><tt class="py-op">(</tt><tt class="py-string">'Property %s must be convertible '</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line">                          <tt class="py-string">'to a FlowThreeLegged instance (%s)'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line">                          <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L220"></a><tt class="py-lineno">220</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-93" class="py-name"><a title="oauth2client.appengine.FlowProperty" class="py-name" href="#" onclick="return doclink('link-93', 'FlowProperty', 'link-89');">FlowProperty</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name" targets="Method oauth2client.appengine.CredentialsProperty.validate()=oauth2client.appengine.CredentialsProperty-class.html#validate,Method oauth2client.appengine.FlowProperty.validate()=oauth2client.appengine.FlowProperty-class.html#validate"><a title="oauth2client.appengine.CredentialsProperty.validate
+oauth2client.appengine.FlowProperty.validate" class="py-name" href="#" onclick="return doclink('link-94', 'validate', 'link-94');">validate</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L221"></a><tt class="py-lineno">221</tt>  <tt class="py-line"> </tt>
+<a name="FlowProperty.empty"></a><div id="FlowProperty.empty-def"><a name="L222"></a><tt class="py-lineno">222</tt> <a class="py-toggle" href="#" id="FlowProperty.empty-toggle" onclick="return toggle('FlowProperty.empty');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.FlowProperty-class.html#empty">empty</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="FlowProperty.empty-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="FlowProperty.empty-expanded"><a name="L223"></a><tt class="py-lineno">223</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-keyword">not</tt> <tt class="py-name">value</tt> </tt>
+</div></div><a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line"> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt>  <tt class="py-line"> </tt>
+<a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt id="link-95" class="py-name"><a title="oauth2client.appengine.ndb" class="py-name" href="#" onclick="return doclink('link-95', 'ndb', 'link-47');">ndb</a></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="FlowNDBProperty"></a><div id="FlowNDBProperty-def"><a name="L227"></a><tt class="py-lineno">227</tt> <a class="py-toggle" href="#" id="FlowNDBProperty-toggle" onclick="return toggle('FlowNDBProperty');">-</a><tt class="py-line">  <tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.FlowNDBProperty-class.html">FlowNDBProperty</a><tt class="py-op">(</tt><tt class="py-base-class">ndb</tt><tt class="py-op">.</tt><tt class="py-base-class">PickleProperty</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="FlowNDBProperty-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="FlowNDBProperty-expanded"><a name="L228"></a><tt class="py-lineno">228</tt>  <tt class="py-line">    <tt class="py-docstring">"""App Engine NDB datastore Property for Flow.</tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line"><tt class="py-docstring">    Serves the same purpose as the DB FlowProperty, but for NDB models. Since</tt> </tt>
+<a name="L231"></a><tt class="py-lineno">231</tt>  <tt class="py-line"><tt class="py-docstring">    PickleProperty inherits from BlobProperty, the underlying representation of</tt> </tt>
+<a name="L232"></a><tt class="py-lineno">232</tt>  <tt class="py-line"><tt class="py-docstring">    the data in the datastore will be the same as in the DB case.</tt> </tt>
 <a name="L233"></a><tt class="py-lineno">233</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L234"></a><tt class="py-lineno">234</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L235"></a><tt class="py-lineno">235</tt>  <tt class="py-line"><tt class="py-docstring">      TypeError if the value is not an instance of Flow.</tt> </tt>
+<a name="L234"></a><tt class="py-lineno">234</tt>  <tt class="py-line"><tt class="py-docstring">    Utility property that allows easy storage and retrieval of an</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt>  <tt class="py-line"><tt class="py-docstring">    oauth2client.Flow</tt> </tt>
 <a name="L236"></a><tt class="py-lineno">236</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L237"></a><tt class="py-lineno">237</tt>  <tt class="py-line">    <tt id="link-85" class="py-name"><a title="apiclient.discovery.logger
+<a name="L237"></a><tt class="py-lineno">237</tt>  <tt class="py-line"> </tt>
+<a name="FlowNDBProperty._validate"></a><div id="FlowNDBProperty._validate-def"><a name="L238"></a><tt class="py-lineno">238</tt> <a class="py-toggle" href="#" id="FlowNDBProperty._validate-toggle" onclick="return toggle('FlowNDBProperty._validate');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.FlowNDBProperty-class.html#_validate">_validate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="FlowNDBProperty._validate-collapsed" style="display:none;" pad="+++" indent="++++++++++"></div><div id="FlowNDBProperty._validate-expanded"><a name="L239"></a><tt class="py-lineno">239</tt>  <tt class="py-line">      <tt class="py-docstring">"""Validates a value as a proper Flow object.</tt> </tt>
+<a name="L240"></a><tt class="py-lineno">240</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L241"></a><tt class="py-lineno">241</tt>  <tt class="py-line"><tt class="py-docstring">      Args:</tt> </tt>
+<a name="L242"></a><tt class="py-lineno">242</tt>  <tt class="py-line"><tt class="py-docstring">        value: A value to be set on the property.</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt>  <tt class="py-line"><tt class="py-docstring">      Raises:</tt> </tt>
+<a name="L245"></a><tt class="py-lineno">245</tt>  <tt class="py-line"><tt class="py-docstring">        TypeError if the value is not an instance of Flow.</tt> </tt>
+<a name="L246"></a><tt class="py-lineno">246</tt>  <tt class="py-line"><tt class="py-docstring">      """</tt> </tt>
+<a name="L247"></a><tt class="py-lineno">247</tt>  <tt class="py-line">      <tt id="link-96" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-85', 'logger', 'link-41');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'validate: Got type %s'</tt><tt class="py-op">,</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L238"></a><tt class="py-lineno">238</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt id="link-86" class="py-name"><a title="oauth2client.client.Flow" class="py-name" href="#" onclick="return doclink('link-86', 'Flow', 'link-34');">Flow</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L239"></a><tt class="py-lineno">239</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Property %s must be convertible to a flow '</tt> </tt>
-<a name="L240"></a><tt class="py-lineno">240</tt>  <tt class="py-line">                      <tt class="py-string">'instance; received: %s.'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_name</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L241"></a><tt class="py-lineno">241</tt>  <tt class="py-line"> </tt>
-<a name="CredentialsProperty"></a><div id="CredentialsProperty-def"><a name="L242"></a><tt class="py-lineno">242</tt>  <tt class="py-line"> </tt>
-<a name="L243"></a><tt class="py-lineno">243</tt> <a class="py-toggle" href="#" id="CredentialsProperty-toggle" onclick="return toggle('CredentialsProperty');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsProperty-class.html">CredentialsProperty</a><tt class="py-op">(</tt><tt class="py-base-class">db</tt><tt class="py-op">.</tt><tt class="py-base-class">Property</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CredentialsProperty-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="CredentialsProperty-expanded"><a name="L244"></a><tt class="py-lineno">244</tt>  <tt class="py-line">  <tt class="py-docstring">"""App Engine datastore Property for Credentials.</tt> </tt>
-<a name="L245"></a><tt class="py-lineno">245</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L246"></a><tt class="py-lineno">246</tt>  <tt class="py-line"><tt class="py-docstring">  Utility property that allows easy storage and retrieval of</tt> </tt>
-<a name="L247"></a><tt class="py-lineno">247</tt>  <tt class="py-line"><tt class="py-docstring">  oath2client.Credentials</tt> </tt>
-<a name="L248"></a><tt class="py-lineno">248</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L249"></a><tt class="py-lineno">249</tt>  <tt class="py-line"> </tt>
-<a name="L250"></a><tt class="py-lineno">250</tt>  <tt class="py-line">  <tt class="py-comment"># Tell what the user type is.</tt> </tt>
-<a name="L251"></a><tt class="py-lineno">251</tt>  <tt class="py-line">  <tt id="link-87" class="py-name"><a title="oauth2client.appengine.CredentialsProperty.data_type
-oauth2client.appengine.FlowProperty.data_type" class="py-name" href="#" onclick="return doclink('link-87', 'data_type', 'link-77');">data_type</a></tt> <tt class="py-op">=</tt> <tt id="link-88" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-88', 'Credentials', 'link-31');">Credentials</a></tt> </tt>
-<a name="L252"></a><tt class="py-lineno">252</tt>  <tt class="py-line"> </tt>
-<a name="L253"></a><tt class="py-lineno">253</tt>  <tt class="py-line">  <tt class="py-comment"># For writing to datastore.</tt> </tt>
-<a name="CredentialsProperty.get_value_for_datastore"></a><div id="CredentialsProperty.get_value_for_datastore-def"><a name="L254"></a><tt class="py-lineno">254</tt> <a class="py-toggle" href="#" id="CredentialsProperty.get_value_for_datastore-toggle" onclick="return toggle('CredentialsProperty.get_value_for_datastore');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsProperty-class.html#get_value_for_datastore">get_value_for_datastore</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">model_instance</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CredentialsProperty.get_value_for_datastore-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="CredentialsProperty.get_value_for_datastore-expanded"><a name="L255"></a><tt class="py-lineno">255</tt>  <tt class="py-line">    <tt id="link-89" class="py-name"><a title="apiclient.discovery.logger
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-96', 'logger', 'link-49');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'validate: Got type %s'</tt><tt class="py-op">,</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L248"></a><tt class="py-lineno">248</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt id="link-97" class="py-name"><a title="oauth2client.client.Flow" class="py-name" href="#" onclick="return doclink('link-97', 'Flow', 'link-38');">Flow</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L249"></a><tt class="py-lineno">249</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Property %s must be convertible to a flow '</tt> </tt>
+<a name="L250"></a><tt class="py-lineno">250</tt>  <tt class="py-line">                        <tt class="py-string">'instance; received: %s.'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_name</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L251"></a><tt class="py-lineno">251</tt>  <tt class="py-line"> </tt>
+<a name="CredentialsProperty"></a><div id="CredentialsProperty-def"><a name="L252"></a><tt class="py-lineno">252</tt>  <tt class="py-line"> </tt>
+<a name="L253"></a><tt class="py-lineno">253</tt> <a class="py-toggle" href="#" id="CredentialsProperty-toggle" onclick="return toggle('CredentialsProperty');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsProperty-class.html">CredentialsProperty</a><tt class="py-op">(</tt><tt class="py-base-class">db</tt><tt class="py-op">.</tt><tt class="py-base-class">Property</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="CredentialsProperty-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="CredentialsProperty-expanded"><a name="L254"></a><tt class="py-lineno">254</tt>  <tt class="py-line">  <tt class="py-docstring">"""App Engine datastore Property for Credentials.</tt> </tt>
+<a name="L255"></a><tt class="py-lineno">255</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L256"></a><tt class="py-lineno">256</tt>  <tt class="py-line"><tt class="py-docstring">  Utility property that allows easy storage and retrieval of</tt> </tt>
+<a name="L257"></a><tt class="py-lineno">257</tt>  <tt class="py-line"><tt class="py-docstring">  oath2client.Credentials</tt> </tt>
+<a name="L258"></a><tt class="py-lineno">258</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L259"></a><tt class="py-lineno">259</tt>  <tt class="py-line"> </tt>
+<a name="L260"></a><tt class="py-lineno">260</tt>  <tt class="py-line">  <tt class="py-comment"># Tell what the user type is.</tt> </tt>
+<a name="L261"></a><tt class="py-lineno">261</tt>  <tt class="py-line">  <tt id="link-98" class="py-name"><a title="oauth2client.appengine.CredentialsProperty.data_type
+oauth2client.appengine.FlowProperty.data_type" class="py-name" href="#" onclick="return doclink('link-98', 'data_type', 'link-87');">data_type</a></tt> <tt class="py-op">=</tt> <tt id="link-99" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-99', 'Credentials', 'link-35');">Credentials</a></tt> </tt>
+<a name="L262"></a><tt class="py-lineno">262</tt>  <tt class="py-line"> </tt>
+<a name="L263"></a><tt class="py-lineno">263</tt>  <tt class="py-line">  <tt class="py-comment"># For writing to datastore.</tt> </tt>
+<a name="CredentialsProperty.get_value_for_datastore"></a><div id="CredentialsProperty.get_value_for_datastore-def"><a name="L264"></a><tt class="py-lineno">264</tt> <a class="py-toggle" href="#" id="CredentialsProperty.get_value_for_datastore-toggle" onclick="return toggle('CredentialsProperty.get_value_for_datastore');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsProperty-class.html#get_value_for_datastore">get_value_for_datastore</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">model_instance</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="CredentialsProperty.get_value_for_datastore-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="CredentialsProperty.get_value_for_datastore-expanded"><a name="L265"></a><tt class="py-lineno">265</tt>  <tt class="py-line">    <tt id="link-100" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-89', 'logger', 'link-41');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"get: Got type "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">model_instance</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L256"></a><tt class="py-lineno">256</tt>  <tt class="py-line">    <tt class="py-name">cred</tt> <tt class="py-op">=</tt> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-90" class="py-name" targets="Class oauth2client.appengine.CredentialsProperty=oauth2client.appengine.CredentialsProperty-class.html"><a title="oauth2client.appengine.CredentialsProperty" class="py-name" href="#" onclick="return doclink('link-90', 'CredentialsProperty', 'link-90');">CredentialsProperty</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L257"></a><tt class="py-lineno">257</tt>  <tt class="py-line">                 <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="oauth2client.appengine.CredentialsProperty.get_value_for_datastore
-oauth2client.appengine.FlowProperty.get_value_for_datastore" class="py-name" href="#" onclick="return doclink('link-91', 'get_value_for_datastore', 'link-80');">get_value_for_datastore</a></tt><tt class="py-op">(</tt><tt class="py-name">model_instance</tt><tt class="py-op">)</tt> </tt>
-<a name="L258"></a><tt class="py-lineno">258</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">cred</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L259"></a><tt class="py-lineno">259</tt>  <tt class="py-line">      <tt class="py-name">cred</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
-<a name="L260"></a><tt class="py-lineno">260</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L261"></a><tt class="py-lineno">261</tt>  <tt class="py-line">      <tt class="py-name">cred</tt> <tt class="py-op">=</tt> <tt class="py-name">cred</tt><tt class="py-op">.</tt><tt id="link-92" class="py-name" targets="Method apiclient.http.HttpRequest.to_json()=apiclient.http.HttpRequest-class.html#to_json,Method apiclient.http.MediaFileUpload.to_json()=apiclient.http.MediaFileUpload-class.html#to_json,Method apiclient.http.MediaIoBaseUpload.to_json()=apiclient.http.MediaIoBaseUpload-class.html#to_json,Method apiclient.http.MediaUpload.to_json()=apiclient.http.MediaUpload-class.html#to_json,Method oauth2client.client.Credentials.to_json()=oauth2client.client.Credentials-class.html#to_json,Method oauth2client.client.OAuth2Credentials.to_json()=oauth2client.client.OAuth2Credentials-class.html#to_json"><a title="apiclient.http.HttpRequest.to_json
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-100', 'logger', 'link-49');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"get: Got type "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">model_instance</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L266"></a><tt class="py-lineno">266</tt>  <tt class="py-line">    <tt class="py-name">cred</tt> <tt class="py-op">=</tt> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-101" class="py-name" targets="Class oauth2client.appengine.CredentialsProperty=oauth2client.appengine.CredentialsProperty-class.html"><a title="oauth2client.appengine.CredentialsProperty" class="py-name" href="#" onclick="return doclink('link-101', 'CredentialsProperty', 'link-101');">CredentialsProperty</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L267"></a><tt class="py-lineno">267</tt>  <tt class="py-line">                 <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name"><a title="oauth2client.appengine.CredentialsProperty.get_value_for_datastore
+oauth2client.appengine.FlowProperty.get_value_for_datastore" class="py-name" href="#" onclick="return doclink('link-102', 'get_value_for_datastore', 'link-90');">get_value_for_datastore</a></tt><tt class="py-op">(</tt><tt class="py-name">model_instance</tt><tt class="py-op">)</tt> </tt>
+<a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">cred</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line">      <tt class="py-name">cred</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L271"></a><tt class="py-lineno">271</tt>  <tt class="py-line">      <tt class="py-name">cred</tt> <tt class="py-op">=</tt> <tt class="py-name">cred</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name" targets="Method apiclient.http.HttpRequest.to_json()=apiclient.http.HttpRequest-class.html#to_json,Method apiclient.http.MediaFileUpload.to_json()=apiclient.http.MediaFileUpload-class.html#to_json,Method apiclient.http.MediaIoBaseUpload.to_json()=apiclient.http.MediaIoBaseUpload-class.html#to_json,Method apiclient.http.MediaUpload.to_json()=apiclient.http.MediaUpload-class.html#to_json,Method oauth2client.client.Credentials.to_json()=oauth2client.client.Credentials-class.html#to_json,Method oauth2client.client.OAuth2Credentials.to_json()=oauth2client.client.OAuth2Credentials-class.html#to_json"><a title="apiclient.http.HttpRequest.to_json
 apiclient.http.MediaFileUpload.to_json
 apiclient.http.MediaIoBaseUpload.to_json
 apiclient.http.MediaUpload.to_json
 oauth2client.client.Credentials.to_json
-oauth2client.client.OAuth2Credentials.to_json" class="py-name" href="#" onclick="return doclink('link-92', 'to_json', 'link-92');">to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L262"></a><tt class="py-lineno">262</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt class="py-name">Blob</tt><tt class="py-op">(</tt><tt class="py-name">cred</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L263"></a><tt class="py-lineno">263</tt>  <tt class="py-line"> </tt>
-<a name="L264"></a><tt class="py-lineno">264</tt>  <tt class="py-line">  <tt class="py-comment"># For reading from datastore.</tt> </tt>
-<a name="CredentialsProperty.make_value_from_datastore"></a><div id="CredentialsProperty.make_value_from_datastore-def"><a name="L265"></a><tt class="py-lineno">265</tt> <a class="py-toggle" href="#" id="CredentialsProperty.make_value_from_datastore-toggle" onclick="return toggle('CredentialsProperty.make_value_from_datastore');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsProperty-class.html#make_value_from_datastore">make_value_from_datastore</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CredentialsProperty.make_value_from_datastore-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="CredentialsProperty.make_value_from_datastore-expanded"><a name="L266"></a><tt class="py-lineno">266</tt>  <tt class="py-line">    <tt id="link-93" class="py-name"><a title="apiclient.discovery.logger
+oauth2client.client.OAuth2Credentials.to_json" class="py-name" href="#" onclick="return doclink('link-103', 'to_json', 'link-103');">to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L272"></a><tt class="py-lineno">272</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt class="py-name">Blob</tt><tt class="py-op">(</tt><tt class="py-name">cred</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L273"></a><tt class="py-lineno">273</tt>  <tt class="py-line"> </tt>
+<a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line">  <tt class="py-comment"># For reading from datastore.</tt> </tt>
+<a name="CredentialsProperty.make_value_from_datastore"></a><div id="CredentialsProperty.make_value_from_datastore-def"><a name="L275"></a><tt class="py-lineno">275</tt> <a class="py-toggle" href="#" id="CredentialsProperty.make_value_from_datastore-toggle" onclick="return toggle('CredentialsProperty.make_value_from_datastore');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsProperty-class.html#make_value_from_datastore">make_value_from_datastore</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="CredentialsProperty.make_value_from_datastore-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="CredentialsProperty.make_value_from_datastore-expanded"><a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line">    <tt id="link-104" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-93', 'logger', 'link-41');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"make: Got type "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L267"></a><tt class="py-lineno">267</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L271"></a><tt class="py-lineno">271</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L272"></a><tt class="py-lineno">272</tt>  <tt class="py-line">      <tt id="link-94" class="py-name" targets="Variable oauth2client.appengine.CredentialsModel.credentials=oauth2client.appengine.CredentialsModel-class.html#credentials,Variable oauth2client.appengine.CredentialsNDBModel.credentials=oauth2client.appengine.CredentialsNDBModel-class.html#credentials"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-94', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-op">=</tt> <tt id="link-95" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-95', 'Credentials', 'link-31');">Credentials</a></tt><tt class="py-op">.</tt><tt id="link-96" class="py-name" targets="Class Method apiclient.http.MediaUpload.new_from_json()=apiclient.http.MediaUpload-class.html#new_from_json,Class Method oauth2client.client.Credentials.new_from_json()=oauth2client.client.Credentials-class.html#new_from_json"><a title="apiclient.http.MediaUpload.new_from_json
-oauth2client.client.Credentials.new_from_json" class="py-name" href="#" onclick="return doclink('link-96', 'new_from_json', 'link-96');">new_from_json</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
-<a name="L273"></a><tt class="py-lineno">273</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line">      <tt id="link-97" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-97', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L275"></a><tt class="py-lineno">275</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-98" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-98', 'credentials', 'link-94');">credentials</a></tt> </tt>
-</div><a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line"> </tt>
-<a name="CredentialsProperty.validate"></a><div id="CredentialsProperty.validate-def"><a name="L277"></a><tt class="py-lineno">277</tt> <a class="py-toggle" href="#" id="CredentialsProperty.validate-toggle" onclick="return toggle('CredentialsProperty.validate');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsProperty-class.html#validate">validate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CredentialsProperty.validate-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="CredentialsProperty.validate-expanded"><a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line">    <tt class="py-name">value</tt> <tt class="py-op">=</tt> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-99" class="py-name"><a title="oauth2client.appengine.CredentialsProperty" class="py-name" href="#" onclick="return doclink('link-99', 'CredentialsProperty', 'link-90');">CredentialsProperty</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="oauth2client.appengine.CredentialsProperty.validate
-oauth2client.appengine.FlowProperty.validate" class="py-name" href="#" onclick="return doclink('link-100', 'validate', 'link-84');">validate</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
-<a name="L279"></a><tt class="py-lineno">279</tt>  <tt class="py-line">    <tt id="link-101" class="py-name"><a title="apiclient.discovery.logger
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-104', 'logger', 'link-49');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"make: Got type "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L282"></a><tt class="py-lineno">282</tt>  <tt class="py-line">      <tt id="link-105" class="py-name" targets="Variable oauth2client.appengine.CredentialsModel.credentials=oauth2client.appengine.CredentialsModel-class.html#credentials,Variable oauth2client.appengine.CredentialsNDBModel.credentials=oauth2client.appengine.CredentialsNDBModel-class.html#credentials"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-105', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-op">=</tt> <tt id="link-106" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-106', 'Credentials', 'link-35');">Credentials</a></tt><tt class="py-op">.</tt><tt id="link-107" class="py-name" targets="Class Method apiclient.http.MediaUpload.new_from_json()=apiclient.http.MediaUpload-class.html#new_from_json,Class Method oauth2client.client.Credentials.new_from_json()=oauth2client.client.Credentials-class.html#new_from_json"><a title="apiclient.http.MediaUpload.new_from_json
+oauth2client.client.Credentials.new_from_json" class="py-name" href="#" onclick="return doclink('link-107', 'new_from_json', 'link-107');">new_from_json</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
+<a name="L283"></a><tt class="py-lineno">283</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
+<a name="L284"></a><tt class="py-lineno">284</tt>  <tt class="py-line">      <tt id="link-108" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-108', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L285"></a><tt class="py-lineno">285</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-109" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-109', 'credentials', 'link-105');">credentials</a></tt> </tt>
+</div><a name="L286"></a><tt class="py-lineno">286</tt>  <tt class="py-line"> </tt>
+<a name="CredentialsProperty.validate"></a><div id="CredentialsProperty.validate-def"><a name="L287"></a><tt class="py-lineno">287</tt> <a class="py-toggle" href="#" id="CredentialsProperty.validate-toggle" onclick="return toggle('CredentialsProperty.validate');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsProperty-class.html#validate">validate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="CredentialsProperty.validate-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="CredentialsProperty.validate-expanded"><a name="L288"></a><tt class="py-lineno">288</tt>  <tt class="py-line">    <tt class="py-name">value</tt> <tt class="py-op">=</tt> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-110" class="py-name"><a title="oauth2client.appengine.CredentialsProperty" class="py-name" href="#" onclick="return doclink('link-110', 'CredentialsProperty', 'link-101');">CredentialsProperty</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="oauth2client.appengine.CredentialsProperty.validate
+oauth2client.appengine.FlowProperty.validate" class="py-name" href="#" onclick="return doclink('link-111', 'validate', 'link-94');">validate</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
+<a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line">    <tt id="link-112" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-101', 'logger', 'link-41');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"validate: Got type "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt id="link-102" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-102', 'Credentials', 'link-31');">Credentials</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L281"></a><tt class="py-lineno">281</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt class="py-name">BadValueError</tt><tt class="py-op">(</tt><tt class="py-string">'Property %s must be convertible '</tt> </tt>
-<a name="L282"></a><tt class="py-lineno">282</tt>  <tt class="py-line">                          <tt class="py-string">'to a Credentials instance (%s)'</tt> <tt class="py-op">%</tt> </tt>
-<a name="L283"></a><tt class="py-lineno">283</tt>  <tt class="py-line">                            <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L284"></a><tt class="py-lineno">284</tt>  <tt class="py-line">    <tt class="py-comment">#if value is not None and not isinstance(value, Credentials):</tt> </tt>
-<a name="L285"></a><tt class="py-lineno">285</tt>  <tt class="py-line">    <tt class="py-comment">#  return None</tt> </tt>
-<a name="L286"></a><tt class="py-lineno">286</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">value</tt> </tt>
-</div></div><a name="L287"></a><tt class="py-lineno">287</tt>  <tt class="py-line"> </tt>
-<a name="CredentialsNDBProperty"></a><div id="CredentialsNDBProperty-def"><a name="L288"></a><tt class="py-lineno">288</tt>  <tt class="py-line"> </tt>
-<a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line"><tt class="py-comment"># TODO(dhermes): Turn this into a JsonProperty and overhaul the Credentials</tt> </tt>
-<a name="L290"></a><tt class="py-lineno">290</tt>  <tt class="py-line"><tt class="py-comment">#                and subclass mechanics to use new_from_dict, to_dict,</tt> </tt>
-<a name="L291"></a><tt class="py-lineno">291</tt>  <tt class="py-line"><tt class="py-comment">#                from_dict, etc.</tt> </tt>
-<a name="L292"></a><tt class="py-lineno">292</tt> <a class="py-toggle" href="#" id="CredentialsNDBProperty-toggle" onclick="return toggle('CredentialsNDBProperty');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsNDBProperty-class.html">CredentialsNDBProperty</a><tt class="py-op">(</tt><tt class="py-base-class">ndb</tt><tt class="py-op">.</tt><tt class="py-base-class">BlobProperty</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CredentialsNDBProperty-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="CredentialsNDBProperty-expanded"><a name="L293"></a><tt class="py-lineno">293</tt>  <tt class="py-line">  <tt class="py-docstring">"""App Engine NDB datastore Property for Credentials.</tt> </tt>
-<a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line"><tt class="py-docstring">  Serves the same purpose as the DB CredentialsProperty, but for NDB models.</tt> </tt>
-<a name="L296"></a><tt class="py-lineno">296</tt>  <tt class="py-line"><tt class="py-docstring">  Since CredentialsProperty stores data as a blob and this inherits from</tt> </tt>
-<a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line"><tt class="py-docstring">  BlobProperty, the data in the datastore will be the same as in the DB case.</tt> </tt>
-<a name="L298"></a><tt class="py-lineno">298</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L299"></a><tt class="py-lineno">299</tt>  <tt class="py-line"><tt class="py-docstring">  Utility property that allows easy storage and retrieval of Credentials and</tt> </tt>
-<a name="L300"></a><tt class="py-lineno">300</tt>  <tt class="py-line"><tt class="py-docstring">  subclasses.</tt> </tt>
-<a name="L301"></a><tt class="py-lineno">301</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="CredentialsNDBProperty._validate"></a><div id="CredentialsNDBProperty._validate-def"><a name="L302"></a><tt class="py-lineno">302</tt> <a class="py-toggle" href="#" id="CredentialsNDBProperty._validate-toggle" onclick="return toggle('CredentialsNDBProperty._validate');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsNDBProperty-class.html#_validate">_validate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CredentialsNDBProperty._validate-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="CredentialsNDBProperty._validate-expanded"><a name="L303"></a><tt class="py-lineno">303</tt>  <tt class="py-line">    <tt class="py-docstring">"""Validates a value as a proper credentials object.</tt> </tt>
-<a name="L304"></a><tt class="py-lineno">304</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L305"></a><tt class="py-lineno">305</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L306"></a><tt class="py-lineno">306</tt>  <tt class="py-line"><tt class="py-docstring">      value: A value to be set on the property.</tt> </tt>
-<a name="L307"></a><tt class="py-lineno">307</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L308"></a><tt class="py-lineno">308</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L309"></a><tt class="py-lineno">309</tt>  <tt class="py-line"><tt class="py-docstring">      TypeError if the value is not an instance of Credentials.</tt> </tt>
-<a name="L310"></a><tt class="py-lineno">310</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L311"></a><tt class="py-lineno">311</tt>  <tt class="py-line">    <tt id="link-103" class="py-name"><a title="apiclient.discovery.logger
-oauth2client.appengine.logger
-oauth2client.client.logger
-oauth2client.crypt.logger
-oauth2client.gce.logger
-oauth2client.locked_file.logger
-oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-103', 'logger', 'link-41');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'validate: Got type %s'</tt><tt class="py-op">,</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L312"></a><tt class="py-lineno">312</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt id="link-104" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-104', 'Credentials', 'link-31');">Credentials</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L313"></a><tt class="py-lineno">313</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Property %s must be convertible to a credentials '</tt> </tt>
-<a name="L314"></a><tt class="py-lineno">314</tt>  <tt class="py-line">                      <tt class="py-string">'instance; received: %s.'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_name</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L315"></a><tt class="py-lineno">315</tt>  <tt class="py-line"> </tt>
-<a name="CredentialsNDBProperty._to_base_type"></a><div id="CredentialsNDBProperty._to_base_type-def"><a name="L316"></a><tt class="py-lineno">316</tt> <a class="py-toggle" href="#" id="CredentialsNDBProperty._to_base_type-toggle" onclick="return toggle('CredentialsNDBProperty._to_base_type');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsNDBProperty-class.html#_to_base_type">_to_base_type</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CredentialsNDBProperty._to_base_type-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="CredentialsNDBProperty._to_base_type-expanded"><a name="L317"></a><tt class="py-lineno">317</tt>  <tt class="py-line">    <tt class="py-docstring">"""Converts our validated value to a JSON serialized string.</tt> </tt>
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-112', 'logger', 'link-49');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">"validate: Got type "</tt> <tt class="py-op">+</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L290"></a><tt class="py-lineno">290</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt id="link-113" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-113', 'Credentials', 'link-35');">Credentials</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L291"></a><tt class="py-lineno">291</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt class="py-name">BadValueError</tt><tt class="py-op">(</tt><tt class="py-string">'Property %s must be convertible '</tt> </tt>
+<a name="L292"></a><tt class="py-lineno">292</tt>  <tt class="py-line">                          <tt class="py-string">'to a Credentials instance (%s)'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L293"></a><tt class="py-lineno">293</tt>  <tt class="py-line">                            <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line">    <tt class="py-comment">#if value is not None and not isinstance(value, Credentials):</tt> </tt>
+<a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line">    <tt class="py-comment">#  return None</tt> </tt>
+<a name="L296"></a><tt class="py-lineno">296</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">value</tt> </tt>
+</div></div><a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line"> </tt>
+<a name="L298"></a><tt class="py-lineno">298</tt>  <tt class="py-line"> </tt>
+<a name="L299"></a><tt class="py-lineno">299</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt id="link-114" class="py-name"><a title="oauth2client.appengine.ndb" class="py-name" href="#" onclick="return doclink('link-114', 'ndb', 'link-47');">ndb</a></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="CredentialsNDBProperty"></a><div id="CredentialsNDBProperty-def"><a name="L300"></a><tt class="py-lineno">300</tt>  <tt class="py-line">  <tt class="py-comment"># TODO(dhermes): Turn this into a JsonProperty and overhaul the Credentials</tt> </tt>
+<a name="L301"></a><tt class="py-lineno">301</tt>  <tt class="py-line">  <tt class="py-comment">#                and subclass mechanics to use new_from_dict, to_dict,</tt> </tt>
+<a name="L302"></a><tt class="py-lineno">302</tt>  <tt class="py-line">  <tt class="py-comment">#                from_dict, etc.</tt> </tt>
+<a name="L303"></a><tt class="py-lineno">303</tt> <a class="py-toggle" href="#" id="CredentialsNDBProperty-toggle" onclick="return toggle('CredentialsNDBProperty');">-</a><tt class="py-line">  <tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsNDBProperty-class.html">CredentialsNDBProperty</a><tt class="py-op">(</tt><tt class="py-base-class">ndb</tt><tt class="py-op">.</tt><tt class="py-base-class">BlobProperty</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="CredentialsNDBProperty-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="CredentialsNDBProperty-expanded"><a name="L304"></a><tt class="py-lineno">304</tt>  <tt class="py-line">    <tt class="py-docstring">"""App Engine NDB datastore Property for Credentials.</tt> </tt>
+<a name="L305"></a><tt class="py-lineno">305</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L306"></a><tt class="py-lineno">306</tt>  <tt class="py-line"><tt class="py-docstring">    Serves the same purpose as the DB CredentialsProperty, but for NDB models.</tt> </tt>
+<a name="L307"></a><tt class="py-lineno">307</tt>  <tt class="py-line"><tt class="py-docstring">    Since CredentialsProperty stores data as a blob and this inherits from</tt> </tt>
+<a name="L308"></a><tt class="py-lineno">308</tt>  <tt class="py-line"><tt class="py-docstring">    BlobProperty, the data in the datastore will be the same as in the DB case.</tt> </tt>
+<a name="L309"></a><tt class="py-lineno">309</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt>  <tt class="py-line"><tt class="py-docstring">    Utility property that allows easy storage and retrieval of Credentials and</tt> </tt>
+<a name="L311"></a><tt class="py-lineno">311</tt>  <tt class="py-line"><tt class="py-docstring">    subclasses.</tt> </tt>
+<a name="L312"></a><tt class="py-lineno">312</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="CredentialsNDBProperty._validate"></a><div id="CredentialsNDBProperty._validate-def"><a name="L313"></a><tt class="py-lineno">313</tt> <a class="py-toggle" href="#" id="CredentialsNDBProperty._validate-toggle" onclick="return toggle('CredentialsNDBProperty._validate');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsNDBProperty-class.html#_validate">_validate</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="CredentialsNDBProperty._validate-collapsed" style="display:none;" pad="+++" indent="++++++++++"></div><div id="CredentialsNDBProperty._validate-expanded"><a name="L314"></a><tt class="py-lineno">314</tt>  <tt class="py-line">      <tt class="py-docstring">"""Validates a value as a proper credentials object.</tt> </tt>
+<a name="L315"></a><tt class="py-lineno">315</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L316"></a><tt class="py-lineno">316</tt>  <tt class="py-line"><tt class="py-docstring">      Args:</tt> </tt>
+<a name="L317"></a><tt class="py-lineno">317</tt>  <tt class="py-line"><tt class="py-docstring">        value: A value to be set on the property.</tt> </tt>
 <a name="L318"></a><tt class="py-lineno">318</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L319"></a><tt class="py-lineno">319</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L320"></a><tt class="py-lineno">320</tt>  <tt class="py-line"><tt class="py-docstring">      value: A value to be set in the datastore.</tt> </tt>
-<a name="L321"></a><tt class="py-lineno">321</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L322"></a><tt class="py-lineno">322</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L323"></a><tt class="py-lineno">323</tt>  <tt class="py-line"><tt class="py-docstring">      A JSON serialized version of the credential, else '' if value is None.</tt> </tt>
-<a name="L324"></a><tt class="py-lineno">324</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L325"></a><tt class="py-lineno">325</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L326"></a><tt class="py-lineno">326</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-string">''</tt> </tt>
-<a name="L327"></a><tt class="py-lineno">327</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L328"></a><tt class="py-lineno">328</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">value</tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="apiclient.http.HttpRequest.to_json
-apiclient.http.MediaFileUpload.to_json
-apiclient.http.MediaIoBaseUpload.to_json
-apiclient.http.MediaUpload.to_json
-oauth2client.client.Credentials.to_json
-oauth2client.client.OAuth2Credentials.to_json" class="py-name" href="#" onclick="return doclink('link-105', 'to_json', 'link-92');">to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L329"></a><tt class="py-lineno">329</tt>  <tt class="py-line"> </tt>
-<a name="CredentialsNDBProperty._from_base_type"></a><div id="CredentialsNDBProperty._from_base_type-def"><a name="L330"></a><tt class="py-lineno">330</tt> <a class="py-toggle" href="#" id="CredentialsNDBProperty._from_base_type-toggle" onclick="return toggle('CredentialsNDBProperty._from_base_type');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsNDBProperty-class.html#_from_base_type">_from_base_type</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CredentialsNDBProperty._from_base_type-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="CredentialsNDBProperty._from_base_type-expanded"><a name="L331"></a><tt class="py-lineno">331</tt>  <tt class="py-line">    <tt class="py-docstring">"""Converts our stored JSON string back to the desired type.</tt> </tt>
+<a name="L319"></a><tt class="py-lineno">319</tt>  <tt class="py-line"><tt class="py-docstring">      Raises:</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt>  <tt class="py-line"><tt class="py-docstring">        TypeError if the value is not an instance of Credentials.</tt> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt>  <tt class="py-line"><tt class="py-docstring">      """</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt>  <tt class="py-line">      <tt id="link-115" class="py-name"><a title="apiclient.discovery.logger
+oauth2client.appengine.logger
+oauth2client.client.logger
+oauth2client.crypt.logger
+oauth2client.gce.logger
+oauth2client.locked_file.logger
+oauth2client.multistore_file.logger
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-115', 'logger', 'link-49');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'validate: Got type %s'</tt><tt class="py-op">,</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt id="link-116" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-116', 'Credentials', 'link-35');">Credentials</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Property %s must be convertible to a credentials '</tt> </tt>
+<a name="L325"></a><tt class="py-lineno">325</tt>  <tt class="py-line">                        <tt class="py-string">'instance; received: %s.'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_name</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L326"></a><tt class="py-lineno">326</tt>  <tt class="py-line"> </tt>
+<a name="CredentialsNDBProperty._to_base_type"></a><div id="CredentialsNDBProperty._to_base_type-def"><a name="L327"></a><tt class="py-lineno">327</tt> <a class="py-toggle" href="#" id="CredentialsNDBProperty._to_base_type-toggle" onclick="return toggle('CredentialsNDBProperty._to_base_type');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsNDBProperty-class.html#_to_base_type">_to_base_type</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="CredentialsNDBProperty._to_base_type-collapsed" style="display:none;" pad="+++" indent="++++++++++"></div><div id="CredentialsNDBProperty._to_base_type-expanded"><a name="L328"></a><tt class="py-lineno">328</tt>  <tt class="py-line">      <tt class="py-docstring">"""Converts our validated value to a JSON serialized string.</tt> </tt>
+<a name="L329"></a><tt class="py-lineno">329</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L330"></a><tt class="py-lineno">330</tt>  <tt class="py-line"><tt class="py-docstring">      Args:</tt> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt>  <tt class="py-line"><tt class="py-docstring">        value: A value to be set in the datastore.</tt> </tt>
 <a name="L332"></a><tt class="py-lineno">332</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L333"></a><tt class="py-lineno">333</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L334"></a><tt class="py-lineno">334</tt>  <tt class="py-line"><tt class="py-docstring">      value: A value from the datastore to be converted to the desired type.</tt> </tt>
-<a name="L335"></a><tt class="py-lineno">335</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L336"></a><tt class="py-lineno">336</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L337"></a><tt class="py-lineno">337</tt>  <tt class="py-line"><tt class="py-docstring">      A deserialized Credentials (or subclass) object, else None if the</tt> </tt>
-<a name="L338"></a><tt class="py-lineno">338</tt>  <tt class="py-line"><tt class="py-docstring">          value can't be parsed.</tt> </tt>
-<a name="L339"></a><tt class="py-lineno">339</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L340"></a><tt class="py-lineno">340</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">value</tt><tt class="py-op">:</tt> </tt>
-<a name="L341"></a><tt class="py-lineno">341</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L342"></a><tt class="py-lineno">342</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L343"></a><tt class="py-lineno">343</tt>  <tt class="py-line">      <tt class="py-comment"># Uses the from_json method of the implied class of value</tt> </tt>
-<a name="L344"></a><tt class="py-lineno">344</tt>  <tt class="py-line">      <tt id="link-106" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-106', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-op">=</tt> <tt id="link-107" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-107', 'Credentials', 'link-31');">Credentials</a></tt><tt class="py-op">.</tt><tt id="link-108" class="py-name"><a title="apiclient.http.MediaUpload.new_from_json
-oauth2client.client.Credentials.new_from_json" class="py-name" href="#" onclick="return doclink('link-108', 'new_from_json', 'link-96');">new_from_json</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
-<a name="L345"></a><tt class="py-lineno">345</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L346"></a><tt class="py-lineno">346</tt>  <tt class="py-line">      <tt id="link-109" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-109', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L347"></a><tt class="py-lineno">347</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-110" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-110', 'credentials', 'link-94');">credentials</a></tt> </tt>
-</div></div><a name="L348"></a><tt class="py-lineno">348</tt>  <tt class="py-line"> </tt>
-<a name="StorageByKeyName"></a><div id="StorageByKeyName-def"><a name="L349"></a><tt class="py-lineno">349</tt>  <tt class="py-line"> </tt>
-<a name="L350"></a><tt class="py-lineno">350</tt> <a class="py-toggle" href="#" id="StorageByKeyName-toggle" onclick="return toggle('StorageByKeyName');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html">StorageByKeyName</a><tt class="py-op">(</tt><tt class="py-base-class">Storage</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="StorageByKeyName-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="StorageByKeyName-expanded"><a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line">  <tt class="py-docstring">"""Store and retrieve a credential to and from the App Engine datastore.</tt> </tt>
-<a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L353"></a><tt class="py-lineno">353</tt>  <tt class="py-line"><tt class="py-docstring">  This Storage helper presumes the Credentials have been stored as a</tt> </tt>
-<a name="L354"></a><tt class="py-lineno">354</tt>  <tt class="py-line"><tt class="py-docstring">  CredentialsProperty or CredentialsNDBProperty on a datastore model class, and</tt> </tt>
-<a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line"><tt class="py-docstring">  that entities are stored by key_name.</tt> </tt>
-<a name="L356"></a><tt class="py-lineno">356</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line"> </tt>
-<a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-111', 'positional', 'link-68');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
-<a name="StorageByKeyName.__init__"></a><div id="StorageByKeyName.__init__-def"><a name="L359"></a><tt class="py-lineno">359</tt> <a class="py-toggle" href="#" id="StorageByKeyName.__init__-toggle" onclick="return toggle('StorageByKeyName.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-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">model</tt><tt class="py-op">,</tt> <tt class="py-param">key_name</tt><tt class="py-op">,</tt> <tt class="py-param">property_name</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="StorageByKeyName.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName.__init__-expanded"><a name="L360"></a><tt class="py-lineno">360</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for Storage.</tt> </tt>
-<a name="L361"></a><tt class="py-lineno">361</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line"><tt class="py-docstring">      model: db.Model or ndb.Model, model class</tt> </tt>
-<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line"><tt class="py-docstring">      key_name: string, key name for the entity that has the credentials</tt> </tt>
-<a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line"><tt class="py-docstring">      property_name: string, name of the property that is a CredentialsProperty</tt> </tt>
-<a name="L366"></a><tt class="py-lineno">366</tt>  <tt class="py-line"><tt class="py-docstring">        or CredentialsNDBProperty.</tt> </tt>
-<a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line"><tt class="py-docstring">      cache: memcache, a write-through cache to put in front of the datastore.</tt> </tt>
-<a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line"><tt class="py-docstring">        If the model you are using is an NDB model, using a cache will be</tt> </tt>
-<a name="L369"></a><tt class="py-lineno">369</tt>  <tt class="py-line"><tt class="py-docstring">        redundant since the model uses an instance cache and memcache for you.</tt> </tt>
-<a name="L370"></a><tt class="py-lineno">370</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L371"></a><tt class="py-lineno">371</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt> <tt class="py-op">=</tt> <tt id="link-112" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-112', 'model', 'link-51');">model</a></tt> </tt>
-<a name="L372"></a><tt class="py-lineno">372</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt> <tt class="py-op">=</tt> <tt class="py-name">key_name</tt> </tt>
-<a name="L373"></a><tt class="py-lineno">373</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_property_name</tt> <tt class="py-op">=</tt> <tt class="py-name">property_name</tt> </tt>
-<a name="L374"></a><tt class="py-lineno">374</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt> <tt class="py-op">=</tt> <tt class="py-name">cache</tt> </tt>
-</div><a name="L375"></a><tt class="py-lineno">375</tt>  <tt class="py-line"> </tt>
-<a name="StorageByKeyName._is_ndb"></a><div id="StorageByKeyName._is_ndb-def"><a name="L376"></a><tt class="py-lineno">376</tt> <a class="py-toggle" href="#" id="StorageByKeyName._is_ndb-toggle" onclick="return toggle('StorageByKeyName._is_ndb');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html#_is_ndb">_is_ndb</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="StorageByKeyName._is_ndb-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName._is_ndb-expanded"><a name="L377"></a><tt class="py-lineno">377</tt>  <tt class="py-line">    <tt class="py-docstring">"""Determine whether the model of the instance is an NDB model.</tt> </tt>
-<a name="L378"></a><tt class="py-lineno">378</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L379"></a><tt class="py-lineno">379</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L380"></a><tt class="py-lineno">380</tt>  <tt class="py-line"><tt class="py-docstring">      Boolean indicating whether or not the model is an NDB or DB model.</tt> </tt>
+<a name="L333"></a><tt class="py-lineno">333</tt>  <tt class="py-line"><tt class="py-docstring">      Returns:</tt> </tt>
+<a name="L334"></a><tt class="py-lineno">334</tt>  <tt class="py-line"><tt class="py-docstring">        A JSON serialized version of the credential, else '' if value is None.</tt> </tt>
+<a name="L335"></a><tt class="py-lineno">335</tt>  <tt class="py-line"><tt class="py-docstring">      """</tt> </tt>
+<a name="L336"></a><tt class="py-lineno">336</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L337"></a><tt class="py-lineno">337</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-string">''</tt> </tt>
+<a name="L338"></a><tt class="py-lineno">338</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L339"></a><tt class="py-lineno">339</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">value</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="apiclient.http.HttpRequest.to_json
+apiclient.http.MediaFileUpload.to_json
+apiclient.http.MediaIoBaseUpload.to_json
+apiclient.http.MediaUpload.to_json
+oauth2client.client.Credentials.to_json
+oauth2client.client.OAuth2Credentials.to_json" class="py-name" href="#" onclick="return doclink('link-117', 'to_json', 'link-103');">to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L340"></a><tt class="py-lineno">340</tt>  <tt class="py-line"> </tt>
+<a name="CredentialsNDBProperty._from_base_type"></a><div id="CredentialsNDBProperty._from_base_type-def"><a name="L341"></a><tt class="py-lineno">341</tt> <a class="py-toggle" href="#" id="CredentialsNDBProperty._from_base_type-toggle" onclick="return toggle('CredentialsNDBProperty._from_base_type');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsNDBProperty-class.html#_from_base_type">_from_base_type</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="CredentialsNDBProperty._from_base_type-collapsed" style="display:none;" pad="+++" indent="++++++++++"></div><div id="CredentialsNDBProperty._from_base_type-expanded"><a name="L342"></a><tt class="py-lineno">342</tt>  <tt class="py-line">      <tt class="py-docstring">"""Converts our stored JSON string back to the desired type.</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L344"></a><tt class="py-lineno">344</tt>  <tt class="py-line"><tt class="py-docstring">      Args:</tt> </tt>
+<a name="L345"></a><tt class="py-lineno">345</tt>  <tt class="py-line"><tt class="py-docstring">        value: A value from the datastore to be converted to the desired type.</tt> </tt>
+<a name="L346"></a><tt class="py-lineno">346</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt>  <tt class="py-line"><tt class="py-docstring">      Returns:</tt> </tt>
+<a name="L348"></a><tt class="py-lineno">348</tt>  <tt class="py-line"><tt class="py-docstring">        A deserialized Credentials (or subclass) object, else None if the</tt> </tt>
+<a name="L349"></a><tt class="py-lineno">349</tt>  <tt class="py-line"><tt class="py-docstring">            value can't be parsed.</tt> </tt>
+<a name="L350"></a><tt class="py-lineno">350</tt>  <tt class="py-line"><tt class="py-docstring">      """</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">value</tt><tt class="py-op">:</tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L353"></a><tt class="py-lineno">353</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L354"></a><tt class="py-lineno">354</tt>  <tt class="py-line">        <tt class="py-comment"># Uses the from_json method of the implied class of value</tt> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line">        <tt id="link-118" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-118', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-op">=</tt> <tt id="link-119" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-119', 'Credentials', 'link-35');">Credentials</a></tt><tt class="py-op">.</tt><tt id="link-120" class="py-name"><a title="apiclient.http.MediaUpload.new_from_json
+oauth2client.client.Credentials.new_from_json" class="py-name" href="#" onclick="return doclink('link-120', 'new_from_json', 'link-107');">new_from_json</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line">        <tt id="link-121" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-121', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-122" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-122', 'credentials', 'link-105');">credentials</a></tt> </tt>
+</div></div><a name="L359"></a><tt class="py-lineno">359</tt>  <tt class="py-line"> </tt>
+<a name="StorageByKeyName"></a><div id="StorageByKeyName-def"><a name="L360"></a><tt class="py-lineno">360</tt>  <tt class="py-line"> </tt>
+<a name="L361"></a><tt class="py-lineno">361</tt> <a class="py-toggle" href="#" id="StorageByKeyName-toggle" onclick="return toggle('StorageByKeyName');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html">StorageByKeyName</a><tt class="py-op">(</tt><tt class="py-base-class">Storage</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="StorageByKeyName-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="StorageByKeyName-expanded"><a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line">  <tt class="py-docstring">"""Store and retrieve a credential to and from the App Engine datastore.</tt> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line"><tt class="py-docstring">  This Storage helper presumes the Credentials have been stored as a</tt> </tt>
+<a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line"><tt class="py-docstring">  CredentialsProperty or CredentialsNDBProperty on a datastore model class, and</tt> </tt>
+<a name="L366"></a><tt class="py-lineno">366</tt>  <tt class="py-line"><tt class="py-docstring">  that entities are stored by key_name.</tt> </tt>
+<a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line"> </tt>
+<a name="L369"></a><tt class="py-lineno">369</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-123" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-123', 'positional', 'link-78');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
+<a name="StorageByKeyName.__init__"></a><div id="StorageByKeyName.__init__-def"><a name="L370"></a><tt class="py-lineno">370</tt> <a class="py-toggle" href="#" id="StorageByKeyName.__init__-toggle" onclick="return toggle('StorageByKeyName.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-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">model</tt><tt class="py-op">,</tt> <tt class="py-param">key_name</tt><tt class="py-op">,</tt> <tt class="py-param">property_name</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="StorageByKeyName.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName.__init__-expanded"><a name="L371"></a><tt class="py-lineno">371</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for Storage.</tt> </tt>
+<a name="L372"></a><tt class="py-lineno">372</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L373"></a><tt class="py-lineno">373</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L374"></a><tt class="py-lineno">374</tt>  <tt class="py-line"><tt class="py-docstring">      model: db.Model or ndb.Model, model class</tt> </tt>
+<a name="L375"></a><tt class="py-lineno">375</tt>  <tt class="py-line"><tt class="py-docstring">      key_name: string, key name for the entity that has the credentials</tt> </tt>
+<a name="L376"></a><tt class="py-lineno">376</tt>  <tt class="py-line"><tt class="py-docstring">      property_name: string, name of the property that is a CredentialsProperty</tt> </tt>
+<a name="L377"></a><tt class="py-lineno">377</tt>  <tt class="py-line"><tt class="py-docstring">        or CredentialsNDBProperty.</tt> </tt>
+<a name="L378"></a><tt class="py-lineno">378</tt>  <tt class="py-line"><tt class="py-docstring">      cache: memcache, a write-through cache to put in front of the datastore.</tt> </tt>
+<a name="L379"></a><tt class="py-lineno">379</tt>  <tt class="py-line"><tt class="py-docstring">        If the model you are using is an NDB model, using a cache will be</tt> </tt>
+<a name="L380"></a><tt class="py-lineno">380</tt>  <tt class="py-line"><tt class="py-docstring">        redundant since the model uses an instance cache and memcache for you.</tt> </tt>
 <a name="L381"></a><tt class="py-lineno">381</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L382"></a><tt class="py-lineno">382</tt>  <tt class="py-line">    <tt class="py-comment"># issubclass will fail if one of the arguments is not a class, only need</tt> </tt>
-<a name="L383"></a><tt class="py-lineno">383</tt>  <tt class="py-line">    <tt class="py-comment"># worry about new-style classes since ndb and db models are new-style</tt> </tt>
-<a name="L384"></a><tt class="py-lineno">384</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt> <tt class="py-name">type</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L385"></a><tt class="py-lineno">385</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">issubclass</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt> <tt class="py-name">ndb</tt><tt class="py-op">.</tt><tt id="link-113" class="py-name" targets="Class apiclient.model.Model=apiclient.model.Model-class.html"><a title="apiclient.model.Model" class="py-name" href="#" onclick="return doclink('link-113', 'Model', 'link-113');">Model</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L386"></a><tt class="py-lineno">386</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L387"></a><tt class="py-lineno">387</tt>  <tt class="py-line">      <tt class="py-keyword">elif</tt> <tt class="py-name">issubclass</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt id="link-114" class="py-name"><a title="apiclient.model.Model" class="py-name" href="#" onclick="return doclink('link-114', 'Model', 'link-113');">Model</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L388"></a><tt class="py-lineno">388</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L389"></a><tt class="py-lineno">389</tt>  <tt class="py-line"> </tt>
-<a name="L390"></a><tt class="py-lineno">390</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Model class not an NDB or DB model: %s.'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L391"></a><tt class="py-lineno">391</tt>  <tt class="py-line"> </tt>
-<a name="StorageByKeyName._get_entity"></a><div id="StorageByKeyName._get_entity-def"><a name="L392"></a><tt class="py-lineno">392</tt> <a class="py-toggle" href="#" id="StorageByKeyName._get_entity-toggle" onclick="return toggle('StorageByKeyName._get_entity');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html#_get_entity">_get_entity</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="StorageByKeyName._get_entity-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName._get_entity-expanded"><a name="L393"></a><tt class="py-lineno">393</tt>  <tt class="py-line">    <tt class="py-docstring">"""Retrieve entity from datastore.</tt> </tt>
-<a name="L394"></a><tt class="py-lineno">394</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L395"></a><tt class="py-lineno">395</tt>  <tt class="py-line"><tt class="py-docstring">    Uses a different model method for db or ndb models.</tt> </tt>
-<a name="L396"></a><tt class="py-lineno">396</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L397"></a><tt class="py-lineno">397</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L398"></a><tt class="py-lineno">398</tt>  <tt class="py-line"><tt class="py-docstring">      Instance of the model corresponding to the current storage object</tt> </tt>
-<a name="L399"></a><tt class="py-lineno">399</tt>  <tt class="py-line"><tt class="py-docstring">          and stored using the key name of the storage object.</tt> </tt>
-<a name="L400"></a><tt class="py-lineno">400</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L401"></a><tt class="py-lineno">401</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-115" class="py-name" targets="Method oauth2client.appengine.StorageByKeyName._is_ndb()=oauth2client.appengine.StorageByKeyName-class.html#_is_ndb"><a title="oauth2client.appengine.StorageByKeyName._is_ndb" class="py-name" href="#" onclick="return doclink('link-115', '_is_ndb', 'link-115');">_is_ndb</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L402"></a><tt class="py-lineno">402</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">.</tt><tt class="py-name">get_by_id</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt> </tt>
-<a name="L403"></a><tt class="py-lineno">403</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L404"></a><tt class="py-lineno">404</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">.</tt><tt class="py-name">get_by_key_name</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L405"></a><tt class="py-lineno">405</tt>  <tt class="py-line"> </tt>
-<a name="StorageByKeyName._delete_entity"></a><div id="StorageByKeyName._delete_entity-def"><a name="L406"></a><tt class="py-lineno">406</tt> <a class="py-toggle" href="#" id="StorageByKeyName._delete_entity-toggle" onclick="return toggle('StorageByKeyName._delete_entity');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html#_delete_entity">_delete_entity</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="StorageByKeyName._delete_entity-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName._delete_entity-expanded"><a name="L407"></a><tt class="py-lineno">407</tt>  <tt class="py-line">    <tt class="py-docstring">"""Delete entity from datastore.</tt> </tt>
-<a name="L408"></a><tt class="py-lineno">408</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L409"></a><tt class="py-lineno">409</tt>  <tt class="py-line"><tt class="py-docstring">    Attempts to delete using the key_name stored on the object, whether or not</tt> </tt>
-<a name="L410"></a><tt class="py-lineno">410</tt>  <tt class="py-line"><tt class="py-docstring">    the given key is in the datastore.</tt> </tt>
+<a name="L382"></a><tt class="py-lineno">382</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt> <tt class="py-op">=</tt> <tt id="link-124" class="py-name"><a title="apiclient.model" class="py-name" href="#" onclick="return doclink('link-124', 'model', 'link-61');">model</a></tt> </tt>
+<a name="L383"></a><tt class="py-lineno">383</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt> <tt class="py-op">=</tt> <tt class="py-name">key_name</tt> </tt>
+<a name="L384"></a><tt class="py-lineno">384</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_property_name</tt> <tt class="py-op">=</tt> <tt class="py-name">property_name</tt> </tt>
+<a name="L385"></a><tt class="py-lineno">385</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt> <tt class="py-op">=</tt> <tt class="py-name">cache</tt> </tt>
+</div><a name="L386"></a><tt class="py-lineno">386</tt>  <tt class="py-line"> </tt>
+<a name="StorageByKeyName._is_ndb"></a><div id="StorageByKeyName._is_ndb-def"><a name="L387"></a><tt class="py-lineno">387</tt> <a class="py-toggle" href="#" id="StorageByKeyName._is_ndb-toggle" onclick="return toggle('StorageByKeyName._is_ndb');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html#_is_ndb">_is_ndb</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="StorageByKeyName._is_ndb-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName._is_ndb-expanded"><a name="L388"></a><tt class="py-lineno">388</tt>  <tt class="py-line">    <tt class="py-docstring">"""Determine whether the model of the instance is an NDB model.</tt> </tt>
+<a name="L389"></a><tt class="py-lineno">389</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L390"></a><tt class="py-lineno">390</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L391"></a><tt class="py-lineno">391</tt>  <tt class="py-line"><tt class="py-docstring">      Boolean indicating whether or not the model is an NDB or DB model.</tt> </tt>
+<a name="L392"></a><tt class="py-lineno">392</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L393"></a><tt class="py-lineno">393</tt>  <tt class="py-line">    <tt class="py-comment"># issubclass will fail if one of the arguments is not a class, only need</tt> </tt>
+<a name="L394"></a><tt class="py-lineno">394</tt>  <tt class="py-line">    <tt class="py-comment"># worry about new-style classes since ndb and db models are new-style</tt> </tt>
+<a name="L395"></a><tt class="py-lineno">395</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt> <tt class="py-name">type</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L396"></a><tt class="py-lineno">396</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt id="link-125" class="py-name"><a title="oauth2client.appengine.ndb" class="py-name" href="#" onclick="return doclink('link-125', 'ndb', 'link-47');">ndb</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">issubclass</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt> <tt id="link-126" class="py-name"><a title="oauth2client.appengine.ndb" class="py-name" href="#" onclick="return doclink('link-126', 'ndb', 'link-47');">ndb</a></tt><tt class="py-op">.</tt><tt id="link-127" class="py-name" targets="Class apiclient.model.Model=apiclient.model.Model-class.html"><a title="apiclient.model.Model" class="py-name" href="#" onclick="return doclink('link-127', 'Model', 'link-127');">Model</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L397"></a><tt class="py-lineno">397</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+<a name="L398"></a><tt class="py-lineno">398</tt>  <tt class="py-line">      <tt class="py-keyword">elif</tt> <tt class="py-name">issubclass</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt id="link-128" class="py-name"><a title="apiclient.model.Model" class="py-name" href="#" onclick="return doclink('link-128', 'Model', 'link-127');">Model</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L399"></a><tt class="py-lineno">399</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+<a name="L400"></a><tt class="py-lineno">400</tt>  <tt class="py-line"> </tt>
+<a name="L401"></a><tt class="py-lineno">401</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Model class not an NDB or DB model: %s.'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L402"></a><tt class="py-lineno">402</tt>  <tt class="py-line"> </tt>
+<a name="StorageByKeyName._get_entity"></a><div id="StorageByKeyName._get_entity-def"><a name="L403"></a><tt class="py-lineno">403</tt> <a class="py-toggle" href="#" id="StorageByKeyName._get_entity-toggle" onclick="return toggle('StorageByKeyName._get_entity');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html#_get_entity">_get_entity</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="StorageByKeyName._get_entity-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName._get_entity-expanded"><a name="L404"></a><tt class="py-lineno">404</tt>  <tt class="py-line">    <tt class="py-docstring">"""Retrieve entity from datastore.</tt> </tt>
+<a name="L405"></a><tt class="py-lineno">405</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L406"></a><tt class="py-lineno">406</tt>  <tt class="py-line"><tt class="py-docstring">    Uses a different model method for db or ndb models.</tt> </tt>
+<a name="L407"></a><tt class="py-lineno">407</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L408"></a><tt class="py-lineno">408</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L409"></a><tt class="py-lineno">409</tt>  <tt class="py-line"><tt class="py-docstring">      Instance of the model corresponding to the current storage object</tt> </tt>
+<a name="L410"></a><tt class="py-lineno">410</tt>  <tt class="py-line"><tt class="py-docstring">          and stored using the key name of the storage object.</tt> </tt>
 <a name="L411"></a><tt class="py-lineno">411</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L412"></a><tt class="py-lineno">412</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="oauth2client.appengine.StorageByKeyName._is_ndb" class="py-name" href="#" onclick="return doclink('link-116', '_is_ndb', 'link-115');">_is_ndb</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L413"></a><tt class="py-lineno">413</tt>  <tt class="py-line">      <tt class="py-name">ndb</tt><tt class="py-op">.</tt><tt class="py-name">Key</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name" targets="Method oauth2client.client.MemoryCache.delete()=oauth2client.client.MemoryCache-class.html#delete,Method oauth2client.client.Storage.delete()=oauth2client.client.Storage-class.html#delete"><a title="oauth2client.client.MemoryCache.delete
-oauth2client.client.Storage.delete" class="py-name" href="#" onclick="return doclink('link-117', 'delete', 'link-117');">delete</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L412"></a><tt class="py-lineno">412</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-129" class="py-name" targets="Method oauth2client.appengine.StorageByKeyName._is_ndb()=oauth2client.appengine.StorageByKeyName-class.html#_is_ndb"><a title="oauth2client.appengine.StorageByKeyName._is_ndb" class="py-name" href="#" onclick="return doclink('link-129', '_is_ndb', 'link-129');">_is_ndb</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L413"></a><tt class="py-lineno">413</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">.</tt><tt class="py-name">get_by_id</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt> </tt>
 <a name="L414"></a><tt class="py-lineno">414</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L415"></a><tt class="py-lineno">415</tt>  <tt class="py-line">      <tt class="py-name">entity_key</tt> <tt class="py-op">=</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt class="py-name">Key</tt><tt class="py-op">.</tt><tt class="py-name">from_path</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">.</tt><tt class="py-name">kind</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt> </tt>
-<a name="L416"></a><tt class="py-lineno">416</tt>  <tt class="py-line">      <tt class="py-name">db</tt><tt class="py-op">.</tt><tt id="link-118" class="py-name"><a title="oauth2client.client.MemoryCache.delete
-oauth2client.client.Storage.delete" class="py-name" href="#" onclick="return doclink('link-118', 'delete', 'link-117');">delete</a></tt><tt class="py-op">(</tt><tt class="py-name">entity_key</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L417"></a><tt class="py-lineno">417</tt>  <tt class="py-line"> </tt>
-<a name="StorageByKeyName.locked_get"></a><div id="StorageByKeyName.locked_get-def"><a name="L418"></a><tt class="py-lineno">418</tt> <a class="py-toggle" href="#" id="StorageByKeyName.locked_get-toggle" onclick="return toggle('StorageByKeyName.locked_get');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html#locked_get">locked_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="StorageByKeyName.locked_get-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName.locked_get-expanded"><a name="L419"></a><tt class="py-lineno">419</tt>  <tt class="py-line">    <tt class="py-docstring">"""Retrieve Credential from datastore.</tt> </tt>
-<a name="L420"></a><tt class="py-lineno">420</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L421"></a><tt class="py-lineno">421</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L422"></a><tt class="py-lineno">422</tt>  <tt class="py-line"><tt class="py-docstring">      oauth2client.Credentials</tt> </tt>
-<a name="L423"></a><tt class="py-lineno">423</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L424"></a><tt class="py-lineno">424</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">:</tt> </tt>
-<a name="L425"></a><tt class="py-lineno">425</tt>  <tt class="py-line">      <tt class="py-name">json</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">.</tt><tt id="link-119" class="py-name"><a title="apiclient.schema.Schemas.get
+<a name="L415"></a><tt class="py-lineno">415</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">.</tt><tt class="py-name">get_by_key_name</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L416"></a><tt class="py-lineno">416</tt>  <tt class="py-line"> </tt>
+<a name="StorageByKeyName._delete_entity"></a><div id="StorageByKeyName._delete_entity-def"><a name="L417"></a><tt class="py-lineno">417</tt> <a class="py-toggle" href="#" id="StorageByKeyName._delete_entity-toggle" onclick="return toggle('StorageByKeyName._delete_entity');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html#_delete_entity">_delete_entity</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="StorageByKeyName._delete_entity-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName._delete_entity-expanded"><a name="L418"></a><tt class="py-lineno">418</tt>  <tt class="py-line">    <tt class="py-docstring">"""Delete entity from datastore.</tt> </tt>
+<a name="L419"></a><tt class="py-lineno">419</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L420"></a><tt class="py-lineno">420</tt>  <tt class="py-line"><tt class="py-docstring">    Attempts to delete using the key_name stored on the object, whether or not</tt> </tt>
+<a name="L421"></a><tt class="py-lineno">421</tt>  <tt class="py-line"><tt class="py-docstring">    the given key is in the datastore.</tt> </tt>
+<a name="L422"></a><tt class="py-lineno">422</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L423"></a><tt class="py-lineno">423</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name"><a title="oauth2client.appengine.StorageByKeyName._is_ndb" class="py-name" href="#" onclick="return doclink('link-130', '_is_ndb', 'link-129');">_is_ndb</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L424"></a><tt class="py-lineno">424</tt>  <tt class="py-line">      <tt id="link-131" class="py-name"><a title="oauth2client.appengine.ndb" class="py-name" href="#" onclick="return doclink('link-131', 'ndb', 'link-47');">ndb</a></tt><tt class="py-op">.</tt><tt class="py-name">Key</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-132" class="py-name" targets="Method oauth2client.client.MemoryCache.delete()=oauth2client.client.MemoryCache-class.html#delete,Method oauth2client.client.Storage.delete()=oauth2client.client.Storage-class.html#delete"><a title="oauth2client.client.MemoryCache.delete
+oauth2client.client.Storage.delete" class="py-name" href="#" onclick="return doclink('link-132', 'delete', 'link-132');">delete</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L425"></a><tt class="py-lineno">425</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L426"></a><tt class="py-lineno">426</tt>  <tt class="py-line">      <tt class="py-name">entity_key</tt> <tt class="py-op">=</tt> <tt class="py-name">db</tt><tt class="py-op">.</tt><tt class="py-name">Key</tt><tt class="py-op">.</tt><tt class="py-name">from_path</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">.</tt><tt class="py-name">kind</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt> </tt>
+<a name="L427"></a><tt class="py-lineno">427</tt>  <tt class="py-line">      <tt class="py-name">db</tt><tt class="py-op">.</tt><tt id="link-133" class="py-name"><a title="oauth2client.client.MemoryCache.delete
+oauth2client.client.Storage.delete" class="py-name" href="#" onclick="return doclink('link-133', 'delete', 'link-132');">delete</a></tt><tt class="py-op">(</tt><tt class="py-name">entity_key</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L428"></a><tt class="py-lineno">428</tt>  <tt class="py-line"> </tt>
+<a name="StorageByKeyName.locked_get"></a><div id="StorageByKeyName.locked_get-def"><a name="L429"></a><tt class="py-lineno">429</tt> <a class="py-toggle" href="#" id="StorageByKeyName.locked_get-toggle" onclick="return toggle('StorageByKeyName.locked_get');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html#locked_get">locked_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="StorageByKeyName.locked_get-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName.locked_get-expanded"><a name="L430"></a><tt class="py-lineno">430</tt>  <tt class="py-line">    <tt class="py-docstring">"""Retrieve Credential from datastore.</tt> </tt>
+<a name="L431"></a><tt class="py-lineno">431</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L432"></a><tt class="py-lineno">432</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L433"></a><tt class="py-lineno">433</tt>  <tt class="py-line"><tt class="py-docstring">      oauth2client.Credentials</tt> </tt>
+<a name="L434"></a><tt class="py-lineno">434</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L435"></a><tt class="py-lineno">435</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">:</tt> </tt>
+<a name="L436"></a><tt class="py-lineno">436</tt>  <tt class="py-line">      <tt class="py-name">json</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">.</tt><tt id="link-134" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-119', 'get', 'link-47');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt> </tt>
-<a name="L426"></a><tt class="py-lineno">426</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">json</tt><tt class="py-op">:</tt> </tt>
-<a name="L427"></a><tt class="py-lineno">427</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-120" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-120', 'Credentials', 'link-31');">Credentials</a></tt><tt class="py-op">.</tt><tt id="link-121" class="py-name"><a title="apiclient.http.MediaUpload.new_from_json
-oauth2client.client.Credentials.new_from_json" class="py-name" href="#" onclick="return doclink('link-121', 'new_from_json', 'link-96');">new_from_json</a></tt><tt class="py-op">(</tt><tt class="py-name">json</tt><tt class="py-op">)</tt> </tt>
-<a name="L428"></a><tt class="py-lineno">428</tt>  <tt class="py-line"> </tt>
-<a name="L429"></a><tt class="py-lineno">429</tt>  <tt class="py-line">    <tt id="link-122" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-122', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L430"></a><tt class="py-lineno">430</tt>  <tt class="py-line">    <tt class="py-name">entity</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-123" class="py-name" targets="Method oauth2client.appengine.StorageByKeyName._get_entity()=oauth2client.appengine.StorageByKeyName-class.html#_get_entity"><a title="oauth2client.appengine.StorageByKeyName._get_entity" class="py-name" href="#" onclick="return doclink('link-123', '_get_entity', 'link-123');">_get_entity</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L431"></a><tt class="py-lineno">431</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">entity</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="L432"></a><tt class="py-lineno">432</tt>  <tt class="py-line">      <tt id="link-124" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-124', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">entity</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_property_name</tt><tt class="py-op">)</tt> </tt>
-<a name="L433"></a><tt class="py-lineno">433</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt id="link-125" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-125', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt id="link-126" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-126', 'credentials', 'link-94');">credentials</a></tt><tt class="py-op">,</tt> <tt class="py-string">'set_store'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L434"></a><tt class="py-lineno">434</tt>  <tt class="py-line">        <tt id="link-127" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-127', 'credentials', 'link-94');">credentials</a></tt><tt class="py-op">.</tt><tt id="link-128" class="py-name" targets="Method oauth2client.client.OAuth2Credentials.set_store()=oauth2client.client.OAuth2Credentials-class.html#set_store"><a title="oauth2client.client.OAuth2Credentials.set_store" class="py-name" href="#" onclick="return doclink('link-128', 'set_store', 'link-128');">set_store</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
-<a name="L435"></a><tt class="py-lineno">435</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">:</tt> </tt>
-<a name="L436"></a><tt class="py-lineno">436</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">.</tt><tt id="link-129" class="py-name" targets="Method oauth2client.client.MemoryCache.set()=oauth2client.client.MemoryCache-class.html#set"><a title="oauth2client.client.MemoryCache.set" class="py-name" href="#" onclick="return doclink('link-129', 'set', 'link-129');">set</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">,</tt> <tt id="link-130" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-130', 'credentials', 'link-94');">credentials</a></tt><tt class="py-op">.</tt><tt id="link-131" class="py-name"><a title="apiclient.http.HttpRequest.to_json
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-134', 'get', 'link-57');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt> </tt>
+<a name="L437"></a><tt class="py-lineno">437</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">json</tt><tt class="py-op">:</tt> </tt>
+<a name="L438"></a><tt class="py-lineno">438</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-135" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-135', 'Credentials', 'link-35');">Credentials</a></tt><tt class="py-op">.</tt><tt id="link-136" class="py-name"><a title="apiclient.http.MediaUpload.new_from_json
+oauth2client.client.Credentials.new_from_json" class="py-name" href="#" onclick="return doclink('link-136', 'new_from_json', 'link-107');">new_from_json</a></tt><tt class="py-op">(</tt><tt class="py-name">json</tt><tt class="py-op">)</tt> </tt>
+<a name="L439"></a><tt class="py-lineno">439</tt>  <tt class="py-line"> </tt>
+<a name="L440"></a><tt class="py-lineno">440</tt>  <tt class="py-line">    <tt id="link-137" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-137', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L441"></a><tt class="py-lineno">441</tt>  <tt class="py-line">    <tt class="py-name">entity</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-138" class="py-name" targets="Method oauth2client.appengine.StorageByKeyName._get_entity()=oauth2client.appengine.StorageByKeyName-class.html#_get_entity"><a title="oauth2client.appengine.StorageByKeyName._get_entity" class="py-name" href="#" onclick="return doclink('link-138', '_get_entity', 'link-138');">_get_entity</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L442"></a><tt class="py-lineno">442</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">entity</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="L443"></a><tt class="py-lineno">443</tt>  <tt class="py-line">      <tt id="link-139" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-139', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">entity</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_property_name</tt><tt class="py-op">)</tt> </tt>
+<a name="L444"></a><tt class="py-lineno">444</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt id="link-140" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-140', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt id="link-141" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-141', 'credentials', 'link-105');">credentials</a></tt><tt class="py-op">,</tt> <tt class="py-string">'set_store'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L445"></a><tt class="py-lineno">445</tt>  <tt class="py-line">        <tt id="link-142" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-142', 'credentials', 'link-105');">credentials</a></tt><tt class="py-op">.</tt><tt id="link-143" class="py-name" targets="Method oauth2client.client.OAuth2Credentials.set_store()=oauth2client.client.OAuth2Credentials-class.html#set_store"><a title="oauth2client.client.OAuth2Credentials.set_store" class="py-name" href="#" onclick="return doclink('link-143', 'set_store', 'link-143');">set_store</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L446"></a><tt class="py-lineno">446</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">:</tt> </tt>
+<a name="L447"></a><tt class="py-lineno">447</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name" targets="Method oauth2client.client.MemoryCache.set()=oauth2client.client.MemoryCache-class.html#set"><a title="oauth2client.client.MemoryCache.set" class="py-name" href="#" onclick="return doclink('link-144', 'set', 'link-144');">set</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">,</tt> <tt id="link-145" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-145', 'credentials', 'link-105');">credentials</a></tt><tt class="py-op">.</tt><tt id="link-146" class="py-name"><a title="apiclient.http.HttpRequest.to_json
 apiclient.http.MediaFileUpload.to_json
 apiclient.http.MediaIoBaseUpload.to_json
 apiclient.http.MediaUpload.to_json
 oauth2client.client.Credentials.to_json
-oauth2client.client.OAuth2Credentials.to_json" class="py-name" href="#" onclick="return doclink('link-131', 'to_json', 'link-92');">to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L437"></a><tt class="py-lineno">437</tt>  <tt class="py-line"> </tt>
-<a name="L438"></a><tt class="py-lineno">438</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-132" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-132', 'credentials', 'link-94');">credentials</a></tt> </tt>
-</div><a name="L439"></a><tt class="py-lineno">439</tt>  <tt class="py-line"> </tt>
-<a name="StorageByKeyName.locked_put"></a><div id="StorageByKeyName.locked_put-def"><a name="L440"></a><tt class="py-lineno">440</tt> <a class="py-toggle" href="#" id="StorageByKeyName.locked_put-toggle" onclick="return toggle('StorageByKeyName.locked_put');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html#locked_put">locked_put</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">credentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="StorageByKeyName.locked_put-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName.locked_put-expanded"><a name="L441"></a><tt class="py-lineno">441</tt>  <tt class="py-line">    <tt class="py-docstring">"""Write a Credentials to the datastore.</tt> </tt>
-<a name="L442"></a><tt class="py-lineno">442</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L443"></a><tt class="py-lineno">443</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L444"></a><tt class="py-lineno">444</tt>  <tt class="py-line"><tt class="py-docstring">      credentials: Credentials, the credentials to store.</tt> </tt>
-<a name="L445"></a><tt class="py-lineno">445</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L446"></a><tt class="py-lineno">446</tt>  <tt class="py-line">    <tt class="py-name">entity</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">.</tt><tt class="py-name">get_or_insert</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt> </tt>
-<a name="L447"></a><tt class="py-lineno">447</tt>  <tt class="py-line">    <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">entity</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_property_name</tt><tt class="py-op">,</tt> <tt id="link-133" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-133', 'credentials', 'link-94');">credentials</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L448"></a><tt class="py-lineno">448</tt>  <tt class="py-line">    <tt class="py-name">entity</tt><tt class="py-op">.</tt><tt id="link-134" class="py-name"><a title="oauth2client.client.Storage.put" class="py-name" href="#" onclick="return doclink('link-134', 'put', 'link-59');">put</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L449"></a><tt class="py-lineno">449</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">:</tt> </tt>
-<a name="L450"></a><tt class="py-lineno">450</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">.</tt><tt id="link-135" class="py-name"><a title="oauth2client.client.MemoryCache.set" class="py-name" href="#" onclick="return doclink('link-135', 'set', 'link-129');">set</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">,</tt> <tt id="link-136" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-136', 'credentials', 'link-94');">credentials</a></tt><tt class="py-op">.</tt><tt id="link-137" class="py-name"><a title="apiclient.http.HttpRequest.to_json
+oauth2client.client.OAuth2Credentials.to_json" class="py-name" href="#" onclick="return doclink('link-146', 'to_json', 'link-103');">to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L448"></a><tt class="py-lineno">448</tt>  <tt class="py-line"> </tt>
+<a name="L449"></a><tt class="py-lineno">449</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-147" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-147', 'credentials', 'link-105');">credentials</a></tt> </tt>
+</div><a name="L450"></a><tt class="py-lineno">450</tt>  <tt class="py-line"> </tt>
+<a name="StorageByKeyName.locked_put"></a><div id="StorageByKeyName.locked_put-def"><a name="L451"></a><tt class="py-lineno">451</tt> <a class="py-toggle" href="#" id="StorageByKeyName.locked_put-toggle" onclick="return toggle('StorageByKeyName.locked_put');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html#locked_put">locked_put</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">credentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="StorageByKeyName.locked_put-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName.locked_put-expanded"><a name="L452"></a><tt class="py-lineno">452</tt>  <tt class="py-line">    <tt class="py-docstring">"""Write a Credentials to the datastore.</tt> </tt>
+<a name="L453"></a><tt class="py-lineno">453</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L454"></a><tt class="py-lineno">454</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L455"></a><tt class="py-lineno">455</tt>  <tt class="py-line"><tt class="py-docstring">      credentials: Credentials, the credentials to store.</tt> </tt>
+<a name="L456"></a><tt class="py-lineno">456</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L457"></a><tt class="py-lineno">457</tt>  <tt class="py-line">    <tt class="py-name">entity</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">.</tt><tt class="py-name">get_or_insert</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt> </tt>
+<a name="L458"></a><tt class="py-lineno">458</tt>  <tt class="py-line">    <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">entity</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_property_name</tt><tt class="py-op">,</tt> <tt id="link-148" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-148', 'credentials', 'link-105');">credentials</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L459"></a><tt class="py-lineno">459</tt>  <tt class="py-line">    <tt class="py-name">entity</tt><tt class="py-op">.</tt><tt id="link-149" class="py-name"><a title="oauth2client.client.Storage.put" class="py-name" href="#" onclick="return doclink('link-149', 'put', 'link-69');">put</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L460"></a><tt class="py-lineno">460</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">:</tt> </tt>
+<a name="L461"></a><tt class="py-lineno">461</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">.</tt><tt id="link-150" class="py-name"><a title="oauth2client.client.MemoryCache.set" class="py-name" href="#" onclick="return doclink('link-150', 'set', 'link-144');">set</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">,</tt> <tt id="link-151" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-151', 'credentials', 'link-105');">credentials</a></tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="apiclient.http.HttpRequest.to_json
 apiclient.http.MediaFileUpload.to_json
 apiclient.http.MediaIoBaseUpload.to_json
 apiclient.http.MediaUpload.to_json
 oauth2client.client.Credentials.to_json
-oauth2client.client.OAuth2Credentials.to_json" class="py-name" href="#" onclick="return doclink('link-137', 'to_json', 'link-92');">to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L451"></a><tt class="py-lineno">451</tt>  <tt class="py-line"> </tt>
-<a name="StorageByKeyName.locked_delete"></a><div id="StorageByKeyName.locked_delete-def"><a name="L452"></a><tt class="py-lineno">452</tt> <a class="py-toggle" href="#" id="StorageByKeyName.locked_delete-toggle" onclick="return toggle('StorageByKeyName.locked_delete');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html#locked_delete">locked_delete</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="StorageByKeyName.locked_delete-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName.locked_delete-expanded"><a name="L453"></a><tt class="py-lineno">453</tt>  <tt class="py-line">    <tt class="py-docstring">"""Delete Credential from datastore."""</tt> </tt>
-<a name="L454"></a><tt class="py-lineno">454</tt>  <tt class="py-line"> </tt>
-<a name="L455"></a><tt class="py-lineno">455</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">:</tt> </tt>
-<a name="L456"></a><tt class="py-lineno">456</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">.</tt><tt id="link-138" class="py-name"><a title="oauth2client.client.MemoryCache.delete
-oauth2client.client.Storage.delete" class="py-name" href="#" onclick="return doclink('link-138', 'delete', 'link-117');">delete</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt> </tt>
-<a name="L457"></a><tt class="py-lineno">457</tt>  <tt class="py-line"> </tt>
-<a name="L458"></a><tt class="py-lineno">458</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-139" class="py-name" targets="Method oauth2client.appengine.StorageByKeyName._delete_entity()=oauth2client.appengine.StorageByKeyName-class.html#_delete_entity"><a title="oauth2client.appengine.StorageByKeyName._delete_entity" class="py-name" href="#" onclick="return doclink('link-139', '_delete_entity', 'link-139');">_delete_entity</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L459"></a><tt class="py-lineno">459</tt>  <tt class="py-line"> </tt>
-<a name="CredentialsModel"></a><div id="CredentialsModel-def"><a name="L460"></a><tt class="py-lineno">460</tt>  <tt class="py-line"> </tt>
-<a name="L461"></a><tt class="py-lineno">461</tt> <a class="py-toggle" href="#" id="CredentialsModel-toggle" onclick="return toggle('CredentialsModel');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsModel-class.html">CredentialsModel</a><tt class="py-op">(</tt><tt class="py-base-class">db</tt><tt class="py-op">.</tt><tt class="py-base-class">Model</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CredentialsModel-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="CredentialsModel-expanded"><a name="L462"></a><tt class="py-lineno">462</tt>  <tt class="py-line">  <tt class="py-docstring">"""Storage for OAuth 2.0 Credentials</tt> </tt>
-<a name="L463"></a><tt class="py-lineno">463</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L464"></a><tt class="py-lineno">464</tt>  <tt class="py-line"><tt class="py-docstring">  Storage of the model is keyed by the user.user_id().</tt> </tt>
-<a name="L465"></a><tt class="py-lineno">465</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L466"></a><tt class="py-lineno">466</tt>  <tt class="py-line">  <tt id="link-140" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-140', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-op">=</tt> <tt id="link-141" class="py-name"><a title="oauth2client.appengine.CredentialsProperty" class="py-name" href="#" onclick="return doclink('link-141', 'CredentialsProperty', 'link-90');">CredentialsProperty</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L467"></a><tt class="py-lineno">467</tt>  <tt class="py-line"> </tt>
-<a name="CredentialsNDBModel"></a><div id="CredentialsNDBModel-def"><a name="L468"></a><tt class="py-lineno">468</tt>  <tt class="py-line"> </tt>
-<a name="L469"></a><tt class="py-lineno">469</tt> <a class="py-toggle" href="#" id="CredentialsNDBModel-toggle" onclick="return toggle('CredentialsNDBModel');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsNDBModel-class.html">CredentialsNDBModel</a><tt class="py-op">(</tt><tt class="py-base-class">ndb</tt><tt class="py-op">.</tt><tt class="py-base-class">Model</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CredentialsNDBModel-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="CredentialsNDBModel-expanded"><a name="L470"></a><tt class="py-lineno">470</tt>  <tt class="py-line">  <tt class="py-docstring">"""NDB Model for storage of OAuth 2.0 Credentials</tt> </tt>
-<a name="L471"></a><tt class="py-lineno">471</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L472"></a><tt class="py-lineno">472</tt>  <tt class="py-line"><tt class="py-docstring">  Since this model uses the same kind as CredentialsModel and has a property</tt> </tt>
-<a name="L473"></a><tt class="py-lineno">473</tt>  <tt class="py-line"><tt class="py-docstring">  which can serialize and deserialize Credentials correctly, it can be used</tt> </tt>
-<a name="L474"></a><tt class="py-lineno">474</tt>  <tt class="py-line"><tt class="py-docstring">  interchangeably with a CredentialsModel to access, insert and delete the same</tt> </tt>
-<a name="L475"></a><tt class="py-lineno">475</tt>  <tt class="py-line"><tt class="py-docstring">  entities. This simply provides an NDB model for interacting with the</tt> </tt>
-<a name="L476"></a><tt class="py-lineno">476</tt>  <tt class="py-line"><tt class="py-docstring">  same data the DB model interacts with.</tt> </tt>
-<a name="L477"></a><tt class="py-lineno">477</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L478"></a><tt class="py-lineno">478</tt>  <tt class="py-line"><tt class="py-docstring">  Storage of the model is keyed by the user.user_id().</tt> </tt>
-<a name="L479"></a><tt class="py-lineno">479</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L480"></a><tt class="py-lineno">480</tt>  <tt class="py-line">  <tt id="link-142" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-142', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-op">=</tt> <tt id="link-143" class="py-name" targets="Class oauth2client.appengine.CredentialsNDBProperty=oauth2client.appengine.CredentialsNDBProperty-class.html"><a title="oauth2client.appengine.CredentialsNDBProperty" class="py-name" href="#" onclick="return doclink('link-143', 'CredentialsNDBProperty', 'link-143');">CredentialsNDBProperty</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L481"></a><tt class="py-lineno">481</tt>  <tt class="py-line"> </tt>
-<a name="L482"></a><tt class="py-lineno">482</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
-<a name="CredentialsNDBModel._get_kind"></a><div id="CredentialsNDBModel._get_kind-def"><a name="L483"></a><tt class="py-lineno">483</tt> <a class="py-toggle" href="#" id="CredentialsNDBModel._get_kind-toggle" onclick="return toggle('CredentialsNDBModel._get_kind');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsNDBModel-class.html#_get_kind">_get_kind</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CredentialsNDBModel._get_kind-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="CredentialsNDBModel._get_kind-expanded"><a name="L484"></a><tt class="py-lineno">484</tt>  <tt class="py-line">    <tt class="py-docstring">"""Return the kind name for this class."""</tt> </tt>
-<a name="L485"></a><tt class="py-lineno">485</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'CredentialsModel'</tt> </tt>
-</div></div><a name="L486"></a><tt class="py-lineno">486</tt>  <tt class="py-line"> </tt>
-<a name="_build_state_value"></a><div id="_build_state_value-def"><a name="L487"></a><tt class="py-lineno">487</tt>  <tt class="py-line"> </tt>
-<a name="L488"></a><tt class="py-lineno">488</tt> <a class="py-toggle" href="#" id="_build_state_value-toggle" onclick="return toggle('_build_state_value');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine-module.html#_build_state_value">_build_state_value</a><tt class="py-op">(</tt><tt class="py-param">request_handler</tt><tt class="py-op">,</tt> <tt class="py-param">user</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_build_state_value-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_build_state_value-expanded"><a name="L489"></a><tt class="py-lineno">489</tt>  <tt class="py-line">  <tt class="py-docstring">"""Composes the value for the 'state' parameter.</tt> </tt>
-<a name="L490"></a><tt class="py-lineno">490</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L491"></a><tt class="py-lineno">491</tt>  <tt class="py-line"><tt class="py-docstring">  Packs the current request URI and an XSRF token into an opaque string that</tt> </tt>
-<a name="L492"></a><tt class="py-lineno">492</tt>  <tt class="py-line"><tt class="py-docstring">  can be passed to the authentication server via the 'state' parameter.</tt> </tt>
-<a name="L493"></a><tt class="py-lineno">493</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L494"></a><tt class="py-lineno">494</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L495"></a><tt class="py-lineno">495</tt>  <tt class="py-line"><tt class="py-docstring">    request_handler: webapp.RequestHandler, The request.</tt> </tt>
-<a name="L496"></a><tt class="py-lineno">496</tt>  <tt class="py-line"><tt class="py-docstring">    user: google.appengine.api.users.User, The current user.</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:</tt> </tt>
-<a name="L499"></a><tt class="py-lineno">499</tt>  <tt class="py-line"><tt class="py-docstring">    The state value as a string.</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-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name" targets="Method apiclient.http.HttpMock.request()=apiclient.http.HttpMock-class.html#request,Method apiclient.http.HttpMockSequence.request()=apiclient.http.HttpMockSequence-class.html#request,Method apiclient.model.BaseModel.request()=apiclient.model.BaseModel-class.html#request,Method apiclient.model.Model.request()=apiclient.model.Model-class.html#request"><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-144', 'request', 'link-144');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">url</tt> </tt>
-<a name="L502"></a><tt class="py-lineno">502</tt>  <tt class="py-line">  <tt class="py-name">token</tt> <tt class="py-op">=</tt> <tt id="link-145" class="py-name"><a title="oauth2client.xsrfutil" class="py-name" href="#" onclick="return doclink('link-145', 'xsrfutil', 'link-20');">xsrfutil</a></tt><tt class="py-op">.</tt><tt id="link-146" class="py-name" targets="Function oauth2client.xsrfutil.generate_token()=oauth2client.xsrfutil-module.html#generate_token"><a title="oauth2client.xsrfutil.generate_token" class="py-name" href="#" onclick="return doclink('link-146', 'generate_token', 'link-146');">generate_token</a></tt><tt class="py-op">(</tt><tt id="link-147" class="py-name" targets="Function oauth2client.appengine.xsrf_secret_key()=oauth2client.appengine-module.html#xsrf_secret_key"><a title="oauth2client.appengine.xsrf_secret_key" class="py-name" href="#" onclick="return doclink('link-147', 'xsrf_secret_key', 'link-147');">xsrf_secret_key</a></tt><tt class="py-op">(</tt><tt class="py-op">)</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="L503"></a><tt class="py-lineno">503</tt>  <tt class="py-line">                                  <tt class="py-name">action_id</tt><tt class="py-op">=</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L504"></a><tt class="py-lineno">504</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt>  <tt class="py-name">uri</tt> <tt class="py-op">+</tt> <tt class="py-string">':'</tt> <tt class="py-op">+</tt> <tt class="py-name">token</tt> </tt>
-</div><a name="L505"></a><tt class="py-lineno">505</tt>  <tt class="py-line"> </tt>
-<a name="_parse_state_value"></a><div id="_parse_state_value-def"><a name="L506"></a><tt class="py-lineno">506</tt>  <tt class="py-line"> </tt>
-<a name="L507"></a><tt class="py-lineno">507</tt> <a class="py-toggle" href="#" id="_parse_state_value-toggle" onclick="return toggle('_parse_state_value');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine-module.html#_parse_state_value">_parse_state_value</a><tt class="py-op">(</tt><tt class="py-param">state</tt><tt class="py-op">,</tt> <tt class="py-param">user</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_parse_state_value-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_parse_state_value-expanded"><a name="L508"></a><tt class="py-lineno">508</tt>  <tt class="py-line">  <tt class="py-docstring">"""Parse the value of the 'state' parameter.</tt> </tt>
+oauth2client.client.OAuth2Credentials.to_json" class="py-name" href="#" onclick="return doclink('link-152', 'to_json', 'link-103');">to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L462"></a><tt class="py-lineno">462</tt>  <tt class="py-line"> </tt>
+<a name="StorageByKeyName.locked_delete"></a><div id="StorageByKeyName.locked_delete-def"><a name="L463"></a><tt class="py-lineno">463</tt> <a class="py-toggle" href="#" id="StorageByKeyName.locked_delete-toggle" onclick="return toggle('StorageByKeyName.locked_delete');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.StorageByKeyName-class.html#locked_delete">locked_delete</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="StorageByKeyName.locked_delete-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="StorageByKeyName.locked_delete-expanded"><a name="L464"></a><tt class="py-lineno">464</tt>  <tt class="py-line">    <tt class="py-docstring">"""Delete Credential from datastore."""</tt> </tt>
+<a name="L465"></a><tt class="py-lineno">465</tt>  <tt class="py-line"> </tt>
+<a name="L466"></a><tt class="py-lineno">466</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</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">self</tt><tt class="py-op">.</tt><tt class="py-name">_cache</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name"><a title="oauth2client.client.MemoryCache.delete
+oauth2client.client.Storage.delete" class="py-name" href="#" onclick="return doclink('link-153', 'delete', 'link-132');">delete</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_key_name</tt><tt class="py-op">)</tt> </tt>
+<a name="L468"></a><tt class="py-lineno">468</tt>  <tt class="py-line"> </tt>
+<a name="L469"></a><tt class="py-lineno">469</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-154" class="py-name" targets="Method oauth2client.appengine.StorageByKeyName._delete_entity()=oauth2client.appengine.StorageByKeyName-class.html#_delete_entity"><a title="oauth2client.appengine.StorageByKeyName._delete_entity" class="py-name" href="#" onclick="return doclink('link-154', '_delete_entity', 'link-154');">_delete_entity</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L470"></a><tt class="py-lineno">470</tt>  <tt class="py-line"> </tt>
+<a name="CredentialsModel"></a><div id="CredentialsModel-def"><a name="L471"></a><tt class="py-lineno">471</tt>  <tt class="py-line"> </tt>
+<a name="L472"></a><tt class="py-lineno">472</tt> <a class="py-toggle" href="#" id="CredentialsModel-toggle" onclick="return toggle('CredentialsModel');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsModel-class.html">CredentialsModel</a><tt class="py-op">(</tt><tt class="py-base-class">db</tt><tt class="py-op">.</tt><tt class="py-base-class">Model</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="CredentialsModel-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="CredentialsModel-expanded"><a name="L473"></a><tt class="py-lineno">473</tt>  <tt class="py-line">  <tt class="py-docstring">"""Storage for OAuth 2.0 Credentials</tt> </tt>
+<a name="L474"></a><tt class="py-lineno">474</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L475"></a><tt class="py-lineno">475</tt>  <tt class="py-line"><tt class="py-docstring">  Storage of the model is keyed by the user.user_id().</tt> </tt>
+<a name="L476"></a><tt class="py-lineno">476</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L477"></a><tt class="py-lineno">477</tt>  <tt class="py-line">  <tt id="link-155" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-155', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-op">=</tt> <tt id="link-156" class="py-name"><a title="oauth2client.appengine.CredentialsProperty" class="py-name" href="#" onclick="return doclink('link-156', 'CredentialsProperty', 'link-101');">CredentialsProperty</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L478"></a><tt class="py-lineno">478</tt>  <tt class="py-line"> </tt>
+<a name="L479"></a><tt class="py-lineno">479</tt>  <tt class="py-line"> </tt>
+<a name="L480"></a><tt class="py-lineno">480</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt id="link-157" class="py-name"><a title="oauth2client.appengine.ndb" class="py-name" href="#" onclick="return doclink('link-157', 'ndb', 'link-47');">ndb</a></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="CredentialsNDBModel"></a><div id="CredentialsNDBModel-def"><a name="L481"></a><tt class="py-lineno">481</tt> <a class="py-toggle" href="#" id="CredentialsNDBModel-toggle" onclick="return toggle('CredentialsNDBModel');">-</a><tt class="py-line">  <tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsNDBModel-class.html">CredentialsNDBModel</a><tt class="py-op">(</tt><tt class="py-base-class">ndb</tt><tt class="py-op">.</tt><tt class="py-base-class">Model</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="CredentialsNDBModel-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="CredentialsNDBModel-expanded"><a name="L482"></a><tt class="py-lineno">482</tt>  <tt class="py-line">    <tt class="py-docstring">"""NDB Model for storage of OAuth 2.0 Credentials</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">    Since this model uses the same kind as CredentialsModel and has a property</tt> </tt>
+<a name="L485"></a><tt class="py-lineno">485</tt>  <tt class="py-line"><tt class="py-docstring">    which can serialize and deserialize Credentials correctly, it can be used</tt> </tt>
+<a name="L486"></a><tt class="py-lineno">486</tt>  <tt class="py-line"><tt class="py-docstring">    interchangeably with a CredentialsModel to access, insert and delete the</tt> </tt>
+<a name="L487"></a><tt class="py-lineno">487</tt>  <tt class="py-line"><tt class="py-docstring">    same entities. This simply provides an NDB model for interacting with the</tt> </tt>
+<a name="L488"></a><tt class="py-lineno">488</tt>  <tt class="py-line"><tt class="py-docstring">    same data the DB model interacts with.</tt> </tt>
+<a name="L489"></a><tt class="py-lineno">489</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L490"></a><tt class="py-lineno">490</tt>  <tt class="py-line"><tt class="py-docstring">    Storage of the model is keyed by the user.user_id().</tt> </tt>
+<a name="L491"></a><tt class="py-lineno">491</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L492"></a><tt class="py-lineno">492</tt>  <tt class="py-line">    <tt id="link-158" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-158', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-op">=</tt> <tt id="link-159" class="py-name" targets="Class oauth2client.appengine.CredentialsNDBProperty=oauth2client.appengine.CredentialsNDBProperty-class.html"><a title="oauth2client.appengine.CredentialsNDBProperty" class="py-name" href="#" onclick="return doclink('link-159', 'CredentialsNDBProperty', 'link-159');">CredentialsNDBProperty</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L493"></a><tt class="py-lineno">493</tt>  <tt class="py-line"> </tt>
+<a name="L494"></a><tt class="py-lineno">494</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="CredentialsNDBModel._get_kind"></a><div id="CredentialsNDBModel._get_kind-def"><a name="L495"></a><tt class="py-lineno">495</tt> <a class="py-toggle" href="#" id="CredentialsNDBModel._get_kind-toggle" onclick="return toggle('CredentialsNDBModel._get_kind');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.CredentialsNDBModel-class.html#_get_kind">_get_kind</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="CredentialsNDBModel._get_kind-collapsed" style="display:none;" pad="+++" indent="++++++++++"></div><div id="CredentialsNDBModel._get_kind-expanded"><a name="L496"></a><tt class="py-lineno">496</tt>  <tt class="py-line">      <tt class="py-docstring">"""Return the kind name for this class."""</tt> </tt>
+<a name="L497"></a><tt class="py-lineno">497</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-string">'CredentialsModel'</tt> </tt>
+</div></div><a name="L498"></a><tt class="py-lineno">498</tt>  <tt class="py-line"> </tt>
+<a name="_build_state_value"></a><div id="_build_state_value-def"><a name="L499"></a><tt class="py-lineno">499</tt>  <tt class="py-line"> </tt>
+<a name="L500"></a><tt class="py-lineno">500</tt> <a class="py-toggle" href="#" id="_build_state_value-toggle" onclick="return toggle('_build_state_value');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine-module.html#_build_state_value">_build_state_value</a><tt class="py-op">(</tt><tt class="py-param">request_handler</tt><tt class="py-op">,</tt> <tt class="py-param">user</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_build_state_value-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_build_state_value-expanded"><a name="L501"></a><tt class="py-lineno">501</tt>  <tt class="py-line">  <tt class="py-docstring">"""Composes the value for the 'state' parameter.</tt> </tt>
+<a name="L502"></a><tt class="py-lineno">502</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L503"></a><tt class="py-lineno">503</tt>  <tt class="py-line"><tt class="py-docstring">  Packs the current request URI and an XSRF token into an opaque string that</tt> </tt>
+<a name="L504"></a><tt class="py-lineno">504</tt>  <tt class="py-line"><tt class="py-docstring">  can be passed to the authentication server via the 'state' parameter.</tt> </tt>
+<a name="L505"></a><tt class="py-lineno">505</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L506"></a><tt class="py-lineno">506</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L507"></a><tt class="py-lineno">507</tt>  <tt class="py-line"><tt class="py-docstring">    request_handler: webapp.RequestHandler, The request.</tt> </tt>
+<a name="L508"></a><tt class="py-lineno">508</tt>  <tt class="py-line"><tt class="py-docstring">    user: google.appengine.api.users.User, The current user.</tt> </tt>
 <a name="L509"></a><tt class="py-lineno">509</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L510"></a><tt class="py-lineno">510</tt>  <tt class="py-line"><tt class="py-docstring">  Parses the value and validates the XSRF token in the state parameter.</tt> </tt>
-<a name="L511"></a><tt class="py-lineno">511</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L512"></a><tt class="py-lineno">512</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L513"></a><tt class="py-lineno">513</tt>  <tt class="py-line"><tt class="py-docstring">    state: string, The value of the state parameter.</tt> </tt>
-<a name="L514"></a><tt class="py-lineno">514</tt>  <tt class="py-line"><tt class="py-docstring">    user: google.appengine.api.users.User, The current user.</tt> </tt>
-<a name="L515"></a><tt class="py-lineno">515</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L516"></a><tt class="py-lineno">516</tt>  <tt class="py-line"><tt class="py-docstring">  Raises:</tt> </tt>
-<a name="L517"></a><tt class="py-lineno">517</tt>  <tt class="py-line"><tt class="py-docstring">    InvalidXsrfTokenError: if the XSRF token is invalid.</tt> </tt>
-<a name="L518"></a><tt class="py-lineno">518</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L519"></a><tt class="py-lineno">519</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L520"></a><tt class="py-lineno">520</tt>  <tt class="py-line"><tt class="py-docstring">    The redirect URI.</tt> </tt>
-<a name="L521"></a><tt class="py-lineno">521</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L522"></a><tt class="py-lineno">522</tt>  <tt class="py-line">  <tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">token</tt> <tt class="py-op">=</tt> <tt class="py-name">state</tt><tt class="py-op">.</tt><tt class="py-name">rsplit</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</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-keyword">not</tt> <tt id="link-148" class="py-name"><a title="oauth2client.xsrfutil" class="py-name" href="#" onclick="return doclink('link-148', 'xsrfutil', 'link-20');">xsrfutil</a></tt><tt class="py-op">.</tt><tt id="link-149" class="py-name" targets="Function oauth2client.xsrfutil.validate_token()=oauth2client.xsrfutil-module.html#validate_token"><a title="oauth2client.xsrfutil.validate_token" class="py-name" href="#" onclick="return doclink('link-149', 'validate_token', 'link-149');">validate_token</a></tt><tt class="py-op">(</tt><tt id="link-150" class="py-name"><a title="oauth2client.appengine.xsrf_secret_key" class="py-name" href="#" onclick="return doclink('link-150', 'xsrf_secret_key', 'link-147');">xsrf_secret_key</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">token</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="L524"></a><tt class="py-lineno">524</tt>  <tt class="py-line">                                 <tt class="py-name">action_id</tt><tt class="py-op">=</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L525"></a><tt class="py-lineno">525</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-151" class="py-name" targets="Class oauth2client.appengine.InvalidXsrfTokenError=oauth2client.appengine.InvalidXsrfTokenError-class.html"><a title="oauth2client.appengine.InvalidXsrfTokenError" class="py-name" href="#" onclick="return doclink('link-151', 'InvalidXsrfTokenError', 'link-151');">InvalidXsrfTokenError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </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 class="py-keyword">return</tt> <tt class="py-name">uri</tt> </tt>
-</div><a name="L528"></a><tt class="py-lineno">528</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Decorator"></a><div id="OAuth2Decorator-def"><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="OAuth2Decorator-toggle" onclick="return toggle('OAuth2Decorator');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html">OAuth2Decorator</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Decorator-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="OAuth2Decorator-expanded"><a name="L531"></a><tt class="py-lineno">531</tt>  <tt class="py-line">  <tt class="py-docstring">"""Utility for making OAuth 2.0 easier.</tt> </tt>
-<a name="L532"></a><tt class="py-lineno">532</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L533"></a><tt class="py-lineno">533</tt>  <tt class="py-line"><tt class="py-docstring">  Instantiate and then use with oauth_required or oauth_aware</tt> </tt>
-<a name="L534"></a><tt class="py-lineno">534</tt>  <tt class="py-line"><tt class="py-docstring">  as decorators on webapp.RequestHandler methods.</tt> </tt>
-<a name="L535"></a><tt class="py-lineno">535</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L536"></a><tt class="py-lineno">536</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
-<a name="L537"></a><tt class="py-lineno">537</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L538"></a><tt class="py-lineno">538</tt>  <tt class="py-line"><tt class="py-docstring">    decorator = OAuth2Decorator(</tt> </tt>
-<a name="L539"></a><tt class="py-lineno">539</tt>  <tt class="py-line"><tt class="py-docstring">        client_id='837...ent.com',</tt> </tt>
-<a name="L540"></a><tt class="py-lineno">540</tt>  <tt class="py-line"><tt class="py-docstring">        client_secret='Qh...wwI',</tt> </tt>
-<a name="L541"></a><tt class="py-lineno">541</tt>  <tt class="py-line"><tt class="py-docstring">        scope='https://www.googleapis.com/auth/plus')</tt> </tt>
-<a name="L542"></a><tt class="py-lineno">542</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L543"></a><tt class="py-lineno">543</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L544"></a><tt class="py-lineno">544</tt>  <tt class="py-line"><tt class="py-docstring">    class MainHandler(webapp.RequestHandler):</tt> </tt>
-<a name="L545"></a><tt class="py-lineno">545</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L546"></a><tt class="py-lineno">546</tt>  <tt class="py-line"><tt class="py-docstring">      @decorator.oauth_required</tt> </tt>
-<a name="L547"></a><tt class="py-lineno">547</tt>  <tt class="py-line"><tt class="py-docstring">      def get(self):</tt> </tt>
-<a name="L548"></a><tt class="py-lineno">548</tt>  <tt class="py-line"><tt class="py-docstring">        http = decorator.http()</tt> </tt>
-<a name="L549"></a><tt class="py-lineno">549</tt>  <tt class="py-line"><tt class="py-docstring">        # http is authorized with the user's Credentials and can be used</tt> </tt>
-<a name="L550"></a><tt class="py-lineno">550</tt>  <tt class="py-line"><tt class="py-docstring">        # in API calls</tt> </tt>
-<a name="L551"></a><tt class="py-lineno">551</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L552"></a><tt class="py-lineno">552</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L553"></a><tt class="py-lineno">553</tt>  <tt class="py-line"> </tt>
-<a name="L554"></a><tt class="py-lineno">554</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-152', 'positional', 'link-68');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
-<a name="OAuth2Decorator.__init__"></a><div id="OAuth2Decorator.__init__-def"><a name="L555"></a><tt class="py-lineno">555</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.__init__-toggle" onclick="return toggle('OAuth2Decorator.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-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">client_id</tt><tt class="py-op">,</tt> <tt class="py-param">client_secret</tt><tt class="py-op">,</tt> <tt class="py-param">scope</tt><tt class="py-op">,</tt> </tt>
-<a name="L556"></a><tt class="py-lineno">556</tt>  <tt class="py-line">               <tt class="py-param">auth_uri</tt><tt class="py-op">=</tt><tt class="py-string">'https://accounts.google.com/o/oauth2/auth'</tt><tt class="py-op">,</tt> </tt>
-<a name="L557"></a><tt class="py-lineno">557</tt>  <tt class="py-line">               <tt class="py-param">token_uri</tt><tt class="py-op">=</tt><tt class="py-string">'https://accounts.google.com/o/oauth2/token'</tt><tt class="py-op">,</tt> </tt>
-<a name="L558"></a><tt class="py-lineno">558</tt>  <tt class="py-line">               <tt class="py-param">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L559"></a><tt class="py-lineno">559</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>
-<a name="L560"></a><tt class="py-lineno">560</tt>  <tt class="py-line">               <tt class="py-param">callback_path</tt><tt class="py-op">=</tt><tt class="py-string">'/oauth2callback'</tt><tt class="py-op">,</tt> </tt>
-<a name="L561"></a><tt class="py-lineno">561</tt>  <tt class="py-line">               <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Decorator.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.__init__-expanded"><a name="L562"></a><tt class="py-lineno">562</tt>  <tt class="py-line"> </tt>
-<a name="L563"></a><tt class="py-lineno">563</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for OAuth2Decorator</tt> </tt>
-<a name="L564"></a><tt class="py-lineno">564</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L565"></a><tt class="py-lineno">565</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L566"></a><tt class="py-lineno">566</tt>  <tt class="py-line"><tt class="py-docstring">      client_id: string, client identifier.</tt> </tt>
-<a name="L567"></a><tt class="py-lineno">567</tt>  <tt class="py-line"><tt class="py-docstring">      client_secret: string client secret.</tt> </tt>
-<a name="L568"></a><tt class="py-lineno">568</tt>  <tt class="py-line"><tt class="py-docstring">      scope: string or iterable of strings, scope(s) of the credentials being</tt> </tt>
-<a name="L569"></a><tt class="py-lineno">569</tt>  <tt class="py-line"><tt class="py-docstring">        requested.</tt> </tt>
-<a name="L570"></a><tt class="py-lineno">570</tt>  <tt class="py-line"><tt class="py-docstring">      auth_uri: string, URI for authorization endpoint. For convenience</tt> </tt>
-<a name="L571"></a><tt class="py-lineno">571</tt>  <tt class="py-line"><tt class="py-docstring">        defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
-<a name="L572"></a><tt class="py-lineno">572</tt>  <tt class="py-line"><tt class="py-docstring">      token_uri: string, URI for token endpoint. For convenience</tt> </tt>
-<a name="L573"></a><tt class="py-lineno">573</tt>  <tt class="py-line"><tt class="py-docstring">        defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
-<a name="L574"></a><tt class="py-lineno">574</tt>  <tt class="py-line"><tt class="py-docstring">      user_agent: string, User agent of your application, default to None.</tt> </tt>
-<a name="L575"></a><tt class="py-lineno">575</tt>  <tt class="py-line"><tt class="py-docstring">      message: Message to display if there are problems with the OAuth 2.0</tt> </tt>
-<a name="L576"></a><tt class="py-lineno">576</tt>  <tt class="py-line"><tt class="py-docstring">        configuration. The message may contain HTML and will be presented on the</tt> </tt>
-<a name="L577"></a><tt class="py-lineno">577</tt>  <tt class="py-line"><tt class="py-docstring">        web interface for any method that uses the decorator.</tt> </tt>
-<a name="L578"></a><tt class="py-lineno">578</tt>  <tt class="py-line"><tt class="py-docstring">      callback_path: string, The absolute path to use as the callback URI. Note</tt> </tt>
-<a name="L579"></a><tt class="py-lineno">579</tt>  <tt class="py-line"><tt class="py-docstring">        that this must match up with the URI given when registering the</tt> </tt>
-<a name="L580"></a><tt class="py-lineno">580</tt>  <tt class="py-line"><tt class="py-docstring">        application in the APIs Console.</tt> </tt>
-<a name="L581"></a><tt class="py-lineno">581</tt>  <tt class="py-line"><tt class="py-docstring">      **kwargs: dict, Keyword arguments are be passed along as kwargs to the</tt> </tt>
-<a name="L582"></a><tt class="py-lineno">582</tt>  <tt class="py-line"><tt class="py-docstring">        OAuth2WebServerFlow constructor.</tt> </tt>
-<a name="L583"></a><tt class="py-lineno">583</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L584"></a><tt class="py-lineno">584</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L585"></a><tt class="py-lineno">585</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-153', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L586"></a><tt class="py-lineno">586</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_client_id</tt> <tt class="py-op">=</tt> <tt class="py-name">client_id</tt> </tt>
-<a name="L587"></a><tt class="py-lineno">587</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_client_secret</tt> <tt class="py-op">=</tt> <tt class="py-name">client_secret</tt> </tt>
-<a name="L588"></a><tt class="py-lineno">588</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_scope</tt> <tt class="py-op">=</tt> <tt id="link-154" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-154', 'util', 'link-11');">util</a></tt><tt class="py-op">.</tt><tt id="link-155" class="py-name"><a title="oauth2client.util.scopes_to_string" class="py-name" href="#" onclick="return doclink('link-155', 'scopes_to_string', 'link-70');">scopes_to_string</a></tt><tt class="py-op">(</tt><tt class="py-name">scope</tt><tt class="py-op">)</tt> </tt>
-<a name="L589"></a><tt class="py-lineno">589</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_auth_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">auth_uri</tt> </tt>
-<a name="L590"></a><tt class="py-lineno">590</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_token_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">token_uri</tt> </tt>
-<a name="L591"></a><tt class="py-lineno">591</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_user_agent</tt> <tt class="py-op">=</tt> <tt class="py-name">user_agent</tt> </tt>
-<a name="L592"></a><tt class="py-lineno">592</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_kwargs</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt> </tt>
-<a name="L593"></a><tt class="py-lineno">593</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="L594"></a><tt class="py-lineno">594</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">False</tt> </tt>
-<a name="L595"></a><tt class="py-lineno">595</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callback_path</tt> <tt class="py-op">=</tt> <tt id="link-156" class="py-name" targets="Method oauth2client.appengine.OAuth2Decorator.callback_path()=oauth2client.appengine.OAuth2Decorator-class.html#callback_path"><a title="oauth2client.appengine.OAuth2Decorator.callback_path" class="py-name" href="#" onclick="return doclink('link-156', 'callback_path', 'link-156');">callback_path</a></tt> </tt>
-</div><a name="L596"></a><tt class="py-lineno">596</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Decorator._display_error_message"></a><div id="OAuth2Decorator._display_error_message-def"><a name="L597"></a><tt class="py-lineno">597</tt> <a class="py-toggle" href="#" id="OAuth2Decorator._display_error_message-toggle" onclick="return toggle('OAuth2Decorator._display_error_message');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#_display_error_message">_display_error_message</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">request_handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Decorator._display_error_message-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator._display_error_message-expanded"><a name="L598"></a><tt class="py-lineno">598</tt>  <tt class="py-line">    <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name" targets="Method apiclient.model.BaseModel.response()=apiclient.model.BaseModel-class.html#response,Method apiclient.model.Model.response()=apiclient.model.Model-class.html#response"><a title="apiclient.model.BaseModel.response
-apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-157', 'response', 'link-157');">response</a></tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-158" class="py-name" targets="Method apiclient.push.Headers.write()=apiclient.push.Headers-class.html#write"><a title="apiclient.push.Headers.write" class="py-name" href="#" onclick="return doclink('link-158', 'write', 'link-158');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">'&lt;html&gt;&lt;body&gt;'</tt><tt class="py-op">)</tt> </tt>
-<a name="L599"></a><tt class="py-lineno">599</tt>  <tt class="py-line">    <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-159" class="py-name"><a title="apiclient.model.BaseModel.response
-apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-159', 'response', 'link-157');">response</a></tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-160" class="py-name"><a title="apiclient.push.Headers.write" class="py-name" href="#" onclick="return doclink('link-160', 'write', 'link-158');">write</a></tt><tt class="py-op">(</tt><tt id="link-161" class="py-name" targets="Function oauth2client.appengine._safe_html()=oauth2client.appengine-module.html#_safe_html"><a title="oauth2client.appengine._safe_html" class="py-name" href="#" onclick="return doclink('link-161', '_safe_html', 'link-161');">_safe_html</a></tt><tt class="py-op">(</tt><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-op">)</tt> </tt>
-<a name="L600"></a><tt class="py-lineno">600</tt>  <tt class="py-line">    <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-162" class="py-name"><a title="apiclient.model.BaseModel.response
-apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-162', 'response', 'link-157');">response</a></tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="apiclient.push.Headers.write" class="py-name" href="#" onclick="return doclink('link-163', 'write', 'link-158');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">'&lt;/body&gt;&lt;/html&gt;'</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L601"></a><tt class="py-lineno">601</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Decorator.oauth_required"></a><div id="OAuth2Decorator.oauth_required-def"><a name="L602"></a><tt class="py-lineno">602</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.oauth_required-toggle" onclick="return toggle('OAuth2Decorator.oauth_required');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#oauth_required">oauth_required</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Decorator.oauth_required-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.oauth_required-expanded"><a name="L603"></a><tt class="py-lineno">603</tt>  <tt class="py-line">    <tt class="py-docstring">"""Decorator that starts the OAuth 2.0 dance.</tt> </tt>
-<a name="L604"></a><tt class="py-lineno">604</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L605"></a><tt class="py-lineno">605</tt>  <tt class="py-line"><tt class="py-docstring">    Starts the OAuth dance for the logged in user if they haven't already</tt> </tt>
-<a name="L606"></a><tt class="py-lineno">606</tt>  <tt class="py-line"><tt class="py-docstring">    granted access for this application.</tt> </tt>
-<a name="L607"></a><tt class="py-lineno">607</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L608"></a><tt class="py-lineno">608</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L609"></a><tt class="py-lineno">609</tt>  <tt class="py-line"><tt class="py-docstring">      method: callable, to be decorated method of a webapp.RequestHandler</tt> </tt>
-<a name="L610"></a><tt class="py-lineno">610</tt>  <tt class="py-line"><tt class="py-docstring">        instance.</tt> </tt>
-<a name="L611"></a><tt class="py-lineno">611</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L612"></a><tt class="py-lineno">612</tt>  <tt class="py-line"> </tt>
-<a name="L613"></a><tt class="py-lineno">613</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">check_oauth</tt><tt class="py-op">(</tt><tt class="py-param">request_handler</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L614"></a><tt class="py-lineno">614</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error</tt><tt class="py-op">:</tt> </tt>
-<a name="L615"></a><tt class="py-lineno">615</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-164" class="py-name" targets="Method oauth2client.appengine.OAuth2Decorator._display_error_message()=oauth2client.appengine.OAuth2Decorator-class.html#_display_error_message"><a title="oauth2client.appengine.OAuth2Decorator._display_error_message" class="py-name" href="#" onclick="return doclink('link-164', '_display_error_message', 'link-164');">_display_error_message</a></tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">)</tt> </tt>
-<a name="L616"></a><tt class="py-lineno">616</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> </tt>
-<a name="L617"></a><tt class="py-lineno">617</tt>  <tt class="py-line"> </tt>
-<a name="L618"></a><tt class="py-lineno">618</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="L619"></a><tt class="py-lineno">619</tt>  <tt class="py-line">      <tt class="py-comment"># Don't use @login_decorator as this could be used in a POST request.</tt> </tt>
-<a name="L620"></a><tt class="py-lineno">620</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">user</tt><tt class="py-op">:</tt> </tt>
-<a name="L621"></a><tt class="py-lineno">621</tt>  <tt class="py-line">        <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt class="py-name">redirect</tt><tt class="py-op">(</tt><tt class="py-name">users</tt><tt class="py-op">.</tt><tt class="py-name">create_login_url</tt><tt class="py-op">(</tt> </tt>
-<a name="L622"></a><tt class="py-lineno">622</tt>  <tt class="py-line">            <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-165" class="py-name"><a title="apiclient.http.HttpMock.request
+<a name="L510"></a><tt class="py-lineno">510</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L511"></a><tt class="py-lineno">511</tt>  <tt class="py-line"><tt class="py-docstring">    The state value as a string.</tt> </tt>
+<a name="L512"></a><tt class="py-lineno">512</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L513"></a><tt class="py-lineno">513</tt>  <tt class="py-line">  <tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-160" class="py-name" targets="Method apiclient.http.HttpMock.request()=apiclient.http.HttpMock-class.html#request,Method apiclient.http.HttpMockSequence.request()=apiclient.http.HttpMockSequence-class.html#request,Method apiclient.model.BaseModel.request()=apiclient.model.BaseModel-class.html#request,Method apiclient.model.Model.request()=apiclient.model.Model-class.html#request"><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-165', 'request', 'link-144');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L623"></a><tt class="py-lineno">623</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> </tt>
-<a name="L624"></a><tt class="py-lineno">624</tt>  <tt class="py-line"> </tt>
-<a name="L625"></a><tt class="py-lineno">625</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-166" class="py-name" targets="Method oauth2client.appengine.OAuth2Decorator._create_flow()=oauth2client.appengine.OAuth2Decorator-class.html#_create_flow"><a title="oauth2client.appengine.OAuth2Decorator._create_flow" class="py-name" href="#" onclick="return doclink('link-166', '_create_flow', 'link-166');">_create_flow</a></tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">)</tt> </tt>
-<a name="L626"></a><tt class="py-lineno">626</tt>  <tt class="py-line"> </tt>
-<a name="L627"></a><tt class="py-lineno">627</tt>  <tt class="py-line">      <tt class="py-comment"># Store the request URI in 'state' so we can use it later</tt> </tt>
-<a name="L628"></a><tt class="py-lineno">628</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">[</tt><tt class="py-string">'state'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-167" class="py-name" targets="Function oauth2client.appengine._build_state_value()=oauth2client.appengine-module.html#_build_state_value"><a title="oauth2client.appengine._build_state_value" class="py-name" href="#" onclick="return doclink('link-167', '_build_state_value', 'link-167');">_build_state_value</a></tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">,</tt> <tt class="py-name">user</tt><tt class="py-op">)</tt> </tt>
-<a name="L629"></a><tt class="py-lineno">629</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-168" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-168', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-op">=</tt> <tt id="link-169" class="py-name" targets="Class oauth2client.appengine.StorageByKeyName=oauth2client.appengine.StorageByKeyName-class.html"><a title="oauth2client.appengine.StorageByKeyName" class="py-name" href="#" onclick="return doclink('link-169', 'StorageByKeyName', 'link-169');">StorageByKeyName</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L630"></a><tt class="py-lineno">630</tt>  <tt class="py-line">          <tt id="link-170" class="py-name" targets="Class oauth2client.appengine.CredentialsModel=oauth2client.appengine.CredentialsModel-class.html"><a title="oauth2client.appengine.CredentialsModel" class="py-name" href="#" onclick="return doclink('link-170', 'CredentialsModel', 'link-170');">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-171" class="py-name"><a title="apiclient.schema.Schemas.get
+apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-160', 'request', 'link-160');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">url</tt> </tt>
+<a name="L514"></a><tt class="py-lineno">514</tt>  <tt class="py-line">  <tt class="py-name">token</tt> <tt class="py-op">=</tt> <tt id="link-161" class="py-name"><a title="oauth2client.xsrfutil" class="py-name" href="#" onclick="return doclink('link-161', 'xsrfutil', 'link-24');">xsrfutil</a></tt><tt class="py-op">.</tt><tt id="link-162" class="py-name" targets="Function oauth2client.xsrfutil.generate_token()=oauth2client.xsrfutil-module.html#generate_token"><a title="oauth2client.xsrfutil.generate_token" class="py-name" href="#" onclick="return doclink('link-162', 'generate_token', 'link-162');">generate_token</a></tt><tt class="py-op">(</tt><tt id="link-163" class="py-name" targets="Function oauth2client.appengine.xsrf_secret_key()=oauth2client.appengine-module.html#xsrf_secret_key"><a title="oauth2client.appengine.xsrf_secret_key" class="py-name" href="#" onclick="return doclink('link-163', 'xsrf_secret_key', 'link-163');">xsrf_secret_key</a></tt><tt class="py-op">(</tt><tt class="py-op">)</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="L515"></a><tt class="py-lineno">515</tt>  <tt class="py-line">                                  <tt class="py-name">action_id</tt><tt class="py-op">=</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L516"></a><tt class="py-lineno">516</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt>  <tt class="py-name">uri</tt> <tt class="py-op">+</tt> <tt class="py-string">':'</tt> <tt class="py-op">+</tt> <tt class="py-name">token</tt> </tt>
+</div><a name="L517"></a><tt class="py-lineno">517</tt>  <tt class="py-line"> </tt>
+<a name="_parse_state_value"></a><div id="_parse_state_value-def"><a name="L518"></a><tt class="py-lineno">518</tt>  <tt class="py-line"> </tt>
+<a name="L519"></a><tt class="py-lineno">519</tt> <a class="py-toggle" href="#" id="_parse_state_value-toggle" onclick="return toggle('_parse_state_value');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine-module.html#_parse_state_value">_parse_state_value</a><tt class="py-op">(</tt><tt class="py-param">state</tt><tt class="py-op">,</tt> <tt class="py-param">user</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_parse_state_value-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_parse_state_value-expanded"><a name="L520"></a><tt class="py-lineno">520</tt>  <tt class="py-line">  <tt class="py-docstring">"""Parse the value of the 'state' parameter.</tt> </tt>
+<a name="L521"></a><tt class="py-lineno">521</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L522"></a><tt class="py-lineno">522</tt>  <tt class="py-line"><tt class="py-docstring">  Parses the value and validates the XSRF token in the state parameter.</tt> </tt>
+<a name="L523"></a><tt class="py-lineno">523</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L524"></a><tt class="py-lineno">524</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L525"></a><tt class="py-lineno">525</tt>  <tt class="py-line"><tt class="py-docstring">    state: string, The value of the state parameter.</tt> </tt>
+<a name="L526"></a><tt class="py-lineno">526</tt>  <tt class="py-line"><tt class="py-docstring">    user: google.appengine.api.users.User, The current user.</tt> </tt>
+<a name="L527"></a><tt class="py-lineno">527</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L528"></a><tt class="py-lineno">528</tt>  <tt class="py-line"><tt class="py-docstring">  Raises:</tt> </tt>
+<a name="L529"></a><tt class="py-lineno">529</tt>  <tt class="py-line"><tt class="py-docstring">    InvalidXsrfTokenError: if the XSRF token is invalid.</tt> </tt>
+<a name="L530"></a><tt class="py-lineno">530</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L531"></a><tt class="py-lineno">531</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L532"></a><tt class="py-lineno">532</tt>  <tt class="py-line"><tt class="py-docstring">    The redirect URI.</tt> </tt>
+<a name="L533"></a><tt class="py-lineno">533</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L534"></a><tt class="py-lineno">534</tt>  <tt class="py-line">  <tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">token</tt> <tt class="py-op">=</tt> <tt class="py-name">state</tt><tt class="py-op">.</tt><tt class="py-name">rsplit</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L535"></a><tt class="py-lineno">535</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-164" class="py-name"><a title="oauth2client.xsrfutil" class="py-name" href="#" onclick="return doclink('link-164', 'xsrfutil', 'link-24');">xsrfutil</a></tt><tt class="py-op">.</tt><tt id="link-165" class="py-name" targets="Function oauth2client.xsrfutil.validate_token()=oauth2client.xsrfutil-module.html#validate_token"><a title="oauth2client.xsrfutil.validate_token" class="py-name" href="#" onclick="return doclink('link-165', 'validate_token', 'link-165');">validate_token</a></tt><tt class="py-op">(</tt><tt id="link-166" class="py-name"><a title="oauth2client.appengine.xsrf_secret_key" class="py-name" href="#" onclick="return doclink('link-166', 'xsrf_secret_key', 'link-163');">xsrf_secret_key</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">token</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="L536"></a><tt class="py-lineno">536</tt>  <tt class="py-line">                                 <tt class="py-name">action_id</tt><tt class="py-op">=</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L537"></a><tt class="py-lineno">537</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-167" class="py-name" targets="Class oauth2client.appengine.InvalidXsrfTokenError=oauth2client.appengine.InvalidXsrfTokenError-class.html"><a title="oauth2client.appengine.InvalidXsrfTokenError" class="py-name" href="#" onclick="return doclink('link-167', 'InvalidXsrfTokenError', 'link-167');">InvalidXsrfTokenError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L538"></a><tt class="py-lineno">538</tt>  <tt class="py-line"> </tt>
+<a name="L539"></a><tt class="py-lineno">539</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">uri</tt> </tt>
+</div><a name="L540"></a><tt class="py-lineno">540</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Decorator"></a><div id="OAuth2Decorator-def"><a name="L541"></a><tt class="py-lineno">541</tt>  <tt class="py-line"> </tt>
+<a name="L542"></a><tt class="py-lineno">542</tt> <a class="py-toggle" href="#" id="OAuth2Decorator-toggle" onclick="return toggle('OAuth2Decorator');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html">OAuth2Decorator</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Decorator-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="OAuth2Decorator-expanded"><a name="L543"></a><tt class="py-lineno">543</tt>  <tt class="py-line">  <tt class="py-docstring">"""Utility for making OAuth 2.0 easier.</tt> </tt>
+<a name="L544"></a><tt class="py-lineno">544</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L545"></a><tt class="py-lineno">545</tt>  <tt class="py-line"><tt class="py-docstring">  Instantiate and then use with oauth_required or oauth_aware</tt> </tt>
+<a name="L546"></a><tt class="py-lineno">546</tt>  <tt class="py-line"><tt class="py-docstring">  as decorators on webapp.RequestHandler methods.</tt> </tt>
+<a name="L547"></a><tt class="py-lineno">547</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L548"></a><tt class="py-lineno">548</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
+<a name="L549"></a><tt class="py-lineno">549</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L550"></a><tt class="py-lineno">550</tt>  <tt class="py-line"><tt class="py-docstring">    decorator = OAuth2Decorator(</tt> </tt>
+<a name="L551"></a><tt class="py-lineno">551</tt>  <tt class="py-line"><tt class="py-docstring">        client_id='837...ent.com',</tt> </tt>
+<a name="L552"></a><tt class="py-lineno">552</tt>  <tt class="py-line"><tt class="py-docstring">        client_secret='Qh...wwI',</tt> </tt>
+<a name="L553"></a><tt class="py-lineno">553</tt>  <tt class="py-line"><tt class="py-docstring">        scope='https://www.googleapis.com/auth/plus')</tt> </tt>
+<a name="L554"></a><tt class="py-lineno">554</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L555"></a><tt class="py-lineno">555</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L556"></a><tt class="py-lineno">556</tt>  <tt class="py-line"><tt class="py-docstring">    class MainHandler(webapp.RequestHandler):</tt> </tt>
+<a name="L557"></a><tt class="py-lineno">557</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L558"></a><tt class="py-lineno">558</tt>  <tt class="py-line"><tt class="py-docstring">      @decorator.oauth_required</tt> </tt>
+<a name="L559"></a><tt class="py-lineno">559</tt>  <tt class="py-line"><tt class="py-docstring">      def get(self):</tt> </tt>
+<a name="L560"></a><tt class="py-lineno">560</tt>  <tt class="py-line"><tt class="py-docstring">        http = decorator.http()</tt> </tt>
+<a name="L561"></a><tt class="py-lineno">561</tt>  <tt class="py-line"><tt class="py-docstring">        # http is authorized with the user's Credentials and can be used</tt> </tt>
+<a name="L562"></a><tt class="py-lineno">562</tt>  <tt class="py-line"><tt class="py-docstring">        # in API calls</tt> </tt>
+<a name="L563"></a><tt class="py-lineno">563</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L564"></a><tt class="py-lineno">564</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L565"></a><tt class="py-lineno">565</tt>  <tt class="py-line"> </tt>
+<a name="L566"></a><tt class="py-lineno">566</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-168" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-168', 'positional', 'link-78');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
+<a name="OAuth2Decorator.__init__"></a><div id="OAuth2Decorator.__init__-def"><a name="L567"></a><tt class="py-lineno">567</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.__init__-toggle" onclick="return toggle('OAuth2Decorator.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-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">client_id</tt><tt class="py-op">,</tt> <tt class="py-param">client_secret</tt><tt class="py-op">,</tt> <tt class="py-param">scope</tt><tt class="py-op">,</tt> </tt>
+<a name="L568"></a><tt class="py-lineno">568</tt>  <tt class="py-line">               <tt class="py-param">auth_uri</tt><tt class="py-op">=</tt><tt id="link-169" class="py-name"><a title="oauth2client.GOOGLE_AUTH_URI" class="py-name" href="#" onclick="return doclink('link-169', 'GOOGLE_AUTH_URI', 'link-14');">GOOGLE_AUTH_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L569"></a><tt class="py-lineno">569</tt>  <tt class="py-line">               <tt class="py-param">token_uri</tt><tt class="py-op">=</tt><tt id="link-170" class="py-name"><a title="oauth2client.GOOGLE_TOKEN_URI" class="py-name" href="#" onclick="return doclink('link-170', 'GOOGLE_TOKEN_URI', 'link-18');">GOOGLE_TOKEN_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L570"></a><tt class="py-lineno">570</tt>  <tt class="py-line">               <tt class="py-param">revoke_uri</tt><tt class="py-op">=</tt><tt id="link-171" class="py-name"><a title="oauth2client.GOOGLE_REVOKE_URI" class="py-name" href="#" onclick="return doclink('link-171', 'GOOGLE_REVOKE_URI', 'link-16');">GOOGLE_REVOKE_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L571"></a><tt class="py-lineno">571</tt>  <tt class="py-line">               <tt class="py-param">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L572"></a><tt class="py-lineno">572</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>
+<a name="L573"></a><tt class="py-lineno">573</tt>  <tt class="py-line">               <tt class="py-param">callback_path</tt><tt class="py-op">=</tt><tt class="py-string">'/oauth2callback'</tt><tt class="py-op">,</tt> </tt>
+<a name="L574"></a><tt class="py-lineno">574</tt>  <tt class="py-line">               <tt class="py-param">token_response_param</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L575"></a><tt class="py-lineno">575</tt>  <tt class="py-line">               <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Decorator.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.__init__-expanded"><a name="L576"></a><tt class="py-lineno">576</tt>  <tt class="py-line"> </tt>
+<a name="L577"></a><tt class="py-lineno">577</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for OAuth2Decorator</tt> </tt>
+<a name="L578"></a><tt class="py-lineno">578</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L579"></a><tt class="py-lineno">579</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L580"></a><tt class="py-lineno">580</tt>  <tt class="py-line"><tt class="py-docstring">      client_id: string, client identifier.</tt> </tt>
+<a name="L581"></a><tt class="py-lineno">581</tt>  <tt class="py-line"><tt class="py-docstring">      client_secret: string client secret.</tt> </tt>
+<a name="L582"></a><tt class="py-lineno">582</tt>  <tt class="py-line"><tt class="py-docstring">      scope: string or iterable of strings, scope(s) of the credentials being</tt> </tt>
+<a name="L583"></a><tt class="py-lineno">583</tt>  <tt class="py-line"><tt class="py-docstring">        requested.</tt> </tt>
+<a name="L584"></a><tt class="py-lineno">584</tt>  <tt class="py-line"><tt class="py-docstring">      auth_uri: string, URI for authorization endpoint. For convenience</tt> </tt>
+<a name="L585"></a><tt class="py-lineno">585</tt>  <tt class="py-line"><tt class="py-docstring">        defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
+<a name="L586"></a><tt class="py-lineno">586</tt>  <tt class="py-line"><tt class="py-docstring">      token_uri: string, URI for token endpoint. For convenience</tt> </tt>
+<a name="L587"></a><tt class="py-lineno">587</tt>  <tt class="py-line"><tt class="py-docstring">        defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
+<a name="L588"></a><tt class="py-lineno">588</tt>  <tt class="py-line"><tt class="py-docstring">      revoke_uri: string, URI for revoke endpoint. For convenience</tt> </tt>
+<a name="L589"></a><tt class="py-lineno">589</tt>  <tt class="py-line"><tt class="py-docstring">        defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
+<a name="L590"></a><tt class="py-lineno">590</tt>  <tt class="py-line"><tt class="py-docstring">      user_agent: string, User agent of your application, default to None.</tt> </tt>
+<a name="L591"></a><tt class="py-lineno">591</tt>  <tt class="py-line"><tt class="py-docstring">      message: Message to display if there are problems with the OAuth 2.0</tt> </tt>
+<a name="L592"></a><tt class="py-lineno">592</tt>  <tt class="py-line"><tt class="py-docstring">        configuration. The message may contain HTML and will be presented on the</tt> </tt>
+<a name="L593"></a><tt class="py-lineno">593</tt>  <tt class="py-line"><tt class="py-docstring">        web interface for any method that uses the decorator.</tt> </tt>
+<a name="L594"></a><tt class="py-lineno">594</tt>  <tt class="py-line"><tt class="py-docstring">      callback_path: string, The absolute path to use as the callback URI. Note</tt> </tt>
+<a name="L595"></a><tt class="py-lineno">595</tt>  <tt class="py-line"><tt class="py-docstring">        that this must match up with the URI given when registering the</tt> </tt>
+<a name="L596"></a><tt class="py-lineno">596</tt>  <tt class="py-line"><tt class="py-docstring">        application in the APIs Console.</tt> </tt>
+<a name="L597"></a><tt class="py-lineno">597</tt>  <tt class="py-line"><tt class="py-docstring">      token_response_param: string. If provided, the full JSON response</tt> </tt>
+<a name="L598"></a><tt class="py-lineno">598</tt>  <tt class="py-line"><tt class="py-docstring">        to the access token request will be encoded and included in this query</tt> </tt>
+<a name="L599"></a><tt class="py-lineno">599</tt>  <tt class="py-line"><tt class="py-docstring">        parameter in the callback URI. This is useful with providers (e.g.</tt> </tt>
+<a name="L600"></a><tt class="py-lineno">600</tt>  <tt class="py-line"><tt class="py-docstring">        wordpress.com) that include extra fields that the client may want.</tt> </tt>
+<a name="L601"></a><tt class="py-lineno">601</tt>  <tt class="py-line"><tt class="py-docstring">      **kwargs: dict, Keyword arguments are be passed along as kwargs to the</tt> </tt>
+<a name="L602"></a><tt class="py-lineno">602</tt>  <tt class="py-line"><tt class="py-docstring">        OAuth2WebServerFlow constructor.</tt> </tt>
+<a name="L603"></a><tt class="py-lineno">603</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L604"></a><tt class="py-lineno">604</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L605"></a><tt class="py-lineno">605</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-172" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-172', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L606"></a><tt class="py-lineno">606</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_client_id</tt> <tt class="py-op">=</tt> <tt class="py-name">client_id</tt> </tt>
+<a name="L607"></a><tt class="py-lineno">607</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_client_secret</tt> <tt class="py-op">=</tt> <tt class="py-name">client_secret</tt> </tt>
+<a name="L608"></a><tt class="py-lineno">608</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_scope</tt> <tt class="py-op">=</tt> <tt id="link-173" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-173', 'util', 'link-9');">util</a></tt><tt class="py-op">.</tt><tt id="link-174" class="py-name"><a title="oauth2client.util.scopes_to_string" class="py-name" href="#" onclick="return doclink('link-174', 'scopes_to_string', 'link-80');">scopes_to_string</a></tt><tt class="py-op">(</tt><tt class="py-name">scope</tt><tt class="py-op">)</tt> </tt>
+<a name="L609"></a><tt class="py-lineno">609</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_auth_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">auth_uri</tt> </tt>
+<a name="L610"></a><tt class="py-lineno">610</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_token_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">token_uri</tt> </tt>
+<a name="L611"></a><tt class="py-lineno">611</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_revoke_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">revoke_uri</tt> </tt>
+<a name="L612"></a><tt class="py-lineno">612</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_user_agent</tt> <tt class="py-op">=</tt> <tt class="py-name">user_agent</tt> </tt>
+<a name="L613"></a><tt class="py-lineno">613</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_kwargs</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt> </tt>
+<a name="L614"></a><tt class="py-lineno">614</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="L615"></a><tt class="py-lineno">615</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">False</tt> </tt>
+<a name="L616"></a><tt class="py-lineno">616</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callback_path</tt> <tt class="py-op">=</tt> <tt id="link-175" class="py-name" targets="Method oauth2client.appengine.OAuth2Decorator.callback_path()=oauth2client.appengine.OAuth2Decorator-class.html#callback_path"><a title="oauth2client.appengine.OAuth2Decorator.callback_path" class="py-name" href="#" onclick="return doclink('link-175', 'callback_path', 'link-175');">callback_path</a></tt> </tt>
+<a name="L617"></a><tt class="py-lineno">617</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_token_response_param</tt> <tt class="py-op">=</tt> <tt class="py-name">token_response_param</tt> </tt>
+</div><a name="L618"></a><tt class="py-lineno">618</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Decorator._display_error_message"></a><div id="OAuth2Decorator._display_error_message-def"><a name="L619"></a><tt class="py-lineno">619</tt> <a class="py-toggle" href="#" id="OAuth2Decorator._display_error_message-toggle" onclick="return toggle('OAuth2Decorator._display_error_message');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#_display_error_message">_display_error_message</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">request_handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Decorator._display_error_message-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator._display_error_message-expanded"><a name="L620"></a><tt class="py-lineno">620</tt>  <tt class="py-line">    <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-176" class="py-name" targets="Method apiclient.model.BaseModel.response()=apiclient.model.BaseModel-class.html#response,Method apiclient.model.Model.response()=apiclient.model.Model-class.html#response"><a title="apiclient.model.BaseModel.response
+apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-176', 'response', 'link-176');">response</a></tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-177" class="py-name" targets="Method apiclient.push.Headers.write()=apiclient.push.Headers-class.html#write"><a title="apiclient.push.Headers.write" class="py-name" href="#" onclick="return doclink('link-177', 'write', 'link-177');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">'&lt;html&gt;&lt;body&gt;'</tt><tt class="py-op">)</tt> </tt>
+<a name="L621"></a><tt class="py-lineno">621</tt>  <tt class="py-line">    <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-178" class="py-name"><a title="apiclient.model.BaseModel.response
+apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-178', 'response', 'link-176');">response</a></tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-179" class="py-name"><a title="apiclient.push.Headers.write" class="py-name" href="#" onclick="return doclink('link-179', 'write', 'link-177');">write</a></tt><tt class="py-op">(</tt><tt id="link-180" class="py-name" targets="Function oauth2client.appengine._safe_html()=oauth2client.appengine-module.html#_safe_html"><a title="oauth2client.appengine._safe_html" class="py-name" href="#" onclick="return doclink('link-180', '_safe_html', 'link-180');">_safe_html</a></tt><tt class="py-op">(</tt><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-op">)</tt> </tt>
+<a name="L622"></a><tt class="py-lineno">622</tt>  <tt class="py-line">    <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-181" class="py-name"><a title="apiclient.model.BaseModel.response
+apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-181', 'response', 'link-176');">response</a></tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-182" class="py-name"><a title="apiclient.push.Headers.write" class="py-name" href="#" onclick="return doclink('link-182', 'write', 'link-177');">write</a></tt><tt class="py-op">(</tt><tt class="py-string">'&lt;/body&gt;&lt;/html&gt;'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L623"></a><tt class="py-lineno">623</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Decorator.oauth_required"></a><div id="OAuth2Decorator.oauth_required-def"><a name="L624"></a><tt class="py-lineno">624</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.oauth_required-toggle" onclick="return toggle('OAuth2Decorator.oauth_required');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#oauth_required">oauth_required</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Decorator.oauth_required-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.oauth_required-expanded"><a name="L625"></a><tt class="py-lineno">625</tt>  <tt class="py-line">    <tt class="py-docstring">"""Decorator that starts the OAuth 2.0 dance.</tt> </tt>
+<a name="L626"></a><tt class="py-lineno">626</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L627"></a><tt class="py-lineno">627</tt>  <tt class="py-line"><tt class="py-docstring">    Starts the OAuth dance for the logged in user if they haven't already</tt> </tt>
+<a name="L628"></a><tt class="py-lineno">628</tt>  <tt class="py-line"><tt class="py-docstring">    granted access for this application.</tt> </tt>
+<a name="L629"></a><tt class="py-lineno">629</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L630"></a><tt class="py-lineno">630</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L631"></a><tt class="py-lineno">631</tt>  <tt class="py-line"><tt class="py-docstring">      method: callable, to be decorated method of a webapp.RequestHandler</tt> </tt>
+<a name="L632"></a><tt class="py-lineno">632</tt>  <tt class="py-line"><tt class="py-docstring">        instance.</tt> </tt>
+<a name="L633"></a><tt class="py-lineno">633</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L634"></a><tt class="py-lineno">634</tt>  <tt class="py-line"> </tt>
+<a name="L635"></a><tt class="py-lineno">635</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">check_oauth</tt><tt class="py-op">(</tt><tt class="py-param">request_handler</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L636"></a><tt class="py-lineno">636</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error</tt><tt class="py-op">:</tt> </tt>
+<a name="L637"></a><tt class="py-lineno">637</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-183" class="py-name" targets="Method oauth2client.appengine.OAuth2Decorator._display_error_message()=oauth2client.appengine.OAuth2Decorator-class.html#_display_error_message"><a title="oauth2client.appengine.OAuth2Decorator._display_error_message" class="py-name" href="#" onclick="return doclink('link-183', '_display_error_message', 'link-183');">_display_error_message</a></tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">)</tt> </tt>
+<a name="L638"></a><tt class="py-lineno">638</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> </tt>
+<a name="L639"></a><tt class="py-lineno">639</tt>  <tt class="py-line"> </tt>
+<a name="L640"></a><tt class="py-lineno">640</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="L641"></a><tt class="py-lineno">641</tt>  <tt class="py-line">      <tt class="py-comment"># Don't use @login_decorator as this could be used in a POST request.</tt> </tt>
+<a name="L642"></a><tt class="py-lineno">642</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">user</tt><tt class="py-op">:</tt> </tt>
+<a name="L643"></a><tt class="py-lineno">643</tt>  <tt class="py-line">        <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt class="py-name">redirect</tt><tt class="py-op">(</tt><tt class="py-name">users</tt><tt class="py-op">.</tt><tt class="py-name">create_login_url</tt><tt class="py-op">(</tt> </tt>
+<a name="L644"></a><tt class="py-lineno">644</tt>  <tt class="py-line">            <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-184" 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-184', 'request', 'link-160');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L645"></a><tt class="py-lineno">645</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> </tt>
+<a name="L646"></a><tt class="py-lineno">646</tt>  <tt class="py-line"> </tt>
+<a name="L647"></a><tt class="py-lineno">647</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-185" class="py-name" targets="Method oauth2client.appengine.OAuth2Decorator._create_flow()=oauth2client.appengine.OAuth2Decorator-class.html#_create_flow"><a title="oauth2client.appengine.OAuth2Decorator._create_flow" class="py-name" href="#" onclick="return doclink('link-185', '_create_flow', 'link-185');">_create_flow</a></tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">)</tt> </tt>
+<a name="L648"></a><tt class="py-lineno">648</tt>  <tt class="py-line"> </tt>
+<a name="L649"></a><tt class="py-lineno">649</tt>  <tt class="py-line">      <tt class="py-comment"># Store the request URI in 'state' so we can use it later</tt> </tt>
+<a name="L650"></a><tt class="py-lineno">650</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">[</tt><tt class="py-string">'state'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-186" class="py-name" targets="Function oauth2client.appengine._build_state_value()=oauth2client.appengine-module.html#_build_state_value"><a title="oauth2client.appengine._build_state_value" class="py-name" href="#" onclick="return doclink('link-186', '_build_state_value', 'link-186');">_build_state_value</a></tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">,</tt> <tt class="py-name">user</tt><tt class="py-op">)</tt> </tt>
+<a name="L651"></a><tt class="py-lineno">651</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-187" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-187', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-op">=</tt> <tt id="link-188" class="py-name" targets="Class oauth2client.appengine.StorageByKeyName=oauth2client.appengine.StorageByKeyName-class.html"><a title="oauth2client.appengine.StorageByKeyName" class="py-name" href="#" onclick="return doclink('link-188', 'StorageByKeyName', 'link-188');">StorageByKeyName</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L652"></a><tt class="py-lineno">652</tt>  <tt class="py-line">          <tt id="link-189" class="py-name" targets="Class oauth2client.appengine.CredentialsModel=oauth2client.appengine.CredentialsModel-class.html"><a title="oauth2client.appengine.CredentialsModel" class="py-name" href="#" onclick="return doclink('link-189', 'CredentialsModel', 'link-189');">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-190" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-171', 'get', 'link-47');">get</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L631"></a><tt class="py-lineno">631</tt>  <tt class="py-line"> </tt>
-<a name="L632"></a><tt class="py-lineno">632</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-172" class="py-name" targets="Method oauth2client.appengine.OAuth2Decorator.has_credentials()=oauth2client.appengine.OAuth2Decorator-class.html#has_credentials"><a title="oauth2client.appengine.OAuth2Decorator.has_credentials" class="py-name" href="#" onclick="return doclink('link-172', 'has_credentials', 'link-172');">has_credentials</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L633"></a><tt class="py-lineno">633</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt class="py-name">redirect</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-173" class="py-name" targets="Method oauth2client.appengine.OAuth2Decorator.authorize_url()=oauth2client.appengine.OAuth2Decorator-class.html#authorize_url"><a title="oauth2client.appengine.OAuth2Decorator.authorize_url" class="py-name" href="#" onclick="return doclink('link-173', 'authorize_url', 'link-173');">authorize_url</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L634"></a><tt class="py-lineno">634</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L635"></a><tt class="py-lineno">635</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">method</tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
-<a name="L636"></a><tt class="py-lineno">636</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt> <tt id="link-174" class="py-name"><a title="oauth2client.client.AccessTokenRefreshError" class="py-name" href="#" onclick="return doclink('link-174', 'AccessTokenRefreshError', 'link-25');">AccessTokenRefreshError</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L637"></a><tt class="py-lineno">637</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt class="py-name">redirect</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-175" class="py-name"><a title="oauth2client.appengine.OAuth2Decorator.authorize_url" class="py-name" href="#" onclick="return doclink('link-175', 'authorize_url', 'link-173');">authorize_url</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L638"></a><tt class="py-lineno">638</tt>  <tt class="py-line"> </tt>
-<a name="L639"></a><tt class="py-lineno">639</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">check_oauth</tt> </tt>
-</div><a name="L640"></a><tt class="py-lineno">640</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Decorator._create_flow"></a><div id="OAuth2Decorator._create_flow-def"><a name="L641"></a><tt class="py-lineno">641</tt> <a class="py-toggle" href="#" id="OAuth2Decorator._create_flow-toggle" onclick="return toggle('OAuth2Decorator._create_flow');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#_create_flow">_create_flow</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">request_handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Decorator._create_flow-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator._create_flow-expanded"><a name="L642"></a><tt class="py-lineno">642</tt>  <tt class="py-line">    <tt class="py-docstring">"""Create the Flow object.</tt> </tt>
-<a name="L643"></a><tt class="py-lineno">643</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L644"></a><tt class="py-lineno">644</tt>  <tt class="py-line"><tt class="py-docstring">    The Flow is calculated lazily since we don't know where this app is</tt> </tt>
-<a name="L645"></a><tt class="py-lineno">645</tt>  <tt class="py-line"><tt class="py-docstring">    running until it receives a request, at which point redirect_uri can be</tt> </tt>
-<a name="L646"></a><tt class="py-lineno">646</tt>  <tt class="py-line"><tt class="py-docstring">    calculated and then the Flow object can be constructed.</tt> </tt>
-<a name="L647"></a><tt class="py-lineno">647</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L648"></a><tt class="py-lineno">648</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L649"></a><tt class="py-lineno">649</tt>  <tt class="py-line"><tt class="py-docstring">      request_handler: webapp.RequestHandler, the request handler.</tt> </tt>
-<a name="L650"></a><tt class="py-lineno">650</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L651"></a><tt class="py-lineno">651</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L652"></a><tt class="py-lineno">652</tt>  <tt class="py-line">      <tt class="py-name">redirect_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-176" 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-176', 'request', 'link-144');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">relative_url</tt><tt class="py-op">(</tt> </tt>
-<a name="L653"></a><tt class="py-lineno">653</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callback_path</tt><tt class="py-op">)</tt> <tt class="py-comment"># Usually /oauth2callback</tt> </tt>
-<a name="L654"></a><tt class="py-lineno">654</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt> <tt class="py-op">=</tt> <tt id="link-177" class="py-name"><a title="oauth2client.client.OAuth2WebServerFlow" class="py-name" href="#" onclick="return doclink('link-177', 'OAuth2WebServerFlow', 'link-37');">OAuth2WebServerFlow</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_client_id</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_client_secret</tt><tt class="py-op">,</tt> </tt>
-<a name="L655"></a><tt class="py-lineno">655</tt>  <tt class="py-line">                                      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_scope</tt><tt class="py-op">,</tt> <tt class="py-name">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-name">redirect_uri</tt><tt class="py-op">,</tt> </tt>
-<a name="L656"></a><tt class="py-lineno">656</tt>  <tt class="py-line">                                      <tt class="py-name">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_user_agent</tt><tt class="py-op">,</tt> </tt>
-<a name="L657"></a><tt class="py-lineno">657</tt>  <tt class="py-line">                                      <tt class="py-name">auth_uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_auth_uri</tt><tt class="py-op">,</tt> </tt>
-<a name="L658"></a><tt class="py-lineno">658</tt>  <tt class="py-line">                                      <tt class="py-name">token_uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_token_uri</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_kwargs</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L659"></a><tt class="py-lineno">659</tt>  <tt class="py-line"> </tt>
-<a name="L660"></a><tt class="py-lineno">660</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Decorator.oauth_aware"></a><div id="OAuth2Decorator.oauth_aware-def"><a name="L661"></a><tt class="py-lineno">661</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.oauth_aware-toggle" onclick="return toggle('OAuth2Decorator.oauth_aware');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#oauth_aware">oauth_aware</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Decorator.oauth_aware-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.oauth_aware-expanded"><a name="L662"></a><tt class="py-lineno">662</tt>  <tt class="py-line">    <tt class="py-docstring">"""Decorator that sets up for OAuth 2.0 dance, but doesn't do it.</tt> </tt>
-<a name="L663"></a><tt class="py-lineno">663</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L664"></a><tt class="py-lineno">664</tt>  <tt class="py-line"><tt class="py-docstring">    Does all the setup for the OAuth dance, but doesn't initiate it.</tt> </tt>
-<a name="L665"></a><tt class="py-lineno">665</tt>  <tt class="py-line"><tt class="py-docstring">    This decorator is useful if you want to create a page that knows</tt> </tt>
-<a name="L666"></a><tt class="py-lineno">666</tt>  <tt class="py-line"><tt class="py-docstring">    whether or not the user has granted access to this application.</tt> </tt>
-<a name="L667"></a><tt class="py-lineno">667</tt>  <tt class="py-line"><tt class="py-docstring">    From within a method decorated with @oauth_aware the has_credentials()</tt> </tt>
-<a name="L668"></a><tt class="py-lineno">668</tt>  <tt class="py-line"><tt class="py-docstring">    and authorize_url() methods can be called.</tt> </tt>
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-190', 'get', 'link-57');">get</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L653"></a><tt class="py-lineno">653</tt>  <tt class="py-line"> </tt>
+<a name="L654"></a><tt class="py-lineno">654</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-191" class="py-name" targets="Method oauth2client.appengine.OAuth2Decorator.has_credentials()=oauth2client.appengine.OAuth2Decorator-class.html#has_credentials"><a title="oauth2client.appengine.OAuth2Decorator.has_credentials" class="py-name" href="#" onclick="return doclink('link-191', 'has_credentials', 'link-191');">has_credentials</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L655"></a><tt class="py-lineno">655</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt class="py-name">redirect</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-192" class="py-name" targets="Method oauth2client.appengine.OAuth2Decorator.authorize_url()=oauth2client.appengine.OAuth2Decorator-class.html#authorize_url"><a title="oauth2client.appengine.OAuth2Decorator.authorize_url" class="py-name" href="#" onclick="return doclink('link-192', 'authorize_url', 'link-192');">authorize_url</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L656"></a><tt class="py-lineno">656</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L657"></a><tt class="py-lineno">657</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">method</tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
+<a name="L658"></a><tt class="py-lineno">658</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt> <tt id="link-193" class="py-name"><a title="oauth2client.client.AccessTokenRefreshError" class="py-name" href="#" onclick="return doclink('link-193', 'AccessTokenRefreshError', 'link-29');">AccessTokenRefreshError</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L659"></a><tt class="py-lineno">659</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt class="py-name">redirect</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-194" class="py-name"><a title="oauth2client.appengine.OAuth2Decorator.authorize_url" class="py-name" href="#" onclick="return doclink('link-194', 'authorize_url', 'link-192');">authorize_url</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L660"></a><tt class="py-lineno">660</tt>  <tt class="py-line"> </tt>
+<a name="L661"></a><tt class="py-lineno">661</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">check_oauth</tt> </tt>
+</div><a name="L662"></a><tt class="py-lineno">662</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Decorator._create_flow"></a><div id="OAuth2Decorator._create_flow-def"><a name="L663"></a><tt class="py-lineno">663</tt> <a class="py-toggle" href="#" id="OAuth2Decorator._create_flow-toggle" onclick="return toggle('OAuth2Decorator._create_flow');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#_create_flow">_create_flow</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">request_handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Decorator._create_flow-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator._create_flow-expanded"><a name="L664"></a><tt class="py-lineno">664</tt>  <tt class="py-line">    <tt class="py-docstring">"""Create the Flow object.</tt> </tt>
+<a name="L665"></a><tt class="py-lineno">665</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L666"></a><tt class="py-lineno">666</tt>  <tt class="py-line"><tt class="py-docstring">    The Flow is calculated lazily since we don't know where this app is</tt> </tt>
+<a name="L667"></a><tt class="py-lineno">667</tt>  <tt class="py-line"><tt class="py-docstring">    running until it receives a request, at which point redirect_uri can be</tt> </tt>
+<a name="L668"></a><tt class="py-lineno">668</tt>  <tt class="py-line"><tt class="py-docstring">    calculated and then the Flow object can be constructed.</tt> </tt>
 <a name="L669"></a><tt class="py-lineno">669</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
 <a name="L670"></a><tt class="py-lineno">670</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L671"></a><tt class="py-lineno">671</tt>  <tt class="py-line"><tt class="py-docstring">      method: callable, to be decorated method of a webapp.RequestHandler</tt> </tt>
-<a name="L672"></a><tt class="py-lineno">672</tt>  <tt class="py-line"><tt class="py-docstring">        instance.</tt> </tt>
-<a name="L673"></a><tt class="py-lineno">673</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L674"></a><tt class="py-lineno">674</tt>  <tt class="py-line"> </tt>
-<a name="L675"></a><tt class="py-lineno">675</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">setup_oauth</tt><tt class="py-op">(</tt><tt class="py-param">request_handler</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L676"></a><tt class="py-lineno">676</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error</tt><tt class="py-op">:</tt> </tt>
-<a name="L677"></a><tt class="py-lineno">677</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-178" class="py-name"><a title="oauth2client.appengine.OAuth2Decorator._display_error_message" class="py-name" href="#" onclick="return doclink('link-178', '_display_error_message', 'link-164');">_display_error_message</a></tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">)</tt> </tt>
-<a name="L678"></a><tt class="py-lineno">678</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> </tt>
-<a name="L679"></a><tt class="py-lineno">679</tt>  <tt class="py-line"> </tt>
-<a name="L680"></a><tt class="py-lineno">680</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="L681"></a><tt class="py-lineno">681</tt>  <tt class="py-line">      <tt class="py-comment"># Don't use @login_decorator as this could be used in a POST request.</tt> </tt>
-<a name="L682"></a><tt class="py-lineno">682</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">user</tt><tt class="py-op">:</tt> </tt>
-<a name="L683"></a><tt class="py-lineno">683</tt>  <tt class="py-line">        <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt class="py-name">redirect</tt><tt class="py-op">(</tt><tt class="py-name">users</tt><tt class="py-op">.</tt><tt class="py-name">create_login_url</tt><tt class="py-op">(</tt> </tt>
-<a name="L684"></a><tt class="py-lineno">684</tt>  <tt class="py-line">            <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-179" class="py-name"><a title="apiclient.http.HttpMock.request
+<a name="L671"></a><tt class="py-lineno">671</tt>  <tt class="py-line"><tt class="py-docstring">      request_handler: webapp.RequestHandler, the request handler.</tt> </tt>
+<a name="L672"></a><tt class="py-lineno">672</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L673"></a><tt class="py-lineno">673</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L674"></a><tt class="py-lineno">674</tt>  <tt class="py-line">      <tt class="py-name">redirect_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-195" 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-179', 'request', 'link-144');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L685"></a><tt class="py-lineno">685</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> </tt>
-<a name="L686"></a><tt class="py-lineno">686</tt>  <tt class="py-line"> </tt>
-<a name="L687"></a><tt class="py-lineno">687</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-180" class="py-name"><a title="oauth2client.appengine.OAuth2Decorator._create_flow" class="py-name" href="#" onclick="return doclink('link-180', '_create_flow', 'link-166');">_create_flow</a></tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">)</tt> </tt>
-<a name="L688"></a><tt class="py-lineno">688</tt>  <tt class="py-line"> </tt>
-<a name="L689"></a><tt class="py-lineno">689</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">[</tt><tt class="py-string">'state'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-181" class="py-name"><a title="oauth2client.appengine._build_state_value" class="py-name" href="#" onclick="return doclink('link-181', '_build_state_value', 'link-167');">_build_state_value</a></tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">,</tt> <tt class="py-name">user</tt><tt class="py-op">)</tt> </tt>
-<a name="L690"></a><tt class="py-lineno">690</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-182" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-182', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-op">=</tt> <tt id="link-183" class="py-name"><a title="oauth2client.appengine.StorageByKeyName" class="py-name" href="#" onclick="return doclink('link-183', 'StorageByKeyName', 'link-169');">StorageByKeyName</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L691"></a><tt class="py-lineno">691</tt>  <tt class="py-line">          <tt id="link-184" class="py-name"><a title="oauth2client.appengine.CredentialsModel" class="py-name" href="#" onclick="return doclink('link-184', 'CredentialsModel', 'link-170');">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-185" class="py-name"><a title="apiclient.schema.Schemas.get
+apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-195', 'request', 'link-160');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">relative_url</tt><tt class="py-op">(</tt> </tt>
+<a name="L675"></a><tt class="py-lineno">675</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callback_path</tt><tt class="py-op">)</tt> <tt class="py-comment"># Usually /oauth2callback</tt> </tt>
+<a name="L676"></a><tt class="py-lineno">676</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt> <tt class="py-op">=</tt> <tt id="link-196" class="py-name"><a title="oauth2client.client.OAuth2WebServerFlow" class="py-name" href="#" onclick="return doclink('link-196', 'OAuth2WebServerFlow', 'link-41');">OAuth2WebServerFlow</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_client_id</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_client_secret</tt><tt class="py-op">,</tt> </tt>
+<a name="L677"></a><tt class="py-lineno">677</tt>  <tt class="py-line">                                      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_scope</tt><tt class="py-op">,</tt> <tt class="py-name">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-name">redirect_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L678"></a><tt class="py-lineno">678</tt>  <tt class="py-line">                                      <tt class="py-name">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_user_agent</tt><tt class="py-op">,</tt> </tt>
+<a name="L679"></a><tt class="py-lineno">679</tt>  <tt class="py-line">                                      <tt class="py-name">auth_uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_auth_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L680"></a><tt class="py-lineno">680</tt>  <tt class="py-line">                                      <tt class="py-name">token_uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_token_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L681"></a><tt class="py-lineno">681</tt>  <tt class="py-line">                                      <tt class="py-name">revoke_uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_revoke_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L682"></a><tt class="py-lineno">682</tt>  <tt class="py-line">                                      <tt class="py-op">**</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_kwargs</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L683"></a><tt class="py-lineno">683</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Decorator.oauth_aware"></a><div id="OAuth2Decorator.oauth_aware-def"><a name="L684"></a><tt class="py-lineno">684</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.oauth_aware-toggle" onclick="return toggle('OAuth2Decorator.oauth_aware');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#oauth_aware">oauth_aware</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Decorator.oauth_aware-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.oauth_aware-expanded"><a name="L685"></a><tt class="py-lineno">685</tt>  <tt class="py-line">    <tt class="py-docstring">"""Decorator that sets up for OAuth 2.0 dance, but doesn't do it.</tt> </tt>
+<a name="L686"></a><tt class="py-lineno">686</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L687"></a><tt class="py-lineno">687</tt>  <tt class="py-line"><tt class="py-docstring">    Does all the setup for the OAuth dance, but doesn't initiate it.</tt> </tt>
+<a name="L688"></a><tt class="py-lineno">688</tt>  <tt class="py-line"><tt class="py-docstring">    This decorator is useful if you want to create a page that knows</tt> </tt>
+<a name="L689"></a><tt class="py-lineno">689</tt>  <tt class="py-line"><tt class="py-docstring">    whether or not the user has granted access to this application.</tt> </tt>
+<a name="L690"></a><tt class="py-lineno">690</tt>  <tt class="py-line"><tt class="py-docstring">    From within a method decorated with @oauth_aware the has_credentials()</tt> </tt>
+<a name="L691"></a><tt class="py-lineno">691</tt>  <tt class="py-line"><tt class="py-docstring">    and authorize_url() methods can be called.</tt> </tt>
+<a name="L692"></a><tt class="py-lineno">692</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L693"></a><tt class="py-lineno">693</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L694"></a><tt class="py-lineno">694</tt>  <tt class="py-line"><tt class="py-docstring">      method: callable, to be decorated method of a webapp.RequestHandler</tt> </tt>
+<a name="L695"></a><tt class="py-lineno">695</tt>  <tt class="py-line"><tt class="py-docstring">        instance.</tt> </tt>
+<a name="L696"></a><tt class="py-lineno">696</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L697"></a><tt class="py-lineno">697</tt>  <tt class="py-line"> </tt>
+<a name="L698"></a><tt class="py-lineno">698</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">setup_oauth</tt><tt class="py-op">(</tt><tt class="py-param">request_handler</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L699"></a><tt class="py-lineno">699</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error</tt><tt class="py-op">:</tt> </tt>
+<a name="L700"></a><tt class="py-lineno">700</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-197" class="py-name"><a title="oauth2client.appengine.OAuth2Decorator._display_error_message" class="py-name" href="#" onclick="return doclink('link-197', '_display_error_message', 'link-183');">_display_error_message</a></tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">)</tt> </tt>
+<a name="L701"></a><tt class="py-lineno">701</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> </tt>
+<a name="L702"></a><tt class="py-lineno">702</tt>  <tt class="py-line"> </tt>
+<a name="L703"></a><tt class="py-lineno">703</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="L704"></a><tt class="py-lineno">704</tt>  <tt class="py-line">      <tt class="py-comment"># Don't use @login_decorator as this could be used in a POST request.</tt> </tt>
+<a name="L705"></a><tt class="py-lineno">705</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">user</tt><tt class="py-op">:</tt> </tt>
+<a name="L706"></a><tt class="py-lineno">706</tt>  <tt class="py-line">        <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt class="py-name">redirect</tt><tt class="py-op">(</tt><tt class="py-name">users</tt><tt class="py-op">.</tt><tt class="py-name">create_login_url</tt><tt class="py-op">(</tt> </tt>
+<a name="L707"></a><tt class="py-lineno">707</tt>  <tt class="py-line">            <tt class="py-name">request_handler</tt><tt class="py-op">.</tt><tt id="link-198" 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-198', 'request', 'link-160');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L708"></a><tt class="py-lineno">708</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> </tt>
+<a name="L709"></a><tt class="py-lineno">709</tt>  <tt class="py-line"> </tt>
+<a name="L710"></a><tt class="py-lineno">710</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-199" class="py-name"><a title="oauth2client.appengine.OAuth2Decorator._create_flow" class="py-name" href="#" onclick="return doclink('link-199', '_create_flow', 'link-185');">_create_flow</a></tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">)</tt> </tt>
+<a name="L711"></a><tt class="py-lineno">711</tt>  <tt class="py-line"> </tt>
+<a name="L712"></a><tt class="py-lineno">712</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">[</tt><tt class="py-string">'state'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-200" class="py-name"><a title="oauth2client.appengine._build_state_value" class="py-name" href="#" onclick="return doclink('link-200', '_build_state_value', 'link-186');">_build_state_value</a></tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">,</tt> <tt class="py-name">user</tt><tt class="py-op">)</tt> </tt>
+<a name="L713"></a><tt class="py-lineno">713</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-201" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-201', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-op">=</tt> <tt id="link-202" class="py-name"><a title="oauth2client.appengine.StorageByKeyName" class="py-name" href="#" onclick="return doclink('link-202', 'StorageByKeyName', 'link-188');">StorageByKeyName</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L714"></a><tt class="py-lineno">714</tt>  <tt class="py-line">          <tt id="link-203" class="py-name"><a title="oauth2client.appengine.CredentialsModel" class="py-name" href="#" onclick="return doclink('link-203', 'CredentialsModel', 'link-189');">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-204" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-185', 'get', 'link-47');">get</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L692"></a><tt class="py-lineno">692</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">method</tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L693"></a><tt class="py-lineno">693</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">setup_oauth</tt> </tt>
-</div><a name="L694"></a><tt class="py-lineno">694</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Decorator.has_credentials"></a><div id="OAuth2Decorator.has_credentials-def"><a name="L695"></a><tt class="py-lineno">695</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.has_credentials-toggle" onclick="return toggle('OAuth2Decorator.has_credentials');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#has_credentials">has_credentials</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="OAuth2Decorator.has_credentials-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.has_credentials-expanded"><a name="L696"></a><tt class="py-lineno">696</tt>  <tt class="py-line">    <tt class="py-docstring">"""True if for the logged in user there are valid access Credentials.</tt> </tt>
-<a name="L697"></a><tt class="py-lineno">697</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L698"></a><tt class="py-lineno">698</tt>  <tt class="py-line"><tt class="py-docstring">    Must only be called from with a webapp.RequestHandler subclassed method</tt> </tt>
-<a name="L699"></a><tt class="py-lineno">699</tt>  <tt class="py-line"><tt class="py-docstring">    that had been decorated with either @oauth_required or @oauth_aware.</tt> </tt>
-<a name="L700"></a><tt class="py-lineno">700</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L701"></a><tt class="py-lineno">701</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-186" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-186', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-187" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-187', 'credentials', 'link-94');">credentials</a></tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt> </tt>
-</div><a name="L702"></a><tt class="py-lineno">702</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Decorator.authorize_url"></a><div id="OAuth2Decorator.authorize_url-def"><a name="L703"></a><tt class="py-lineno">703</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.authorize_url-toggle" onclick="return toggle('OAuth2Decorator.authorize_url');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#authorize_url">authorize_url</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="OAuth2Decorator.authorize_url-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.authorize_url-expanded"><a name="L704"></a><tt class="py-lineno">704</tt>  <tt class="py-line">    <tt class="py-docstring">"""Returns the URL to start the OAuth dance.</tt> </tt>
-<a name="L705"></a><tt class="py-lineno">705</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L706"></a><tt class="py-lineno">706</tt>  <tt class="py-line"><tt class="py-docstring">    Must only be called from with a webapp.RequestHandler subclassed method</tt> </tt>
-<a name="L707"></a><tt class="py-lineno">707</tt>  <tt class="py-line"><tt class="py-docstring">    that had been decorated with either @oauth_required or @oauth_aware.</tt> </tt>
-<a name="L708"></a><tt class="py-lineno">708</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L709"></a><tt class="py-lineno">709</tt>  <tt class="py-line">    <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt><tt class="py-op">.</tt><tt id="link-188" class="py-name" targets="Method oauth2client.client.OAuth2WebServerFlow.step1_get_authorize_url()=oauth2client.client.OAuth2WebServerFlow-class.html#step1_get_authorize_url"><a title="oauth2client.client.OAuth2WebServerFlow.step1_get_authorize_url" class="py-name" href="#" onclick="return doclink('link-188', 'step1_get_authorize_url', 'link-188');">step1_get_authorize_url</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L710"></a><tt class="py-lineno">710</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L711"></a><tt class="py-lineno">711</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Decorator.http"></a><div id="OAuth2Decorator.http-def"><a name="L712"></a><tt class="py-lineno">712</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.http-toggle" onclick="return toggle('OAuth2Decorator.http');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#http">http</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="OAuth2Decorator.http-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.http-expanded"><a name="L713"></a><tt class="py-lineno">713</tt>  <tt class="py-line">    <tt class="py-docstring">"""Returns an authorized http instance.</tt> </tt>
-<a name="L714"></a><tt class="py-lineno">714</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L715"></a><tt class="py-lineno">715</tt>  <tt class="py-line"><tt class="py-docstring">    Must only be called from within an @oauth_required decorated method, or</tt> </tt>
-<a name="L716"></a><tt class="py-lineno">716</tt>  <tt class="py-line"><tt class="py-docstring">    from within an @oauth_aware decorated method where has_credentials()</tt> </tt>
-<a name="L717"></a><tt class="py-lineno">717</tt>  <tt class="py-line"><tt class="py-docstring">    returns True.</tt> </tt>
-<a name="L718"></a><tt class="py-lineno">718</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L719"></a><tt class="py-lineno">719</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-189" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-189', 'credentials', 'link-94');">credentials</a></tt><tt class="py-op">.</tt><tt id="link-190" class="py-name" targets="Method oauth2client.client.Credentials.authorize()=oauth2client.client.Credentials-class.html#authorize,Method oauth2client.client.OAuth2Credentials.authorize()=oauth2client.client.OAuth2Credentials-class.html#authorize"><a title="oauth2client.client.Credentials.authorize
-oauth2client.client.OAuth2Credentials.authorize" class="py-name" href="#" onclick="return doclink('link-190', 'authorize', 'link-190');">authorize</a></tt><tt class="py-op">(</tt><tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Http</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L720"></a><tt class="py-lineno">720</tt>  <tt class="py-line"> </tt>
-<a name="L721"></a><tt class="py-lineno">721</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt>
-<a name="OAuth2Decorator.callback_path"></a><div id="OAuth2Decorator.callback_path-def"><a name="L722"></a><tt class="py-lineno">722</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.callback_path-toggle" onclick="return toggle('OAuth2Decorator.callback_path');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#callback_path">callback_path</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="OAuth2Decorator.callback_path-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.callback_path-expanded"><a name="L723"></a><tt class="py-lineno">723</tt>  <tt class="py-line">    <tt class="py-docstring">"""The absolute path where the callback will occur.</tt> </tt>
-<a name="L724"></a><tt class="py-lineno">724</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L725"></a><tt class="py-lineno">725</tt>  <tt class="py-line"><tt class="py-docstring">    Note this is the absolute path, not the absolute URI, that will be</tt> </tt>
-<a name="L726"></a><tt class="py-lineno">726</tt>  <tt class="py-line"><tt class="py-docstring">    calculated by the decorator at runtime. See callback_handler() for how this</tt> </tt>
-<a name="L727"></a><tt class="py-lineno">727</tt>  <tt class="py-line"><tt class="py-docstring">    should be used.</tt> </tt>
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-204', 'get', 'link-57');">get</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L715"></a><tt class="py-lineno">715</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">method</tt><tt class="py-op">(</tt><tt class="py-name">request_handler</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L716"></a><tt class="py-lineno">716</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">setup_oauth</tt> </tt>
+</div><a name="L717"></a><tt class="py-lineno">717</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Decorator.has_credentials"></a><div id="OAuth2Decorator.has_credentials-def"><a name="L718"></a><tt class="py-lineno">718</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.has_credentials-toggle" onclick="return toggle('OAuth2Decorator.has_credentials');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#has_credentials">has_credentials</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="OAuth2Decorator.has_credentials-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.has_credentials-expanded"><a name="L719"></a><tt class="py-lineno">719</tt>  <tt class="py-line">    <tt class="py-docstring">"""True if for the logged in user there are valid access Credentials.</tt> </tt>
+<a name="L720"></a><tt class="py-lineno">720</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L721"></a><tt class="py-lineno">721</tt>  <tt class="py-line"><tt class="py-docstring">    Must only be called from with a webapp.RequestHandler subclassed method</tt> </tt>
+<a name="L722"></a><tt class="py-lineno">722</tt>  <tt class="py-line"><tt class="py-docstring">    that had been decorated with either @oauth_required or @oauth_aware.</tt> </tt>
+<a name="L723"></a><tt class="py-lineno">723</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L724"></a><tt class="py-lineno">724</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-205" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-205', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-206" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-206', 'credentials', 'link-105');">credentials</a></tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt> </tt>
+</div><a name="L725"></a><tt class="py-lineno">725</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Decorator.authorize_url"></a><div id="OAuth2Decorator.authorize_url-def"><a name="L726"></a><tt class="py-lineno">726</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.authorize_url-toggle" onclick="return toggle('OAuth2Decorator.authorize_url');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#authorize_url">authorize_url</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="OAuth2Decorator.authorize_url-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.authorize_url-expanded"><a name="L727"></a><tt class="py-lineno">727</tt>  <tt class="py-line">    <tt class="py-docstring">"""Returns the URL to start the OAuth dance.</tt> </tt>
 <a name="L728"></a><tt class="py-lineno">728</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L729"></a><tt class="py-lineno">729</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L730"></a><tt class="py-lineno">730</tt>  <tt class="py-line"><tt class="py-docstring">      The callback path as a string.</tt> </tt>
+<a name="L729"></a><tt class="py-lineno">729</tt>  <tt class="py-line"><tt class="py-docstring">    Must only be called from with a webapp.RequestHandler subclassed method</tt> </tt>
+<a name="L730"></a><tt class="py-lineno">730</tt>  <tt class="py-line"><tt class="py-docstring">    that had been decorated with either @oauth_required or @oauth_aware.</tt> </tt>
 <a name="L731"></a><tt class="py-lineno">731</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L732"></a><tt class="py-lineno">732</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callback_path</tt> </tt>
-</div><a name="L733"></a><tt class="py-lineno">733</tt>  <tt class="py-line"> </tt>
-<a name="L734"></a><tt class="py-lineno">734</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Decorator.callback_handler"></a><div id="OAuth2Decorator.callback_handler-def"><a name="L735"></a><tt class="py-lineno">735</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.callback_handler-toggle" onclick="return toggle('OAuth2Decorator.callback_handler');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#callback_handler">callback_handler</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="OAuth2Decorator.callback_handler-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.callback_handler-expanded"><a name="L736"></a><tt class="py-lineno">736</tt>  <tt class="py-line">    <tt class="py-docstring">"""RequestHandler for the OAuth 2.0 redirect callback.</tt> </tt>
+<a name="L732"></a><tt class="py-lineno">732</tt>  <tt class="py-line">    <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt><tt class="py-op">.</tt><tt id="link-207" class="py-name" targets="Method oauth2client.client.OAuth2WebServerFlow.step1_get_authorize_url()=oauth2client.client.OAuth2WebServerFlow-class.html#step1_get_authorize_url"><a title="oauth2client.client.OAuth2WebServerFlow.step1_get_authorize_url" class="py-name" href="#" onclick="return doclink('link-207', 'step1_get_authorize_url', 'link-207');">step1_get_authorize_url</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L733"></a><tt class="py-lineno">733</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L734"></a><tt class="py-lineno">734</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Decorator.http"></a><div id="OAuth2Decorator.http-def"><a name="L735"></a><tt class="py-lineno">735</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.http-toggle" onclick="return toggle('OAuth2Decorator.http');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#http">http</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="OAuth2Decorator.http-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.http-expanded"><a name="L736"></a><tt class="py-lineno">736</tt>  <tt class="py-line">    <tt class="py-docstring">"""Returns an authorized http instance.</tt> </tt>
 <a name="L737"></a><tt class="py-lineno">737</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L738"></a><tt class="py-lineno">738</tt>  <tt class="py-line"><tt class="py-docstring">    Usage:</tt> </tt>
-<a name="L739"></a><tt class="py-lineno">739</tt>  <tt class="py-line"><tt class="py-docstring">       app = webapp.WSGIApplication([</tt> </tt>
-<a name="L740"></a><tt class="py-lineno">740</tt>  <tt class="py-line"><tt class="py-docstring">         ('/index', MyIndexHandler),</tt> </tt>
-<a name="L741"></a><tt class="py-lineno">741</tt>  <tt class="py-line"><tt class="py-docstring">         ...,</tt> </tt>
-<a name="L742"></a><tt class="py-lineno">742</tt>  <tt class="py-line"><tt class="py-docstring">         (decorator.callback_path, decorator.callback_handler())</tt> </tt>
-<a name="L743"></a><tt class="py-lineno">743</tt>  <tt class="py-line"><tt class="py-docstring">       ])</tt> </tt>
-<a name="L744"></a><tt class="py-lineno">744</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L745"></a><tt class="py-lineno">745</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L746"></a><tt class="py-lineno">746</tt>  <tt class="py-line"><tt class="py-docstring">      A webapp.RequestHandler that handles the redirect back from the</tt> </tt>
-<a name="L747"></a><tt class="py-lineno">747</tt>  <tt class="py-line"><tt class="py-docstring">      server during the OAuth 2.0 dance.</tt> </tt>
-<a name="L748"></a><tt class="py-lineno">748</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L749"></a><tt class="py-lineno">749</tt>  <tt class="py-line">    <tt class="py-name">decorator</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt> </tt>
-<a name="L750"></a><tt class="py-lineno">750</tt>  <tt class="py-line"> </tt>
-<a name="L751"></a><tt class="py-lineno">751</tt>  <tt class="py-line">    <tt class="py-keyword">class</tt> <tt class="py-def-name">OAuth2Handler</tt><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>
-<a name="L752"></a><tt class="py-lineno">752</tt>  <tt class="py-line">      <tt class="py-docstring">"""Handler for the redirect_uri of the OAuth 2.0 dance."""</tt> </tt>
-<a name="L753"></a><tt class="py-lineno">753</tt>  <tt class="py-line"> </tt>
-<a name="L754"></a><tt class="py-lineno">754</tt>  <tt class="py-line">      <tt class="py-decorator">@</tt><tt class="py-decorator">login_required</tt> </tt>
-<a name="L755"></a><tt class="py-lineno">755</tt>  <tt class="py-line">      <tt class="py-keyword">def</tt> <tt class="py-def-name">get</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L756"></a><tt class="py-lineno">756</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-191" class="py-name"><a title="apiclient.http.HttpMock.request
+<a name="L738"></a><tt class="py-lineno">738</tt>  <tt class="py-line"><tt class="py-docstring">    Must only be called from within an @oauth_required decorated method, or</tt> </tt>
+<a name="L739"></a><tt class="py-lineno">739</tt>  <tt class="py-line"><tt class="py-docstring">    from within an @oauth_aware decorated method where has_credentials()</tt> </tt>
+<a name="L740"></a><tt class="py-lineno">740</tt>  <tt class="py-line"><tt class="py-docstring">    returns True.</tt> </tt>
+<a name="L741"></a><tt class="py-lineno">741</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L742"></a><tt class="py-lineno">742</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-208" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-208', 'credentials', 'link-105');">credentials</a></tt><tt class="py-op">.</tt><tt id="link-209" class="py-name" targets="Method oauth2client.client.Credentials.authorize()=oauth2client.client.Credentials-class.html#authorize,Method oauth2client.client.OAuth2Credentials.authorize()=oauth2client.client.OAuth2Credentials-class.html#authorize"><a title="oauth2client.client.Credentials.authorize
+oauth2client.client.OAuth2Credentials.authorize" class="py-name" href="#" onclick="return doclink('link-209', 'authorize', 'link-209');">authorize</a></tt><tt class="py-op">(</tt><tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Http</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L743"></a><tt class="py-lineno">743</tt>  <tt class="py-line"> </tt>
+<a name="L744"></a><tt class="py-lineno">744</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt>
+<a name="OAuth2Decorator.callback_path"></a><div id="OAuth2Decorator.callback_path-def"><a name="L745"></a><tt class="py-lineno">745</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.callback_path-toggle" onclick="return toggle('OAuth2Decorator.callback_path');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#callback_path">callback_path</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="OAuth2Decorator.callback_path-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.callback_path-expanded"><a name="L746"></a><tt class="py-lineno">746</tt>  <tt class="py-line">    <tt class="py-docstring">"""The absolute path where the callback will occur.</tt> </tt>
+<a name="L747"></a><tt class="py-lineno">747</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L748"></a><tt class="py-lineno">748</tt>  <tt class="py-line"><tt class="py-docstring">    Note this is the absolute path, not the absolute URI, that will be</tt> </tt>
+<a name="L749"></a><tt class="py-lineno">749</tt>  <tt class="py-line"><tt class="py-docstring">    calculated by the decorator at runtime. See callback_handler() for how this</tt> </tt>
+<a name="L750"></a><tt class="py-lineno">750</tt>  <tt class="py-line"><tt class="py-docstring">    should be used.</tt> </tt>
+<a name="L751"></a><tt class="py-lineno">751</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L752"></a><tt class="py-lineno">752</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L753"></a><tt class="py-lineno">753</tt>  <tt class="py-line"><tt class="py-docstring">      The callback path as a string.</tt> </tt>
+<a name="L754"></a><tt class="py-lineno">754</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L755"></a><tt class="py-lineno">755</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callback_path</tt> </tt>
+</div><a name="L756"></a><tt class="py-lineno">756</tt>  <tt class="py-line"> </tt>
+<a name="L757"></a><tt class="py-lineno">757</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Decorator.callback_handler"></a><div id="OAuth2Decorator.callback_handler-def"><a name="L758"></a><tt class="py-lineno">758</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.callback_handler-toggle" onclick="return toggle('OAuth2Decorator.callback_handler');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#callback_handler">callback_handler</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="OAuth2Decorator.callback_handler-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.callback_handler-expanded"><a name="L759"></a><tt class="py-lineno">759</tt>  <tt class="py-line">    <tt class="py-docstring">"""RequestHandler for the OAuth 2.0 redirect callback.</tt> </tt>
+<a name="L760"></a><tt class="py-lineno">760</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L761"></a><tt class="py-lineno">761</tt>  <tt class="py-line"><tt class="py-docstring">    Usage:</tt> </tt>
+<a name="L762"></a><tt class="py-lineno">762</tt>  <tt class="py-line"><tt class="py-docstring">       app = webapp.WSGIApplication([</tt> </tt>
+<a name="L763"></a><tt class="py-lineno">763</tt>  <tt class="py-line"><tt class="py-docstring">         ('/index', MyIndexHandler),</tt> </tt>
+<a name="L764"></a><tt class="py-lineno">764</tt>  <tt class="py-line"><tt class="py-docstring">         ...,</tt> </tt>
+<a name="L765"></a><tt class="py-lineno">765</tt>  <tt class="py-line"><tt class="py-docstring">         (decorator.callback_path, decorator.callback_handler())</tt> </tt>
+<a name="L766"></a><tt class="py-lineno">766</tt>  <tt class="py-line"><tt class="py-docstring">       ])</tt> </tt>
+<a name="L767"></a><tt class="py-lineno">767</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L768"></a><tt class="py-lineno">768</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L769"></a><tt class="py-lineno">769</tt>  <tt class="py-line"><tt class="py-docstring">      A webapp.RequestHandler that handles the redirect back from the</tt> </tt>
+<a name="L770"></a><tt class="py-lineno">770</tt>  <tt class="py-line"><tt class="py-docstring">      server during the OAuth 2.0 dance.</tt> </tt>
+<a name="L771"></a><tt class="py-lineno">771</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L772"></a><tt class="py-lineno">772</tt>  <tt class="py-line">    <tt class="py-name">decorator</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt> </tt>
+<a name="L773"></a><tt class="py-lineno">773</tt>  <tt class="py-line"> </tt>
+<a name="L774"></a><tt class="py-lineno">774</tt>  <tt class="py-line">    <tt class="py-keyword">class</tt> <tt class="py-def-name">OAuth2Handler</tt><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>
+<a name="L775"></a><tt class="py-lineno">775</tt>  <tt class="py-line">      <tt class="py-docstring">"""Handler for the redirect_uri of the OAuth 2.0 dance."""</tt> </tt>
+<a name="L776"></a><tt class="py-lineno">776</tt>  <tt class="py-line"> </tt>
+<a name="L777"></a><tt class="py-lineno">777</tt>  <tt class="py-line">      <tt class="py-decorator">@</tt><tt class="py-decorator">login_required</tt> </tt>
+<a name="L778"></a><tt class="py-lineno">778</tt>  <tt class="py-line">      <tt class="py-keyword">def</tt> <tt class="py-def-name">get</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L779"></a><tt class="py-lineno">779</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-210" 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-191', 'request', 'link-144');">request</a></tt><tt class="py-op">.</tt><tt id="link-192" class="py-name"><a title="apiclient.schema.Schemas.get
+apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-210', 'request', 'link-160');">request</a></tt><tt class="py-op">.</tt><tt id="link-211" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-192', 'get', 'link-47');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'error'</tt><tt class="py-op">)</tt> </tt>
-<a name="L757"></a><tt class="py-lineno">757</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="L758"></a><tt class="py-lineno">758</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-193" class="py-name"><a title="apiclient.http.HttpMock.request
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-211', 'get', 'link-57');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'error'</tt><tt class="py-op">)</tt> </tt>
+<a name="L780"></a><tt class="py-lineno">780</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="L781"></a><tt class="py-lineno">781</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-212" 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-193', 'request', 'link-144');">request</a></tt><tt class="py-op">.</tt><tt id="link-194" class="py-name"><a title="apiclient.schema.Schemas.get
+apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-212', 'request', 'link-160');">request</a></tt><tt class="py-op">.</tt><tt id="link-213" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-194', 'get', 'link-47');">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="L759"></a><tt class="py-lineno">759</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-195" class="py-name"><a title="apiclient.model.BaseModel.response
-apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-195', 'response', 'link-157');">response</a></tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-196" class="py-name"><a title="apiclient.push.Headers.write" class="py-name" href="#" onclick="return doclink('link-196', 'write', 'link-158');">write</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L760"></a><tt class="py-lineno">760</tt>  <tt class="py-line">              <tt class="py-string">'The authorization request failed: %s'</tt> <tt class="py-op">%</tt> <tt id="link-197" class="py-name"><a title="oauth2client.appengine._safe_html" class="py-name" href="#" onclick="return doclink('link-197', '_safe_html', 'link-161');">_safe_html</a></tt><tt class="py-op">(</tt><tt class="py-name">errormsg</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L761"></a><tt class="py-lineno">761</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L762"></a><tt class="py-lineno">762</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="L763"></a><tt class="py-lineno">763</tt>  <tt class="py-line">          <tt class="py-name">decorator</tt><tt class="py-op">.</tt><tt id="link-198" class="py-name"><a title="oauth2client.appengine.OAuth2Decorator._create_flow" class="py-name" href="#" onclick="return doclink('link-198', '_create_flow', 'link-166');">_create_flow</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
-<a name="L764"></a><tt class="py-lineno">764</tt>  <tt class="py-line">          <tt id="link-199" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-199', 'credentials', 'link-94');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">decorator</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt><tt class="py-op">.</tt><tt id="link-200" 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-200', 'step2_exchange', 'link-200');">step2_exchange</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-201" class="py-name"><a title="apiclient.http.HttpMock.request
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-213', 'get', 'link-57');">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="L782"></a><tt class="py-lineno">782</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-214" class="py-name"><a title="apiclient.model.BaseModel.response
+apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-214', 'response', 'link-176');">response</a></tt><tt class="py-op">.</tt><tt class="py-name">out</tt><tt class="py-op">.</tt><tt id="link-215" class="py-name"><a title="apiclient.push.Headers.write" class="py-name" href="#" onclick="return doclink('link-215', 'write', 'link-177');">write</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L783"></a><tt class="py-lineno">783</tt>  <tt class="py-line">              <tt class="py-string">'The authorization request failed: %s'</tt> <tt class="py-op">%</tt> <tt id="link-216" class="py-name"><a title="oauth2client.appengine._safe_html" class="py-name" href="#" onclick="return doclink('link-216', '_safe_html', 'link-180');">_safe_html</a></tt><tt class="py-op">(</tt><tt class="py-name">errormsg</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L784"></a><tt class="py-lineno">784</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L785"></a><tt class="py-lineno">785</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="L786"></a><tt class="py-lineno">786</tt>  <tt class="py-line">          <tt class="py-name">decorator</tt><tt class="py-op">.</tt><tt id="link-217" class="py-name"><a title="oauth2client.appengine.OAuth2Decorator._create_flow" class="py-name" href="#" onclick="return doclink('link-217', '_create_flow', 'link-185');">_create_flow</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L787"></a><tt class="py-lineno">787</tt>  <tt class="py-line">          <tt id="link-218" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-218', 'credentials', 'link-105');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">decorator</tt><tt class="py-op">.</tt><tt class="py-name">flow</tt><tt class="py-op">.</tt><tt id="link-219" 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-219', 'step2_exchange', 'link-219');">step2_exchange</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-220" 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-201', 'request', 'link-144');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
-<a name="L765"></a><tt class="py-lineno">765</tt>  <tt class="py-line">          <tt id="link-202" class="py-name"><a title="oauth2client.appengine.StorageByKeyName" class="py-name" href="#" onclick="return doclink('link-202', 'StorageByKeyName', 'link-169');">StorageByKeyName</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L766"></a><tt class="py-lineno">766</tt>  <tt class="py-line">              <tt id="link-203" class="py-name"><a title="oauth2client.appengine.CredentialsModel" class="py-name" href="#" onclick="return doclink('link-203', 'CredentialsModel', 'link-170');">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-204" class="py-name"><a title="oauth2client.client.Storage.put" class="py-name" href="#" onclick="return doclink('link-204', 'put', 'link-59');">put</a></tt><tt class="py-op">(</tt><tt id="link-205" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-205', 'credentials', 'link-94');">credentials</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L767"></a><tt class="py-lineno">767</tt>  <tt class="py-line">          <tt class="py-name">redirect_uri</tt> <tt class="py-op">=</tt> <tt id="link-206" class="py-name" targets="Function oauth2client.appengine._parse_state_value()=oauth2client.appengine-module.html#_parse_state_value"><a title="oauth2client.appengine._parse_state_value" class="py-name" href="#" onclick="return doclink('link-206', '_parse_state_value', 'link-206');">_parse_state_value</a></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-207" class="py-name"><a title="apiclient.http.HttpMock.request
+apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-220', 'request', 'link-160');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
+<a name="L788"></a><tt class="py-lineno">788</tt>  <tt class="py-line">          <tt id="link-221" class="py-name"><a title="oauth2client.appengine.StorageByKeyName" class="py-name" href="#" onclick="return doclink('link-221', 'StorageByKeyName', 'link-188');">StorageByKeyName</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L789"></a><tt class="py-lineno">789</tt>  <tt class="py-line">              <tt id="link-222" class="py-name"><a title="oauth2client.appengine.CredentialsModel" class="py-name" href="#" onclick="return doclink('link-222', 'CredentialsModel', 'link-189');">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-223" class="py-name"><a title="oauth2client.client.Storage.put" class="py-name" href="#" onclick="return doclink('link-223', 'put', 'link-69');">put</a></tt><tt class="py-op">(</tt><tt id="link-224" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-224', 'credentials', 'link-105');">credentials</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L790"></a><tt class="py-lineno">790</tt>  <tt class="py-line">          <tt class="py-name">redirect_uri</tt> <tt class="py-op">=</tt> <tt id="link-225" class="py-name" targets="Function oauth2client.appengine._parse_state_value()=oauth2client.appengine-module.html#_parse_state_value"><a title="oauth2client.appengine._parse_state_value" class="py-name" href="#" onclick="return doclink('link-225', '_parse_state_value', 'link-225');">_parse_state_value</a></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-226" 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-207', 'request', 'link-144');">request</a></tt><tt class="py-op">.</tt><tt id="link-208" class="py-name"><a title="apiclient.schema.Schemas.get
+apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-226', 'request', 'link-160');">request</a></tt><tt class="py-op">.</tt><tt id="link-227" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-208', 'get', 'link-47');">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="L768"></a><tt class="py-lineno">768</tt>  <tt class="py-line">                                            <tt class="py-name">user</tt><tt class="py-op">)</tt> </tt>
-<a name="L769"></a><tt class="py-lineno">769</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">redirect_uri</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L770"></a><tt class="py-lineno">770</tt>  <tt class="py-line"> </tt>
-<a name="L771"></a><tt class="py-lineno">771</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">OAuth2Handler</tt> </tt>
-</div><a name="L772"></a><tt class="py-lineno">772</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Decorator.callback_application"></a><div id="OAuth2Decorator.callback_application-def"><a name="L773"></a><tt class="py-lineno">773</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.callback_application-toggle" onclick="return toggle('OAuth2Decorator.callback_application');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#callback_application">callback_application</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="OAuth2Decorator.callback_application-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.callback_application-expanded"><a name="L774"></a><tt class="py-lineno">774</tt>  <tt class="py-line">    <tt class="py-docstring">"""WSGI application for handling the OAuth 2.0 redirect callback.</tt> </tt>
-<a name="L775"></a><tt class="py-lineno">775</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L776"></a><tt class="py-lineno">776</tt>  <tt class="py-line"><tt class="py-docstring">    If you need finer grained control use `callback_handler` which returns just</tt> </tt>
-<a name="L777"></a><tt class="py-lineno">777</tt>  <tt class="py-line"><tt class="py-docstring">    the webapp.RequestHandler.</tt> </tt>
-<a name="L778"></a><tt class="py-lineno">778</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L779"></a><tt class="py-lineno">779</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L780"></a><tt class="py-lineno">780</tt>  <tt class="py-line"><tt class="py-docstring">      A webapp.WSGIApplication that handles the redirect back from the</tt> </tt>
-<a name="L781"></a><tt class="py-lineno">781</tt>  <tt class="py-line"><tt class="py-docstring">      server during the OAuth 2.0 dance.</tt> </tt>
-<a name="L782"></a><tt class="py-lineno">782</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L783"></a><tt class="py-lineno">783</tt>  <tt class="py-line">    <tt class="py-keyword">return</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>
-<a name="L784"></a><tt class="py-lineno">784</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-209" class="py-name"><a title="oauth2client.appengine.OAuth2Decorator.callback_path" class="py-name" href="#" onclick="return doclink('link-209', 'callback_path', 'link-156');">callback_path</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-210" class="py-name" targets="Method oauth2client.appengine.OAuth2Decorator.callback_handler()=oauth2client.appengine.OAuth2Decorator-class.html#callback_handler"><a title="oauth2client.appengine.OAuth2Decorator.callback_handler" class="py-name" href="#" onclick="return doclink('link-210', 'callback_handler', 'link-210');">callback_handler</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L785"></a><tt class="py-lineno">785</tt>  <tt class="py-line">        <tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L786"></a><tt class="py-lineno">786</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2DecoratorFromClientSecrets"></a><div id="OAuth2DecoratorFromClientSecrets-def"><a name="L787"></a><tt class="py-lineno">787</tt>  <tt class="py-line"> </tt>
-<a name="L788"></a><tt class="py-lineno">788</tt> <a class="py-toggle" href="#" id="OAuth2DecoratorFromClientSecrets-toggle" onclick="return toggle('OAuth2DecoratorFromClientSecrets');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html">OAuth2DecoratorFromClientSecrets</a><tt class="py-op">(</tt><tt class="py-base-class">OAuth2Decorator</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2DecoratorFromClientSecrets-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="OAuth2DecoratorFromClientSecrets-expanded"><a name="L789"></a><tt class="py-lineno">789</tt>  <tt class="py-line">  <tt class="py-docstring">"""An OAuth2Decorator that builds from a clientsecrets file.</tt> </tt>
-<a name="L790"></a><tt class="py-lineno">790</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L791"></a><tt class="py-lineno">791</tt>  <tt class="py-line"><tt class="py-docstring">  Uses a clientsecrets file as the source for all the information when</tt> </tt>
-<a name="L792"></a><tt class="py-lineno">792</tt>  <tt class="py-line"><tt class="py-docstring">  constructing an OAuth2Decorator.</tt> </tt>
-<a name="L793"></a><tt class="py-lineno">793</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L794"></a><tt class="py-lineno">794</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
-<a name="L795"></a><tt class="py-lineno">795</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L796"></a><tt class="py-lineno">796</tt>  <tt class="py-line"><tt class="py-docstring">    decorator = OAuth2DecoratorFromClientSecrets(</tt> </tt>
-<a name="L797"></a><tt class="py-lineno">797</tt>  <tt class="py-line"><tt class="py-docstring">      os.path.join(os.path.dirname(__file__), 'client_secrets.json')</tt> </tt>
-<a name="L798"></a><tt class="py-lineno">798</tt>  <tt class="py-line"><tt class="py-docstring">      scope='https://www.googleapis.com/auth/plus')</tt> </tt>
-<a name="L799"></a><tt class="py-lineno">799</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L800"></a><tt class="py-lineno">800</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L801"></a><tt class="py-lineno">801</tt>  <tt class="py-line"><tt class="py-docstring">    class MainHandler(webapp.RequestHandler):</tt> </tt>
-<a name="L802"></a><tt class="py-lineno">802</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L803"></a><tt class="py-lineno">803</tt>  <tt class="py-line"><tt class="py-docstring">      @decorator.oauth_required</tt> </tt>
-<a name="L804"></a><tt class="py-lineno">804</tt>  <tt class="py-line"><tt class="py-docstring">      def get(self):</tt> </tt>
-<a name="L805"></a><tt class="py-lineno">805</tt>  <tt class="py-line"><tt class="py-docstring">        http = decorator.http()</tt> </tt>
-<a name="L806"></a><tt class="py-lineno">806</tt>  <tt class="py-line"><tt class="py-docstring">        # http is authorized with the user's Credentials and can be used</tt> </tt>
-<a name="L807"></a><tt class="py-lineno">807</tt>  <tt class="py-line"><tt class="py-docstring">        # in API calls</tt> </tt>
-<a name="L808"></a><tt class="py-lineno">808</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L809"></a><tt class="py-lineno">809</tt>  <tt class="py-line"> </tt>
-<a name="L810"></a><tt class="py-lineno">810</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-211" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-211', 'positional', 'link-68');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt> </tt>
-<a name="OAuth2DecoratorFromClientSecrets.__init__"></a><div id="OAuth2DecoratorFromClientSecrets.__init__-def"><a name="L811"></a><tt class="py-lineno">811</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="L812"></a><tt class="py-lineno">812</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor</tt> </tt>
-<a name="L813"></a><tt class="py-lineno">813</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L814"></a><tt class="py-lineno">814</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L815"></a><tt class="py-lineno">815</tt>  <tt class="py-line"><tt class="py-docstring">      filename: string, File name of client secrets.</tt> </tt>
-<a name="L816"></a><tt class="py-lineno">816</tt>  <tt class="py-line"><tt class="py-docstring">      scope: string or iterable of strings, scope(s) of the credentials being</tt> </tt>
-<a name="L817"></a><tt class="py-lineno">817</tt>  <tt class="py-line"><tt class="py-docstring">        requested.</tt> </tt>
-<a name="L818"></a><tt class="py-lineno">818</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="L819"></a><tt class="py-lineno">819</tt>  <tt class="py-line"><tt class="py-docstring">        clientsecrets file is missing or invalid. The message may contain HTML</tt> </tt>
-<a name="L820"></a><tt class="py-lineno">820</tt>  <tt class="py-line"><tt class="py-docstring">        and will be presented on the web interface for any method that uses the</tt> </tt>
-<a name="L821"></a><tt class="py-lineno">821</tt>  <tt class="py-line"><tt class="py-docstring">        decorator.</tt> </tt>
-<a name="L822"></a><tt class="py-lineno">822</tt>  <tt class="py-line"><tt class="py-docstring">      cache: An optional cache service client that implements get() and set()</tt> </tt>
-<a name="L823"></a><tt class="py-lineno">823</tt>  <tt class="py-line"><tt class="py-docstring">        methods. See clientsecrets.loadfile() for details.</tt> </tt>
-<a name="L824"></a><tt class="py-lineno">824</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L825"></a><tt class="py-lineno">825</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-212" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-212', 'clientsecrets', 'link-16');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-213" 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-213', 'loadfile', 'link-213');">loadfile</a></tt><tt class="py-op">(</tt><tt id="link-214" 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-214', 'filename', 'link-214');">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="L826"></a><tt class="py-lineno">826</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>
-<a name="L827"></a><tt class="py-lineno">827</tt>  <tt class="py-line">        <tt id="link-215" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-215', 'clientsecrets', 'link-16');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-216" 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-216', 'TYPE_WEB', 'link-216');">TYPE_WEB</a></tt><tt class="py-op">,</tt> <tt id="link-217" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-217', 'clientsecrets', 'link-16');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-218" 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-218', 'TYPE_INSTALLED', 'link-218');">TYPE_INSTALLED</a></tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L828"></a><tt class="py-lineno">828</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-219" 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-219', 'InvalidClientSecretsError', 'link-219');">InvalidClientSecretsError</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L829"></a><tt class="py-lineno">829</tt>  <tt class="py-line">          <tt class="py-string">'OAuth2Decorator doesn\'t support this OAuth 2.0 flow.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L830"></a><tt class="py-lineno">830</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-220" 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-220', 'OAuth2DecoratorFromClientSecrets', 'link-220');">OAuth2DecoratorFromClientSecrets</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-221" class="py-name"><a title="apiclient.discovery.Resource.__init__
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-227', 'get', 'link-57');">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="L791"></a><tt class="py-lineno">791</tt>  <tt class="py-line">                                            <tt class="py-name">user</tt><tt class="py-op">)</tt> </tt>
+<a name="L792"></a><tt class="py-lineno">792</tt>  <tt class="py-line"> </tt>
+<a name="L793"></a><tt class="py-lineno">793</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">decorator</tt><tt class="py-op">.</tt><tt class="py-name">_token_response_param</tt> <tt class="py-keyword">and</tt> <tt id="link-228" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-228', 'credentials', 'link-105');">credentials</a></tt><tt class="py-op">.</tt><tt class="py-name">token_response</tt><tt class="py-op">:</tt> </tt>
+<a name="L794"></a><tt class="py-lineno">794</tt>  <tt class="py-line">            <tt class="py-name">resp_json</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt id="link-229" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-229', 'credentials', 'link-105');">credentials</a></tt><tt class="py-op">.</tt><tt class="py-name">token_response</tt><tt class="py-op">)</tt> </tt>
+<a name="L795"></a><tt class="py-lineno">795</tt>  <tt class="py-line">            <tt class="py-name">redirect_uri</tt> <tt class="py-op">=</tt> <tt id="link-230" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-230', 'util', 'link-9');">util</a></tt><tt class="py-op">.</tt><tt id="link-231" class="py-name" targets="Function oauth2client.util._add_query_parameter()=oauth2client.util-module.html#_add_query_parameter"><a title="oauth2client.util._add_query_parameter" class="py-name" href="#" onclick="return doclink('link-231', '_add_query_parameter', 'link-231');">_add_query_parameter</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L796"></a><tt class="py-lineno">796</tt>  <tt class="py-line">                <tt class="py-name">redirect_uri</tt><tt class="py-op">,</tt> <tt class="py-name">decorator</tt><tt class="py-op">.</tt><tt class="py-name">_token_response_param</tt><tt class="py-op">,</tt> <tt class="py-name">resp_json</tt><tt class="py-op">)</tt> </tt>
+<a name="L797"></a><tt class="py-lineno">797</tt>  <tt class="py-line"> </tt>
+<a name="L798"></a><tt class="py-lineno">798</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">redirect_uri</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L799"></a><tt class="py-lineno">799</tt>  <tt class="py-line"> </tt>
+<a name="L800"></a><tt class="py-lineno">800</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">OAuth2Handler</tt> </tt>
+</div><a name="L801"></a><tt class="py-lineno">801</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Decorator.callback_application"></a><div id="OAuth2Decorator.callback_application-def"><a name="L802"></a><tt class="py-lineno">802</tt> <a class="py-toggle" href="#" id="OAuth2Decorator.callback_application-toggle" onclick="return toggle('OAuth2Decorator.callback_application');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2Decorator-class.html#callback_application">callback_application</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="OAuth2Decorator.callback_application-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="OAuth2Decorator.callback_application-expanded"><a name="L803"></a><tt class="py-lineno">803</tt>  <tt class="py-line">    <tt class="py-docstring">"""WSGI application for handling the OAuth 2.0 redirect callback.</tt> </tt>
+<a name="L804"></a><tt class="py-lineno">804</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L805"></a><tt class="py-lineno">805</tt>  <tt class="py-line"><tt class="py-docstring">    If you need finer grained control use `callback_handler` which returns just</tt> </tt>
+<a name="L806"></a><tt class="py-lineno">806</tt>  <tt class="py-line"><tt class="py-docstring">    the webapp.RequestHandler.</tt> </tt>
+<a name="L807"></a><tt class="py-lineno">807</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L808"></a><tt class="py-lineno">808</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L809"></a><tt class="py-lineno">809</tt>  <tt class="py-line"><tt class="py-docstring">      A webapp.WSGIApplication that handles the redirect back from the</tt> </tt>
+<a name="L810"></a><tt class="py-lineno">810</tt>  <tt class="py-line"><tt class="py-docstring">      server during the OAuth 2.0 dance.</tt> </tt>
+<a name="L811"></a><tt class="py-lineno">811</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L812"></a><tt class="py-lineno">812</tt>  <tt class="py-line">    <tt class="py-keyword">return</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>
+<a name="L813"></a><tt class="py-lineno">813</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-232" class="py-name"><a title="oauth2client.appengine.OAuth2Decorator.callback_path" class="py-name" href="#" onclick="return doclink('link-232', 'callback_path', 'link-175');">callback_path</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-233" class="py-name" targets="Method oauth2client.appengine.OAuth2Decorator.callback_handler()=oauth2client.appengine.OAuth2Decorator-class.html#callback_handler"><a title="oauth2client.appengine.OAuth2Decorator.callback_handler" class="py-name" href="#" onclick="return doclink('link-233', 'callback_handler', 'link-233');">callback_handler</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L814"></a><tt class="py-lineno">814</tt>  <tt class="py-line">        <tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L815"></a><tt class="py-lineno">815</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2DecoratorFromClientSecrets"></a><div id="OAuth2DecoratorFromClientSecrets-def"><a name="L816"></a><tt class="py-lineno">816</tt>  <tt class="py-line"> </tt>
+<a name="L817"></a><tt class="py-lineno">817</tt> <a class="py-toggle" href="#" id="OAuth2DecoratorFromClientSecrets-toggle" onclick="return toggle('OAuth2DecoratorFromClientSecrets');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html">OAuth2DecoratorFromClientSecrets</a><tt class="py-op">(</tt><tt class="py-base-class">OAuth2Decorator</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2DecoratorFromClientSecrets-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="OAuth2DecoratorFromClientSecrets-expanded"><a name="L818"></a><tt class="py-lineno">818</tt>  <tt class="py-line">  <tt class="py-docstring">"""An OAuth2Decorator that builds from a clientsecrets file.</tt> </tt>
+<a name="L819"></a><tt class="py-lineno">819</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L820"></a><tt class="py-lineno">820</tt>  <tt class="py-line"><tt class="py-docstring">  Uses a clientsecrets file as the source for all the information when</tt> </tt>
+<a name="L821"></a><tt class="py-lineno">821</tt>  <tt class="py-line"><tt class="py-docstring">  constructing an OAuth2Decorator.</tt> </tt>
+<a name="L822"></a><tt class="py-lineno">822</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L823"></a><tt class="py-lineno">823</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
+<a name="L824"></a><tt class="py-lineno">824</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L825"></a><tt class="py-lineno">825</tt>  <tt class="py-line"><tt class="py-docstring">    decorator = OAuth2DecoratorFromClientSecrets(</tt> </tt>
+<a name="L826"></a><tt class="py-lineno">826</tt>  <tt class="py-line"><tt class="py-docstring">      os.path.join(os.path.dirname(__file__), 'client_secrets.json')</tt> </tt>
+<a name="L827"></a><tt class="py-lineno">827</tt>  <tt class="py-line"><tt class="py-docstring">      scope='https://www.googleapis.com/auth/plus')</tt> </tt>
+<a name="L828"></a><tt class="py-lineno">828</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L829"></a><tt class="py-lineno">829</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L830"></a><tt class="py-lineno">830</tt>  <tt class="py-line"><tt class="py-docstring">    class MainHandler(webapp.RequestHandler):</tt> </tt>
+<a name="L831"></a><tt class="py-lineno">831</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L832"></a><tt class="py-lineno">832</tt>  <tt class="py-line"><tt class="py-docstring">      @decorator.oauth_required</tt> </tt>
+<a name="L833"></a><tt class="py-lineno">833</tt>  <tt class="py-line"><tt class="py-docstring">      def get(self):</tt> </tt>
+<a name="L834"></a><tt class="py-lineno">834</tt>  <tt class="py-line"><tt class="py-docstring">        http = decorator.http()</tt> </tt>
+<a name="L835"></a><tt class="py-lineno">835</tt>  <tt class="py-line"><tt class="py-docstring">        # http is authorized with the user's Credentials and can be used</tt> </tt>
+<a name="L836"></a><tt class="py-lineno">836</tt>  <tt class="py-line"><tt class="py-docstring">        # in API calls</tt> </tt>
+<a name="L837"></a><tt class="py-lineno">837</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L838"></a><tt class="py-lineno">838</tt>  <tt class="py-line"> </tt>
+<a name="L839"></a><tt class="py-lineno">839</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-234" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-234', 'positional', 'link-78');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt> </tt>
+<a name="OAuth2DecoratorFromClientSecrets.__init__"></a><div id="OAuth2DecoratorFromClientSecrets.__init__-def"><a name="L840"></a><tt class="py-lineno">840</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="L841"></a><tt class="py-lineno">841</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor</tt> </tt>
+<a name="L842"></a><tt class="py-lineno">842</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L843"></a><tt class="py-lineno">843</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L844"></a><tt class="py-lineno">844</tt>  <tt class="py-line"><tt class="py-docstring">      filename: string, File name of client secrets.</tt> </tt>
+<a name="L845"></a><tt class="py-lineno">845</tt>  <tt class="py-line"><tt class="py-docstring">      scope: string or iterable of strings, scope(s) of the credentials being</tt> </tt>
+<a name="L846"></a><tt class="py-lineno">846</tt>  <tt class="py-line"><tt class="py-docstring">        requested.</tt> </tt>
+<a name="L847"></a><tt class="py-lineno">847</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="L848"></a><tt class="py-lineno">848</tt>  <tt class="py-line"><tt class="py-docstring">        clientsecrets file is missing or invalid. The message may contain HTML</tt> </tt>
+<a name="L849"></a><tt class="py-lineno">849</tt>  <tt class="py-line"><tt class="py-docstring">        and will be presented on the web interface for any method that uses the</tt> </tt>
+<a name="L850"></a><tt class="py-lineno">850</tt>  <tt class="py-line"><tt class="py-docstring">        decorator.</tt> </tt>
+<a name="L851"></a><tt class="py-lineno">851</tt>  <tt class="py-line"><tt class="py-docstring">      cache: An optional cache service client that implements get() and set()</tt> </tt>
+<a name="L852"></a><tt class="py-lineno">852</tt>  <tt class="py-line"><tt class="py-docstring">        methods. See clientsecrets.loadfile() for details.</tt> </tt>
+<a name="L853"></a><tt class="py-lineno">853</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L854"></a><tt class="py-lineno">854</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-235" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-235', 'clientsecrets', 'link-20');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-236" 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-236', 'loadfile', 'link-236');">loadfile</a></tt><tt class="py-op">(</tt><tt id="link-237" 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-237', 'filename', 'link-237');">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="L855"></a><tt class="py-lineno">855</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>
+<a name="L856"></a><tt class="py-lineno">856</tt>  <tt class="py-line">        <tt id="link-238" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-238', 'clientsecrets', 'link-20');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-239" 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-239', 'TYPE_WEB', 'link-239');">TYPE_WEB</a></tt><tt class="py-op">,</tt> <tt id="link-240" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-240', 'clientsecrets', 'link-20');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-241" 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-241', 'TYPE_INSTALLED', 'link-241');">TYPE_INSTALLED</a></tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L857"></a><tt class="py-lineno">857</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-242" 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-242', 'InvalidClientSecretsError', 'link-242');">InvalidClientSecretsError</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L858"></a><tt class="py-lineno">858</tt>  <tt class="py-line">          <tt class="py-string">'OAuth2Decorator doesn\'t support this OAuth 2.0 flow.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L859"></a><tt class="py-lineno">859</tt>  <tt class="py-line">    <tt class="py-name">constructor_kwargs</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L860"></a><tt class="py-lineno">860</tt>  <tt class="py-line">      <tt class="py-string">'auth_uri'</tt><tt class="py-op">:</tt> <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="L861"></a><tt class="py-lineno">861</tt>  <tt class="py-line">      <tt class="py-string">'token_uri'</tt><tt class="py-op">:</tt> <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="L862"></a><tt class="py-lineno">862</tt>  <tt class="py-line">      <tt class="py-string">'message'</tt><tt class="py-op">:</tt> <tt class="py-name">message</tt><tt class="py-op">,</tt> </tt>
+<a name="L863"></a><tt class="py-lineno">863</tt>  <tt class="py-line">    <tt class="py-op">}</tt> </tt>
+<a name="L864"></a><tt class="py-lineno">864</tt>  <tt class="py-line">    <tt class="py-name">revoke_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">client_info</tt><tt class="py-op">.</tt><tt id="link-243" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-243', 'get', 'link-57');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'revoke_uri'</tt><tt class="py-op">)</tt> </tt>
+<a name="L865"></a><tt class="py-lineno">865</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">revoke_uri</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="L866"></a><tt class="py-lineno">866</tt>  <tt class="py-line">      <tt class="py-name">constructor_kwargs</tt><tt class="py-op">[</tt><tt class="py-string">'revoke_uri'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">revoke_uri</tt> </tt>
+<a name="L867"></a><tt class="py-lineno">867</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-244" 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-244', 'OAuth2DecoratorFromClientSecrets', 'link-244');">OAuth2DecoratorFromClientSecrets</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-245" class="py-name"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
 apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
@@ -1134,42 +1177,38 @@
 oauth2client.locked_file.LockedFile.__init__
 oauth2client.locked_file._Opener.__init__
 oauth2client.multistore_file._MultiStore._Storage.__init__
-oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-221', '__init__', 'link-72');">__init__</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L831"></a><tt class="py-lineno">831</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="L832"></a><tt class="py-lineno">832</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="L833"></a><tt class="py-lineno">833</tt>  <tt class="py-line">              <tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
-<a name="L834"></a><tt class="py-lineno">834</tt>  <tt class="py-line">              <tt class="py-name">auth_uri</tt><tt class="py-op">=</tt><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="L835"></a><tt class="py-lineno">835</tt>  <tt class="py-line">              <tt class="py-name">token_uri</tt><tt class="py-op">=</tt><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="L836"></a><tt class="py-lineno">836</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>
-<a name="L837"></a><tt class="py-lineno">837</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="L838"></a><tt class="py-lineno">838</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="L839"></a><tt class="py-lineno">839</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L840"></a><tt class="py-lineno">840</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="L841"></a><tt class="py-lineno">841</tt>  <tt class="py-line"> </tt>
-<a name="oauth2decorator_from_clientsecrets"></a><div id="oauth2decorator_from_clientsecrets-def"><a name="L842"></a><tt class="py-lineno">842</tt>  <tt class="py-line"> </tt>
-<a name="L843"></a><tt class="py-lineno">843</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-222" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-222', 'positional', 'link-68');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="L844"></a><tt class="py-lineno">844</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="L845"></a><tt class="py-lineno">845</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="L846"></a><tt class="py-lineno">846</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates an OAuth2Decorator populated from a clientsecrets file.</tt> </tt>
-<a name="L847"></a><tt class="py-lineno">847</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L848"></a><tt class="py-lineno">848</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L849"></a><tt class="py-lineno">849</tt>  <tt class="py-line"><tt class="py-docstring">    filename: string, File name of client secrets.</tt> </tt>
-<a name="L850"></a><tt class="py-lineno">850</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="L851"></a><tt class="py-lineno">851</tt>  <tt class="py-line"><tt class="py-docstring">      requested.</tt> </tt>
-<a name="L852"></a><tt class="py-lineno">852</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="L853"></a><tt class="py-lineno">853</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="L854"></a><tt class="py-lineno">854</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="L855"></a><tt class="py-lineno">855</tt>  <tt class="py-line"><tt class="py-docstring">      decorator.</tt> </tt>
-<a name="L856"></a><tt class="py-lineno">856</tt>  <tt class="py-line"><tt class="py-docstring">    cache: An optional cache service client that implements get() and set()</tt> </tt>
-<a name="L857"></a><tt class="py-lineno">857</tt>  <tt class="py-line"><tt class="py-docstring">      methods. See clientsecrets.loadfile() for details.</tt> </tt>
-<a name="L858"></a><tt class="py-lineno">858</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L859"></a><tt class="py-lineno">859</tt>  <tt class="py-line"><tt class="py-docstring">  Returns: An OAuth2Decorator</tt> </tt>
-<a name="L860"></a><tt class="py-lineno">860</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L861"></a><tt class="py-lineno">861</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L862"></a><tt class="py-lineno">862</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-223" class="py-name"><a title="oauth2client.appengine.OAuth2DecoratorFromClientSecrets" class="py-name" href="#" onclick="return doclink('link-223', 'OAuth2DecoratorFromClientSecrets', 'link-220');">OAuth2DecoratorFromClientSecrets</a></tt><tt class="py-op">(</tt><tt id="link-224" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
-oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-224', 'filename', 'link-214');">filename</a></tt><tt class="py-op">,</tt> <tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
-<a name="L863"></a><tt class="py-lineno">863</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="L864"></a><tt class="py-lineno">864</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-245', '__init__', 'link-82');">__init__</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L868"></a><tt class="py-lineno">868</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 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="L869"></a><tt class="py-lineno">869</tt>  <tt class="py-line">        <tt class="py-name">scope</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">constructor_kwargs</tt><tt class="py-op">)</tt> </tt>
+<a name="L870"></a><tt class="py-lineno">870</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="L871"></a><tt class="py-lineno">871</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="L872"></a><tt class="py-lineno">872</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L873"></a><tt class="py-lineno">873</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="L874"></a><tt class="py-lineno">874</tt>  <tt class="py-line"> </tt>
+<a name="oauth2decorator_from_clientsecrets"></a><div id="oauth2decorator_from_clientsecrets-def"><a name="L875"></a><tt class="py-lineno">875</tt>  <tt class="py-line"> </tt>
+<a name="L876"></a><tt class="py-lineno">876</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-246" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-246', 'positional', 'link-78');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="L877"></a><tt class="py-lineno">877</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="L878"></a><tt class="py-lineno">878</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="L879"></a><tt class="py-lineno">879</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates an OAuth2Decorator populated from a clientsecrets file.</tt> </tt>
+<a name="L880"></a><tt class="py-lineno">880</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L881"></a><tt class="py-lineno">881</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L882"></a><tt class="py-lineno">882</tt>  <tt class="py-line"><tt class="py-docstring">    filename: string, File name of client secrets.</tt> </tt>
+<a name="L883"></a><tt class="py-lineno">883</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="L884"></a><tt class="py-lineno">884</tt>  <tt class="py-line"><tt class="py-docstring">      requested.</tt> </tt>
+<a name="L885"></a><tt class="py-lineno">885</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="L886"></a><tt class="py-lineno">886</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="L887"></a><tt class="py-lineno">887</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="L888"></a><tt class="py-lineno">888</tt>  <tt class="py-line"><tt class="py-docstring">      decorator.</tt> </tt>
+<a name="L889"></a><tt class="py-lineno">889</tt>  <tt class="py-line"><tt class="py-docstring">    cache: An optional cache service client that implements get() and set()</tt> </tt>
+<a name="L890"></a><tt class="py-lineno">890</tt>  <tt class="py-line"><tt class="py-docstring">      methods. See clientsecrets.loadfile() for details.</tt> </tt>
+<a name="L891"></a><tt class="py-lineno">891</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L892"></a><tt class="py-lineno">892</tt>  <tt class="py-line"><tt class="py-docstring">  Returns: An OAuth2Decorator</tt> </tt>
+<a name="L893"></a><tt class="py-lineno">893</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L894"></a><tt class="py-lineno">894</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L895"></a><tt class="py-lineno">895</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-247" class="py-name"><a title="oauth2client.appengine.OAuth2DecoratorFromClientSecrets" class="py-name" href="#" onclick="return doclink('link-247', 'OAuth2DecoratorFromClientSecrets', 'link-244');">OAuth2DecoratorFromClientSecrets</a></tt><tt class="py-op">(</tt><tt id="link-248" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
+oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-248', 'filename', 'link-237');">filename</a></tt><tt class="py-op">,</tt> <tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
+<a name="L896"></a><tt class="py-lineno">896</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="L897"></a><tt class="py-lineno">897</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -1199,7 +1238,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:47 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.AppAssertionCredentials-class.html b/docs/epy/oauth2client.appengine.AppAssertionCredentials-class.html
index 16a8433..ecc73e4 100644
--- a/docs/epy/oauth2client.appengine.AppAssertionCredentials-class.html
+++ b/docs/epy/oauth2client.appengine.AppAssertionCredentials-class.html
@@ -137,7 +137,8 @@
     <td colspan="2" class="summary">
     <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="oauth2client.client.AssertionCredentials-class.html">client.AssertionCredentials</a></code></b> (private):
       <code><a href="oauth2client.client.AssertionCredentials-class.html#_generate_assertion" onclick="show_private();">_generate_assertion</a></code>,
-      <code><a href="oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body" onclick="show_private();">_generate_refresh_request_body</a></code>
+      <code><a href="oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body" onclick="show_private();">_generate_refresh_request_body</a></code>,
+      <code><a href="oauth2client.client.AssertionCredentials-class.html#_revoke" onclick="show_private();">_revoke</a></code>
       </p></div>
     <p class="indent-wrapped-lines"><b>Inherited from <code><a href="oauth2client.client.OAuth2Credentials-class.html">client.OAuth2Credentials</a></code></b>:
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#__getstate__">__getstate__</a></code>,
@@ -146,11 +147,13 @@
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#apply">apply</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#authorize">authorize</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#refresh">refresh</a></code>,
+      <code><a href="oauth2client.client.OAuth2Credentials-class.html#revoke">revoke</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#set_store">set_store</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#to_json">to_json</a></code>
       </p>
     <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="oauth2client.client.OAuth2Credentials-class.html">client.OAuth2Credentials</a></code></b> (private):
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request" onclick="show_private();">_do_refresh_request</a></code>,
+      <code><a href="oauth2client.client.OAuth2Credentials-class.html#_do_revoke" onclick="show_private();">_do_revoke</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers" onclick="show_private();">_generate_refresh_request_headers</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential" onclick="show_private();">_updateFromCredential</a></code>
       </p></div>
@@ -417,7 +420,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:38 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.CredentialsModel-class.html b/docs/epy/oauth2client.appengine.CredentialsModel-class.html
index c880a2b..3171705 100644
--- a/docs/epy/oauth2client.appengine.CredentialsModel-class.html
+++ b/docs/epy/oauth2client.appengine.CredentialsModel-class.html
@@ -70,6 +70,124 @@
 
 </pre>
 
+<!-- ==================== NESTED CLASSES ==================== -->
+<a name="section-NestedClasses"></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">Nested Classes</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-NestedClasses"
+         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>google.appengine.ext.db.Model</code></b>:
+      <code><a href="google.appengine.ext.db.PropertiedClass-class.html">__metaclass__</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== 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 colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>google.appengine.ext.db.Model</code></b>:
+      <code>__init__</code>,
+      <code>__new__</code>,
+      <code>delete</code>,
+      <code>dynamic_properties</code>,
+      <code>has_key</code>,
+      <code>instance_properties</code>,
+      <code>is_saved</code>,
+      <code>key</code>,
+      <code>parent</code>,
+      <code>parent_key</code>,
+      <code>put</code>,
+      <code>save</code>,
+      <code>to_xml</code>
+      </p>
+    <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code>google.appengine.ext.db.Model</code></b> (private):
+      <code>_populate_entity</code>,
+      <code>_populate_internal_entity</code>,
+      <code>_to_entity</code>
+      </p></div>
+    <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>__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>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></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">Class Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-ClassMethods"
+         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>google.appengine.ext.db.Model</code></b>:
+      <code>all</code>,
+      <code>entity_type</code>,
+      <code>fields</code>,
+      <code>from_entity</code>,
+      <code>get</code>,
+      <code>get_by_id</code>,
+      <code>get_by_key_name</code>,
+      <code>get_or_insert</code>,
+      <code>gql</code>,
+      <code>kind</code>,
+      <code>properties</code>
+      </p>
+    <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code>google.appengine.ext.db.Model</code></b> (private):
+      <code>_load_entity_values</code>
+      </p></div>
+    </td>
+  </tr>
+</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -95,6 +213,31 @@
     </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>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -118,7 +261,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:39 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.CredentialsNDBModel-class.html b/docs/epy/oauth2client.appengine.CredentialsNDBModel-class.html
index 286489d..b7aa5d3 100644
--- a/docs/epy/oauth2client.appengine.CredentialsNDBModel-class.html
+++ b/docs/epy/oauth2client.appengine.CredentialsNDBModel-class.html
@@ -56,8 +56,8 @@
 <h1 class="epydoc">Class CredentialsNDBModel</h1><p class="nomargin-top"><span class="codelink"><a href="oauth2client.appengine-pysrc.html#CredentialsNDBModel">source&nbsp;code</a></span></p>
 <center>
 <center>  <map id="class_hierarchy_for_credential_2" name="class_hierarchy_for_credential_2">
-<area shape="rect" id="node1" href="javascript:void(0);" title="google.appengine.ext.ndb.Model" alt="" coords="5,6,213,34"/>
-<area shape="rect" id="node2" href="oauth2client.appengine.CredentialsNDBModel-class.html" title="CredentialsNDBModel" alt="" coords="237,6,389,34"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="??&#45;104" alt="" coords="5,6,67,34"/>
+<area shape="rect" id="node2" href="oauth2client.appengine.CredentialsNDBModel-class.html" title="CredentialsNDBModel" alt="" coords="91,6,243,34"/>
 </map>
   <img src="class_hierarchy_for_credential_2.gif" alt='' usemap="#class_hierarchy_for_credential_2" ismap="ismap" class="graph-without-title" />
 </center>
@@ -68,8 +68,8 @@
 
 Since this model uses the same kind as CredentialsModel and has a property
 which can serialize and deserialize Credentials correctly, it can be used
-interchangeably with a CredentialsModel to access, insert and delete the same
-entities. This simply provides an NDB model for interacting with the
+interchangeably with a CredentialsModel to access, insert and delete the
+same entities. This simply provides an NDB model for interacting with the
 same data the DB model interacts with.
 
 Storage of the model is keyed by the user.user_id().
@@ -159,7 +159,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:39 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.CredentialsNDBProperty-class.html b/docs/epy/oauth2client.appengine.CredentialsNDBProperty-class.html
index d6f76d8..4a5be5a 100644
--- a/docs/epy/oauth2client.appengine.CredentialsNDBProperty-class.html
+++ b/docs/epy/oauth2client.appengine.CredentialsNDBProperty-class.html
@@ -56,8 +56,8 @@
 <h1 class="epydoc">Class CredentialsNDBProperty</h1><p class="nomargin-top"><span class="codelink"><a href="oauth2client.appengine-pysrc.html#CredentialsNDBProperty">source&nbsp;code</a></span></p>
 <center>
 <center>  <map id="class_hierarchy_for_credential_3" name="class_hierarchy_for_credential_3">
-<area shape="rect" id="node1" href="javascript:void(0);" title="google.appengine.ext.ndb.BlobProperty" alt="" coords="5,6,253,34"/>
-<area shape="rect" id="node2" href="oauth2client.appengine.CredentialsNDBProperty-class.html" title="CredentialsNDBProperty" alt="" coords="277,6,443,34"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="??&#45;108" alt="" coords="5,6,67,34"/>
+<area shape="rect" id="node2" href="oauth2client.appengine.CredentialsNDBProperty-class.html" title="CredentialsNDBProperty" alt="" coords="91,6,256,34"/>
 </map>
   <img src="class_hierarchy_for_credential_3.gif" alt='' usemap="#class_hierarchy_for_credential_3" ismap="ismap" class="graph-without-title" />
 </center>
@@ -277,7 +277,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:39 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.CredentialsProperty-class.html b/docs/epy/oauth2client.appengine.CredentialsProperty-class.html
index 86ac259..0194486 100644
--- a/docs/epy/oauth2client.appengine.CredentialsProperty-class.html
+++ b/docs/epy/oauth2client.appengine.CredentialsProperty-class.html
@@ -94,8 +94,9 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="get_value_for_datastore"></a><span class="summary-sig-name">get_value_for_datastore</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">model_instance</span>)</span></td>
+          <td><span class="summary-sig"><a href="oauth2client.appengine.CredentialsProperty-class.html#get_value_for_datastore" class="summary-sig-name">get_value_for_datastore</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">model_instance</span>)</span><br />
+      Datastore representation of this property.</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="oauth2client.appengine-pysrc.html#CredentialsProperty.get_value_for_datastore">source&nbsp;code</a></span>
             
@@ -111,8 +112,9 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="make_value_from_datastore"></a><span class="summary-sig-name">make_value_from_datastore</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">value</span>)</span></td>
+          <td><span class="summary-sig"><a href="oauth2client.appengine.CredentialsProperty-class.html#make_value_from_datastore" class="summary-sig-name">make_value_from_datastore</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">value</span>)</span><br />
+      Native representation of this property.</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="oauth2client.appengine-pysrc.html#CredentialsProperty.make_value_from_datastore">source&nbsp;code</a></span>
             
@@ -128,8 +130,9 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="validate"></a><span class="summary-sig-name">validate</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">value</span>)</span></td>
+          <td><span class="summary-sig"><a href="oauth2client.appengine.CredentialsProperty-class.html#validate" class="summary-sig-name">validate</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">value</span>)</span><br />
+      Assert that provided value is compatible with this property.</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="oauth2client.appengine-pysrc.html#CredentialsProperty.validate">source&nbsp;code</a></span>
             
@@ -139,6 +142,39 @@
       
     </td>
   </tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>google.appengine.ext.db.Property</code></b>:
+      <code>__get__</code>,
+      <code>__init__</code>,
+      <code>__property_config__</code>,
+      <code>__set__</code>,
+      <code>datastore_type</code>,
+      <code>default_value</code>,
+      <code>empty</code>,
+      <code>get_updated_value_for_datastore</code>,
+      <code>make_value_from_datastore_index_value</code>
+      </p>
+    <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code>google.appengine.ext.db.Property</code></b> (private):
+      <code>_attr_name</code>,
+      <code>_require_parameter</code>
+      </p></div>
+    <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>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
@@ -161,10 +197,187 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a name="data_type"></a><span class="summary-name">data_type</span> = <code title="Credentials">Credentials</code>
+        <a name="data_type"></a><span class="summary-name">data_type</span> = <code title="Credentials">Credentials</code><br />
+      str(object) -&gt; string
+    </td>
+  </tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>google.appengine.ext.db.Property</code></b>:
+      <code>creation_counter</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="get_value_for_datastore"></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">get_value_for_datastore</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">model_instance</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#CredentialsProperty.get_value_for_datastore">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Datastore representation of this property.
+
+Looks for this property in the given model instance, and returns the proper
+datastore representation of the value that can be stored in a datastore
+entity.  Most critically, it will fetch the datastore key value for
+reference properties.
+
+Some properies (e.g. DateTimeProperty, UserProperty) optionally update their
+value on every put(). This call must return the current value for such
+properties (get_updated_value_for_datastore returns the new value).
+
+Args:
+  model_instance: Instance to fetch datastore value from.
+
+Returns:
+  Datastore representation of the model value in a form that is
+  appropriate for storing in the datastore.
+
+</pre>
+  <dl class="fields">
+    <dt>Overrides:
+        google.appengine.ext.db.Property.get_value_for_datastore
+        <dd><em class="note">(inherited documentation)</em></dd>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<a name="make_value_from_datastore"></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">make_value_from_datastore</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">value</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#CredentialsProperty.make_value_from_datastore">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Native representation of this property.
+
+Given a value retrieved from a datastore entity, return a value,
+possibly converted, to be stored on the model instance.  Usually
+this returns the value unchanged, but a property class may
+override this when it uses a different datatype on the model
+instance than on the entity.
+
+This API is not quite symmetric with get_value_for_datastore(),
+because the model instance on which to store the converted value
+may not exist yet -- we may be collecting values to be passed to a
+model constructor.
+
+Args:
+  value: value retrieved from the datastore entity.
+
+Returns:
+  The value converted for use as a model instance attribute.
+
+</pre>
+  <dl class="fields">
+    <dt>Overrides:
+        google.appengine.ext.db.Property.make_value_from_datastore
+        <dd><em class="note">(inherited documentation)</em></dd>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<a name="validate"></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">validate</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">value</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#CredentialsProperty.validate">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Assert that provided value is compatible with this property.
+
+Args:
+  value: Value to validate against this Property.
+
+Returns:
+  A valid value, either the input unchanged or adapted to the
+  required type.
+
+Raises:
+  BadValueError if the value is not appropriate for this
+  property in any way.
+
+</pre>
+  <dl class="fields">
+    <dt>Overrides:
+        google.appengine.ext.db.Property.validate
+        <dd><em class="note">(inherited documentation)</em></dd>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<br />
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -188,7 +401,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:39 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.FlowNDBProperty-class.html b/docs/epy/oauth2client.appengine.FlowNDBProperty-class.html
index 7c86eb9..65eb09a 100644
--- a/docs/epy/oauth2client.appengine.FlowNDBProperty-class.html
+++ b/docs/epy/oauth2client.appengine.FlowNDBProperty-class.html
@@ -56,8 +56,8 @@
 <h1 class="epydoc">Class FlowNDBProperty</h1><p class="nomargin-top"><span class="codelink"><a href="oauth2client.appengine-pysrc.html#FlowNDBProperty">source&nbsp;code</a></span></p>
 <center>
 <center>  <map id="class_hierarchy_for_flowndbpro" name="class_hierarchy_for_flowndbpro">
-<area shape="rect" id="node1" href="javascript:void(0);" title="google.appengine.ext.ndb.PickleProperty" alt="" coords="5,6,264,34"/>
-<area shape="rect" id="node2" href="oauth2client.appengine.FlowNDBProperty-class.html" title="FlowNDBProperty" alt="" coords="288,6,416,34"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="??&#45;105" alt="" coords="5,6,67,34"/>
+<area shape="rect" id="node2" href="oauth2client.appengine.FlowNDBProperty-class.html" title="FlowNDBProperty" alt="" coords="91,6,219,34"/>
 </map>
   <img src="class_hierarchy_for_flowndbpro.gif" alt='' usemap="#class_hierarchy_for_flowndbpro" ismap="ismap" class="graph-without-title" />
 </center>
@@ -182,7 +182,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:39 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.FlowProperty-class.html b/docs/epy/oauth2client.appengine.FlowProperty-class.html
index 481b06d..fcda59f 100644
--- a/docs/epy/oauth2client.appengine.FlowProperty-class.html
+++ b/docs/epy/oauth2client.appengine.FlowProperty-class.html
@@ -94,8 +94,9 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="get_value_for_datastore"></a><span class="summary-sig-name">get_value_for_datastore</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">model_instance</span>)</span></td>
+          <td><span class="summary-sig"><a href="oauth2client.appengine.FlowProperty-class.html#get_value_for_datastore" class="summary-sig-name">get_value_for_datastore</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">model_instance</span>)</span><br />
+      Datastore representation of this property.</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="oauth2client.appengine-pysrc.html#FlowProperty.get_value_for_datastore">source&nbsp;code</a></span>
             
@@ -111,8 +112,9 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="make_value_from_datastore"></a><span class="summary-sig-name">make_value_from_datastore</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">value</span>)</span></td>
+          <td><span class="summary-sig"><a href="oauth2client.appengine.FlowProperty-class.html#make_value_from_datastore" class="summary-sig-name">make_value_from_datastore</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">value</span>)</span><br />
+      Native representation of this property.</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="oauth2client.appengine-pysrc.html#FlowProperty.make_value_from_datastore">source&nbsp;code</a></span>
             
@@ -128,8 +130,9 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="validate"></a><span class="summary-sig-name">validate</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">value</span>)</span></td>
+          <td><span class="summary-sig"><a href="oauth2client.appengine.FlowProperty-class.html#validate" class="summary-sig-name">validate</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">value</span>)</span><br />
+      Assert that provided value is compatible with this property.</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="oauth2client.appengine-pysrc.html#FlowProperty.validate">source&nbsp;code</a></span>
             
@@ -145,8 +148,9 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="empty"></a><span class="summary-sig-name">empty</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">value</span>)</span></td>
+          <td><span class="summary-sig"><a href="oauth2client.appengine.FlowProperty-class.html#empty" class="summary-sig-name">empty</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">value</span>)</span><br />
+      Determine if value is empty in the context of this property.</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="oauth2client.appengine-pysrc.html#FlowProperty.empty">source&nbsp;code</a></span>
             
@@ -156,6 +160,38 @@
       
     </td>
   </tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>google.appengine.ext.db.Property</code></b>:
+      <code>__get__</code>,
+      <code>__init__</code>,
+      <code>__property_config__</code>,
+      <code>__set__</code>,
+      <code>datastore_type</code>,
+      <code>default_value</code>,
+      <code>get_updated_value_for_datastore</code>,
+      <code>make_value_from_datastore_index_value</code>
+      </p>
+    <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code>google.appengine.ext.db.Property</code></b> (private):
+      <code>_attr_name</code>,
+      <code>_require_parameter</code>
+      </p></div>
+    <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>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
@@ -178,10 +214,225 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a name="data_type"></a><span class="summary-name">data_type</span> = <code title="Flow">Flow</code>
+        <a name="data_type"></a><span class="summary-name">data_type</span> = <code title="Flow">Flow</code><br />
+      str(object) -&gt; string
+    </td>
+  </tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>google.appengine.ext.db.Property</code></b>:
+      <code>creation_counter</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="get_value_for_datastore"></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">get_value_for_datastore</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">model_instance</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#FlowProperty.get_value_for_datastore">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Datastore representation of this property.
+
+Looks for this property in the given model instance, and returns the proper
+datastore representation of the value that can be stored in a datastore
+entity.  Most critically, it will fetch the datastore key value for
+reference properties.
+
+Some properies (e.g. DateTimeProperty, UserProperty) optionally update their
+value on every put(). This call must return the current value for such
+properties (get_updated_value_for_datastore returns the new value).
+
+Args:
+  model_instance: Instance to fetch datastore value from.
+
+Returns:
+  Datastore representation of the model value in a form that is
+  appropriate for storing in the datastore.
+
+</pre>
+  <dl class="fields">
+    <dt>Overrides:
+        google.appengine.ext.db.Property.get_value_for_datastore
+        <dd><em class="note">(inherited documentation)</em></dd>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<a name="make_value_from_datastore"></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">make_value_from_datastore</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">value</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#FlowProperty.make_value_from_datastore">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Native representation of this property.
+
+Given a value retrieved from a datastore entity, return a value,
+possibly converted, to be stored on the model instance.  Usually
+this returns the value unchanged, but a property class may
+override this when it uses a different datatype on the model
+instance than on the entity.
+
+This API is not quite symmetric with get_value_for_datastore(),
+because the model instance on which to store the converted value
+may not exist yet -- we may be collecting values to be passed to a
+model constructor.
+
+Args:
+  value: value retrieved from the datastore entity.
+
+Returns:
+  The value converted for use as a model instance attribute.
+
+</pre>
+  <dl class="fields">
+    <dt>Overrides:
+        google.appengine.ext.db.Property.make_value_from_datastore
+        <dd><em class="note">(inherited documentation)</em></dd>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<a name="validate"></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">validate</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">value</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#FlowProperty.validate">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Assert that provided value is compatible with this property.
+
+Args:
+  value: Value to validate against this Property.
+
+Returns:
+  A valid value, either the input unchanged or adapted to the
+  required type.
+
+Raises:
+  BadValueError if the value is not appropriate for this
+  property in any way.
+
+</pre>
+  <dl class="fields">
+    <dt>Overrides:
+        google.appengine.ext.db.Property.validate
+        <dd><em class="note">(inherited documentation)</em></dd>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<a name="empty"></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">empty</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">value</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.appengine-pysrc.html#FlowProperty.empty">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Determine if value is empty in the context of this property.
+
+For most kinds, this is equivalent to &quot;not value&quot;, but for kinds like
+bool, the test is more subtle, so subclasses can override this method
+if necessary.
+
+Args:
+  value: Value to validate against this Property.
+
+Returns:
+  True if this value is considered empty in the context of this Property
+  type, otherwise False.
+
+</pre>
+  <dl class="fields">
+    <dt>Overrides:
+        google.appengine.ext.db.Property.empty
+        <dd><em class="note">(inherited documentation)</em></dd>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<br />
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -205,7 +456,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:39 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.InvalidClientSecretsError-class.html b/docs/epy/oauth2client.appengine.InvalidClientSecretsError-class.html
index 593bd1e..7c83acd 100644
--- a/docs/epy/oauth2client.appengine.InvalidClientSecretsError-class.html
+++ b/docs/epy/oauth2client.appengine.InvalidClientSecretsError-class.html
@@ -166,7 +166,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:39 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.InvalidXsrfTokenError-class.html b/docs/epy/oauth2client.appengine.InvalidXsrfTokenError-class.html
index b290d36..782a342 100644
--- a/docs/epy/oauth2client.appengine.InvalidXsrfTokenError-class.html
+++ b/docs/epy/oauth2client.appengine.InvalidXsrfTokenError-class.html
@@ -166,7 +166,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:40 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.OAuth2Decorator-class.html b/docs/epy/oauth2client.appengine.OAuth2Decorator-class.html
index 60a9d3a..009e159 100644
--- a/docs/epy/oauth2client.appengine.OAuth2Decorator-class.html
+++ b/docs/epy/oauth2client.appengine.OAuth2Decorator-class.html
@@ -113,11 +113,13 @@
         <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">'https://accounts.google.com/o/oauth2/auth'</span>,
-        <span class="summary-sig-arg">token_uri</span>=<span class="summary-sig-default">'https://accounts.google.com/o/oauth2/token'</span>,
+        <span class="summary-sig-arg">auth_uri</span>=<span class="summary-sig-default">GOOGLE_AUTH_URI</span>,
+        <span class="summary-sig-arg">token_uri</span>=<span class="summary-sig-default">GOOGLE_TOKEN_URI</span>,
+        <span class="summary-sig-arg">revoke_uri</span>=<span class="summary-sig-default">GOOGLE_REVOKE_URI</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">callback_path</span>=<span class="summary-sig-default">'/oauth2callback'</span>,
+        <span class="summary-sig-arg">token_response_param</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">
@@ -375,11 +377,13 @@
         <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">'https://accounts.google.com/o/oauth2/auth'</span>,
-        <span class="sig-arg">token_uri</span>=<span class="sig-default">'https://accounts.google.com/o/oauth2/token'</span>,
+        <span class="sig-arg">auth_uri</span>=<span class="sig-default">GOOGLE_AUTH_URI</span>,
+        <span class="sig-arg">token_uri</span>=<span class="sig-default">GOOGLE_TOKEN_URI</span>,
+        <span class="sig-arg">revoke_uri</span>=<span class="sig-default">GOOGLE_REVOKE_URI</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">callback_path</span>=<span class="sig-default">'/oauth2callback'</span>,
+        <span class="sig-arg">token_response_param</span>=<span class="sig-default">None</span>,
         <span class="sig-arg">**kwargs</span>)</span>
     <br /><em class="fname">(Constructor)</em>
   </h3>
@@ -400,6 +404,8 @@
     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.
+  revoke_uri: string, URI for revoke 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
@@ -407,6 +413,10 @@
   callback_path: string, The absolute path to use as the callback URI. Note
     that this must match up with the URI given when registering the
     application in the APIs Console.
+  token_response_param: string. If provided, the full JSON response
+    to the access token request will be encoded and included in this query
+    parameter in the callback URI. This is useful with providers (e.g.
+    wordpress.com) that include extra fields that the client may want.
   **kwargs: dict, Keyword arguments are be passed along as kwargs to the
     OAuth2WebServerFlow constructor.
 
@@ -710,7 +720,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:40 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html b/docs/epy/oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html
index b7869fc..b1695d2 100644
--- a/docs/epy/oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html
+++ b/docs/epy/oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html
@@ -269,7 +269,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:40 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.SiteXsrfSecretKey-class.html b/docs/epy/oauth2client.appengine.SiteXsrfSecretKey-class.html
index 27c9d55..9591a26 100644
--- a/docs/epy/oauth2client.appengine.SiteXsrfSecretKey-class.html
+++ b/docs/epy/oauth2client.appengine.SiteXsrfSecretKey-class.html
@@ -71,6 +71,124 @@
 
 </pre>
 
+<!-- ==================== NESTED CLASSES ==================== -->
+<a name="section-NestedClasses"></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">Nested Classes</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-NestedClasses"
+         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>google.appengine.ext.db.Model</code></b>:
+      <code><a href="google.appengine.ext.db.PropertiedClass-class.html">__metaclass__</a></code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== 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 colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>google.appengine.ext.db.Model</code></b>:
+      <code>__init__</code>,
+      <code>__new__</code>,
+      <code>delete</code>,
+      <code>dynamic_properties</code>,
+      <code>has_key</code>,
+      <code>instance_properties</code>,
+      <code>is_saved</code>,
+      <code>key</code>,
+      <code>parent</code>,
+      <code>parent_key</code>,
+      <code>put</code>,
+      <code>save</code>,
+      <code>to_xml</code>
+      </p>
+    <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code>google.appengine.ext.db.Model</code></b> (private):
+      <code>_populate_entity</code>,
+      <code>_populate_internal_entity</code>,
+      <code>_to_entity</code>
+      </p></div>
+    <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>__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>
+<!-- ==================== CLASS METHODS ==================== -->
+<a name="section-ClassMethods"></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">Class Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-ClassMethods"
+         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>google.appengine.ext.db.Model</code></b>:
+      <code>all</code>,
+      <code>entity_type</code>,
+      <code>fields</code>,
+      <code>from_entity</code>,
+      <code>get</code>,
+      <code>get_by_id</code>,
+      <code>get_by_key_name</code>,
+      <code>get_or_insert</code>,
+      <code>gql</code>,
+      <code>kind</code>,
+      <code>properties</code>
+      </p>
+    <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code>google.appengine.ext.db.Model</code></b> (private):
+      <code>_load_entity_values</code>
+      </p></div>
+    </td>
+  </tr>
+</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -96,6 +214,31 @@
     </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>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -119,7 +262,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:40 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html b/docs/epy/oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html
index 791f678..1796e9c 100644
--- a/docs/epy/oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html
+++ b/docs/epy/oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html
@@ -56,8 +56,8 @@
 <h1 class="epydoc">Class SiteXsrfSecretKeyNDB</h1><p class="nomargin-top"><span class="codelink"><a href="oauth2client.appengine-pysrc.html#SiteXsrfSecretKeyNDB">source&nbsp;code</a></span></p>
 <center>
 <center>  <map id="class_hierarchy_for_sitexsrfse_2" name="class_hierarchy_for_sitexsrfse_2">
-<area shape="rect" id="node1" href="javascript:void(0);" title="google.appengine.ext.ndb.Model" alt="" coords="5,6,213,34"/>
-<area shape="rect" id="node2" href="oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html" title="SiteXsrfSecretKeyNDB" alt="" coords="237,6,395,34"/>
+<area shape="rect" id="node1" href="javascript:void(0);" title="??&#45;98" alt="" coords="5,6,59,34"/>
+<area shape="rect" id="node2" href="oauth2client.appengine.SiteXsrfSecretKeyNDB-class.html" title="SiteXsrfSecretKeyNDB" alt="" coords="83,6,240,34"/>
 </map>
   <img src="class_hierarchy_for_sitexsrfse_2.gif" alt='' usemap="#class_hierarchy_for_sitexsrfse_2" ismap="ismap" class="graph-without-title" />
 </center>
@@ -158,7 +158,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:40 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.appengine.StorageByKeyName-class.html b/docs/epy/oauth2client.appengine.StorageByKeyName-class.html
index 4e87d0d..a180a94 100644
--- a/docs/epy/oauth2client.appengine.StorageByKeyName-class.html
+++ b/docs/epy/oauth2client.appengine.StorageByKeyName-class.html
@@ -509,7 +509,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:40 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client-module.html b/docs/epy/oauth2client.client-module.html
index d1126bf..4eee0af 100644
--- a/docs/epy/oauth2client.client-module.html
+++ b/docs/epy/oauth2client.client-module.html
@@ -109,6 +109,14 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
+        <a href="oauth2client.client.TokenRevokeError-class.html" class="summary-name">TokenRevokeError</a><br />
+      Error trying to revoke a token.
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
         <a href="oauth2client.client.UnknownClientSecretsFlowError-class.html" class="summary-name">UnknownClientSecretsFlowError</a><br />
       The client secrets file called for an unknown type of OAuth 2.0 flow.
     </td>
@@ -260,6 +268,24 @@
       
     </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 href="oauth2client.client-module.html#_update_query_params" class="summary-sig-name" onclick="show_private();">_update_query_params</a>(<span class="summary-sig-arg">uri</span>,
+        <span class="summary-sig-arg">params</span>)</span><br />
+      Updates a URI with new query parameters.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="oauth2client.client-pysrc.html#_update_query_params">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>
@@ -343,7 +369,9 @@
         <span class="summary-sig-arg">redirect_uri</span>=<span class="summary-sig-default">'postmessage'</span>,
         <span class="summary-sig-arg">http</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">user_agent</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">token_uri</span>=<span class="summary-sig-default">'https://accounts.google.com/o/oauth2/token'</span>)</span><br />
+        <span class="summary-sig-arg">token_uri</span>=<span class="summary-sig-default">GOOGLE_TOKEN_URI</span>,
+        <span class="summary-sig-arg">auth_uri</span>=<span class="summary-sig-default">GOOGLE_AUTH_URI</span>,
+        <span class="summary-sig-arg">revoke_uri</span>=<span class="summary-sig-default">GOOGLE_REVOKE_URI</span>)</span><br />
       Exchanges an authorization code for an OAuth2Credentials object.</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="oauth2client.client-pysrc.html#credentials_from_code">source&nbsp;code</a></span>
@@ -427,6 +455,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
+        <a name="HAS_OPENSSL"></a><span class="summary-name">HAS_OPENSSL</span> = <code title="True">True</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
         <a name="logger"></a><span class="summary-name">logger</span> = <code title="logging.getLogger(__name__)">logging.getLogger(__name__)</code>
     </td>
   </tr>
@@ -516,6 +551,36 @@
   </dl>
 </td></tr></table>
 </div>
+<a name="_update_query_params"></a>
+<div class="private">
+<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">_update_query_params</span>(<span class="sig-arg">uri</span>,
+        <span class="sig-arg">params</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.client-pysrc.html#_update_query_params">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Updates a URI with new query parameters.
+
+Args:
+  uri: string, A valid URI, with potential existing query parameters.
+  params: dict, A dictionary of query parameters.
+
+Returns:
+  The same URI but with the new query parameters added.
+
+</pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="verify_id_token"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -638,7 +703,9 @@
         <span class="sig-arg">redirect_uri</span>=<span class="sig-default">'postmessage'</span>,
         <span class="sig-arg">http</span>=<span class="sig-default">None</span>,
         <span class="sig-arg">user_agent</span>=<span class="sig-default">None</span>,
-        <span class="sig-arg">token_uri</span>=<span class="sig-default">'https://accounts.google.com/o/oauth2/token'</span>)</span>
+        <span class="sig-arg">token_uri</span>=<span class="sig-default">GOOGLE_TOKEN_URI</span>,
+        <span class="sig-arg">auth_uri</span>=<span class="sig-default">GOOGLE_AUTH_URI</span>,
+        <span class="sig-arg">revoke_uri</span>=<span class="sig-default">GOOGLE_REVOKE_URI</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     ><span class="codelink"><a href="oauth2client.client-pysrc.html#credentials_from_code">source&nbsp;code</a></span>&nbsp;
@@ -659,6 +726,11 @@
   http: httplib2.Http, optional http instance to use to do the fetch
   token_uri: string, URI for token endpoint. For convenience
     defaults to Google's endpoints but any OAuth 2.0 provider can be used.
+  auth_uri: string, URI for authorization endpoint. For convenience
+    defaults to Google's endpoints but any OAuth 2.0 provider can be used.
+  revoke_uri: string, URI for revoke endpoint. For convenience
+    defaults to Google's endpoints but any OAuth 2.0 provider can be used.
+
 Returns:
   An OAuth2Credentials object.
 
@@ -763,8 +835,8 @@
   filename: string, File name of client secrets.
   scope: string or iterable of strings, scope(s) to request.
   redirect_uri: string, Either the string 'urn:ietf:wg:oauth:2.0:oob' for
-      a non-web-based application, or a URI that handles the callback from
-      the authorization server.
+    a non-web-based application, or a URI that handles the callback from
+    the authorization server.
   message: string, A friendly string to display to the user if the
     clientsecrets file is missing or invalid. If message is provided then
     sys.exit will be called in the case of an error. If message in not
@@ -850,7 +922,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client-pysrc.html b/docs/epy/oauth2client.client-pysrc.html
index 4c43426..511d2d7 100644
--- a/docs/epy/oauth2client.client-pysrc.html
+++ b/docs/epy/oauth2client.client-pysrc.html
@@ -86,1042 +86,945 @@
 <a name="L31"></a><tt class="py-lineno">  31</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">urllib</tt> </tt>
 <a name="L32"></a><tt class="py-lineno">  32</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">urlparse</tt> </tt>
 <a name="L33"></a><tt class="py-lineno">  33</tt>  <tt class="py-line"> </tt>
-<a name="L34"></a><tt class="py-lineno">  34</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-1" class="py-name" targets="Package oauth2client=oauth2client-module.html"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-1', 'oauth2client', 'link-1');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Module oauth2client.util=oauth2client.util-module.html"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-2', 'util', 'link-2');">util</a></tt> </tt>
-<a name="L35"></a><tt class="py-lineno">  35</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-3" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-3', 'oauth2client', 'link-1');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-4" class="py-name" targets="Module oauth2client.anyjson=oauth2client.anyjson-module.html"><a title="oauth2client.anyjson" class="py-name" href="#" onclick="return doclink('link-4', 'anyjson', 'link-4');">anyjson</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">simplejson</tt> </tt>
-<a name="L36"></a><tt class="py-lineno">  36</tt>  <tt class="py-line"> </tt>
-<a name="L37"></a><tt class="py-lineno">  37</tt>  <tt class="py-line"><tt id="link-5" class="py-name" targets="Variable oauth2client.client.HAS_CRYPTO=oauth2client.client-module.html#HAS_CRYPTO"><a title="oauth2client.client.HAS_CRYPTO" class="py-name" href="#" onclick="return doclink('link-5', 'HAS_CRYPTO', 'link-5');">HAS_CRYPTO</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L38"></a><tt class="py-lineno">  38</tt>  <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L39"></a><tt class="py-lineno">  39</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt id="link-6" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-6', 'oauth2client', 'link-1');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-7" class="py-name" targets="Module oauth2client.crypt=oauth2client.crypt-module.html"><a title="oauth2client.crypt" class="py-name" href="#" onclick="return doclink('link-7', 'crypt', 'link-7');">crypt</a></tt> </tt>
-<a name="L40"></a><tt class="py-lineno">  40</tt>  <tt class="py-line">  <tt id="link-8" class="py-name"><a title="oauth2client.client.HAS_CRYPTO" class="py-name" href="#" onclick="return doclink('link-8', 'HAS_CRYPTO', 'link-5');">HAS_CRYPTO</a></tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L41"></a><tt class="py-lineno">  41</tt>  <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
-<a name="L42"></a><tt class="py-lineno">  42</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-<a name="L43"></a><tt class="py-lineno">  43</tt>  <tt class="py-line"> </tt>
-<a name="L44"></a><tt class="py-lineno">  44</tt>  <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L45"></a><tt class="py-lineno">  45</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt class="py-name">urlparse</tt> <tt class="py-keyword">import</tt> <tt class="py-name">parse_qsl</tt> </tt>
-<a name="L46"></a><tt class="py-lineno">  46</tt>  <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
-<a name="L47"></a><tt class="py-lineno">  47</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt class="py-name">cgi</tt> <tt class="py-keyword">import</tt> <tt class="py-name">parse_qsl</tt> </tt>
-<a name="L48"></a><tt class="py-lineno">  48</tt>  <tt class="py-line"> </tt>
-<a name="L49"></a><tt class="py-lineno">  49</tt>  <tt class="py-line"><tt id="link-9" class="py-name" targets="Variable apiclient.discovery.logger=apiclient.discovery-module.html#logger,Variable oauth2client.appengine.logger=oauth2client.appengine-module.html#logger,Variable oauth2client.client.logger=oauth2client.client-module.html#logger,Variable oauth2client.crypt.logger=oauth2client.crypt-module.html#logger,Variable oauth2client.gce.logger=oauth2client.gce-module.html#logger,Variable oauth2client.locked_file.logger=oauth2client.locked_file-module.html#logger,Variable oauth2client.multistore_file.logger=oauth2client.multistore_file-module.html#logger,Variable oauth2client.util.logger=oauth2client.util-module.html#logger"><a title="apiclient.discovery.logger
+<a name="L34"></a><tt class="py-lineno">  34</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-1" class="py-name" targets="Package oauth2client=oauth2client-module.html"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-1', 'oauth2client', 'link-1');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Variable oauth2client.GOOGLE_AUTH_URI=oauth2client-module.html#GOOGLE_AUTH_URI"><a title="oauth2client.GOOGLE_AUTH_URI" class="py-name" href="#" onclick="return doclink('link-2', 'GOOGLE_AUTH_URI', 'link-2');">GOOGLE_AUTH_URI</a></tt> </tt>
+<a name="L35"></a><tt class="py-lineno">  35</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-3" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-3', 'oauth2client', 'link-1');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-4" class="py-name" targets="Variable oauth2client.GOOGLE_REVOKE_URI=oauth2client-module.html#GOOGLE_REVOKE_URI"><a title="oauth2client.GOOGLE_REVOKE_URI" class="py-name" href="#" onclick="return doclink('link-4', 'GOOGLE_REVOKE_URI', 'link-4');">GOOGLE_REVOKE_URI</a></tt> </tt>
+<a name="L36"></a><tt class="py-lineno">  36</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-5" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-5', 'oauth2client', 'link-1');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-6" class="py-name" targets="Variable oauth2client.GOOGLE_TOKEN_URI=oauth2client-module.html#GOOGLE_TOKEN_URI"><a title="oauth2client.GOOGLE_TOKEN_URI" class="py-name" href="#" onclick="return doclink('link-6', 'GOOGLE_TOKEN_URI', 'link-6');">GOOGLE_TOKEN_URI</a></tt> </tt>
+<a name="L37"></a><tt class="py-lineno">  37</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-7" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-7', 'oauth2client', 'link-1');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-8" class="py-name" targets="Module oauth2client.util=oauth2client.util-module.html"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-8', 'util', 'link-8');">util</a></tt> </tt>
+<a name="L38"></a><tt class="py-lineno">  38</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-9" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-9', 'oauth2client', 'link-1');">oauth2client</a></tt><tt class="py-op">.</tt><tt id="link-10" class="py-name" targets="Module oauth2client.anyjson=oauth2client.anyjson-module.html"><a title="oauth2client.anyjson" class="py-name" href="#" onclick="return doclink('link-10', 'anyjson', 'link-10');">anyjson</a></tt> <tt class="py-keyword">import</tt> <tt class="py-name">simplejson</tt> </tt>
+<a name="L39"></a><tt class="py-lineno">  39</tt>  <tt class="py-line"> </tt>
+<a name="L40"></a><tt class="py-lineno">  40</tt>  <tt class="py-line"><tt id="link-11" class="py-name" targets="Variable oauth2client.client.HAS_OPENSSL=oauth2client.client-module.html#HAS_OPENSSL"><a title="oauth2client.client.HAS_OPENSSL" class="py-name" href="#" onclick="return doclink('link-11', 'HAS_OPENSSL', 'link-11');">HAS_OPENSSL</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L41"></a><tt class="py-lineno">  41</tt>  <tt class="py-line"><tt id="link-12" class="py-name" targets="Variable oauth2client.client.HAS_CRYPTO=oauth2client.client-module.html#HAS_CRYPTO"><a title="oauth2client.client.HAS_CRYPTO" class="py-name" href="#" onclick="return doclink('link-12', 'HAS_CRYPTO', 'link-12');">HAS_CRYPTO</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L42"></a><tt class="py-lineno">  42</tt>  <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L43"></a><tt class="py-lineno">  43</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt id="link-13" class="py-name"><a title="oauth2client" class="py-name" href="#" onclick="return doclink('link-13', 'oauth2client', 'link-1');">oauth2client</a></tt> <tt class="py-keyword">import</tt> <tt id="link-14" class="py-name" targets="Module oauth2client.crypt=oauth2client.crypt-module.html"><a title="oauth2client.crypt" class="py-name" href="#" onclick="return doclink('link-14', 'crypt', 'link-14');">crypt</a></tt> </tt>
+<a name="L44"></a><tt class="py-lineno">  44</tt>  <tt class="py-line">  <tt id="link-15" class="py-name"><a title="oauth2client.client.HAS_CRYPTO" class="py-name" href="#" onclick="return doclink('link-15', 'HAS_CRYPTO', 'link-12');">HAS_CRYPTO</a></tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L45"></a><tt class="py-lineno">  45</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt id="link-16" class="py-name"><a title="oauth2client.crypt" class="py-name" href="#" onclick="return doclink('link-16', 'crypt', 'link-14');">crypt</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Variable oauth2client.crypt.OpenSSLVerifier=oauth2client.crypt-module.html#OpenSSLVerifier"><a title="oauth2client.crypt.OpenSSLVerifier" class="py-name" href="#" onclick="return doclink('link-17', 'OpenSSLVerifier', 'link-17');">OpenSSLVerifier</a></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="L46"></a><tt class="py-lineno">  46</tt>  <tt class="py-line">    <tt id="link-18" class="py-name"><a title="oauth2client.client.HAS_OPENSSL" class="py-name" href="#" onclick="return doclink('link-18', 'HAS_OPENSSL', 'link-11');">HAS_OPENSSL</a></tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L47"></a><tt class="py-lineno">  47</tt>  <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
+<a name="L48"></a><tt class="py-lineno">  48</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+<a name="L49"></a><tt class="py-lineno">  49</tt>  <tt class="py-line"> </tt>
+<a name="L50"></a><tt class="py-lineno">  50</tt>  <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L51"></a><tt class="py-lineno">  51</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt class="py-name">urlparse</tt> <tt class="py-keyword">import</tt> <tt class="py-name">parse_qsl</tt> </tt>
+<a name="L52"></a><tt class="py-lineno">  52</tt>  <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
+<a name="L53"></a><tt class="py-lineno">  53</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt class="py-name">cgi</tt> <tt class="py-keyword">import</tt> <tt class="py-name">parse_qsl</tt> </tt>
+<a name="L54"></a><tt class="py-lineno">  54</tt>  <tt class="py-line"> </tt>
+<a name="L55"></a><tt class="py-lineno">  55</tt>  <tt class="py-line"><tt id="link-19" class="py-name" targets="Variable apiclient.discovery.logger=apiclient.discovery-module.html#logger,Variable oauth2client.appengine.logger=oauth2client.appengine-module.html#logger,Variable oauth2client.client.logger=oauth2client.client-module.html#logger,Variable oauth2client.crypt.logger=oauth2client.crypt-module.html#logger,Variable oauth2client.gce.logger=oauth2client.gce-module.html#logger,Variable oauth2client.locked_file.logger=oauth2client.locked_file-module.html#logger,Variable oauth2client.multistore_file.logger=oauth2client.multistore_file-module.html#logger,Variable oauth2client.util.logger=oauth2client.util-module.html#logger"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-9', 'logger', 'link-9');">logger</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
-<a name="L50"></a><tt class="py-lineno">  50</tt>  <tt class="py-line"> </tt>
-<a name="L51"></a><tt class="py-lineno">  51</tt>  <tt class="py-line"><tt class="py-comment"># Expiry is stored in RFC3339 UTC format</tt> </tt>
-<a name="L52"></a><tt class="py-lineno">  52</tt>  <tt class="py-line"><tt id="link-10" class="py-name" targets="Variable oauth2client.client.EXPIRY_FORMAT=oauth2client.client-module.html#EXPIRY_FORMAT"><a title="oauth2client.client.EXPIRY_FORMAT" class="py-name" href="#" onclick="return doclink('link-10', 'EXPIRY_FORMAT', 'link-10');">EXPIRY_FORMAT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'%Y-%m-%dT%H:%M:%SZ'</tt> </tt>
-<a name="L53"></a><tt class="py-lineno">  53</tt>  <tt class="py-line"> </tt>
-<a name="L54"></a><tt class="py-lineno">  54</tt>  <tt class="py-line"><tt class="py-comment"># Which certs to use to validate id_tokens received.</tt> </tt>
-<a name="L55"></a><tt class="py-lineno">  55</tt>  <tt class="py-line"><tt id="link-11" class="py-name" targets="Variable oauth2client.client.ID_TOKEN_VERIFICATON_CERTS=oauth2client.client-module.html#ID_TOKEN_VERIFICATON_CERTS"><a title="oauth2client.client.ID_TOKEN_VERIFICATON_CERTS" class="py-name" href="#" onclick="return doclink('link-11', 'ID_TOKEN_VERIFICATON_CERTS', 'link-11');">ID_TOKEN_VERIFICATON_CERTS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'https://www.googleapis.com/oauth2/v1/certs'</tt> </tt>
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-19', 'logger', 'link-19');">logger</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
 <a name="L56"></a><tt class="py-lineno">  56</tt>  <tt class="py-line"> </tt>
-<a name="L57"></a><tt class="py-lineno">  57</tt>  <tt class="py-line"><tt class="py-comment"># Constant to use for the out of band OAuth 2.0 flow.</tt> </tt>
-<a name="L58"></a><tt class="py-lineno">  58</tt>  <tt class="py-line"><tt id="link-12" class="py-name" targets="Variable oauth2client.client.OOB_CALLBACK_URN=oauth2client.client-module.html#OOB_CALLBACK_URN"><a title="oauth2client.client.OOB_CALLBACK_URN" class="py-name" href="#" onclick="return doclink('link-12', 'OOB_CALLBACK_URN', 'link-12');">OOB_CALLBACK_URN</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:ietf:wg:oauth:2.0:oob'</tt> </tt>
+<a name="L57"></a><tt class="py-lineno">  57</tt>  <tt class="py-line"><tt class="py-comment"># Expiry is stored in RFC3339 UTC format</tt> </tt>
+<a name="L58"></a><tt class="py-lineno">  58</tt>  <tt class="py-line"><tt id="link-20" class="py-name" targets="Variable oauth2client.client.EXPIRY_FORMAT=oauth2client.client-module.html#EXPIRY_FORMAT"><a title="oauth2client.client.EXPIRY_FORMAT" class="py-name" href="#" onclick="return doclink('link-20', 'EXPIRY_FORMAT', 'link-20');">EXPIRY_FORMAT</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'%Y-%m-%dT%H:%M:%SZ'</tt> </tt>
 <a name="L59"></a><tt class="py-lineno">  59</tt>  <tt class="py-line"> </tt>
-<a name="L60"></a><tt class="py-lineno">  60</tt>  <tt class="py-line"><tt class="py-comment"># Google Data client libraries may need to set this to [401, 403].</tt> </tt>
-<a name="L61"></a><tt class="py-lineno">  61</tt>  <tt class="py-line"><tt id="link-13" class="py-name" targets="Variable oauth2client.client.REFRESH_STATUS_CODES=oauth2client.client-module.html#REFRESH_STATUS_CODES"><a title="oauth2client.client.REFRESH_STATUS_CODES" class="py-name" href="#" onclick="return doclink('link-13', 'REFRESH_STATUS_CODES', 'link-13');">REFRESH_STATUS_CODES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-number">401</tt><tt class="py-op">]</tt> </tt>
-<a name="Error"></a><div id="Error-def"><a name="L62"></a><tt class="py-lineno">  62</tt>  <tt class="py-line"> </tt>
-<a name="L63"></a><tt class="py-lineno">  63</tt>  <tt class="py-line"> </tt>
-<a name="L64"></a><tt class="py-lineno">  64</tt> <a class="py-toggle" href="#" id="Error-toggle" onclick="return toggle('Error');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.Error-class.html">Error</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Error-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Error-expanded"><a name="L65"></a><tt class="py-lineno">  65</tt>  <tt class="py-line">  <tt class="py-docstring">"""Base error for this module."""</tt> </tt>
-<a name="L66"></a><tt class="py-lineno">  66</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L67"></a><tt class="py-lineno">  67</tt>  <tt class="py-line"> </tt>
-<a name="FlowExchangeError"></a><div id="FlowExchangeError-def"><a name="L68"></a><tt class="py-lineno">  68</tt>  <tt class="py-line"> </tt>
-<a name="L69"></a><tt class="py-lineno">  69</tt> <a class="py-toggle" href="#" id="FlowExchangeError-toggle" onclick="return toggle('FlowExchangeError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.FlowExchangeError-class.html">FlowExchangeError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FlowExchangeError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="FlowExchangeError-expanded"><a name="L70"></a><tt class="py-lineno">  70</tt>  <tt class="py-line">  <tt class="py-docstring">"""Error trying to exchange an authorization grant for an access token."""</tt> </tt>
-<a name="L71"></a><tt class="py-lineno">  71</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+<a name="L60"></a><tt class="py-lineno">  60</tt>  <tt class="py-line"><tt class="py-comment"># Which certs to use to validate id_tokens received.</tt> </tt>
+<a name="L61"></a><tt class="py-lineno">  61</tt>  <tt class="py-line"><tt id="link-21" class="py-name" targets="Variable oauth2client.client.ID_TOKEN_VERIFICATON_CERTS=oauth2client.client-module.html#ID_TOKEN_VERIFICATON_CERTS"><a title="oauth2client.client.ID_TOKEN_VERIFICATON_CERTS" class="py-name" href="#" onclick="return doclink('link-21', 'ID_TOKEN_VERIFICATON_CERTS', 'link-21');">ID_TOKEN_VERIFICATON_CERTS</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'https://www.googleapis.com/oauth2/v1/certs'</tt> </tt>
+<a name="L62"></a><tt class="py-lineno">  62</tt>  <tt class="py-line"> </tt>
+<a name="L63"></a><tt class="py-lineno">  63</tt>  <tt class="py-line"><tt class="py-comment"># Constant to use for the out of band OAuth 2.0 flow.</tt> </tt>
+<a name="L64"></a><tt class="py-lineno">  64</tt>  <tt class="py-line"><tt id="link-22" class="py-name" targets="Variable oauth2client.client.OOB_CALLBACK_URN=oauth2client.client-module.html#OOB_CALLBACK_URN"><a title="oauth2client.client.OOB_CALLBACK_URN" class="py-name" href="#" onclick="return doclink('link-22', 'OOB_CALLBACK_URN', 'link-22');">OOB_CALLBACK_URN</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'urn:ietf:wg:oauth:2.0:oob'</tt> </tt>
+<a name="L65"></a><tt class="py-lineno">  65</tt>  <tt class="py-line"> </tt>
+<a name="L66"></a><tt class="py-lineno">  66</tt>  <tt class="py-line"><tt class="py-comment"># Google Data client libraries may need to set this to [401, 403].</tt> </tt>
+<a name="L67"></a><tt class="py-lineno">  67</tt>  <tt class="py-line"><tt id="link-23" class="py-name" targets="Variable oauth2client.client.REFRESH_STATUS_CODES=oauth2client.client-module.html#REFRESH_STATUS_CODES"><a title="oauth2client.client.REFRESH_STATUS_CODES" class="py-name" href="#" onclick="return doclink('link-23', 'REFRESH_STATUS_CODES', 'link-23');">REFRESH_STATUS_CODES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-number">401</tt><tt class="py-op">]</tt> </tt>
+<a name="Error"></a><div id="Error-def"><a name="L68"></a><tt class="py-lineno">  68</tt>  <tt class="py-line"> </tt>
+<a name="L69"></a><tt class="py-lineno">  69</tt>  <tt class="py-line"> </tt>
+<a name="L70"></a><tt class="py-lineno">  70</tt> <a class="py-toggle" href="#" id="Error-toggle" onclick="return toggle('Error');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.Error-class.html">Error</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Error-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Error-expanded"><a name="L71"></a><tt class="py-lineno">  71</tt>  <tt class="py-line">  <tt class="py-docstring">"""Base error for this module."""</tt> </tt>
 </div><a name="L72"></a><tt class="py-lineno">  72</tt>  <tt class="py-line"> </tt>
-<a name="AccessTokenRefreshError"></a><div id="AccessTokenRefreshError-def"><a name="L73"></a><tt class="py-lineno">  73</tt>  <tt class="py-line"> </tt>
-<a name="L74"></a><tt class="py-lineno">  74</tt> <a class="py-toggle" href="#" id="AccessTokenRefreshError-toggle" onclick="return toggle('AccessTokenRefreshError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.AccessTokenRefreshError-class.html">AccessTokenRefreshError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AccessTokenRefreshError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="AccessTokenRefreshError-expanded"><a name="L75"></a><tt class="py-lineno">  75</tt>  <tt class="py-line">  <tt class="py-docstring">"""Error trying to refresh an expired access token."""</tt> </tt>
-<a name="L76"></a><tt class="py-lineno">  76</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L77"></a><tt class="py-lineno">  77</tt>  <tt class="py-line"> </tt>
-<a name="UnknownClientSecretsFlowError"></a><div id="UnknownClientSecretsFlowError-def"><a name="L78"></a><tt class="py-lineno">  78</tt> <a class="py-toggle" href="#" id="UnknownClientSecretsFlowError-toggle" onclick="return toggle('UnknownClientSecretsFlowError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.UnknownClientSecretsFlowError-class.html">UnknownClientSecretsFlowError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="UnknownClientSecretsFlowError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="UnknownClientSecretsFlowError-expanded"><a name="L79"></a><tt class="py-lineno">  79</tt>  <tt class="py-line">  <tt class="py-docstring">"""The client secrets file called for an unknown type of OAuth 2.0 flow. """</tt> </tt>
-<a name="L80"></a><tt class="py-lineno">  80</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L81"></a><tt class="py-lineno">  81</tt>  <tt class="py-line"> </tt>
-<a name="AccessTokenCredentialsError"></a><div id="AccessTokenCredentialsError-def"><a name="L82"></a><tt class="py-lineno">  82</tt>  <tt class="py-line"> </tt>
-<a name="L83"></a><tt class="py-lineno">  83</tt> <a class="py-toggle" href="#" id="AccessTokenCredentialsError-toggle" onclick="return toggle('AccessTokenCredentialsError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.AccessTokenCredentialsError-class.html">AccessTokenCredentialsError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AccessTokenCredentialsError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="AccessTokenCredentialsError-expanded"><a name="L84"></a><tt class="py-lineno">  84</tt>  <tt class="py-line">  <tt class="py-docstring">"""Having only the access_token means no refresh is possible."""</tt> </tt>
-<a name="L85"></a><tt class="py-lineno">  85</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L86"></a><tt class="py-lineno">  86</tt>  <tt class="py-line"> </tt>
-<a name="VerifyJwtTokenError"></a><div id="VerifyJwtTokenError-def"><a name="L87"></a><tt class="py-lineno">  87</tt>  <tt class="py-line"> </tt>
-<a name="L88"></a><tt class="py-lineno">  88</tt> <a class="py-toggle" href="#" id="VerifyJwtTokenError-toggle" onclick="return toggle('VerifyJwtTokenError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.VerifyJwtTokenError-class.html">VerifyJwtTokenError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="VerifyJwtTokenError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="VerifyJwtTokenError-expanded"><a name="L89"></a><tt class="py-lineno">  89</tt>  <tt class="py-line">  <tt class="py-docstring">"""Could on retrieve certificates for validation."""</tt> </tt>
-<a name="L90"></a><tt class="py-lineno">  90</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L91"></a><tt class="py-lineno">  91</tt>  <tt class="py-line"> </tt>
-<a name="NonAsciiHeaderError"></a><div id="NonAsciiHeaderError-def"><a name="L92"></a><tt class="py-lineno">  92</tt>  <tt class="py-line"> </tt>
-<a name="L93"></a><tt class="py-lineno">  93</tt> <a class="py-toggle" href="#" id="NonAsciiHeaderError-toggle" onclick="return toggle('NonAsciiHeaderError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.NonAsciiHeaderError-class.html">NonAsciiHeaderError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="NonAsciiHeaderError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="NonAsciiHeaderError-expanded"><a name="L94"></a><tt class="py-lineno">  94</tt>  <tt class="py-line">  <tt class="py-docstring">"""Header names and values must be ASCII strings."""</tt> </tt>
-<a name="L95"></a><tt class="py-lineno">  95</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+<a name="FlowExchangeError"></a><div id="FlowExchangeError-def"><a name="L73"></a><tt class="py-lineno">  73</tt>  <tt class="py-line"> </tt>
+<a name="L74"></a><tt class="py-lineno">  74</tt> <a class="py-toggle" href="#" id="FlowExchangeError-toggle" onclick="return toggle('FlowExchangeError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.FlowExchangeError-class.html">FlowExchangeError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="FlowExchangeError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="FlowExchangeError-expanded"><a name="L75"></a><tt class="py-lineno">  75</tt>  <tt class="py-line">  <tt class="py-docstring">"""Error trying to exchange an authorization grant for an access token."""</tt> </tt>
+</div><a name="L76"></a><tt class="py-lineno">  76</tt>  <tt class="py-line"> </tt>
+<a name="AccessTokenRefreshError"></a><div id="AccessTokenRefreshError-def"><a name="L77"></a><tt class="py-lineno">  77</tt>  <tt class="py-line"> </tt>
+<a name="L78"></a><tt class="py-lineno">  78</tt> <a class="py-toggle" href="#" id="AccessTokenRefreshError-toggle" onclick="return toggle('AccessTokenRefreshError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.AccessTokenRefreshError-class.html">AccessTokenRefreshError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AccessTokenRefreshError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="AccessTokenRefreshError-expanded"><a name="L79"></a><tt class="py-lineno">  79</tt>  <tt class="py-line">  <tt class="py-docstring">"""Error trying to refresh an expired access token."""</tt> </tt>
+</div><a name="L80"></a><tt class="py-lineno">  80</tt>  <tt class="py-line"> </tt>
+<a name="TokenRevokeError"></a><div id="TokenRevokeError-def"><a name="L81"></a><tt class="py-lineno">  81</tt>  <tt class="py-line"> </tt>
+<a name="L82"></a><tt class="py-lineno">  82</tt> <a class="py-toggle" href="#" id="TokenRevokeError-toggle" onclick="return toggle('TokenRevokeError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.TokenRevokeError-class.html">TokenRevokeError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="TokenRevokeError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="TokenRevokeError-expanded"><a name="L83"></a><tt class="py-lineno">  83</tt>  <tt class="py-line">  <tt class="py-docstring">"""Error trying to revoke a token."""</tt> </tt>
+</div><a name="L84"></a><tt class="py-lineno">  84</tt>  <tt class="py-line"> </tt>
+<a name="UnknownClientSecretsFlowError"></a><div id="UnknownClientSecretsFlowError-def"><a name="L85"></a><tt class="py-lineno">  85</tt>  <tt class="py-line"> </tt>
+<a name="L86"></a><tt class="py-lineno">  86</tt> <a class="py-toggle" href="#" id="UnknownClientSecretsFlowError-toggle" onclick="return toggle('UnknownClientSecretsFlowError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.UnknownClientSecretsFlowError-class.html">UnknownClientSecretsFlowError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="UnknownClientSecretsFlowError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="UnknownClientSecretsFlowError-expanded"><a name="L87"></a><tt class="py-lineno">  87</tt>  <tt class="py-line">  <tt class="py-docstring">"""The client secrets file called for an unknown type of OAuth 2.0 flow. """</tt> </tt>
+</div><a name="L88"></a><tt class="py-lineno">  88</tt>  <tt class="py-line"> </tt>
+<a name="AccessTokenCredentialsError"></a><div id="AccessTokenCredentialsError-def"><a name="L89"></a><tt class="py-lineno">  89</tt>  <tt class="py-line"> </tt>
+<a name="L90"></a><tt class="py-lineno">  90</tt> <a class="py-toggle" href="#" id="AccessTokenCredentialsError-toggle" onclick="return toggle('AccessTokenCredentialsError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.AccessTokenCredentialsError-class.html">AccessTokenCredentialsError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AccessTokenCredentialsError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="AccessTokenCredentialsError-expanded"><a name="L91"></a><tt class="py-lineno">  91</tt>  <tt class="py-line">  <tt class="py-docstring">"""Having only the access_token means no refresh is possible."""</tt> </tt>
+</div><a name="L92"></a><tt class="py-lineno">  92</tt>  <tt class="py-line"> </tt>
+<a name="VerifyJwtTokenError"></a><div id="VerifyJwtTokenError-def"><a name="L93"></a><tt class="py-lineno">  93</tt>  <tt class="py-line"> </tt>
+<a name="L94"></a><tt class="py-lineno">  94</tt> <a class="py-toggle" href="#" id="VerifyJwtTokenError-toggle" onclick="return toggle('VerifyJwtTokenError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.VerifyJwtTokenError-class.html">VerifyJwtTokenError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="VerifyJwtTokenError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="VerifyJwtTokenError-expanded"><a name="L95"></a><tt class="py-lineno">  95</tt>  <tt class="py-line">  <tt class="py-docstring">"""Could on retrieve certificates for validation."""</tt> </tt>
 </div><a name="L96"></a><tt class="py-lineno">  96</tt>  <tt class="py-line"> </tt>
-<a name="_abstract"></a><div id="_abstract-def"><a name="L97"></a><tt class="py-lineno">  97</tt>  <tt class="py-line"> </tt>
-<a name="L98"></a><tt class="py-lineno">  98</tt> <a class="py-toggle" href="#" id="_abstract-toggle" onclick="return toggle('_abstract');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#_abstract">_abstract</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_abstract-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_abstract-expanded"><a name="L99"></a><tt class="py-lineno">  99</tt>  <tt class="py-line">  <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">'You need to override this function'</tt><tt class="py-op">)</tt> </tt>
+<a name="NonAsciiHeaderError"></a><div id="NonAsciiHeaderError-def"><a name="L97"></a><tt class="py-lineno">  97</tt>  <tt class="py-line"> </tt>
+<a name="L98"></a><tt class="py-lineno">  98</tt> <a class="py-toggle" href="#" id="NonAsciiHeaderError-toggle" onclick="return toggle('NonAsciiHeaderError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.NonAsciiHeaderError-class.html">NonAsciiHeaderError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NonAsciiHeaderError-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="NonAsciiHeaderError-expanded"><a name="L99"></a><tt class="py-lineno">  99</tt>  <tt class="py-line">  <tt class="py-docstring">"""Header names and values must be ASCII strings."""</tt> </tt>
 </div><a name="L100"></a><tt class="py-lineno"> 100</tt>  <tt class="py-line"> </tt>
-<a name="MemoryCache"></a><div id="MemoryCache-def"><a name="L101"></a><tt class="py-lineno"> 101</tt>  <tt class="py-line"> </tt>
-<a name="L102"></a><tt class="py-lineno"> 102</tt> <a class="py-toggle" href="#" id="MemoryCache-toggle" onclick="return toggle('MemoryCache');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.MemoryCache-class.html">MemoryCache</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MemoryCache-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MemoryCache-expanded"><a name="L103"></a><tt class="py-lineno"> 103</tt>  <tt class="py-line">  <tt class="py-docstring">"""httplib2 Cache implementation which only caches locally."""</tt> </tt>
-<a name="L104"></a><tt class="py-lineno"> 104</tt>  <tt class="py-line"> </tt>
-<a name="MemoryCache.__init__"></a><div id="MemoryCache.__init__-def"><a name="L105"></a><tt class="py-lineno"> 105</tt> <a class="py-toggle" href="#" id="MemoryCache.__init__-toggle" onclick="return toggle('MemoryCache.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.MemoryCache-class.html#__init__">__init__</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="MemoryCache.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MemoryCache.__init__-expanded"><a name="L106"></a><tt class="py-lineno"> 106</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cache</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-</div><a name="L107"></a><tt class="py-lineno"> 107</tt>  <tt class="py-line"> </tt>
-<a name="MemoryCache.get"></a><div id="MemoryCache.get-def"><a name="L108"></a><tt class="py-lineno"> 108</tt> <a class="py-toggle" href="#" id="MemoryCache.get-toggle" onclick="return toggle('MemoryCache.get');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.MemoryCache-class.html#get">get</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MemoryCache.get-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MemoryCache.get-expanded"><a name="L109"></a><tt class="py-lineno"> 109</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cache</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Method apiclient.schema.Schemas.get()=apiclient.schema.Schemas-class.html#get,Method oauth2client.client.MemoryCache.get()=oauth2client.client.MemoryCache-class.html#get,Method oauth2client.client.Storage.get()=oauth2client.client.Storage-class.html#get"><a title="apiclient.schema.Schemas.get
+<a name="_abstract"></a><div id="_abstract-def"><a name="L101"></a><tt class="py-lineno"> 101</tt>  <tt class="py-line"> </tt>
+<a name="L102"></a><tt class="py-lineno"> 102</tt> <a class="py-toggle" href="#" id="_abstract-toggle" onclick="return toggle('_abstract');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#_abstract">_abstract</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_abstract-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_abstract-expanded"><a name="L103"></a><tt class="py-lineno"> 103</tt>  <tt class="py-line">  <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">'You need to override this function'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L104"></a><tt class="py-lineno"> 104</tt>  <tt class="py-line"> </tt>
+<a name="MemoryCache"></a><div id="MemoryCache-def"><a name="L105"></a><tt class="py-lineno"> 105</tt>  <tt class="py-line"> </tt>
+<a name="L106"></a><tt class="py-lineno"> 106</tt> <a class="py-toggle" href="#" id="MemoryCache-toggle" onclick="return toggle('MemoryCache');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.MemoryCache-class.html">MemoryCache</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MemoryCache-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MemoryCache-expanded"><a name="L107"></a><tt class="py-lineno"> 107</tt>  <tt class="py-line">  <tt class="py-docstring">"""httplib2 Cache implementation which only caches locally."""</tt> </tt>
+<a name="L108"></a><tt class="py-lineno"> 108</tt>  <tt class="py-line"> </tt>
+<a name="MemoryCache.__init__"></a><div id="MemoryCache.__init__-def"><a name="L109"></a><tt class="py-lineno"> 109</tt> <a class="py-toggle" href="#" id="MemoryCache.__init__-toggle" onclick="return toggle('MemoryCache.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.MemoryCache-class.html#__init__">__init__</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="MemoryCache.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MemoryCache.__init__-expanded"><a name="L110"></a><tt class="py-lineno"> 110</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cache</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+</div><a name="L111"></a><tt class="py-lineno"> 111</tt>  <tt class="py-line"> </tt>
+<a name="MemoryCache.get"></a><div id="MemoryCache.get-def"><a name="L112"></a><tt class="py-lineno"> 112</tt> <a class="py-toggle" href="#" id="MemoryCache.get-toggle" onclick="return toggle('MemoryCache.get');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.MemoryCache-class.html#get">get</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MemoryCache.get-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MemoryCache.get-expanded"><a name="L113"></a><tt class="py-lineno"> 113</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cache</tt><tt class="py-op">.</tt><tt id="link-24" class="py-name" targets="Method apiclient.schema.Schemas.get()=apiclient.schema.Schemas-class.html#get,Method oauth2client.client.MemoryCache.get()=oauth2client.client.MemoryCache-class.html#get,Method oauth2client.client.Storage.get()=oauth2client.client.Storage-class.html#get"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-14', 'get', 'link-14');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L110"></a><tt class="py-lineno"> 110</tt>  <tt class="py-line"> </tt>
-<a name="MemoryCache.set"></a><div id="MemoryCache.set-def"><a name="L111"></a><tt class="py-lineno"> 111</tt> <a class="py-toggle" href="#" id="MemoryCache.set-toggle" onclick="return toggle('MemoryCache.set');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.MemoryCache-class.html#set">set</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MemoryCache.set-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MemoryCache.set-expanded"><a name="L112"></a><tt class="py-lineno"> 112</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cache</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
-</div><a name="L113"></a><tt class="py-lineno"> 113</tt>  <tt class="py-line"> </tt>
-<a name="MemoryCache.delete"></a><div id="MemoryCache.delete-def"><a name="L114"></a><tt class="py-lineno"> 114</tt> <a class="py-toggle" href="#" id="MemoryCache.delete-toggle" onclick="return toggle('MemoryCache.delete');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.MemoryCache-class.html#delete">delete</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MemoryCache.delete-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MemoryCache.delete-expanded"><a name="L115"></a><tt class="py-lineno"> 115</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cache</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L116"></a><tt class="py-lineno"> 116</tt>  <tt class="py-line"> </tt>
-<a name="Credentials"></a><div id="Credentials-def"><a name="L117"></a><tt class="py-lineno"> 117</tt>  <tt class="py-line"> </tt>
-<a name="L118"></a><tt class="py-lineno"> 118</tt> <a class="py-toggle" href="#" id="Credentials-toggle" onclick="return toggle('Credentials');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html">Credentials</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Credentials-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Credentials-expanded"><a name="L119"></a><tt class="py-lineno"> 119</tt>  <tt class="py-line">  <tt class="py-docstring">"""Base class for all Credentials objects.</tt> </tt>
-<a name="L120"></a><tt class="py-lineno"> 120</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L121"></a><tt class="py-lineno"> 121</tt>  <tt class="py-line"><tt class="py-docstring">  Subclasses must define an authorize() method that applies the credentials to</tt> </tt>
-<a name="L122"></a><tt class="py-lineno"> 122</tt>  <tt class="py-line"><tt class="py-docstring">  an HTTP transport.</tt> </tt>
-<a name="L123"></a><tt class="py-lineno"> 123</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L124"></a><tt class="py-lineno"> 124</tt>  <tt class="py-line"><tt class="py-docstring">  Subclasses must also specify a classmethod named 'from_json' that takes a JSON</tt> </tt>
-<a name="L125"></a><tt class="py-lineno"> 125</tt>  <tt class="py-line"><tt class="py-docstring">  string as input and returns an instaniated Credentials object.</tt> </tt>
-<a name="L126"></a><tt class="py-lineno"> 126</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L127"></a><tt class="py-lineno"> 127</tt>  <tt class="py-line"> </tt>
-<a name="L128"></a><tt class="py-lineno"> 128</tt>  <tt class="py-line">  <tt id="link-15" class="py-name" targets="Variable oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS=oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS"><a title="oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS" class="py-name" href="#" onclick="return doclink('link-15', 'NON_SERIALIZED_MEMBERS', 'link-15');">NON_SERIALIZED_MEMBERS</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">'store'</tt><tt class="py-op">]</tt> </tt>
-<a name="L129"></a><tt class="py-lineno"> 129</tt>  <tt class="py-line"> </tt>
-<a name="Credentials.authorize"></a><div id="Credentials.authorize-def"><a name="L130"></a><tt class="py-lineno"> 130</tt> <a class="py-toggle" href="#" id="Credentials.authorize-toggle" onclick="return toggle('Credentials.authorize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#authorize">authorize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Credentials.authorize-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials.authorize-expanded"><a name="L131"></a><tt class="py-lineno"> 131</tt>  <tt class="py-line">    <tt class="py-docstring">"""Take an httplib2.Http instance (or equivalent) and</tt> </tt>
-<a name="L132"></a><tt class="py-lineno"> 132</tt>  <tt class="py-line"><tt class="py-docstring">    authorizes it for the set of credentials, usually by</tt> </tt>
-<a name="L133"></a><tt class="py-lineno"> 133</tt>  <tt class="py-line"><tt class="py-docstring">    replacing http.request() with a method that adds in</tt> </tt>
-<a name="L134"></a><tt class="py-lineno"> 134</tt>  <tt class="py-line"><tt class="py-docstring">    the appropriate headers and then delegates to the original</tt> </tt>
-<a name="L135"></a><tt class="py-lineno"> 135</tt>  <tt class="py-line"><tt class="py-docstring">    Http.request() method.</tt> </tt>
-<a name="L136"></a><tt class="py-lineno"> 136</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L137"></a><tt class="py-lineno"> 137</tt>  <tt class="py-line">    <tt id="link-16" class="py-name" targets="Function apiclient.model._abstract()=apiclient.model-module.html#_abstract,Function oauth2client.client._abstract()=oauth2client.client-module.html#_abstract"><a title="apiclient.model._abstract
-oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-16', '_abstract', 'link-16');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L138"></a><tt class="py-lineno"> 138</tt>  <tt class="py-line"> </tt>
-<a name="Credentials.refresh"></a><div id="Credentials.refresh-def"><a name="L139"></a><tt class="py-lineno"> 139</tt> <a class="py-toggle" href="#" id="Credentials.refresh-toggle" onclick="return toggle('Credentials.refresh');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#refresh">refresh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Credentials.refresh-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials.refresh-expanded"><a name="L140"></a><tt class="py-lineno"> 140</tt>  <tt class="py-line">    <tt class="py-docstring">"""Forces a refresh of the access_token.</tt> </tt>
-<a name="L141"></a><tt class="py-lineno"> 141</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L142"></a><tt class="py-lineno"> 142</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L143"></a><tt class="py-lineno"> 143</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used to make the refresh</tt> </tt>
-<a name="L144"></a><tt class="py-lineno"> 144</tt>  <tt class="py-line"><tt class="py-docstring">        request.</tt> </tt>
-<a name="L145"></a><tt class="py-lineno"> 145</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L146"></a><tt class="py-lineno"> 146</tt>  <tt class="py-line">    <tt id="link-17" class="py-name"><a title="apiclient.model._abstract
-oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-17', '_abstract', 'link-16');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L147"></a><tt class="py-lineno"> 147</tt>  <tt class="py-line"> </tt>
-<a name="Credentials.apply"></a><div id="Credentials.apply-def"><a name="L148"></a><tt class="py-lineno"> 148</tt> <a class="py-toggle" href="#" id="Credentials.apply-toggle" onclick="return toggle('Credentials.apply');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#apply">apply</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Credentials.apply-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials.apply-expanded"><a name="L149"></a><tt class="py-lineno"> 149</tt>  <tt class="py-line">    <tt class="py-docstring">"""Add the authorization to the headers.</tt> </tt>
-<a name="L150"></a><tt class="py-lineno"> 150</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L151"></a><tt class="py-lineno"> 151</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L152"></a><tt class="py-lineno"> 152</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, the headers to add the Authorization header to.</tt> </tt>
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-24', 'get', 'link-24');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L114"></a><tt class="py-lineno"> 114</tt>  <tt class="py-line"> </tt>
+<a name="MemoryCache.set"></a><div id="MemoryCache.set-def"><a name="L115"></a><tt class="py-lineno"> 115</tt> <a class="py-toggle" href="#" id="MemoryCache.set-toggle" onclick="return toggle('MemoryCache.set');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.MemoryCache-class.html#set">set</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MemoryCache.set-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MemoryCache.set-expanded"><a name="L116"></a><tt class="py-lineno"> 116</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cache</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
+</div><a name="L117"></a><tt class="py-lineno"> 117</tt>  <tt class="py-line"> </tt>
+<a name="MemoryCache.delete"></a><div id="MemoryCache.delete-def"><a name="L118"></a><tt class="py-lineno"> 118</tt> <a class="py-toggle" href="#" id="MemoryCache.delete-toggle" onclick="return toggle('MemoryCache.delete');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.MemoryCache-class.html#delete">delete</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MemoryCache.delete-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MemoryCache.delete-expanded"><a name="L119"></a><tt class="py-lineno"> 119</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">cache</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L120"></a><tt class="py-lineno"> 120</tt>  <tt class="py-line"> </tt>
+<a name="Credentials"></a><div id="Credentials-def"><a name="L121"></a><tt class="py-lineno"> 121</tt>  <tt class="py-line"> </tt>
+<a name="L122"></a><tt class="py-lineno"> 122</tt> <a class="py-toggle" href="#" id="Credentials-toggle" onclick="return toggle('Credentials');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html">Credentials</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Credentials-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Credentials-expanded"><a name="L123"></a><tt class="py-lineno"> 123</tt>  <tt class="py-line">  <tt class="py-docstring">"""Base class for all Credentials objects.</tt> </tt>
+<a name="L124"></a><tt class="py-lineno"> 124</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L125"></a><tt class="py-lineno"> 125</tt>  <tt class="py-line"><tt class="py-docstring">  Subclasses must define an authorize() method that applies the credentials to</tt> </tt>
+<a name="L126"></a><tt class="py-lineno"> 126</tt>  <tt class="py-line"><tt class="py-docstring">  an HTTP transport.</tt> </tt>
+<a name="L127"></a><tt class="py-lineno"> 127</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L128"></a><tt class="py-lineno"> 128</tt>  <tt class="py-line"><tt class="py-docstring">  Subclasses must also specify a classmethod named 'from_json' that takes a JSON</tt> </tt>
+<a name="L129"></a><tt class="py-lineno"> 129</tt>  <tt class="py-line"><tt class="py-docstring">  string as input and returns an instaniated Credentials object.</tt> </tt>
+<a name="L130"></a><tt class="py-lineno"> 130</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L131"></a><tt class="py-lineno"> 131</tt>  <tt class="py-line"> </tt>
+<a name="L132"></a><tt class="py-lineno"> 132</tt>  <tt class="py-line">  <tt id="link-25" class="py-name" targets="Variable oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS=oauth2client.client.Credentials-class.html#NON_SERIALIZED_MEMBERS"><a title="oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS" class="py-name" href="#" onclick="return doclink('link-25', 'NON_SERIALIZED_MEMBERS', 'link-25');">NON_SERIALIZED_MEMBERS</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">'store'</tt><tt class="py-op">]</tt> </tt>
+<a name="L133"></a><tt class="py-lineno"> 133</tt>  <tt class="py-line"> </tt>
+<a name="Credentials.authorize"></a><div id="Credentials.authorize-def"><a name="L134"></a><tt class="py-lineno"> 134</tt> <a class="py-toggle" href="#" id="Credentials.authorize-toggle" onclick="return toggle('Credentials.authorize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#authorize">authorize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Credentials.authorize-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials.authorize-expanded"><a name="L135"></a><tt class="py-lineno"> 135</tt>  <tt class="py-line">    <tt class="py-docstring">"""Take an httplib2.Http instance (or equivalent) and authorizes it.</tt> </tt>
+<a name="L136"></a><tt class="py-lineno"> 136</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L137"></a><tt class="py-lineno"> 137</tt>  <tt class="py-line"><tt class="py-docstring">    Authorizes it for the set of credentials, usually by replacing</tt> </tt>
+<a name="L138"></a><tt class="py-lineno"> 138</tt>  <tt class="py-line"><tt class="py-docstring">    http.request() with a method that adds in the appropriate headers and then</tt> </tt>
+<a name="L139"></a><tt class="py-lineno"> 139</tt>  <tt class="py-line"><tt class="py-docstring">    delegates to the original Http.request() method.</tt> </tt>
+<a name="L140"></a><tt class="py-lineno"> 140</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L141"></a><tt class="py-lineno"> 141</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L142"></a><tt class="py-lineno"> 142</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used to make the refresh</tt> </tt>
+<a name="L143"></a><tt class="py-lineno"> 143</tt>  <tt class="py-line"><tt class="py-docstring">        request.</tt> </tt>
+<a name="L144"></a><tt class="py-lineno"> 144</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L145"></a><tt class="py-lineno"> 145</tt>  <tt class="py-line">    <tt id="link-26" class="py-name" targets="Function apiclient.model._abstract()=apiclient.model-module.html#_abstract,Function oauth2client.client._abstract()=oauth2client.client-module.html#_abstract"><a title="apiclient.model._abstract
+oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-26', '_abstract', 'link-26');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L146"></a><tt class="py-lineno"> 146</tt>  <tt class="py-line"> </tt>
+<a name="Credentials.refresh"></a><div id="Credentials.refresh-def"><a name="L147"></a><tt class="py-lineno"> 147</tt> <a class="py-toggle" href="#" id="Credentials.refresh-toggle" onclick="return toggle('Credentials.refresh');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#refresh">refresh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Credentials.refresh-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials.refresh-expanded"><a name="L148"></a><tt class="py-lineno"> 148</tt>  <tt class="py-line">    <tt class="py-docstring">"""Forces a refresh of the access_token.</tt> </tt>
+<a name="L149"></a><tt class="py-lineno"> 149</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L150"></a><tt class="py-lineno"> 150</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L151"></a><tt class="py-lineno"> 151</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used to make the refresh</tt> </tt>
+<a name="L152"></a><tt class="py-lineno"> 152</tt>  <tt class="py-line"><tt class="py-docstring">        request.</tt> </tt>
 <a name="L153"></a><tt class="py-lineno"> 153</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L154"></a><tt class="py-lineno"> 154</tt>  <tt class="py-line">    <tt id="link-18" class="py-name"><a title="apiclient.model._abstract
-oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-18', '_abstract', 'link-16');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L154"></a><tt class="py-lineno"> 154</tt>  <tt class="py-line">    <tt id="link-27" class="py-name"><a title="apiclient.model._abstract
+oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-27', '_abstract', 'link-26');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
 </div><a name="L155"></a><tt class="py-lineno"> 155</tt>  <tt class="py-line"> </tt>
-<a name="Credentials._to_json"></a><div id="Credentials._to_json-def"><a name="L156"></a><tt class="py-lineno"> 156</tt> <a class="py-toggle" href="#" id="Credentials._to_json-toggle" onclick="return toggle('Credentials._to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#_to_json">_to_json</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">strip</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Credentials._to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials._to_json-expanded"><a name="L157"></a><tt class="py-lineno"> 157</tt>  <tt class="py-line">    <tt class="py-docstring">"""Utility function for creating a JSON representation of an instance of Credentials.</tt> </tt>
+<a name="Credentials.revoke"></a><div id="Credentials.revoke-def"><a name="L156"></a><tt class="py-lineno"> 156</tt> <a class="py-toggle" href="#" id="Credentials.revoke-toggle" onclick="return toggle('Credentials.revoke');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#revoke">revoke</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Credentials.revoke-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials.revoke-expanded"><a name="L157"></a><tt class="py-lineno"> 157</tt>  <tt class="py-line">    <tt class="py-docstring">"""Revokes a refresh_token and makes the credentials void.</tt> </tt>
 <a name="L158"></a><tt class="py-lineno"> 158</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
 <a name="L159"></a><tt class="py-lineno"> 159</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L160"></a><tt class="py-lineno"> 160</tt>  <tt class="py-line"><tt class="py-docstring">      strip: array, An array of names of members to not include in the JSON.</tt> </tt>
-<a name="L161"></a><tt class="py-lineno"> 161</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L162"></a><tt class="py-lineno"> 162</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L163"></a><tt class="py-lineno"> 163</tt>  <tt class="py-line"><tt class="py-docstring">       string, a JSON representation of this instance, suitable to pass to</tt> </tt>
-<a name="L164"></a><tt class="py-lineno"> 164</tt>  <tt class="py-line"><tt class="py-docstring">       from_json().</tt> </tt>
-<a name="L165"></a><tt class="py-lineno"> 165</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L166"></a><tt class="py-lineno"> 166</tt>  <tt class="py-line">    <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
-<a name="L167"></a><tt class="py-lineno"> 167</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">)</tt> </tt>
-<a name="L168"></a><tt class="py-lineno"> 168</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">member</tt> <tt class="py-keyword">in</tt> <tt class="py-name">strip</tt><tt class="py-op">:</tt> </tt>
-<a name="L169"></a><tt class="py-lineno"> 169</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">member</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
-<a name="L170"></a><tt class="py-lineno"> 170</tt>  <tt class="py-line">        <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-name">member</tt><tt class="py-op">]</tt> </tt>
-<a name="L171"></a><tt class="py-lineno"> 171</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'token_expiry'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt> <tt class="py-keyword">and</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L172"></a><tt class="py-lineno"> 172</tt>  <tt class="py-line">      <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">strftime</tt><tt class="py-op">(</tt><tt id="link-19" class="py-name"><a title="oauth2client.client.EXPIRY_FORMAT" class="py-name" href="#" onclick="return doclink('link-19', 'EXPIRY_FORMAT', 'link-10');">EXPIRY_FORMAT</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L173"></a><tt class="py-lineno"> 173</tt>  <tt class="py-line">    <tt class="py-comment"># Add in information we will need later to reconsistitue this instance.</tt> </tt>
-<a name="L174"></a><tt class="py-lineno"> 174</tt>  <tt class="py-line">    <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_class'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">t</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> </tt>
-<a name="L175"></a><tt class="py-lineno"> 175</tt>  <tt class="py-line">    <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_module'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">t</tt><tt class="py-op">.</tt><tt class="py-name">__module__</tt> </tt>
-<a name="L176"></a><tt class="py-lineno"> 176</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L177"></a><tt class="py-lineno"> 177</tt>  <tt class="py-line"> </tt>
-<a name="Credentials.to_json"></a><div id="Credentials.to_json-def"><a name="L178"></a><tt class="py-lineno"> 178</tt> <a class="py-toggle" href="#" id="Credentials.to_json-toggle" onclick="return toggle('Credentials.to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#to_json">to_json</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="Credentials.to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials.to_json-expanded"><a name="L179"></a><tt class="py-lineno"> 179</tt>  <tt class="py-line">    <tt class="py-docstring">"""Creating a JSON representation of an instance of Credentials.</tt> </tt>
-<a name="L180"></a><tt class="py-lineno"> 180</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L181"></a><tt class="py-lineno"> 181</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L182"></a><tt class="py-lineno"> 182</tt>  <tt class="py-line"><tt class="py-docstring">       string, a JSON representation of this instance, suitable to pass to</tt> </tt>
-<a name="L183"></a><tt class="py-lineno"> 183</tt>  <tt class="py-line"><tt class="py-docstring">       from_json().</tt> </tt>
-<a name="L184"></a><tt class="py-lineno"> 184</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L185"></a><tt class="py-lineno"> 185</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name" targets="Method apiclient.http.MediaUpload._to_json()=apiclient.http.MediaUpload-class.html#_to_json,Method oauth2client.client.Credentials._to_json()=oauth2client.client.Credentials-class.html#_to_json"><a title="apiclient.http.MediaUpload._to_json
-oauth2client.client.Credentials._to_json" class="py-name" href="#" onclick="return doclink('link-20', '_to_json', 'link-20');">_to_json</a></tt><tt class="py-op">(</tt><tt id="link-21" class="py-name" targets="Class oauth2client.client.Credentials=oauth2client.client.Credentials-class.html"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-21', 'Credentials', 'link-21');">Credentials</a></tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS" class="py-name" href="#" onclick="return doclink('link-22', 'NON_SERIALIZED_MEMBERS', 'link-15');">NON_SERIALIZED_MEMBERS</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L186"></a><tt class="py-lineno"> 186</tt>  <tt class="py-line"> </tt>
-<a name="L187"></a><tt class="py-lineno"> 187</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
-<a name="Credentials.new_from_json"></a><div id="Credentials.new_from_json-def"><a name="L188"></a><tt class="py-lineno"> 188</tt> <a class="py-toggle" href="#" id="Credentials.new_from_json-toggle" onclick="return toggle('Credentials.new_from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#new_from_json">new_from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Credentials.new_from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials.new_from_json-expanded"><a name="L189"></a><tt class="py-lineno"> 189</tt>  <tt class="py-line">    <tt class="py-docstring">"""Utility class method to instantiate a Credentials subclass from a JSON</tt> </tt>
-<a name="L190"></a><tt class="py-lineno"> 190</tt>  <tt class="py-line"><tt class="py-docstring">    representation produced by to_json().</tt> </tt>
-<a name="L191"></a><tt class="py-lineno"> 191</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L192"></a><tt class="py-lineno"> 192</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L193"></a><tt class="py-lineno"> 193</tt>  <tt class="py-line"><tt class="py-docstring">      s: string, JSON from to_json().</tt> </tt>
-<a name="L194"></a><tt class="py-lineno"> 194</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L195"></a><tt class="py-lineno"> 195</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L196"></a><tt class="py-lineno"> 196</tt>  <tt class="py-line"><tt class="py-docstring">      An instance of the subclass of Credentials that was serialized with</tt> </tt>
-<a name="L197"></a><tt class="py-lineno"> 197</tt>  <tt class="py-line"><tt class="py-docstring">      to_json().</tt> </tt>
-<a name="L198"></a><tt class="py-lineno"> 198</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L199"></a><tt class="py-lineno"> 199</tt>  <tt class="py-line">    <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-23" class="py-name" targets="Function oauth2client.clientsecrets.loads()=oauth2client.clientsecrets-module.html#loads"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-23', 'loads', 'link-23');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
-<a name="L200"></a><tt class="py-lineno"> 200</tt>  <tt class="py-line">    <tt class="py-comment"># Find and call the right classmethod from_json() to restore the object.</tt> </tt>
-<a name="L201"></a><tt class="py-lineno"> 201</tt>  <tt class="py-line">    <tt class="py-name">module</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'_module'</tt><tt class="py-op">]</tt> </tt>
-<a name="L202"></a><tt class="py-lineno"> 202</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L203"></a><tt class="py-lineno"> 203</tt>  <tt class="py-line">      <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">__import__</tt><tt class="py-op">(</tt><tt class="py-name">module</tt><tt class="py-op">)</tt> </tt>
-<a name="L204"></a><tt class="py-lineno"> 204</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
-<a name="L205"></a><tt class="py-lineno"> 205</tt>  <tt class="py-line">      <tt class="py-comment"># In case there's an object from the old package structure, update it</tt> </tt>
-<a name="L206"></a><tt class="py-lineno"> 206</tt>  <tt class="py-line">      <tt class="py-name">module</tt> <tt class="py-op">=</tt> <tt class="py-name">module</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'.apiclient'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
-<a name="L207"></a><tt class="py-lineno"> 207</tt>  <tt class="py-line">      <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">__import__</tt><tt class="py-op">(</tt><tt class="py-name">module</tt><tt class="py-op">)</tt> </tt>
-<a name="L208"></a><tt class="py-lineno"> 208</tt>  <tt class="py-line"> </tt>
-<a name="L209"></a><tt class="py-lineno"> 209</tt>  <tt class="py-line">    <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">__import__</tt><tt class="py-op">(</tt><tt class="py-name">module</tt><tt class="py-op">,</tt> <tt class="py-name">fromlist</tt><tt class="py-op">=</tt><tt class="py-name">module</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L210"></a><tt class="py-lineno"> 210</tt>  <tt class="py-line">    <tt class="py-name">kls</tt> <tt class="py-op">=</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">,</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'_class'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L211"></a><tt class="py-lineno"> 211</tt>  <tt class="py-line">    <tt id="link-24" class="py-name" targets="Static Method apiclient.http.HttpRequest.from_json()=apiclient.http.HttpRequest-class.html#from_json,Static Method apiclient.http.MediaFileUpload.from_json()=apiclient.http.MediaFileUpload-class.html#from_json,Class Method oauth2client.appengine.AppAssertionCredentials.from_json()=oauth2client.appengine.AppAssertionCredentials-class.html#from_json,Class Method oauth2client.client.AccessTokenCredentials.from_json()=oauth2client.client.AccessTokenCredentials-class.html#from_json,Class Method oauth2client.client.Credentials.from_json()=oauth2client.client.Credentials-class.html#from_json,Class Method oauth2client.client.OAuth2Credentials.from_json()=oauth2client.client.OAuth2Credentials-class.html#from_json,Class Method oauth2client.client.SignedJwtAssertionCredentials.from_json()=oauth2client.client.SignedJwtAssertionCredentials-class.html#from_json,Class Method oauth2client.gce.AppAssertionCredentials.from_json()=oauth2client.gce.AppAssertionCredentials-class.html#from_json"><a title="apiclient.http.HttpRequest.from_json
+<a name="L160"></a><tt class="py-lineno"> 160</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used to make the revoke</tt> </tt>
+<a name="L161"></a><tt class="py-lineno"> 161</tt>  <tt class="py-line"><tt class="py-docstring">        request.</tt> </tt>
+<a name="L162"></a><tt class="py-lineno"> 162</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L163"></a><tt class="py-lineno"> 163</tt>  <tt class="py-line">    <tt id="link-28" class="py-name"><a title="apiclient.model._abstract
+oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-28', '_abstract', 'link-26');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L164"></a><tt class="py-lineno"> 164</tt>  <tt class="py-line"> </tt>
+<a name="Credentials.apply"></a><div id="Credentials.apply-def"><a name="L165"></a><tt class="py-lineno"> 165</tt> <a class="py-toggle" href="#" id="Credentials.apply-toggle" onclick="return toggle('Credentials.apply');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#apply">apply</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Credentials.apply-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials.apply-expanded"><a name="L166"></a><tt class="py-lineno"> 166</tt>  <tt class="py-line">    <tt class="py-docstring">"""Add the authorization to the headers.</tt> </tt>
+<a name="L167"></a><tt class="py-lineno"> 167</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L168"></a><tt class="py-lineno"> 168</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L169"></a><tt class="py-lineno"> 169</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, the headers to add the Authorization header to.</tt> </tt>
+<a name="L170"></a><tt class="py-lineno"> 170</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L171"></a><tt class="py-lineno"> 171</tt>  <tt class="py-line">    <tt id="link-29" class="py-name"><a title="apiclient.model._abstract
+oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-29', '_abstract', 'link-26');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L172"></a><tt class="py-lineno"> 172</tt>  <tt class="py-line"> </tt>
+<a name="Credentials._to_json"></a><div id="Credentials._to_json-def"><a name="L173"></a><tt class="py-lineno"> 173</tt> <a class="py-toggle" href="#" id="Credentials._to_json-toggle" onclick="return toggle('Credentials._to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#_to_json">_to_json</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">strip</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Credentials._to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials._to_json-expanded"><a name="L174"></a><tt class="py-lineno"> 174</tt>  <tt class="py-line">    <tt class="py-docstring">"""Utility function that creates JSON repr. of a Credentials object.</tt> </tt>
+<a name="L175"></a><tt class="py-lineno"> 175</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L176"></a><tt class="py-lineno"> 176</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L177"></a><tt class="py-lineno"> 177</tt>  <tt class="py-line"><tt class="py-docstring">      strip: array, An array of names of members to not include in the JSON.</tt> </tt>
+<a name="L178"></a><tt class="py-lineno"> 178</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L179"></a><tt class="py-lineno"> 179</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L180"></a><tt class="py-lineno"> 180</tt>  <tt class="py-line"><tt class="py-docstring">       string, a JSON representation of this instance, suitable to pass to</tt> </tt>
+<a name="L181"></a><tt class="py-lineno"> 181</tt>  <tt class="py-line"><tt class="py-docstring">       from_json().</tt> </tt>
+<a name="L182"></a><tt class="py-lineno"> 182</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L183"></a><tt class="py-lineno"> 183</tt>  <tt class="py-line">    <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L184"></a><tt class="py-lineno"> 184</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">)</tt> </tt>
+<a name="L185"></a><tt class="py-lineno"> 185</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">member</tt> <tt class="py-keyword">in</tt> <tt class="py-name">strip</tt><tt class="py-op">:</tt> </tt>
+<a name="L186"></a><tt class="py-lineno"> 186</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">member</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
+<a name="L187"></a><tt class="py-lineno"> 187</tt>  <tt class="py-line">        <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-name">member</tt><tt class="py-op">]</tt> </tt>
+<a name="L188"></a><tt class="py-lineno"> 188</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'token_expiry'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt> <tt class="py-keyword">and</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L189"></a><tt class="py-lineno"> 189</tt>  <tt class="py-line">      <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">strftime</tt><tt class="py-op">(</tt><tt id="link-30" class="py-name"><a title="oauth2client.client.EXPIRY_FORMAT" class="py-name" href="#" onclick="return doclink('link-30', 'EXPIRY_FORMAT', 'link-20');">EXPIRY_FORMAT</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L190"></a><tt class="py-lineno"> 190</tt>  <tt class="py-line">    <tt class="py-comment"># Add in information we will need later to reconsistitue this instance.</tt> </tt>
+<a name="L191"></a><tt class="py-lineno"> 191</tt>  <tt class="py-line">    <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_class'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">t</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> </tt>
+<a name="L192"></a><tt class="py-lineno"> 192</tt>  <tt class="py-line">    <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_module'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">t</tt><tt class="py-op">.</tt><tt class="py-name">__module__</tt> </tt>
+<a name="L193"></a><tt class="py-lineno"> 193</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L194"></a><tt class="py-lineno"> 194</tt>  <tt class="py-line"> </tt>
+<a name="Credentials.to_json"></a><div id="Credentials.to_json-def"><a name="L195"></a><tt class="py-lineno"> 195</tt> <a class="py-toggle" href="#" id="Credentials.to_json-toggle" onclick="return toggle('Credentials.to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#to_json">to_json</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="Credentials.to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials.to_json-expanded"><a name="L196"></a><tt class="py-lineno"> 196</tt>  <tt class="py-line">    <tt class="py-docstring">"""Creating a JSON representation of an instance of Credentials.</tt> </tt>
+<a name="L197"></a><tt class="py-lineno"> 197</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L198"></a><tt class="py-lineno"> 198</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L199"></a><tt class="py-lineno"> 199</tt>  <tt class="py-line"><tt class="py-docstring">       string, a JSON representation of this instance, suitable to pass to</tt> </tt>
+<a name="L200"></a><tt class="py-lineno"> 200</tt>  <tt class="py-line"><tt class="py-docstring">       from_json().</tt> </tt>
+<a name="L201"></a><tt class="py-lineno"> 201</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L202"></a><tt class="py-lineno"> 202</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Method apiclient.http.MediaUpload._to_json()=apiclient.http.MediaUpload-class.html#_to_json,Method oauth2client.client.Credentials._to_json()=oauth2client.client.Credentials-class.html#_to_json"><a title="apiclient.http.MediaUpload._to_json
+oauth2client.client.Credentials._to_json" class="py-name" href="#" onclick="return doclink('link-31', '_to_json', 'link-31');">_to_json</a></tt><tt class="py-op">(</tt><tt id="link-32" class="py-name" targets="Class oauth2client.client.Credentials=oauth2client.client.Credentials-class.html"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-32', 'Credentials', 'link-32');">Credentials</a></tt><tt class="py-op">.</tt><tt id="link-33" class="py-name"><a title="oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS" class="py-name" href="#" onclick="return doclink('link-33', 'NON_SERIALIZED_MEMBERS', 'link-25');">NON_SERIALIZED_MEMBERS</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L203"></a><tt class="py-lineno"> 203</tt>  <tt class="py-line"> </tt>
+<a name="L204"></a><tt class="py-lineno"> 204</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="Credentials.new_from_json"></a><div id="Credentials.new_from_json-def"><a name="L205"></a><tt class="py-lineno"> 205</tt> <a class="py-toggle" href="#" id="Credentials.new_from_json-toggle" onclick="return toggle('Credentials.new_from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#new_from_json">new_from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Credentials.new_from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials.new_from_json-expanded"><a name="L206"></a><tt class="py-lineno"> 206</tt>  <tt class="py-line">    <tt class="py-docstring">"""Utility class method to instantiate a Credentials subclass from a JSON</tt> </tt>
+<a name="L207"></a><tt class="py-lineno"> 207</tt>  <tt class="py-line"><tt class="py-docstring">    representation produced by to_json().</tt> </tt>
+<a name="L208"></a><tt class="py-lineno"> 208</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L209"></a><tt class="py-lineno"> 209</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L210"></a><tt class="py-lineno"> 210</tt>  <tt class="py-line"><tt class="py-docstring">      s: string, JSON from to_json().</tt> </tt>
+<a name="L211"></a><tt class="py-lineno"> 211</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L212"></a><tt class="py-lineno"> 212</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L213"></a><tt class="py-lineno"> 213</tt>  <tt class="py-line"><tt class="py-docstring">      An instance of the subclass of Credentials that was serialized with</tt> </tt>
+<a name="L214"></a><tt class="py-lineno"> 214</tt>  <tt class="py-line"><tt class="py-docstring">      to_json().</tt> </tt>
+<a name="L215"></a><tt class="py-lineno"> 215</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L216"></a><tt class="py-lineno"> 216</tt>  <tt class="py-line">    <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name" targets="Function oauth2client.clientsecrets.loads()=oauth2client.clientsecrets-module.html#loads"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-34', 'loads', 'link-34');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
+<a name="L217"></a><tt class="py-lineno"> 217</tt>  <tt class="py-line">    <tt class="py-comment"># Find and call the right classmethod from_json() to restore the object.</tt> </tt>
+<a name="L218"></a><tt class="py-lineno"> 218</tt>  <tt class="py-line">    <tt class="py-name">module</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'_module'</tt><tt class="py-op">]</tt> </tt>
+<a name="L219"></a><tt class="py-lineno"> 219</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L220"></a><tt class="py-lineno"> 220</tt>  <tt class="py-line">      <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">__import__</tt><tt class="py-op">(</tt><tt class="py-name">module</tt><tt class="py-op">)</tt> </tt>
+<a name="L221"></a><tt class="py-lineno"> 221</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
+<a name="L222"></a><tt class="py-lineno"> 222</tt>  <tt class="py-line">      <tt class="py-comment"># In case there's an object from the old package structure, update it</tt> </tt>
+<a name="L223"></a><tt class="py-lineno"> 223</tt>  <tt class="py-line">      <tt class="py-name">module</tt> <tt class="py-op">=</tt> <tt class="py-name">module</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'.apiclient'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+<a name="L224"></a><tt class="py-lineno"> 224</tt>  <tt class="py-line">      <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">__import__</tt><tt class="py-op">(</tt><tt class="py-name">module</tt><tt class="py-op">)</tt> </tt>
+<a name="L225"></a><tt class="py-lineno"> 225</tt>  <tt class="py-line"> </tt>
+<a name="L226"></a><tt class="py-lineno"> 226</tt>  <tt class="py-line">    <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">__import__</tt><tt class="py-op">(</tt><tt class="py-name">module</tt><tt class="py-op">,</tt> <tt class="py-name">fromlist</tt><tt class="py-op">=</tt><tt class="py-name">module</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L227"></a><tt class="py-lineno"> 227</tt>  <tt class="py-line">    <tt class="py-name">kls</tt> <tt class="py-op">=</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">,</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'_class'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L228"></a><tt class="py-lineno"> 228</tt>  <tt class="py-line">    <tt id="link-35" class="py-name" targets="Static Method apiclient.http.HttpRequest.from_json()=apiclient.http.HttpRequest-class.html#from_json,Static Method apiclient.http.MediaFileUpload.from_json()=apiclient.http.MediaFileUpload-class.html#from_json,Class Method oauth2client.appengine.AppAssertionCredentials.from_json()=oauth2client.appengine.AppAssertionCredentials-class.html#from_json,Class Method oauth2client.client.AccessTokenCredentials.from_json()=oauth2client.client.AccessTokenCredentials-class.html#from_json,Class Method oauth2client.client.Credentials.from_json()=oauth2client.client.Credentials-class.html#from_json,Class Method oauth2client.client.OAuth2Credentials.from_json()=oauth2client.client.OAuth2Credentials-class.html#from_json,Class Method oauth2client.client.SignedJwtAssertionCredentials.from_json()=oauth2client.client.SignedJwtAssertionCredentials-class.html#from_json,Class Method oauth2client.gce.AppAssertionCredentials.from_json()=oauth2client.gce.AppAssertionCredentials-class.html#from_json"><a title="apiclient.http.HttpRequest.from_json
 apiclient.http.MediaFileUpload.from_json
 oauth2client.appengine.AppAssertionCredentials.from_json
 oauth2client.client.AccessTokenCredentials.from_json
 oauth2client.client.Credentials.from_json
 oauth2client.client.OAuth2Credentials.from_json
 oauth2client.client.SignedJwtAssertionCredentials.from_json
-oauth2client.gce.AppAssertionCredentials.from_json" class="py-name" href="#" onclick="return doclink('link-24', 'from_json', 'link-24');">from_json</a></tt> <tt class="py-op">=</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">kls</tt><tt class="py-op">,</tt> <tt class="py-string">'from_json'</tt><tt class="py-op">)</tt> </tt>
-<a name="L212"></a><tt class="py-lineno"> 212</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-25" class="py-name"><a title="apiclient.http.HttpRequest.from_json
+oauth2client.gce.AppAssertionCredentials.from_json" class="py-name" href="#" onclick="return doclink('link-35', 'from_json', 'link-35');">from_json</a></tt> <tt class="py-op">=</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">kls</tt><tt class="py-op">,</tt> <tt class="py-string">'from_json'</tt><tt class="py-op">)</tt> </tt>
+<a name="L229"></a><tt class="py-lineno"> 229</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-36" class="py-name"><a title="apiclient.http.HttpRequest.from_json
 apiclient.http.MediaFileUpload.from_json
 oauth2client.appengine.AppAssertionCredentials.from_json
 oauth2client.client.AccessTokenCredentials.from_json
 oauth2client.client.Credentials.from_json
 oauth2client.client.OAuth2Credentials.from_json
 oauth2client.client.SignedJwtAssertionCredentials.from_json
-oauth2client.gce.AppAssertionCredentials.from_json" class="py-name" href="#" onclick="return doclink('link-25', 'from_json', 'link-24');">from_json</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L213"></a><tt class="py-lineno"> 213</tt>  <tt class="py-line"> </tt>
-<a name="L214"></a><tt class="py-lineno"> 214</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
-<a name="Credentials.from_json"></a><div id="Credentials.from_json-def"><a name="L215"></a><tt class="py-lineno"> 215</tt> <a class="py-toggle" href="#" id="Credentials.from_json-toggle" onclick="return toggle('Credentials.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Credentials.from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials.from_json-expanded"><a name="L216"></a><tt class="py-lineno"> 216</tt>  <tt class="py-line">    <tt class="py-docstring">"""Instantiate a Credentials object from a JSON description of it.</tt> </tt>
-<a name="L217"></a><tt class="py-lineno"> 217</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L218"></a><tt class="py-lineno"> 218</tt>  <tt class="py-line"><tt class="py-docstring">    The JSON should have been produced by calling .to_json() on the object.</tt> </tt>
-<a name="L219"></a><tt class="py-lineno"> 219</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L220"></a><tt class="py-lineno"> 220</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L221"></a><tt class="py-lineno"> 221</tt>  <tt class="py-line"><tt class="py-docstring">      data: dict, A deserialized JSON object.</tt> </tt>
-<a name="L222"></a><tt class="py-lineno"> 222</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L223"></a><tt class="py-lineno"> 223</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L224"></a><tt class="py-lineno"> 224</tt>  <tt class="py-line"><tt class="py-docstring">      An instance of a Credentials subclass.</tt> </tt>
-<a name="L225"></a><tt class="py-lineno"> 225</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L226"></a><tt class="py-lineno"> 226</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-26" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-26', 'Credentials', 'link-21');">Credentials</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L227"></a><tt class="py-lineno"> 227</tt>  <tt class="py-line"> </tt>
-<a name="Flow"></a><div id="Flow-def"><a name="L228"></a><tt class="py-lineno"> 228</tt>  <tt class="py-line"> </tt>
-<a name="L229"></a><tt class="py-lineno"> 229</tt> <a class="py-toggle" href="#" id="Flow-toggle" onclick="return toggle('Flow');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.Flow-class.html">Flow</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Flow-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Flow-expanded"><a name="L230"></a><tt class="py-lineno"> 230</tt>  <tt class="py-line">  <tt class="py-docstring">"""Base class for all Flow objects."""</tt> </tt>
-<a name="L231"></a><tt class="py-lineno"> 231</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L232"></a><tt class="py-lineno"> 232</tt>  <tt class="py-line"> </tt>
-<a name="Storage"></a><div id="Storage-def"><a name="L233"></a><tt class="py-lineno"> 233</tt>  <tt class="py-line"> </tt>
-<a name="L234"></a><tt class="py-lineno"> 234</tt> <a class="py-toggle" href="#" id="Storage-toggle" onclick="return toggle('Storage');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html">Storage</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Storage-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Storage-expanded"><a name="L235"></a><tt class="py-lineno"> 235</tt>  <tt class="py-line">  <tt class="py-docstring">"""Base class for all Storage objects.</tt> </tt>
+oauth2client.gce.AppAssertionCredentials.from_json" class="py-name" href="#" onclick="return doclink('link-36', 'from_json', 'link-35');">from_json</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L230"></a><tt class="py-lineno"> 230</tt>  <tt class="py-line"> </tt>
+<a name="L231"></a><tt class="py-lineno"> 231</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="Credentials.from_json"></a><div id="Credentials.from_json-def"><a name="L232"></a><tt class="py-lineno"> 232</tt> <a class="py-toggle" href="#" id="Credentials.from_json-toggle" onclick="return toggle('Credentials.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Credentials-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Credentials.from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Credentials.from_json-expanded"><a name="L233"></a><tt class="py-lineno"> 233</tt>  <tt class="py-line">    <tt class="py-docstring">"""Instantiate a Credentials object from a JSON description of it.</tt> </tt>
+<a name="L234"></a><tt class="py-lineno"> 234</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L235"></a><tt class="py-lineno"> 235</tt>  <tt class="py-line"><tt class="py-docstring">    The JSON should have been produced by calling .to_json() on the object.</tt> </tt>
 <a name="L236"></a><tt class="py-lineno"> 236</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L237"></a><tt class="py-lineno"> 237</tt>  <tt class="py-line"><tt class="py-docstring">  Store and retrieve a single credential. This class supports locking</tt> </tt>
-<a name="L238"></a><tt class="py-lineno"> 238</tt>  <tt class="py-line"><tt class="py-docstring">  such that multiple processes and threads can operate on a single</tt> </tt>
-<a name="L239"></a><tt class="py-lineno"> 239</tt>  <tt class="py-line"><tt class="py-docstring">  store.</tt> </tt>
-<a name="L240"></a><tt class="py-lineno"> 240</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L241"></a><tt class="py-lineno"> 241</tt>  <tt class="py-line"> </tt>
-<a name="Storage.acquire_lock"></a><div id="Storage.acquire_lock-def"><a name="L242"></a><tt class="py-lineno"> 242</tt> <a class="py-toggle" href="#" id="Storage.acquire_lock-toggle" onclick="return toggle('Storage.acquire_lock');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#acquire_lock">acquire_lock</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="Storage.acquire_lock-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.acquire_lock-expanded"><a name="L243"></a><tt class="py-lineno"> 243</tt>  <tt class="py-line">    <tt class="py-docstring">"""Acquires any lock necessary to access this Storage.</tt> </tt>
-<a name="L244"></a><tt class="py-lineno"> 244</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L245"></a><tt class="py-lineno"> 245</tt>  <tt class="py-line"><tt class="py-docstring">    This lock is not reentrant.</tt> </tt>
-<a name="L246"></a><tt class="py-lineno"> 246</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L247"></a><tt class="py-lineno"> 247</tt>  <tt class="py-line">    <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L248"></a><tt class="py-lineno"> 248</tt>  <tt class="py-line"> </tt>
-<a name="Storage.release_lock"></a><div id="Storage.release_lock-def"><a name="L249"></a><tt class="py-lineno"> 249</tt> <a class="py-toggle" href="#" id="Storage.release_lock-toggle" onclick="return toggle('Storage.release_lock');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#release_lock">release_lock</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="Storage.release_lock-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.release_lock-expanded"><a name="L250"></a><tt class="py-lineno"> 250</tt>  <tt class="py-line">    <tt class="py-docstring">"""Release the Storage lock.</tt> </tt>
-<a name="L251"></a><tt class="py-lineno"> 251</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L252"></a><tt class="py-lineno"> 252</tt>  <tt class="py-line"><tt class="py-docstring">    Trying to release a lock that isn't held will result in a</tt> </tt>
-<a name="L253"></a><tt class="py-lineno"> 253</tt>  <tt class="py-line"><tt class="py-docstring">    RuntimeError.</tt> </tt>
-<a name="L254"></a><tt class="py-lineno"> 254</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L255"></a><tt class="py-lineno"> 255</tt>  <tt class="py-line">    <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L256"></a><tt class="py-lineno"> 256</tt>  <tt class="py-line"> </tt>
-<a name="Storage.locked_get"></a><div id="Storage.locked_get-def"><a name="L257"></a><tt class="py-lineno"> 257</tt> <a class="py-toggle" href="#" id="Storage.locked_get-toggle" onclick="return toggle('Storage.locked_get');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#locked_get">locked_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="Storage.locked_get-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.locked_get-expanded"><a name="L258"></a><tt class="py-lineno"> 258</tt>  <tt class="py-line">    <tt class="py-docstring">"""Retrieve credential.</tt> </tt>
-<a name="L259"></a><tt class="py-lineno"> 259</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L260"></a><tt class="py-lineno"> 260</tt>  <tt class="py-line"><tt class="py-docstring">    The Storage lock must be held when this is called.</tt> </tt>
+<a name="L237"></a><tt class="py-lineno"> 237</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L238"></a><tt class="py-lineno"> 238</tt>  <tt class="py-line"><tt class="py-docstring">      data: dict, A deserialized JSON object.</tt> </tt>
+<a name="L239"></a><tt class="py-lineno"> 239</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L240"></a><tt class="py-lineno"> 240</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L241"></a><tt class="py-lineno"> 241</tt>  <tt class="py-line"><tt class="py-docstring">      An instance of a Credentials subclass.</tt> </tt>
+<a name="L242"></a><tt class="py-lineno"> 242</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L243"></a><tt class="py-lineno"> 243</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-37" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-37', 'Credentials', 'link-32');">Credentials</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L244"></a><tt class="py-lineno"> 244</tt>  <tt class="py-line"> </tt>
+<a name="Flow"></a><div id="Flow-def"><a name="L245"></a><tt class="py-lineno"> 245</tt>  <tt class="py-line"> </tt>
+<a name="L246"></a><tt class="py-lineno"> 246</tt> <a class="py-toggle" href="#" id="Flow-toggle" onclick="return toggle('Flow');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.Flow-class.html">Flow</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Flow-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Flow-expanded"><a name="L247"></a><tt class="py-lineno"> 247</tt>  <tt class="py-line">  <tt class="py-docstring">"""Base class for all Flow objects."""</tt> </tt>
+<a name="L248"></a><tt class="py-lineno"> 248</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L249"></a><tt class="py-lineno"> 249</tt>  <tt class="py-line"> </tt>
+<a name="Storage"></a><div id="Storage-def"><a name="L250"></a><tt class="py-lineno"> 250</tt>  <tt class="py-line"> </tt>
+<a name="L251"></a><tt class="py-lineno"> 251</tt> <a class="py-toggle" href="#" id="Storage-toggle" onclick="return toggle('Storage');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html">Storage</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Storage-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Storage-expanded"><a name="L252"></a><tt class="py-lineno"> 252</tt>  <tt class="py-line">  <tt class="py-docstring">"""Base class for all Storage objects.</tt> </tt>
+<a name="L253"></a><tt class="py-lineno"> 253</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L254"></a><tt class="py-lineno"> 254</tt>  <tt class="py-line"><tt class="py-docstring">  Store and retrieve a single credential. This class supports locking</tt> </tt>
+<a name="L255"></a><tt class="py-lineno"> 255</tt>  <tt class="py-line"><tt class="py-docstring">  such that multiple processes and threads can operate on a single</tt> </tt>
+<a name="L256"></a><tt class="py-lineno"> 256</tt>  <tt class="py-line"><tt class="py-docstring">  store.</tt> </tt>
+<a name="L257"></a><tt class="py-lineno"> 257</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L258"></a><tt class="py-lineno"> 258</tt>  <tt class="py-line"> </tt>
+<a name="Storage.acquire_lock"></a><div id="Storage.acquire_lock-def"><a name="L259"></a><tt class="py-lineno"> 259</tt> <a class="py-toggle" href="#" id="Storage.acquire_lock-toggle" onclick="return toggle('Storage.acquire_lock');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#acquire_lock">acquire_lock</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="Storage.acquire_lock-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.acquire_lock-expanded"><a name="L260"></a><tt class="py-lineno"> 260</tt>  <tt class="py-line">    <tt class="py-docstring">"""Acquires any lock necessary to access this Storage.</tt> </tt>
 <a name="L261"></a><tt class="py-lineno"> 261</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L262"></a><tt class="py-lineno"> 262</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L263"></a><tt class="py-lineno"> 263</tt>  <tt class="py-line"><tt class="py-docstring">      oauth2client.client.Credentials</tt> </tt>
-<a name="L264"></a><tt class="py-lineno"> 264</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L265"></a><tt class="py-lineno"> 265</tt>  <tt class="py-line">    <tt id="link-27" class="py-name"><a title="apiclient.model._abstract
-oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-27', '_abstract', 'link-16');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L266"></a><tt class="py-lineno"> 266</tt>  <tt class="py-line"> </tt>
-<a name="Storage.locked_put"></a><div id="Storage.locked_put-def"><a name="L267"></a><tt class="py-lineno"> 267</tt> <a class="py-toggle" href="#" id="Storage.locked_put-toggle" onclick="return toggle('Storage.locked_put');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#locked_put">locked_put</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">credentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Storage.locked_put-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.locked_put-expanded"><a name="L268"></a><tt class="py-lineno"> 268</tt>  <tt class="py-line">    <tt class="py-docstring">"""Write a credential.</tt> </tt>
-<a name="L269"></a><tt class="py-lineno"> 269</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L270"></a><tt class="py-lineno"> 270</tt>  <tt class="py-line"><tt class="py-docstring">    The Storage lock must be held when this is called.</tt> </tt>
-<a name="L271"></a><tt class="py-lineno"> 271</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L272"></a><tt class="py-lineno"> 272</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L273"></a><tt class="py-lineno"> 273</tt>  <tt class="py-line"><tt class="py-docstring">      credentials: Credentials, the credentials to store.</tt> </tt>
-<a name="L274"></a><tt class="py-lineno"> 274</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L275"></a><tt class="py-lineno"> 275</tt>  <tt class="py-line">    <tt id="link-28" class="py-name"><a title="apiclient.model._abstract
-oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-28', '_abstract', 'link-16');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L276"></a><tt class="py-lineno"> 276</tt>  <tt class="py-line"> </tt>
-<a name="Storage.locked_delete"></a><div id="Storage.locked_delete-def"><a name="L277"></a><tt class="py-lineno"> 277</tt> <a class="py-toggle" href="#" id="Storage.locked_delete-toggle" onclick="return toggle('Storage.locked_delete');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#locked_delete">locked_delete</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="Storage.locked_delete-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.locked_delete-expanded"><a name="L278"></a><tt class="py-lineno"> 278</tt>  <tt class="py-line">    <tt class="py-docstring">"""Delete a credential.</tt> </tt>
-<a name="L279"></a><tt class="py-lineno"> 279</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L280"></a><tt class="py-lineno"> 280</tt>  <tt class="py-line"><tt class="py-docstring">    The Storage lock must be held when this is called.</tt> </tt>
+<a name="L262"></a><tt class="py-lineno"> 262</tt>  <tt class="py-line"><tt class="py-docstring">    This lock is not reentrant.</tt> </tt>
+<a name="L263"></a><tt class="py-lineno"> 263</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L264"></a><tt class="py-lineno"> 264</tt>  <tt class="py-line">    <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L265"></a><tt class="py-lineno"> 265</tt>  <tt class="py-line"> </tt>
+<a name="Storage.release_lock"></a><div id="Storage.release_lock-def"><a name="L266"></a><tt class="py-lineno"> 266</tt> <a class="py-toggle" href="#" id="Storage.release_lock-toggle" onclick="return toggle('Storage.release_lock');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#release_lock">release_lock</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="Storage.release_lock-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.release_lock-expanded"><a name="L267"></a><tt class="py-lineno"> 267</tt>  <tt class="py-line">    <tt class="py-docstring">"""Release the Storage lock.</tt> </tt>
+<a name="L268"></a><tt class="py-lineno"> 268</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L269"></a><tt class="py-lineno"> 269</tt>  <tt class="py-line"><tt class="py-docstring">    Trying to release a lock that isn't held will result in a</tt> </tt>
+<a name="L270"></a><tt class="py-lineno"> 270</tt>  <tt class="py-line"><tt class="py-docstring">    RuntimeError.</tt> </tt>
+<a name="L271"></a><tt class="py-lineno"> 271</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L272"></a><tt class="py-lineno"> 272</tt>  <tt class="py-line">    <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L273"></a><tt class="py-lineno"> 273</tt>  <tt class="py-line"> </tt>
+<a name="Storage.locked_get"></a><div id="Storage.locked_get-def"><a name="L274"></a><tt class="py-lineno"> 274</tt> <a class="py-toggle" href="#" id="Storage.locked_get-toggle" onclick="return toggle('Storage.locked_get');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#locked_get">locked_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="Storage.locked_get-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.locked_get-expanded"><a name="L275"></a><tt class="py-lineno"> 275</tt>  <tt class="py-line">    <tt class="py-docstring">"""Retrieve credential.</tt> </tt>
+<a name="L276"></a><tt class="py-lineno"> 276</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L277"></a><tt class="py-lineno"> 277</tt>  <tt class="py-line"><tt class="py-docstring">    The Storage lock must be held when this is called.</tt> </tt>
+<a name="L278"></a><tt class="py-lineno"> 278</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L279"></a><tt class="py-lineno"> 279</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L280"></a><tt class="py-lineno"> 280</tt>  <tt class="py-line"><tt class="py-docstring">      oauth2client.client.Credentials</tt> </tt>
 <a name="L281"></a><tt class="py-lineno"> 281</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L282"></a><tt class="py-lineno"> 282</tt>  <tt class="py-line">    <tt id="link-29" class="py-name"><a title="apiclient.model._abstract
-oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-29', '_abstract', 'link-16');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L282"></a><tt class="py-lineno"> 282</tt>  <tt class="py-line">    <tt id="link-38" class="py-name"><a title="apiclient.model._abstract
+oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-38', '_abstract', 'link-26');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
 </div><a name="L283"></a><tt class="py-lineno"> 283</tt>  <tt class="py-line"> </tt>
-<a name="Storage.get"></a><div id="Storage.get-def"><a name="L284"></a><tt class="py-lineno"> 284</tt> <a class="py-toggle" href="#" id="Storage.get-toggle" onclick="return toggle('Storage.get');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-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="Storage.get-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.get-expanded"><a name="L285"></a><tt class="py-lineno"> 285</tt>  <tt class="py-line">    <tt class="py-docstring">"""Retrieve credential.</tt> </tt>
+<a name="Storage.locked_put"></a><div id="Storage.locked_put-def"><a name="L284"></a><tt class="py-lineno"> 284</tt> <a class="py-toggle" href="#" id="Storage.locked_put-toggle" onclick="return toggle('Storage.locked_put');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#locked_put">locked_put</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">credentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Storage.locked_put-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.locked_put-expanded"><a name="L285"></a><tt class="py-lineno"> 285</tt>  <tt class="py-line">    <tt class="py-docstring">"""Write a credential.</tt> </tt>
 <a name="L286"></a><tt class="py-lineno"> 286</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L287"></a><tt class="py-lineno"> 287</tt>  <tt class="py-line"><tt class="py-docstring">    The Storage lock must *not* be held when this is called.</tt> </tt>
+<a name="L287"></a><tt class="py-lineno"> 287</tt>  <tt class="py-line"><tt class="py-docstring">    The Storage lock must be held when this is called.</tt> </tt>
 <a name="L288"></a><tt class="py-lineno"> 288</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L289"></a><tt class="py-lineno"> 289</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L290"></a><tt class="py-lineno"> 290</tt>  <tt class="py-line"><tt class="py-docstring">      oauth2client.client.Credentials</tt> </tt>
+<a name="L289"></a><tt class="py-lineno"> 289</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L290"></a><tt class="py-lineno"> 290</tt>  <tt class="py-line"><tt class="py-docstring">      credentials: Credentials, the credentials to store.</tt> </tt>
 <a name="L291"></a><tt class="py-lineno"> 291</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L292"></a><tt class="py-lineno"> 292</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name" targets="Method oauth2client.client.Storage.acquire_lock()=oauth2client.client.Storage-class.html#acquire_lock,Method oauth2client.file.Storage.acquire_lock()=oauth2client.file.Storage-class.html#acquire_lock,Method oauth2client.keyring_storage.Storage.acquire_lock()=oauth2client.keyring_storage.Storage-class.html#acquire_lock,Method oauth2client.multistore_file._MultiStore._Storage.acquire_lock()=oauth2client.multistore_file._MultiStore._Storage-class.html#acquire_lock"><a title="oauth2client.client.Storage.acquire_lock
+<a name="L292"></a><tt class="py-lineno"> 292</tt>  <tt class="py-line">    <tt id="link-39" class="py-name"><a title="apiclient.model._abstract
+oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-39', '_abstract', 'link-26');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L293"></a><tt class="py-lineno"> 293</tt>  <tt class="py-line"> </tt>
+<a name="Storage.locked_delete"></a><div id="Storage.locked_delete-def"><a name="L294"></a><tt class="py-lineno"> 294</tt> <a class="py-toggle" href="#" id="Storage.locked_delete-toggle" onclick="return toggle('Storage.locked_delete');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#locked_delete">locked_delete</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="Storage.locked_delete-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.locked_delete-expanded"><a name="L295"></a><tt class="py-lineno"> 295</tt>  <tt class="py-line">    <tt class="py-docstring">"""Delete a credential.</tt> </tt>
+<a name="L296"></a><tt class="py-lineno"> 296</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L297"></a><tt class="py-lineno"> 297</tt>  <tt class="py-line"><tt class="py-docstring">    The Storage lock must be held when this is called.</tt> </tt>
+<a name="L298"></a><tt class="py-lineno"> 298</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L299"></a><tt class="py-lineno"> 299</tt>  <tt class="py-line">    <tt id="link-40" class="py-name"><a title="apiclient.model._abstract
+oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-40', '_abstract', 'link-26');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L300"></a><tt class="py-lineno"> 300</tt>  <tt class="py-line"> </tt>
+<a name="Storage.get"></a><div id="Storage.get-def"><a name="L301"></a><tt class="py-lineno"> 301</tt> <a class="py-toggle" href="#" id="Storage.get-toggle" onclick="return toggle('Storage.get');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-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="Storage.get-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.get-expanded"><a name="L302"></a><tt class="py-lineno"> 302</tt>  <tt class="py-line">    <tt class="py-docstring">"""Retrieve credential.</tt> </tt>
+<a name="L303"></a><tt class="py-lineno"> 303</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L304"></a><tt class="py-lineno"> 304</tt>  <tt class="py-line"><tt class="py-docstring">    The Storage lock must *not* be held when this is called.</tt> </tt>
+<a name="L305"></a><tt class="py-lineno"> 305</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L306"></a><tt class="py-lineno"> 306</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L307"></a><tt class="py-lineno"> 307</tt>  <tt class="py-line"><tt class="py-docstring">      oauth2client.client.Credentials</tt> </tt>
+<a name="L308"></a><tt class="py-lineno"> 308</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L309"></a><tt class="py-lineno"> 309</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name" targets="Method oauth2client.client.Storage.acquire_lock()=oauth2client.client.Storage-class.html#acquire_lock,Method oauth2client.file.Storage.acquire_lock()=oauth2client.file.Storage-class.html#acquire_lock,Method oauth2client.keyring_storage.Storage.acquire_lock()=oauth2client.keyring_storage.Storage-class.html#acquire_lock,Method oauth2client.multistore_file._MultiStore._Storage.acquire_lock()=oauth2client.multistore_file._MultiStore._Storage-class.html#acquire_lock"><a title="oauth2client.client.Storage.acquire_lock
 oauth2client.file.Storage.acquire_lock
 oauth2client.keyring_storage.Storage.acquire_lock
-oauth2client.multistore_file._MultiStore._Storage.acquire_lock" class="py-name" href="#" onclick="return doclink('link-30', 'acquire_lock', 'link-30');">acquire_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L293"></a><tt class="py-lineno"> 293</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L294"></a><tt class="py-lineno"> 294</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Method oauth2client.appengine.StorageByKeyName.locked_get()=oauth2client.appengine.StorageByKeyName-class.html#locked_get,Method oauth2client.client.Storage.locked_get()=oauth2client.client.Storage-class.html#locked_get,Method oauth2client.django_orm.Storage.locked_get()=oauth2client.django_orm.Storage-class.html#locked_get,Method oauth2client.file.Storage.locked_get()=oauth2client.file.Storage-class.html#locked_get,Method oauth2client.keyring_storage.Storage.locked_get()=oauth2client.keyring_storage.Storage-class.html#locked_get,Method oauth2client.multistore_file._MultiStore._Storage.locked_get()=oauth2client.multistore_file._MultiStore._Storage-class.html#locked_get"><a title="oauth2client.appengine.StorageByKeyName.locked_get
+oauth2client.multistore_file._MultiStore._Storage.acquire_lock" class="py-name" href="#" onclick="return doclink('link-41', 'acquire_lock', 'link-41');">acquire_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L310"></a><tt class="py-lineno"> 310</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L311"></a><tt class="py-lineno"> 311</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-42" class="py-name" targets="Method oauth2client.appengine.StorageByKeyName.locked_get()=oauth2client.appengine.StorageByKeyName-class.html#locked_get,Method oauth2client.client.Storage.locked_get()=oauth2client.client.Storage-class.html#locked_get,Method oauth2client.django_orm.Storage.locked_get()=oauth2client.django_orm.Storage-class.html#locked_get,Method oauth2client.file.Storage.locked_get()=oauth2client.file.Storage-class.html#locked_get,Method oauth2client.keyring_storage.Storage.locked_get()=oauth2client.keyring_storage.Storage-class.html#locked_get,Method oauth2client.multistore_file._MultiStore._Storage.locked_get()=oauth2client.multistore_file._MultiStore._Storage-class.html#locked_get"><a title="oauth2client.appengine.StorageByKeyName.locked_get
 oauth2client.client.Storage.locked_get
 oauth2client.django_orm.Storage.locked_get
 oauth2client.file.Storage.locked_get
 oauth2client.keyring_storage.Storage.locked_get
-oauth2client.multistore_file._MultiStore._Storage.locked_get" class="py-name" href="#" onclick="return doclink('link-31', 'locked_get', 'link-31');">locked_get</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L295"></a><tt class="py-lineno"> 295</tt>  <tt class="py-line">    <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
-<a name="L296"></a><tt class="py-lineno"> 296</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name" targets="Method oauth2client.client.Storage.release_lock()=oauth2client.client.Storage-class.html#release_lock,Method oauth2client.file.Storage.release_lock()=oauth2client.file.Storage-class.html#release_lock,Method oauth2client.keyring_storage.Storage.release_lock()=oauth2client.keyring_storage.Storage-class.html#release_lock,Method oauth2client.multistore_file._MultiStore._Storage.release_lock()=oauth2client.multistore_file._MultiStore._Storage-class.html#release_lock"><a title="oauth2client.client.Storage.release_lock
+oauth2client.multistore_file._MultiStore._Storage.locked_get" class="py-name" href="#" onclick="return doclink('link-42', 'locked_get', 'link-42');">locked_get</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L312"></a><tt class="py-lineno"> 312</tt>  <tt class="py-line">    <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
+<a name="L313"></a><tt class="py-lineno"> 313</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Method oauth2client.client.Storage.release_lock()=oauth2client.client.Storage-class.html#release_lock,Method oauth2client.file.Storage.release_lock()=oauth2client.file.Storage-class.html#release_lock,Method oauth2client.keyring_storage.Storage.release_lock()=oauth2client.keyring_storage.Storage-class.html#release_lock,Method oauth2client.multistore_file._MultiStore._Storage.release_lock()=oauth2client.multistore_file._MultiStore._Storage-class.html#release_lock"><a title="oauth2client.client.Storage.release_lock
 oauth2client.file.Storage.release_lock
 oauth2client.keyring_storage.Storage.release_lock
-oauth2client.multistore_file._MultiStore._Storage.release_lock" class="py-name" href="#" onclick="return doclink('link-32', 'release_lock', 'link-32');">release_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L297"></a><tt class="py-lineno"> 297</tt>  <tt class="py-line"> </tt>
-<a name="Storage.put"></a><div id="Storage.put-def"><a name="L298"></a><tt class="py-lineno"> 298</tt> <a class="py-toggle" href="#" id="Storage.put-toggle" onclick="return toggle('Storage.put');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#put">put</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">credentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Storage.put-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.put-expanded"><a name="L299"></a><tt class="py-lineno"> 299</tt>  <tt class="py-line">    <tt class="py-docstring">"""Write a credential.</tt> </tt>
-<a name="L300"></a><tt class="py-lineno"> 300</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L301"></a><tt class="py-lineno"> 301</tt>  <tt class="py-line"><tt class="py-docstring">    The Storage lock must be held when this is called.</tt> </tt>
-<a name="L302"></a><tt class="py-lineno"> 302</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L303"></a><tt class="py-lineno"> 303</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L304"></a><tt class="py-lineno"> 304</tt>  <tt class="py-line"><tt class="py-docstring">      credentials: Credentials, the credentials to store.</tt> </tt>
-<a name="L305"></a><tt class="py-lineno"> 305</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L306"></a><tt class="py-lineno"> 306</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name"><a title="oauth2client.client.Storage.acquire_lock
+oauth2client.multistore_file._MultiStore._Storage.release_lock" class="py-name" href="#" onclick="return doclink('link-43', 'release_lock', 'link-43');">release_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L314"></a><tt class="py-lineno"> 314</tt>  <tt class="py-line"> </tt>
+<a name="Storage.put"></a><div id="Storage.put-def"><a name="L315"></a><tt class="py-lineno"> 315</tt> <a class="py-toggle" href="#" id="Storage.put-toggle" onclick="return toggle('Storage.put');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#put">put</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">credentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Storage.put-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.put-expanded"><a name="L316"></a><tt class="py-lineno"> 316</tt>  <tt class="py-line">    <tt class="py-docstring">"""Write a credential.</tt> </tt>
+<a name="L317"></a><tt class="py-lineno"> 317</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L318"></a><tt class="py-lineno"> 318</tt>  <tt class="py-line"><tt class="py-docstring">    The Storage lock must be held when this is called.</tt> </tt>
+<a name="L319"></a><tt class="py-lineno"> 319</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L320"></a><tt class="py-lineno"> 320</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L321"></a><tt class="py-lineno"> 321</tt>  <tt class="py-line"><tt class="py-docstring">      credentials: Credentials, the credentials to store.</tt> </tt>
+<a name="L322"></a><tt class="py-lineno"> 322</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L323"></a><tt class="py-lineno"> 323</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name"><a title="oauth2client.client.Storage.acquire_lock
 oauth2client.file.Storage.acquire_lock
 oauth2client.keyring_storage.Storage.acquire_lock
-oauth2client.multistore_file._MultiStore._Storage.acquire_lock" class="py-name" href="#" onclick="return doclink('link-33', 'acquire_lock', 'link-30');">acquire_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L307"></a><tt class="py-lineno"> 307</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L308"></a><tt class="py-lineno"> 308</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-34" class="py-name" targets="Method oauth2client.appengine.StorageByKeyName.locked_put()=oauth2client.appengine.StorageByKeyName-class.html#locked_put,Method oauth2client.client.Storage.locked_put()=oauth2client.client.Storage-class.html#locked_put,Method oauth2client.django_orm.Storage.locked_put()=oauth2client.django_orm.Storage-class.html#locked_put,Method oauth2client.file.Storage.locked_put()=oauth2client.file.Storage-class.html#locked_put,Method oauth2client.keyring_storage.Storage.locked_put()=oauth2client.keyring_storage.Storage-class.html#locked_put,Method oauth2client.multistore_file._MultiStore._Storage.locked_put()=oauth2client.multistore_file._MultiStore._Storage-class.html#locked_put"><a title="oauth2client.appengine.StorageByKeyName.locked_put
+oauth2client.multistore_file._MultiStore._Storage.acquire_lock" class="py-name" href="#" onclick="return doclink('link-44', 'acquire_lock', 'link-41');">acquire_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L324"></a><tt class="py-lineno"> 324</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L325"></a><tt class="py-lineno"> 325</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name" targets="Method oauth2client.appengine.StorageByKeyName.locked_put()=oauth2client.appengine.StorageByKeyName-class.html#locked_put,Method oauth2client.client.Storage.locked_put()=oauth2client.client.Storage-class.html#locked_put,Method oauth2client.django_orm.Storage.locked_put()=oauth2client.django_orm.Storage-class.html#locked_put,Method oauth2client.file.Storage.locked_put()=oauth2client.file.Storage-class.html#locked_put,Method oauth2client.keyring_storage.Storage.locked_put()=oauth2client.keyring_storage.Storage-class.html#locked_put,Method oauth2client.multistore_file._MultiStore._Storage.locked_put()=oauth2client.multistore_file._MultiStore._Storage-class.html#locked_put"><a title="oauth2client.appengine.StorageByKeyName.locked_put
 oauth2client.client.Storage.locked_put
 oauth2client.django_orm.Storage.locked_put
 oauth2client.file.Storage.locked_put
 oauth2client.keyring_storage.Storage.locked_put
-oauth2client.multistore_file._MultiStore._Storage.locked_put" class="py-name" href="#" onclick="return doclink('link-34', 'locked_put', 'link-34');">locked_put</a></tt><tt class="py-op">(</tt><tt id="link-35" class="py-name" targets="Variable oauth2client.appengine.CredentialsModel.credentials=oauth2client.appengine.CredentialsModel-class.html#credentials,Variable oauth2client.appengine.CredentialsNDBModel.credentials=oauth2client.appengine.CredentialsNDBModel-class.html#credentials"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-35', 'credentials', 'link-35');">credentials</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L309"></a><tt class="py-lineno"> 309</tt>  <tt class="py-line">    <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
-<a name="L310"></a><tt class="py-lineno"> 310</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name"><a title="oauth2client.client.Storage.release_lock
+oauth2client.multistore_file._MultiStore._Storage.locked_put" class="py-name" href="#" onclick="return doclink('link-45', 'locked_put', 'link-45');">locked_put</a></tt><tt class="py-op">(</tt><tt id="link-46" class="py-name" targets="Variable oauth2client.appengine.CredentialsModel.credentials=oauth2client.appengine.CredentialsModel-class.html#credentials,Variable oauth2client.appengine.CredentialsNDBModel.credentials=oauth2client.appengine.CredentialsNDBModel-class.html#credentials"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-46', 'credentials', 'link-46');">credentials</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L326"></a><tt class="py-lineno"> 326</tt>  <tt class="py-line">    <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
+<a name="L327"></a><tt class="py-lineno"> 327</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name"><a title="oauth2client.client.Storage.release_lock
 oauth2client.file.Storage.release_lock
 oauth2client.keyring_storage.Storage.release_lock
-oauth2client.multistore_file._MultiStore._Storage.release_lock" class="py-name" href="#" onclick="return doclink('link-36', 'release_lock', 'link-32');">release_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L311"></a><tt class="py-lineno"> 311</tt>  <tt class="py-line"> </tt>
-<a name="Storage.delete"></a><div id="Storage.delete-def"><a name="L312"></a><tt class="py-lineno"> 312</tt> <a class="py-toggle" href="#" id="Storage.delete-toggle" onclick="return toggle('Storage.delete');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#delete">delete</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="Storage.delete-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.delete-expanded"><a name="L313"></a><tt class="py-lineno"> 313</tt>  <tt class="py-line">    <tt class="py-docstring">"""Delete credential.</tt> </tt>
-<a name="L314"></a><tt class="py-lineno"> 314</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L315"></a><tt class="py-lineno"> 315</tt>  <tt class="py-line"><tt class="py-docstring">    Frees any resources associated with storing the credential.</tt> </tt>
-<a name="L316"></a><tt class="py-lineno"> 316</tt>  <tt class="py-line"><tt class="py-docstring">    The Storage lock must *not* be held when this is called.</tt> </tt>
-<a name="L317"></a><tt class="py-lineno"> 317</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L318"></a><tt class="py-lineno"> 318</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L319"></a><tt class="py-lineno"> 319</tt>  <tt class="py-line"><tt class="py-docstring">      None</tt> </tt>
-<a name="L320"></a><tt class="py-lineno"> 320</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L321"></a><tt class="py-lineno"> 321</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="oauth2client.client.Storage.acquire_lock
+oauth2client.multistore_file._MultiStore._Storage.release_lock" class="py-name" href="#" onclick="return doclink('link-47', 'release_lock', 'link-43');">release_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L328"></a><tt class="py-lineno"> 328</tt>  <tt class="py-line"> </tt>
+<a name="Storage.delete"></a><div id="Storage.delete-def"><a name="L329"></a><tt class="py-lineno"> 329</tt> <a class="py-toggle" href="#" id="Storage.delete-toggle" onclick="return toggle('Storage.delete');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.Storage-class.html#delete">delete</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="Storage.delete-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Storage.delete-expanded"><a name="L330"></a><tt class="py-lineno"> 330</tt>  <tt class="py-line">    <tt class="py-docstring">"""Delete credential.</tt> </tt>
+<a name="L331"></a><tt class="py-lineno"> 331</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L332"></a><tt class="py-lineno"> 332</tt>  <tt class="py-line"><tt class="py-docstring">    Frees any resources associated with storing the credential.</tt> </tt>
+<a name="L333"></a><tt class="py-lineno"> 333</tt>  <tt class="py-line"><tt class="py-docstring">    The Storage lock must *not* be held when this is called.</tt> </tt>
+<a name="L334"></a><tt class="py-lineno"> 334</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L335"></a><tt class="py-lineno"> 335</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L336"></a><tt class="py-lineno"> 336</tt>  <tt class="py-line"><tt class="py-docstring">      None</tt> </tt>
+<a name="L337"></a><tt class="py-lineno"> 337</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L338"></a><tt class="py-lineno"> 338</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-48" class="py-name"><a title="oauth2client.client.Storage.acquire_lock
 oauth2client.file.Storage.acquire_lock
 oauth2client.keyring_storage.Storage.acquire_lock
-oauth2client.multistore_file._MultiStore._Storage.acquire_lock" class="py-name" href="#" onclick="return doclink('link-37', 'acquire_lock', 'link-30');">acquire_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L322"></a><tt class="py-lineno"> 322</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L323"></a><tt class="py-lineno"> 323</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name" targets="Method oauth2client.appengine.StorageByKeyName.locked_delete()=oauth2client.appengine.StorageByKeyName-class.html#locked_delete,Method oauth2client.client.Storage.locked_delete()=oauth2client.client.Storage-class.html#locked_delete,Method oauth2client.django_orm.Storage.locked_delete()=oauth2client.django_orm.Storage-class.html#locked_delete,Method oauth2client.file.Storage.locked_delete()=oauth2client.file.Storage-class.html#locked_delete,Method oauth2client.keyring_storage.Storage.locked_delete()=oauth2client.keyring_storage.Storage-class.html#locked_delete,Method oauth2client.multistore_file._MultiStore._Storage.locked_delete()=oauth2client.multistore_file._MultiStore._Storage-class.html#locked_delete"><a title="oauth2client.appengine.StorageByKeyName.locked_delete
+oauth2client.multistore_file._MultiStore._Storage.acquire_lock" class="py-name" href="#" onclick="return doclink('link-48', 'acquire_lock', 'link-41');">acquire_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L339"></a><tt class="py-lineno"> 339</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L340"></a><tt class="py-lineno"> 340</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-49" class="py-name" targets="Method oauth2client.appengine.StorageByKeyName.locked_delete()=oauth2client.appengine.StorageByKeyName-class.html#locked_delete,Method oauth2client.client.Storage.locked_delete()=oauth2client.client.Storage-class.html#locked_delete,Method oauth2client.django_orm.Storage.locked_delete()=oauth2client.django_orm.Storage-class.html#locked_delete,Method oauth2client.file.Storage.locked_delete()=oauth2client.file.Storage-class.html#locked_delete,Method oauth2client.keyring_storage.Storage.locked_delete()=oauth2client.keyring_storage.Storage-class.html#locked_delete,Method oauth2client.multistore_file._MultiStore._Storage.locked_delete()=oauth2client.multistore_file._MultiStore._Storage-class.html#locked_delete"><a title="oauth2client.appengine.StorageByKeyName.locked_delete
 oauth2client.client.Storage.locked_delete
 oauth2client.django_orm.Storage.locked_delete
 oauth2client.file.Storage.locked_delete
 oauth2client.keyring_storage.Storage.locked_delete
-oauth2client.multistore_file._MultiStore._Storage.locked_delete" class="py-name" href="#" onclick="return doclink('link-38', 'locked_delete', 'link-38');">locked_delete</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L324"></a><tt class="py-lineno"> 324</tt>  <tt class="py-line">    <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
-<a name="L325"></a><tt class="py-lineno"> 325</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name"><a title="oauth2client.client.Storage.release_lock
+oauth2client.multistore_file._MultiStore._Storage.locked_delete" class="py-name" href="#" onclick="return doclink('link-49', 'locked_delete', 'link-49');">locked_delete</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L341"></a><tt class="py-lineno"> 341</tt>  <tt class="py-line">    <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
+<a name="L342"></a><tt class="py-lineno"> 342</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name"><a title="oauth2client.client.Storage.release_lock
 oauth2client.file.Storage.release_lock
 oauth2client.keyring_storage.Storage.release_lock
-oauth2client.multistore_file._MultiStore._Storage.release_lock" class="py-name" href="#" onclick="return doclink('link-39', 'release_lock', 'link-32');">release_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L326"></a><tt class="py-lineno"> 326</tt>  <tt class="py-line"> </tt>
-<a name="clean_headers"></a><div id="clean_headers-def"><a name="L327"></a><tt class="py-lineno"> 327</tt>  <tt class="py-line"> </tt>
-<a name="L328"></a><tt class="py-lineno"> 328</tt> <a class="py-toggle" href="#" id="clean_headers-toggle" onclick="return toggle('clean_headers');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#clean_headers">clean_headers</a><tt class="py-op">(</tt><tt class="py-param">headers</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="clean_headers-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="clean_headers-expanded"><a name="L329"></a><tt class="py-lineno"> 329</tt>  <tt class="py-line">  <tt class="py-docstring">"""Forces header keys and values to be strings, i.e not unicode.</tt> </tt>
-<a name="L330"></a><tt class="py-lineno"> 330</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L331"></a><tt class="py-lineno"> 331</tt>  <tt class="py-line"><tt class="py-docstring">  The httplib module just concats the header keys and values in a way that may</tt> </tt>
-<a name="L332"></a><tt class="py-lineno"> 332</tt>  <tt class="py-line"><tt class="py-docstring">  make the message header a unicode string, which, if it then tries to</tt> </tt>
-<a name="L333"></a><tt class="py-lineno"> 333</tt>  <tt class="py-line"><tt class="py-docstring">  contatenate to a binary request body may result in a unicode decode error.</tt> </tt>
-<a name="L334"></a><tt class="py-lineno"> 334</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L335"></a><tt class="py-lineno"> 335</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L336"></a><tt class="py-lineno"> 336</tt>  <tt class="py-line"><tt class="py-docstring">    headers: dict, A dictionary of headers.</tt> </tt>
-<a name="L337"></a><tt class="py-lineno"> 337</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L338"></a><tt class="py-lineno"> 338</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L339"></a><tt class="py-lineno"> 339</tt>  <tt class="py-line"><tt class="py-docstring">    The same dictionary but with all the keys converted to strings.</tt> </tt>
-<a name="L340"></a><tt class="py-lineno"> 340</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L341"></a><tt class="py-lineno"> 341</tt>  <tt class="py-line">  <tt class="py-name">clean</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L342"></a><tt class="py-lineno"> 342</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L343"></a><tt class="py-lineno"> 343</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">headers</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L344"></a><tt class="py-lineno"> 344</tt>  <tt class="py-line">      <tt class="py-name">clean</tt><tt class="py-op">[</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">k</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">)</tt> </tt>
-<a name="L345"></a><tt class="py-lineno"> 345</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">UnicodeEncodeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L346"></a><tt class="py-lineno"> 346</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-40" class="py-name" targets="Class oauth2client.client.NonAsciiHeaderError=oauth2client.client.NonAsciiHeaderError-class.html"><a title="oauth2client.client.NonAsciiHeaderError" class="py-name" href="#" onclick="return doclink('link-40', 'NonAsciiHeaderError', 'link-40');">NonAsciiHeaderError</a></tt><tt class="py-op">(</tt><tt class="py-name">k</tt> <tt class="py-op">+</tt> <tt class="py-string">': '</tt> <tt class="py-op">+</tt> <tt class="py-name">v</tt><tt class="py-op">)</tt> </tt>
-<a name="L347"></a><tt class="py-lineno"> 347</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">clean</tt> </tt>
-</div><a name="L348"></a><tt class="py-lineno"> 348</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Credentials"></a><div id="OAuth2Credentials-def"><a name="L349"></a><tt class="py-lineno"> 349</tt>  <tt class="py-line"> </tt>
-<a name="L350"></a><tt class="py-lineno"> 350</tt> <a class="py-toggle" href="#" id="OAuth2Credentials-toggle" onclick="return toggle('OAuth2Credentials');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a><tt class="py-op">(</tt><tt class="py-base-class">Credentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Credentials-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="OAuth2Credentials-expanded"><a name="L351"></a><tt class="py-lineno"> 351</tt>  <tt class="py-line">  <tt class="py-docstring">"""Credentials object for OAuth 2.0.</tt> </tt>
-<a name="L352"></a><tt class="py-lineno"> 352</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L353"></a><tt class="py-lineno"> 353</tt>  <tt class="py-line"><tt class="py-docstring">  Credentials can be applied to an httplib2.Http object using the authorize()</tt> </tt>
-<a name="L354"></a><tt class="py-lineno"> 354</tt>  <tt class="py-line"><tt class="py-docstring">  method, which then adds the OAuth 2.0 access token to each request.</tt> </tt>
-<a name="L355"></a><tt class="py-lineno"> 355</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L356"></a><tt class="py-lineno"> 356</tt>  <tt class="py-line"><tt class="py-docstring">  OAuth2Credentials objects may be safely pickled and unpickled.</tt> </tt>
+oauth2client.multistore_file._MultiStore._Storage.release_lock" class="py-name" href="#" onclick="return doclink('link-50', 'release_lock', 'link-43');">release_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L343"></a><tt class="py-lineno"> 343</tt>  <tt class="py-line"> </tt>
+<a name="clean_headers"></a><div id="clean_headers-def"><a name="L344"></a><tt class="py-lineno"> 344</tt>  <tt class="py-line"> </tt>
+<a name="L345"></a><tt class="py-lineno"> 345</tt> <a class="py-toggle" href="#" id="clean_headers-toggle" onclick="return toggle('clean_headers');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#clean_headers">clean_headers</a><tt class="py-op">(</tt><tt class="py-param">headers</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="clean_headers-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="clean_headers-expanded"><a name="L346"></a><tt class="py-lineno"> 346</tt>  <tt class="py-line">  <tt class="py-docstring">"""Forces header keys and values to be strings, i.e not unicode.</tt> </tt>
+<a name="L347"></a><tt class="py-lineno"> 347</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L348"></a><tt class="py-lineno"> 348</tt>  <tt class="py-line"><tt class="py-docstring">  The httplib module just concats the header keys and values in a way that may</tt> </tt>
+<a name="L349"></a><tt class="py-lineno"> 349</tt>  <tt class="py-line"><tt class="py-docstring">  make the message header a unicode string, which, if it then tries to</tt> </tt>
+<a name="L350"></a><tt class="py-lineno"> 350</tt>  <tt class="py-line"><tt class="py-docstring">  contatenate to a binary request body may result in a unicode decode error.</tt> </tt>
+<a name="L351"></a><tt class="py-lineno"> 351</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L352"></a><tt class="py-lineno"> 352</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L353"></a><tt class="py-lineno"> 353</tt>  <tt class="py-line"><tt class="py-docstring">    headers: dict, A dictionary of headers.</tt> </tt>
+<a name="L354"></a><tt class="py-lineno"> 354</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L355"></a><tt class="py-lineno"> 355</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L356"></a><tt class="py-lineno"> 356</tt>  <tt class="py-line"><tt class="py-docstring">    The same dictionary but with all the keys converted to strings.</tt> </tt>
 <a name="L357"></a><tt class="py-lineno"> 357</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L358"></a><tt class="py-lineno"> 358</tt>  <tt class="py-line"> </tt>
-<a name="L359"></a><tt class="py-lineno"> 359</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name" targets="Function oauth2client.util.positional()=oauth2client.util-module.html#positional"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-41', 'positional', 'link-41');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">8</tt><tt class="py-op">)</tt> </tt>
-<a name="OAuth2Credentials.__init__"></a><div id="OAuth2Credentials.__init__-def"><a name="L360"></a><tt class="py-lineno"> 360</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.__init__-toggle" onclick="return toggle('OAuth2Credentials.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-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">access_token</tt><tt class="py-op">,</tt> <tt class="py-param">client_id</tt><tt class="py-op">,</tt> <tt class="py-param">client_secret</tt><tt class="py-op">,</tt> <tt class="py-param">refresh_token</tt><tt class="py-op">,</tt> </tt>
-<a name="L361"></a><tt class="py-lineno"> 361</tt>  <tt class="py-line">               <tt class="py-param">token_expiry</tt><tt class="py-op">,</tt> <tt class="py-param">token_uri</tt><tt class="py-op">,</tt> <tt class="py-param">user_agent</tt><tt class="py-op">,</tt> <tt class="py-param">id_token</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="OAuth2Credentials.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.__init__-expanded"><a name="L362"></a><tt class="py-lineno"> 362</tt>  <tt class="py-line">    <tt class="py-docstring">"""Create an instance of OAuth2Credentials.</tt> </tt>
-<a name="L363"></a><tt class="py-lineno"> 363</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L364"></a><tt class="py-lineno"> 364</tt>  <tt class="py-line"><tt class="py-docstring">    This constructor is not usually called by the user, instead</tt> </tt>
-<a name="L365"></a><tt class="py-lineno"> 365</tt>  <tt class="py-line"><tt class="py-docstring">    OAuth2Credentials objects are instantiated by the OAuth2WebServerFlow.</tt> </tt>
-<a name="L366"></a><tt class="py-lineno"> 366</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L367"></a><tt class="py-lineno"> 367</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L368"></a><tt class="py-lineno"> 368</tt>  <tt class="py-line"><tt class="py-docstring">      access_token: string, access token.</tt> </tt>
-<a name="L369"></a><tt class="py-lineno"> 369</tt>  <tt class="py-line"><tt class="py-docstring">      client_id: string, client identifier.</tt> </tt>
-<a name="L370"></a><tt class="py-lineno"> 370</tt>  <tt class="py-line"><tt class="py-docstring">      client_secret: string, client secret.</tt> </tt>
-<a name="L371"></a><tt class="py-lineno"> 371</tt>  <tt class="py-line"><tt class="py-docstring">      refresh_token: string, refresh token.</tt> </tt>
-<a name="L372"></a><tt class="py-lineno"> 372</tt>  <tt class="py-line"><tt class="py-docstring">      token_expiry: datetime, when the access_token expires.</tt> </tt>
-<a name="L373"></a><tt class="py-lineno"> 373</tt>  <tt class="py-line"><tt class="py-docstring">      token_uri: string, URI of token endpoint.</tt> </tt>
-<a name="L374"></a><tt class="py-lineno"> 374</tt>  <tt class="py-line"><tt class="py-docstring">      user_agent: string, The HTTP User-Agent to provide for this application.</tt> </tt>
-<a name="L375"></a><tt class="py-lineno"> 375</tt>  <tt class="py-line"><tt class="py-docstring">      id_token: object, The identity of the resource owner.</tt> </tt>
-<a name="L376"></a><tt class="py-lineno"> 376</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L377"></a><tt class="py-lineno"> 377</tt>  <tt class="py-line"><tt class="py-docstring">    Notes:</tt> </tt>
-<a name="L378"></a><tt class="py-lineno"> 378</tt>  <tt class="py-line"><tt class="py-docstring">      store: callable, A callable that when passed a Credential</tt> </tt>
-<a name="L379"></a><tt class="py-lineno"> 379</tt>  <tt class="py-line"><tt class="py-docstring">        will store the credential back to where it came from.</tt> </tt>
-<a name="L380"></a><tt class="py-lineno"> 380</tt>  <tt class="py-line"><tt class="py-docstring">        This is needed to store the latest access_token if it</tt> </tt>
-<a name="L381"></a><tt class="py-lineno"> 381</tt>  <tt class="py-line"><tt class="py-docstring">        has expired and been refreshed.</tt> </tt>
-<a name="L382"></a><tt class="py-lineno"> 382</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L383"></a><tt class="py-lineno"> 383</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> <tt class="py-op">=</tt> <tt class="py-name">access_token</tt> </tt>
-<a name="L384"></a><tt class="py-lineno"> 384</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_id</tt> <tt class="py-op">=</tt> <tt class="py-name">client_id</tt> </tt>
-<a name="L385"></a><tt class="py-lineno"> 385</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_secret</tt> <tt class="py-op">=</tt> <tt class="py-name">client_secret</tt> </tt>
-<a name="L386"></a><tt class="py-lineno"> 386</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">refresh_token</tt> <tt class="py-op">=</tt> <tt class="py-name">refresh_token</tt> </tt>
-<a name="L387"></a><tt class="py-lineno"> 387</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L388"></a><tt class="py-lineno"> 388</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_expiry</tt> <tt class="py-op">=</tt> <tt class="py-name">token_expiry</tt> </tt>
-<a name="L389"></a><tt class="py-lineno"> 389</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">token_uri</tt> </tt>
-<a name="L390"></a><tt class="py-lineno"> 390</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt> <tt class="py-op">=</tt> <tt class="py-name">user_agent</tt> </tt>
-<a name="L391"></a><tt class="py-lineno"> 391</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">id_token</tt> <tt class="py-op">=</tt> <tt class="py-name">id_token</tt> </tt>
+<a name="L358"></a><tt class="py-lineno"> 358</tt>  <tt class="py-line">  <tt class="py-name">clean</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L359"></a><tt class="py-lineno"> 359</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L360"></a><tt class="py-lineno"> 360</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">headers</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L361"></a><tt class="py-lineno"> 361</tt>  <tt class="py-line">      <tt class="py-name">clean</tt><tt class="py-op">[</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">k</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">v</tt><tt class="py-op">)</tt> </tt>
+<a name="L362"></a><tt class="py-lineno"> 362</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">UnicodeEncodeError</tt><tt class="py-op">:</tt> </tt>
+<a name="L363"></a><tt class="py-lineno"> 363</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-51" class="py-name" targets="Class oauth2client.client.NonAsciiHeaderError=oauth2client.client.NonAsciiHeaderError-class.html"><a title="oauth2client.client.NonAsciiHeaderError" class="py-name" href="#" onclick="return doclink('link-51', 'NonAsciiHeaderError', 'link-51');">NonAsciiHeaderError</a></tt><tt class="py-op">(</tt><tt class="py-name">k</tt> <tt class="py-op">+</tt> <tt class="py-string">': '</tt> <tt class="py-op">+</tt> <tt class="py-name">v</tt><tt class="py-op">)</tt> </tt>
+<a name="L364"></a><tt class="py-lineno"> 364</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">clean</tt> </tt>
+</div><a name="L365"></a><tt class="py-lineno"> 365</tt>  <tt class="py-line"> </tt>
+<a name="_update_query_params"></a><div id="_update_query_params-def"><a name="L366"></a><tt class="py-lineno"> 366</tt>  <tt class="py-line"> </tt>
+<a name="L367"></a><tt class="py-lineno"> 367</tt> <a class="py-toggle" href="#" id="_update_query_params-toggle" onclick="return toggle('_update_query_params');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#_update_query_params">_update_query_params</a><tt class="py-op">(</tt><tt class="py-param">uri</tt><tt class="py-op">,</tt> <tt class="py-param">params</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_update_query_params-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_update_query_params-expanded"><a name="L368"></a><tt class="py-lineno"> 368</tt>  <tt class="py-line">  <tt class="py-docstring">"""Updates a URI with new query parameters.</tt> </tt>
+<a name="L369"></a><tt class="py-lineno"> 369</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L370"></a><tt class="py-lineno"> 370</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L371"></a><tt class="py-lineno"> 371</tt>  <tt class="py-line"><tt class="py-docstring">    uri: string, A valid URI, with potential existing query parameters.</tt> </tt>
+<a name="L372"></a><tt class="py-lineno"> 372</tt>  <tt class="py-line"><tt class="py-docstring">    params: dict, A dictionary of query parameters.</tt> </tt>
+<a name="L373"></a><tt class="py-lineno"> 373</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L374"></a><tt class="py-lineno"> 374</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L375"></a><tt class="py-lineno"> 375</tt>  <tt class="py-line"><tt class="py-docstring">    The same URI but with the new query parameters added.</tt> </tt>
+<a name="L376"></a><tt class="py-lineno"> 376</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L377"></a><tt class="py-lineno"> 377</tt>  <tt class="py-line">  <tt class="py-name">parts</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urlparse</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L378"></a><tt class="py-lineno"> 378</tt>  <tt class="py-line">  <tt id="link-52" class="py-name" targets="Variable oauth2client.tools.ClientRedirectServer.query_params=oauth2client.tools.ClientRedirectServer-class.html#query_params"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-52', 'query_params', 'link-52');">query_params</a></tt> <tt class="py-op">=</tt> <tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-name">parse_qsl</tt><tt class="py-op">(</tt><tt class="py-name">parts</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-comment"># 4 is the index of the query part</tt> </tt>
+<a name="L379"></a><tt class="py-lineno"> 379</tt>  <tt class="py-line">  <tt id="link-53" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-53', 'query_params', 'link-52');">query_params</a></tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
+<a name="L380"></a><tt class="py-lineno"> 380</tt>  <tt class="py-line">  <tt class="py-name">parts</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt id="link-54" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-54', 'query_params', 'link-52');">query_params</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L381"></a><tt class="py-lineno"> 381</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urlunparse</tt><tt class="py-op">(</tt><tt class="py-name">parts</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L382"></a><tt class="py-lineno"> 382</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials"></a><div id="OAuth2Credentials-def"><a name="L383"></a><tt class="py-lineno"> 383</tt>  <tt class="py-line"> </tt>
+<a name="L384"></a><tt class="py-lineno"> 384</tt> <a class="py-toggle" href="#" id="OAuth2Credentials-toggle" onclick="return toggle('OAuth2Credentials');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a><tt class="py-op">(</tt><tt class="py-base-class">Credentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Credentials-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="OAuth2Credentials-expanded"><a name="L385"></a><tt class="py-lineno"> 385</tt>  <tt class="py-line">  <tt class="py-docstring">"""Credentials object for OAuth 2.0.</tt> </tt>
+<a name="L386"></a><tt class="py-lineno"> 386</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L387"></a><tt class="py-lineno"> 387</tt>  <tt class="py-line"><tt class="py-docstring">  Credentials can be applied to an httplib2.Http object using the authorize()</tt> </tt>
+<a name="L388"></a><tt class="py-lineno"> 388</tt>  <tt class="py-line"><tt class="py-docstring">  method, which then adds the OAuth 2.0 access token to each request.</tt> </tt>
+<a name="L389"></a><tt class="py-lineno"> 389</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L390"></a><tt class="py-lineno"> 390</tt>  <tt class="py-line"><tt class="py-docstring">  OAuth2Credentials objects may be safely pickled and unpickled.</tt> </tt>
+<a name="L391"></a><tt class="py-lineno"> 391</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
 <a name="L392"></a><tt class="py-lineno"> 392</tt>  <tt class="py-line"> </tt>
-<a name="L393"></a><tt class="py-lineno"> 393</tt>  <tt class="py-line">    <tt class="py-comment"># True if the credentials have been revoked or expired and can't be</tt> </tt>
-<a name="L394"></a><tt class="py-lineno"> 394</tt>  <tt class="py-line">    <tt class="py-comment"># refreshed.</tt> </tt>
-<a name="L395"></a><tt class="py-lineno"> 395</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L396"></a><tt class="py-lineno"> 396</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Credentials.authorize"></a><div id="OAuth2Credentials.authorize-def"><a name="L397"></a><tt class="py-lineno"> 397</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.authorize-toggle" onclick="return toggle('OAuth2Credentials.authorize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#authorize">authorize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Credentials.authorize-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.authorize-expanded"><a name="L398"></a><tt class="py-lineno"> 398</tt>  <tt class="py-line">    <tt class="py-docstring">"""Authorize an httplib2.Http instance with these credentials.</tt> </tt>
-<a name="L399"></a><tt class="py-lineno"> 399</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L400"></a><tt class="py-lineno"> 400</tt>  <tt class="py-line"><tt class="py-docstring">    The modified http.request method will add authentication headers to each</tt> </tt>
-<a name="L401"></a><tt class="py-lineno"> 401</tt>  <tt class="py-line"><tt class="py-docstring">    request and will refresh access_tokens when a 401 is received on a</tt> </tt>
-<a name="L402"></a><tt class="py-lineno"> 402</tt>  <tt class="py-line"><tt class="py-docstring">    request. In addition the http.request method has a credentials property,</tt> </tt>
-<a name="L403"></a><tt class="py-lineno"> 403</tt>  <tt class="py-line"><tt class="py-docstring">    http.request.credentials, which is the Credentials object that authorized</tt> </tt>
-<a name="L404"></a><tt class="py-lineno"> 404</tt>  <tt class="py-line"><tt class="py-docstring">    it.</tt> </tt>
-<a name="L405"></a><tt class="py-lineno"> 405</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L406"></a><tt class="py-lineno"> 406</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L407"></a><tt class="py-lineno"> 407</tt>  <tt class="py-line"><tt class="py-docstring">       http: An instance of httplib2.Http</tt> </tt>
-<a name="L408"></a><tt class="py-lineno"> 408</tt>  <tt class="py-line"><tt class="py-docstring">           or something that acts like it.</tt> </tt>
-<a name="L409"></a><tt class="py-lineno"> 409</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L410"></a><tt class="py-lineno"> 410</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L411"></a><tt class="py-lineno"> 411</tt>  <tt class="py-line"><tt class="py-docstring">       A modified instance of http that was passed in.</tt> </tt>
-<a name="L412"></a><tt class="py-lineno"> 412</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L413"></a><tt class="py-lineno"> 413</tt>  <tt class="py-line"><tt class="py-docstring">    Example:</tt> </tt>
-<a name="L414"></a><tt class="py-lineno"> 414</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L415"></a><tt class="py-lineno"> 415</tt>  <tt class="py-line"><tt class="py-docstring">      h = httplib2.Http()</tt> </tt>
-<a name="L416"></a><tt class="py-lineno"> 416</tt>  <tt class="py-line"><tt class="py-docstring">      h = credentials.authorize(h)</tt> </tt>
-<a name="L417"></a><tt class="py-lineno"> 417</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L418"></a><tt class="py-lineno"> 418</tt>  <tt class="py-line"><tt class="py-docstring">    You can't create a new OAuth subclass of httplib2.Authenication</tt> </tt>
-<a name="L419"></a><tt class="py-lineno"> 419</tt>  <tt class="py-line"><tt class="py-docstring">    because it never gets passed the absolute URI, which is needed for</tt> </tt>
-<a name="L420"></a><tt class="py-lineno"> 420</tt>  <tt class="py-line"><tt class="py-docstring">    signing. So instead we have to overload 'request' with a closure</tt> </tt>
-<a name="L421"></a><tt class="py-lineno"> 421</tt>  <tt class="py-line"><tt class="py-docstring">    that adds in the Authorization header and then calls the original</tt> </tt>
-<a name="L422"></a><tt class="py-lineno"> 422</tt>  <tt class="py-line"><tt class="py-docstring">    version of 'request()'.</tt> </tt>
-<a name="L423"></a><tt class="py-lineno"> 423</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L424"></a><tt class="py-lineno"> 424</tt>  <tt class="py-line">    <tt class="py-name">request_orig</tt> <tt class="py-op">=</tt> <tt id="link-42" class="py-name" targets="Module apiclient.http=apiclient.http-module.html,Method oauth2client.appengine.OAuth2Decorator.http()=oauth2client.appengine.OAuth2Decorator-class.html#http"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-42', 'http', 'link-42');">http</a></tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Method apiclient.http.HttpMock.request()=apiclient.http.HttpMock-class.html#request,Method apiclient.http.HttpMockSequence.request()=apiclient.http.HttpMockSequence-class.html#request,Method apiclient.model.BaseModel.request()=apiclient.model.BaseModel-class.html#request,Method apiclient.model.Model.request()=apiclient.model.Model-class.html#request"><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-43', 'request', 'link-43');">request</a></tt> </tt>
-<a name="L425"></a><tt class="py-lineno"> 425</tt>  <tt class="py-line"> </tt>
-<a name="L426"></a><tt class="py-lineno"> 426</tt>  <tt class="py-line">    <tt class="py-comment"># The closure that will replace 'httplib2.Http.request'.</tt> </tt>
-<a name="L427"></a><tt class="py-lineno"> 427</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-44" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-44', 'positional', 'link-41');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L428"></a><tt class="py-lineno"> 428</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">new_request</tt><tt class="py-op">(</tt><tt class="py-param">uri</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L429"></a><tt class="py-lineno"> 429</tt>  <tt class="py-line">                    <tt class="py-param">redirections</tt><tt class="py-op">=</tt><tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">DEFAULT_MAX_REDIRECTS</tt><tt class="py-op">,</tt> </tt>
-<a name="L430"></a><tt class="py-lineno"> 430</tt>  <tt class="py-line">                    <tt class="py-param">connection_type</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="L431"></a><tt class="py-lineno"> 431</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt><tt class="py-op">:</tt> </tt>
-<a name="L432"></a><tt class="py-lineno"> 432</tt>  <tt class="py-line">        <tt id="link-45" class="py-name"><a title="apiclient.discovery.logger
-oauth2client.appengine.logger
-oauth2client.client.logger
-oauth2client.crypt.logger
-oauth2client.gce.logger
-oauth2client.locked_file.logger
-oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-45', 'logger', 'link-9');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Attempting refresh to obtain initial access_token'</tt><tt class="py-op">)</tt> </tt>
-<a name="L433"></a><tt class="py-lineno"> 433</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name" targets="Method oauth2client.appengine.AppAssertionCredentials._refresh()=oauth2client.appengine.AppAssertionCredentials-class.html#_refresh,Method oauth2client.client.AccessTokenCredentials._refresh()=oauth2client.client.AccessTokenCredentials-class.html#_refresh,Method oauth2client.client.OAuth2Credentials._refresh()=oauth2client.client.OAuth2Credentials-class.html#_refresh,Method oauth2client.gce.AppAssertionCredentials._refresh()=oauth2client.gce.AppAssertionCredentials-class.html#_refresh"><a title="oauth2client.appengine.AppAssertionCredentials._refresh
-oauth2client.client.AccessTokenCredentials._refresh
-oauth2client.client.OAuth2Credentials._refresh
-oauth2client.gce.AppAssertionCredentials._refresh" class="py-name" href="#" onclick="return doclink('link-46', '_refresh', 'link-46');">_refresh</a></tt><tt class="py-op">(</tt><tt class="py-name">request_orig</tt><tt class="py-op">)</tt> </tt>
+<a name="L393"></a><tt class="py-lineno"> 393</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name" targets="Function oauth2client.util.positional()=oauth2client.util-module.html#positional"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-55', 'positional', 'link-55');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">8</tt><tt class="py-op">)</tt> </tt>
+<a name="OAuth2Credentials.__init__"></a><div id="OAuth2Credentials.__init__-def"><a name="L394"></a><tt class="py-lineno"> 394</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.__init__-toggle" onclick="return toggle('OAuth2Credentials.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-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">access_token</tt><tt class="py-op">,</tt> <tt class="py-param">client_id</tt><tt class="py-op">,</tt> <tt class="py-param">client_secret</tt><tt class="py-op">,</tt> <tt class="py-param">refresh_token</tt><tt class="py-op">,</tt> </tt>
+<a name="L395"></a><tt class="py-lineno"> 395</tt>  <tt class="py-line">               <tt class="py-param">token_expiry</tt><tt class="py-op">,</tt> <tt class="py-param">token_uri</tt><tt class="py-op">,</tt> <tt class="py-param">user_agent</tt><tt class="py-op">,</tt> <tt class="py-param">revoke_uri</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L396"></a><tt class="py-lineno"> 396</tt>  <tt class="py-line">               <tt class="py-param">id_token</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">token_response</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="OAuth2Credentials.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.__init__-expanded"><a name="L397"></a><tt class="py-lineno"> 397</tt>  <tt class="py-line">    <tt class="py-docstring">"""Create an instance of OAuth2Credentials.</tt> </tt>
+<a name="L398"></a><tt class="py-lineno"> 398</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L399"></a><tt class="py-lineno"> 399</tt>  <tt class="py-line"><tt class="py-docstring">    This constructor is not usually called by the user, instead</tt> </tt>
+<a name="L400"></a><tt class="py-lineno"> 400</tt>  <tt class="py-line"><tt class="py-docstring">    OAuth2Credentials objects are instantiated by the OAuth2WebServerFlow.</tt> </tt>
+<a name="L401"></a><tt class="py-lineno"> 401</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L402"></a><tt class="py-lineno"> 402</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L403"></a><tt class="py-lineno"> 403</tt>  <tt class="py-line"><tt class="py-docstring">      access_token: string, access token.</tt> </tt>
+<a name="L404"></a><tt class="py-lineno"> 404</tt>  <tt class="py-line"><tt class="py-docstring">      client_id: string, client identifier.</tt> </tt>
+<a name="L405"></a><tt class="py-lineno"> 405</tt>  <tt class="py-line"><tt class="py-docstring">      client_secret: string, client secret.</tt> </tt>
+<a name="L406"></a><tt class="py-lineno"> 406</tt>  <tt class="py-line"><tt class="py-docstring">      refresh_token: string, refresh token.</tt> </tt>
+<a name="L407"></a><tt class="py-lineno"> 407</tt>  <tt class="py-line"><tt class="py-docstring">      token_expiry: datetime, when the access_token expires.</tt> </tt>
+<a name="L408"></a><tt class="py-lineno"> 408</tt>  <tt class="py-line"><tt class="py-docstring">      token_uri: string, URI of token endpoint.</tt> </tt>
+<a name="L409"></a><tt class="py-lineno"> 409</tt>  <tt class="py-line"><tt class="py-docstring">      user_agent: string, The HTTP User-Agent to provide for this application.</tt> </tt>
+<a name="L410"></a><tt class="py-lineno"> 410</tt>  <tt class="py-line"><tt class="py-docstring">      revoke_uri: string, URI for revoke endpoint. Defaults to None; a token</tt> </tt>
+<a name="L411"></a><tt class="py-lineno"> 411</tt>  <tt class="py-line"><tt class="py-docstring">        can't be revoked if this is None.</tt> </tt>
+<a name="L412"></a><tt class="py-lineno"> 412</tt>  <tt class="py-line"><tt class="py-docstring">      id_token: object, The identity of the resource owner.</tt> </tt>
+<a name="L413"></a><tt class="py-lineno"> 413</tt>  <tt class="py-line"><tt class="py-docstring">      token_response: dict, the decoded response to the token request. None</tt> </tt>
+<a name="L414"></a><tt class="py-lineno"> 414</tt>  <tt class="py-line"><tt class="py-docstring">        if a token hasn't been requested yet. Stored because some providers</tt> </tt>
+<a name="L415"></a><tt class="py-lineno"> 415</tt>  <tt class="py-line"><tt class="py-docstring">        (e.g. wordpress.com) include extra fields that clients may want.</tt> </tt>
+<a name="L416"></a><tt class="py-lineno"> 416</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L417"></a><tt class="py-lineno"> 417</tt>  <tt class="py-line"><tt class="py-docstring">    Notes:</tt> </tt>
+<a name="L418"></a><tt class="py-lineno"> 418</tt>  <tt class="py-line"><tt class="py-docstring">      store: callable, A callable that when passed a Credential</tt> </tt>
+<a name="L419"></a><tt class="py-lineno"> 419</tt>  <tt class="py-line"><tt class="py-docstring">        will store the credential back to where it came from.</tt> </tt>
+<a name="L420"></a><tt class="py-lineno"> 420</tt>  <tt class="py-line"><tt class="py-docstring">        This is needed to store the latest access_token if it</tt> </tt>
+<a name="L421"></a><tt class="py-lineno"> 421</tt>  <tt class="py-line"><tt class="py-docstring">        has expired and been refreshed.</tt> </tt>
+<a name="L422"></a><tt class="py-lineno"> 422</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L423"></a><tt class="py-lineno"> 423</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> <tt class="py-op">=</tt> <tt class="py-name">access_token</tt> </tt>
+<a name="L424"></a><tt class="py-lineno"> 424</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_id</tt> <tt class="py-op">=</tt> <tt class="py-name">client_id</tt> </tt>
+<a name="L425"></a><tt class="py-lineno"> 425</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_secret</tt> <tt class="py-op">=</tt> <tt class="py-name">client_secret</tt> </tt>
+<a name="L426"></a><tt class="py-lineno"> 426</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">refresh_token</tt> <tt class="py-op">=</tt> <tt class="py-name">refresh_token</tt> </tt>
+<a name="L427"></a><tt class="py-lineno"> 427</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L428"></a><tt class="py-lineno"> 428</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_expiry</tt> <tt class="py-op">=</tt> <tt class="py-name">token_expiry</tt> </tt>
+<a name="L429"></a><tt class="py-lineno"> 429</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">token_uri</tt> </tt>
+<a name="L430"></a><tt class="py-lineno"> 430</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt> <tt class="py-op">=</tt> <tt class="py-name">user_agent</tt> </tt>
+<a name="L431"></a><tt class="py-lineno"> 431</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">revoke_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">revoke_uri</tt> </tt>
+<a name="L432"></a><tt class="py-lineno"> 432</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">id_token</tt> <tt class="py-op">=</tt> <tt class="py-name">id_token</tt> </tt>
+<a name="L433"></a><tt class="py-lineno"> 433</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_response</tt> <tt class="py-op">=</tt> <tt class="py-name">token_response</tt> </tt>
 <a name="L434"></a><tt class="py-lineno"> 434</tt>  <tt class="py-line"> </tt>
-<a name="L435"></a><tt class="py-lineno"> 435</tt>  <tt class="py-line">      <tt class="py-comment"># Modify the request headers to add the appropriate</tt> </tt>
-<a name="L436"></a><tt class="py-lineno"> 436</tt>  <tt class="py-line">      <tt class="py-comment"># Authorization header.</tt> </tt>
-<a name="L437"></a><tt class="py-lineno"> 437</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">headers</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L438"></a><tt class="py-lineno"> 438</tt>  <tt class="py-line">        <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L439"></a><tt class="py-lineno"> 439</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-47" class="py-name" targets="Method oauth2client.client.Credentials.apply()=oauth2client.client.Credentials-class.html#apply,Method oauth2client.client.OAuth2Credentials.apply()=oauth2client.client.OAuth2Credentials-class.html#apply"><a title="oauth2client.client.Credentials.apply
-oauth2client.client.OAuth2Credentials.apply" class="py-name" href="#" onclick="return doclink('link-47', 'apply', 'link-47');">apply</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
-<a name="L440"></a><tt class="py-lineno"> 440</tt>  <tt class="py-line"> </tt>
-<a name="L441"></a><tt class="py-lineno"> 441</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</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="L442"></a><tt class="py-lineno"> 442</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'user-agent'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">headers</tt><tt class="py-op">:</tt> </tt>
-<a name="L443"></a><tt class="py-lineno"> 443</tt>  <tt class="py-line">          <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt> <tt class="py-op">+</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> </tt>
-<a name="L444"></a><tt class="py-lineno"> 444</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L445"></a><tt class="py-lineno"> 445</tt>  <tt class="py-line">          <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt> </tt>
-<a name="L446"></a><tt class="py-lineno"> 446</tt>  <tt class="py-line"> </tt>
-<a name="L447"></a><tt class="py-lineno"> 447</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">request_orig</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-name">body</tt><tt class="py-op">,</tt> <tt id="link-48" class="py-name" targets="Function oauth2client.client.clean_headers()=oauth2client.client-module.html#clean_headers"><a title="oauth2client.client.clean_headers" class="py-name" href="#" onclick="return doclink('link-48', 'clean_headers', 'link-48');">clean_headers</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L448"></a><tt class="py-lineno"> 448</tt>  <tt class="py-line">                                   <tt class="py-name">redirections</tt><tt class="py-op">,</tt> <tt class="py-name">connection_type</tt><tt class="py-op">)</tt> </tt>
-<a name="L449"></a><tt class="py-lineno"> 449</tt>  <tt class="py-line"> </tt>
-<a name="L450"></a><tt class="py-lineno"> 450</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-keyword">in</tt> <tt id="link-49" class="py-name"><a title="oauth2client.client.REFRESH_STATUS_CODES" class="py-name" href="#" onclick="return doclink('link-49', 'REFRESH_STATUS_CODES', 'link-13');">REFRESH_STATUS_CODES</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L451"></a><tt class="py-lineno"> 451</tt>  <tt class="py-line">        <tt id="link-50" class="py-name"><a title="apiclient.discovery.logger
+<a name="L435"></a><tt class="py-lineno"> 435</tt>  <tt class="py-line">    <tt class="py-comment"># True if the credentials have been revoked or expired and can't be</tt> </tt>
+<a name="L436"></a><tt class="py-lineno"> 436</tt>  <tt class="py-line">    <tt class="py-comment"># refreshed.</tt> </tt>
+<a name="L437"></a><tt class="py-lineno"> 437</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+</div><a name="L438"></a><tt class="py-lineno"> 438</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials.authorize"></a><div id="OAuth2Credentials.authorize-def"><a name="L439"></a><tt class="py-lineno"> 439</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.authorize-toggle" onclick="return toggle('OAuth2Credentials.authorize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#authorize">authorize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Credentials.authorize-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.authorize-expanded"><a name="L440"></a><tt class="py-lineno"> 440</tt>  <tt class="py-line">    <tt class="py-docstring">"""Authorize an httplib2.Http instance with these credentials.</tt> </tt>
+<a name="L441"></a><tt class="py-lineno"> 441</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L442"></a><tt class="py-lineno"> 442</tt>  <tt class="py-line"><tt class="py-docstring">    The modified http.request method will add authentication headers to each</tt> </tt>
+<a name="L443"></a><tt class="py-lineno"> 443</tt>  <tt class="py-line"><tt class="py-docstring">    request and will refresh access_tokens when a 401 is received on a</tt> </tt>
+<a name="L444"></a><tt class="py-lineno"> 444</tt>  <tt class="py-line"><tt class="py-docstring">    request. In addition the http.request method has a credentials property,</tt> </tt>
+<a name="L445"></a><tt class="py-lineno"> 445</tt>  <tt class="py-line"><tt class="py-docstring">    http.request.credentials, which is the Credentials object that authorized</tt> </tt>
+<a name="L446"></a><tt class="py-lineno"> 446</tt>  <tt class="py-line"><tt class="py-docstring">    it.</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 class="py-docstring">    Args:</tt> </tt>
+<a name="L449"></a><tt class="py-lineno"> 449</tt>  <tt class="py-line"><tt class="py-docstring">       http: An instance of httplib2.Http</tt> </tt>
+<a name="L450"></a><tt class="py-lineno"> 450</tt>  <tt class="py-line"><tt class="py-docstring">         or something that acts like it.</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">    Returns:</tt> </tt>
+<a name="L453"></a><tt class="py-lineno"> 453</tt>  <tt class="py-line"><tt class="py-docstring">       A modified instance of http that was passed in.</tt> </tt>
+<a name="L454"></a><tt class="py-lineno"> 454</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L455"></a><tt class="py-lineno"> 455</tt>  <tt class="py-line"><tt class="py-docstring">    Example:</tt> </tt>
+<a name="L456"></a><tt class="py-lineno"> 456</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L457"></a><tt class="py-lineno"> 457</tt>  <tt class="py-line"><tt class="py-docstring">      h = httplib2.Http()</tt> </tt>
+<a name="L458"></a><tt class="py-lineno"> 458</tt>  <tt class="py-line"><tt class="py-docstring">      h = credentials.authorize(h)</tt> </tt>
+<a name="L459"></a><tt class="py-lineno"> 459</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L460"></a><tt class="py-lineno"> 460</tt>  <tt class="py-line"><tt class="py-docstring">    You can't create a new OAuth subclass of httplib2.Authenication</tt> </tt>
+<a name="L461"></a><tt class="py-lineno"> 461</tt>  <tt class="py-line"><tt class="py-docstring">    because it never gets passed the absolute URI, which is needed for</tt> </tt>
+<a name="L462"></a><tt class="py-lineno"> 462</tt>  <tt class="py-line"><tt class="py-docstring">    signing. So instead we have to overload 'request' with a closure</tt> </tt>
+<a name="L463"></a><tt class="py-lineno"> 463</tt>  <tt class="py-line"><tt class="py-docstring">    that adds in the Authorization header and then calls the original</tt> </tt>
+<a name="L464"></a><tt class="py-lineno"> 464</tt>  <tt class="py-line"><tt class="py-docstring">    version of 'request()'.</tt> </tt>
+<a name="L465"></a><tt class="py-lineno"> 465</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L466"></a><tt class="py-lineno"> 466</tt>  <tt class="py-line">    <tt class="py-name">request_orig</tt> <tt class="py-op">=</tt> <tt id="link-56" class="py-name" targets="Module apiclient.http=apiclient.http-module.html,Method oauth2client.appengine.OAuth2Decorator.http()=oauth2client.appengine.OAuth2Decorator-class.html#http"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-56', 'http', 'link-56');">http</a></tt><tt class="py-op">.</tt><tt id="link-57" class="py-name" targets="Method apiclient.http.HttpMock.request()=apiclient.http.HttpMock-class.html#request,Method apiclient.http.HttpMockSequence.request()=apiclient.http.HttpMockSequence-class.html#request,Method apiclient.model.BaseModel.request()=apiclient.model.BaseModel-class.html#request,Method apiclient.model.Model.request()=apiclient.model.Model-class.html#request"><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-57', 'request', 'link-57');">request</a></tt> </tt>
+<a name="L467"></a><tt class="py-lineno"> 467</tt>  <tt class="py-line"> </tt>
+<a name="L468"></a><tt class="py-lineno"> 468</tt>  <tt class="py-line">    <tt class="py-comment"># The closure that will replace 'httplib2.Http.request'.</tt> </tt>
+<a name="L469"></a><tt class="py-lineno"> 469</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-58" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-58', 'positional', 'link-55');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L470"></a><tt class="py-lineno"> 470</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">new_request</tt><tt class="py-op">(</tt><tt class="py-param">uri</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L471"></a><tt class="py-lineno"> 471</tt>  <tt class="py-line">                    <tt class="py-param">redirections</tt><tt class="py-op">=</tt><tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">DEFAULT_MAX_REDIRECTS</tt><tt class="py-op">,</tt> </tt>
+<a name="L472"></a><tt class="py-lineno"> 472</tt>  <tt class="py-line">                    <tt class="py-param">connection_type</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="L473"></a><tt class="py-lineno"> 473</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt><tt class="py-op">:</tt> </tt>
+<a name="L474"></a><tt class="py-lineno"> 474</tt>  <tt class="py-line">        <tt id="link-59" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-50', 'logger', 'link-9');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Refreshing due to a %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L452"></a><tt class="py-lineno"> 452</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-51" class="py-name"><a title="oauth2client.appengine.AppAssertionCredentials._refresh
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-59', 'logger', 'link-19');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Attempting refresh to obtain initial access_token'</tt><tt class="py-op">)</tt> </tt>
+<a name="L475"></a><tt class="py-lineno"> 475</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name" targets="Method oauth2client.appengine.AppAssertionCredentials._refresh()=oauth2client.appengine.AppAssertionCredentials-class.html#_refresh,Method oauth2client.client.AccessTokenCredentials._refresh()=oauth2client.client.AccessTokenCredentials-class.html#_refresh,Method oauth2client.client.OAuth2Credentials._refresh()=oauth2client.client.OAuth2Credentials-class.html#_refresh,Method oauth2client.gce.AppAssertionCredentials._refresh()=oauth2client.gce.AppAssertionCredentials-class.html#_refresh"><a title="oauth2client.appengine.AppAssertionCredentials._refresh
 oauth2client.client.AccessTokenCredentials._refresh
 oauth2client.client.OAuth2Credentials._refresh
-oauth2client.gce.AppAssertionCredentials._refresh" class="py-name" href="#" onclick="return doclink('link-51', '_refresh', 'link-46');">_refresh</a></tt><tt class="py-op">(</tt><tt class="py-name">request_orig</tt><tt class="py-op">)</tt> </tt>
-<a name="L453"></a><tt class="py-lineno"> 453</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name"><a title="oauth2client.client.Credentials.apply
-oauth2client.client.OAuth2Credentials.apply" class="py-name" href="#" onclick="return doclink('link-52', 'apply', 'link-47');">apply</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
-<a name="L454"></a><tt class="py-lineno"> 454</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">request_orig</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-name">body</tt><tt class="py-op">,</tt> <tt id="link-53" class="py-name"><a title="oauth2client.client.clean_headers" class="py-name" href="#" onclick="return doclink('link-53', 'clean_headers', 'link-48');">clean_headers</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L455"></a><tt class="py-lineno"> 455</tt>  <tt class="py-line">                            <tt class="py-name">redirections</tt><tt class="py-op">,</tt> <tt class="py-name">connection_type</tt><tt class="py-op">)</tt> </tt>
-<a name="L456"></a><tt class="py-lineno"> 456</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L457"></a><tt class="py-lineno"> 457</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L458"></a><tt class="py-lineno"> 458</tt>  <tt class="py-line"> </tt>
-<a name="L459"></a><tt class="py-lineno"> 459</tt>  <tt class="py-line">    <tt class="py-comment"># Replace the request method with our own closure.</tt> </tt>
-<a name="L460"></a><tt class="py-lineno"> 460</tt>  <tt class="py-line">    <tt id="link-54" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-54', 'http', 'link-42');">http</a></tt><tt class="py-op">.</tt><tt id="link-55" 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-55', 'request', 'link-43');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_request</tt> </tt>
-<a name="L461"></a><tt class="py-lineno"> 461</tt>  <tt class="py-line"> </tt>
-<a name="L462"></a><tt class="py-lineno"> 462</tt>  <tt class="py-line">    <tt class="py-comment"># Set credentials as a property of the request method.</tt> </tt>
-<a name="L463"></a><tt class="py-lineno"> 463</tt>  <tt class="py-line">    <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt id="link-56" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-56', 'http', 'link-42');">http</a></tt><tt class="py-op">.</tt><tt id="link-57" 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-57', 'request', 'link-43');">request</a></tt><tt class="py-op">,</tt> <tt class="py-string">'credentials'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
-<a name="L464"></a><tt class="py-lineno"> 464</tt>  <tt class="py-line"> </tt>
-<a name="L465"></a><tt class="py-lineno"> 465</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-58" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-58', 'http', 'link-42');">http</a></tt> </tt>
-</div><a name="L466"></a><tt class="py-lineno"> 466</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Credentials.refresh"></a><div id="OAuth2Credentials.refresh-def"><a name="L467"></a><tt class="py-lineno"> 467</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.refresh-toggle" onclick="return toggle('OAuth2Credentials.refresh');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#refresh">refresh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Credentials.refresh-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.refresh-expanded"><a name="L468"></a><tt class="py-lineno"> 468</tt>  <tt class="py-line">    <tt class="py-docstring">"""Forces a refresh of the access_token.</tt> </tt>
-<a name="L469"></a><tt class="py-lineno"> 469</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L470"></a><tt class="py-lineno"> 470</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L471"></a><tt class="py-lineno"> 471</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used to make the refresh</tt> </tt>
-<a name="L472"></a><tt class="py-lineno"> 472</tt>  <tt class="py-line"><tt class="py-docstring">        request.</tt> </tt>
-<a name="L473"></a><tt class="py-lineno"> 473</tt>  <tt class="py-line"><tt class="py-docstring">    """</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 id="link-59" class="py-name"><a title="oauth2client.appengine.AppAssertionCredentials._refresh
+oauth2client.gce.AppAssertionCredentials._refresh" class="py-name" href="#" onclick="return doclink('link-60', '_refresh', 'link-60');">_refresh</a></tt><tt class="py-op">(</tt><tt class="py-name">request_orig</tt><tt class="py-op">)</tt> </tt>
+<a name="L476"></a><tt class="py-lineno"> 476</tt>  <tt class="py-line"> </tt>
+<a name="L477"></a><tt class="py-lineno"> 477</tt>  <tt class="py-line">      <tt class="py-comment"># Modify the request headers to add the appropriate</tt> </tt>
+<a name="L478"></a><tt class="py-lineno"> 478</tt>  <tt class="py-line">      <tt class="py-comment"># Authorization header.</tt> </tt>
+<a name="L479"></a><tt class="py-lineno"> 479</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">headers</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</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">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L481"></a><tt class="py-lineno"> 481</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name" targets="Method oauth2client.client.Credentials.apply()=oauth2client.client.Credentials-class.html#apply,Method oauth2client.client.OAuth2Credentials.apply()=oauth2client.client.OAuth2Credentials-class.html#apply"><a title="oauth2client.client.Credentials.apply
+oauth2client.client.OAuth2Credentials.apply" class="py-name" href="#" onclick="return doclink('link-61', 'apply', 'link-61');">apply</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
+<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>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</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="L484"></a><tt class="py-lineno"> 484</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'user-agent'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">headers</tt><tt class="py-op">:</tt> </tt>
+<a name="L485"></a><tt class="py-lineno"> 485</tt>  <tt class="py-line">          <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt> <tt class="py-op">+</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> </tt>
+<a name="L486"></a><tt class="py-lineno"> 486</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L487"></a><tt class="py-lineno"> 487</tt>  <tt class="py-line">          <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt> </tt>
+<a name="L488"></a><tt class="py-lineno"> 488</tt>  <tt class="py-line"> </tt>
+<a name="L489"></a><tt class="py-lineno"> 489</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">request_orig</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-name">body</tt><tt class="py-op">,</tt> <tt id="link-62" class="py-name" targets="Function oauth2client.client.clean_headers()=oauth2client.client-module.html#clean_headers"><a title="oauth2client.client.clean_headers" class="py-name" href="#" onclick="return doclink('link-62', 'clean_headers', 'link-62');">clean_headers</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L490"></a><tt class="py-lineno"> 490</tt>  <tt class="py-line">                                   <tt class="py-name">redirections</tt><tt class="py-op">,</tt> <tt class="py-name">connection_type</tt><tt class="py-op">)</tt> </tt>
+<a name="L491"></a><tt class="py-lineno"> 491</tt>  <tt class="py-line"> </tt>
+<a name="L492"></a><tt class="py-lineno"> 492</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-keyword">in</tt> <tt id="link-63" class="py-name"><a title="oauth2client.client.REFRESH_STATUS_CODES" class="py-name" href="#" onclick="return doclink('link-63', 'REFRESH_STATUS_CODES', 'link-23');">REFRESH_STATUS_CODES</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L493"></a><tt class="py-lineno"> 493</tt>  <tt class="py-line">        <tt id="link-64" class="py-name"><a title="apiclient.discovery.logger
+oauth2client.appengine.logger
+oauth2client.client.logger
+oauth2client.crypt.logger
+oauth2client.gce.logger
+oauth2client.locked_file.logger
+oauth2client.multistore_file.logger
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-64', 'logger', 'link-19');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Refreshing due to a %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L494"></a><tt class="py-lineno"> 494</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="oauth2client.appengine.AppAssertionCredentials._refresh
 oauth2client.client.AccessTokenCredentials._refresh
 oauth2client.client.OAuth2Credentials._refresh
-oauth2client.gce.AppAssertionCredentials._refresh" class="py-name" href="#" onclick="return doclink('link-59', '_refresh', 'link-46');">_refresh</a></tt><tt class="py-op">(</tt><tt id="link-60" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-60', 'http', 'link-42');">http</a></tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="apiclient.http.HttpMock.request
+oauth2client.gce.AppAssertionCredentials._refresh" class="py-name" href="#" onclick="return doclink('link-65', '_refresh', 'link-60');">_refresh</a></tt><tt class="py-op">(</tt><tt class="py-name">request_orig</tt><tt class="py-op">)</tt> </tt>
+<a name="L495"></a><tt class="py-lineno"> 495</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name"><a title="oauth2client.client.Credentials.apply
+oauth2client.client.OAuth2Credentials.apply" class="py-name" href="#" onclick="return doclink('link-66', 'apply', 'link-61');">apply</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
+<a name="L496"></a><tt class="py-lineno"> 496</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">request_orig</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-name">body</tt><tt class="py-op">,</tt> <tt id="link-67" class="py-name"><a title="oauth2client.client.clean_headers" class="py-name" href="#" onclick="return doclink('link-67', 'clean_headers', 'link-62');">clean_headers</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L497"></a><tt class="py-lineno"> 497</tt>  <tt class="py-line">                            <tt class="py-name">redirections</tt><tt class="py-op">,</tt> <tt class="py-name">connection_type</tt><tt class="py-op">)</tt> </tt>
+<a name="L498"></a><tt class="py-lineno"> 498</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L499"></a><tt class="py-lineno"> 499</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L500"></a><tt class="py-lineno"> 500</tt>  <tt class="py-line"> </tt>
+<a name="L501"></a><tt class="py-lineno"> 501</tt>  <tt class="py-line">    <tt class="py-comment"># Replace the request method with our own closure.</tt> </tt>
+<a name="L502"></a><tt class="py-lineno"> 502</tt>  <tt class="py-line">    <tt id="link-68" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-68', 'http', 'link-56');">http</a></tt><tt class="py-op">.</tt><tt id="link-69" 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-61', 'request', 'link-43');">request</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L475"></a><tt class="py-lineno"> 475</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Credentials.apply"></a><div id="OAuth2Credentials.apply-def"><a name="L476"></a><tt class="py-lineno"> 476</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.apply-toggle" onclick="return toggle('OAuth2Credentials.apply');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#apply">apply</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Credentials.apply-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.apply-expanded"><a name="L477"></a><tt class="py-lineno"> 477</tt>  <tt class="py-line">    <tt class="py-docstring">"""Add the authorization to the headers.</tt> </tt>
-<a name="L478"></a><tt class="py-lineno"> 478</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L479"></a><tt class="py-lineno"> 479</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L480"></a><tt class="py-lineno"> 480</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, the headers to add the Authorization header to.</tt> </tt>
-<a name="L481"></a><tt class="py-lineno"> 481</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L482"></a><tt class="py-lineno"> 482</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'Authorization'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'Bearer '</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> </tt>
-</div><a name="L483"></a><tt class="py-lineno"> 483</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Credentials.to_json"></a><div id="OAuth2Credentials.to_json-def"><a name="L484"></a><tt class="py-lineno"> 484</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.to_json-toggle" onclick="return toggle('OAuth2Credentials.to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#to_json">to_json</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="OAuth2Credentials.to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.to_json-expanded"><a name="L485"></a><tt class="py-lineno"> 485</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="apiclient.http.MediaUpload._to_json
-oauth2client.client.Credentials._to_json" class="py-name" href="#" onclick="return doclink('link-62', '_to_json', 'link-20');">_to_json</a></tt><tt class="py-op">(</tt><tt id="link-63" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-63', 'Credentials', 'link-21');">Credentials</a></tt><tt class="py-op">.</tt><tt id="link-64" class="py-name"><a title="oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS" class="py-name" href="#" onclick="return doclink('link-64', 'NON_SERIALIZED_MEMBERS', 'link-15');">NON_SERIALIZED_MEMBERS</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L486"></a><tt class="py-lineno"> 486</tt>  <tt class="py-line"> </tt>
-<a name="L487"></a><tt class="py-lineno"> 487</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
-<a name="OAuth2Credentials.from_json"></a><div id="OAuth2Credentials.from_json-def"><a name="L488"></a><tt class="py-lineno"> 488</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.from_json-toggle" onclick="return toggle('OAuth2Credentials.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Credentials.from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.from_json-expanded"><a name="L489"></a><tt class="py-lineno"> 489</tt>  <tt class="py-line">    <tt class="py-docstring">"""Instantiate a Credentials object from a JSON description of it. The JSON</tt> </tt>
-<a name="L490"></a><tt class="py-lineno"> 490</tt>  <tt class="py-line"><tt class="py-docstring">    should have been produced by calling .to_json() on the object.</tt> </tt>
-<a name="L491"></a><tt class="py-lineno"> 491</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L492"></a><tt class="py-lineno"> 492</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L493"></a><tt class="py-lineno"> 493</tt>  <tt class="py-line"><tt class="py-docstring">      data: dict, A deserialized JSON object.</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">    Returns:</tt> </tt>
-<a name="L496"></a><tt class="py-lineno"> 496</tt>  <tt class="py-line"><tt class="py-docstring">      An instance of a Credentials subclass.</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-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-65', 'loads', 'link-23');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
-<a name="L499"></a><tt class="py-lineno"> 499</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'token_expiry'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">data</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L500"></a><tt class="py-lineno"> 500</tt>  <tt class="py-line">        <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L501"></a><tt class="py-lineno"> 501</tt>  <tt class="py-line">      <tt class="py-keyword">try</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">data</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">strptime</tt><tt class="py-op">(</tt> </tt>
-<a name="L503"></a><tt class="py-lineno"> 503</tt>  <tt class="py-line">            <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt id="link-66" class="py-name"><a title="oauth2client.client.EXPIRY_FORMAT" class="py-name" href="#" onclick="return doclink('link-66', 'EXPIRY_FORMAT', 'link-10');">EXPIRY_FORMAT</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L504"></a><tt class="py-lineno"> 504</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
-<a name="L505"></a><tt class="py-lineno"> 505</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L506"></a><tt class="py-lineno"> 506</tt>  <tt class="py-line">    <tt class="py-name">retval</tt> <tt class="py-op">=</tt> <tt id="link-67" class="py-name" targets="Class oauth2client.client.OAuth2Credentials=oauth2client.client.OAuth2Credentials-class.html"><a title="oauth2client.client.OAuth2Credentials" class="py-name" href="#" onclick="return doclink('link-67', 'OAuth2Credentials', 'link-67');">OAuth2Credentials</a></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">data</tt><tt class="py-op">[</tt><tt class="py-string">'access_token'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L508"></a><tt class="py-lineno"> 508</tt>  <tt class="py-line">        <tt class="py-name">data</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="L509"></a><tt class="py-lineno"> 509</tt>  <tt class="py-line">        <tt class="py-name">data</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="L510"></a><tt class="py-lineno"> 510</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'refresh_token'</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">data</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</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">data</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="L513"></a><tt class="py-lineno"> 513</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'user_agent'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L514"></a><tt class="py-lineno"> 514</tt>  <tt class="py-line">        <tt class="py-name">id_token</tt><tt class="py-op">=</tt><tt class="py-name">data</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-68', 'get', 'link-14');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'id_token'</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="L515"></a><tt class="py-lineno"> 515</tt>  <tt class="py-line">    <tt class="py-name">retval</tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'invalid'</tt><tt class="py-op">]</tt> </tt>
-<a name="L516"></a><tt class="py-lineno"> 516</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">retval</tt> </tt>
+apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-69', 'request', 'link-57');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_request</tt> </tt>
+<a name="L503"></a><tt class="py-lineno"> 503</tt>  <tt class="py-line"> </tt>
+<a name="L504"></a><tt class="py-lineno"> 504</tt>  <tt class="py-line">    <tt class="py-comment"># Set credentials as a property of the request method.</tt> </tt>
+<a name="L505"></a><tt class="py-lineno"> 505</tt>  <tt class="py-line">    <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt id="link-70" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-70', 'http', 'link-56');">http</a></tt><tt class="py-op">.</tt><tt id="link-71" 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-71', 'request', 'link-57');">request</a></tt><tt class="py-op">,</tt> <tt class="py-string">'credentials'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L506"></a><tt class="py-lineno"> 506</tt>  <tt class="py-line"> </tt>
+<a name="L507"></a><tt class="py-lineno"> 507</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-72" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-72', 'http', 'link-56');">http</a></tt> </tt>
+</div><a name="L508"></a><tt class="py-lineno"> 508</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials.refresh"></a><div id="OAuth2Credentials.refresh-def"><a name="L509"></a><tt class="py-lineno"> 509</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.refresh-toggle" onclick="return toggle('OAuth2Credentials.refresh');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#refresh">refresh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Credentials.refresh-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.refresh-expanded"><a name="L510"></a><tt class="py-lineno"> 510</tt>  <tt class="py-line">    <tt class="py-docstring">"""Forces a refresh of the access_token.</tt> </tt>
+<a name="L511"></a><tt class="py-lineno"> 511</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L512"></a><tt class="py-lineno"> 512</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L513"></a><tt class="py-lineno"> 513</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used to make the refresh</tt> </tt>
+<a name="L514"></a><tt class="py-lineno"> 514</tt>  <tt class="py-line"><tt class="py-docstring">        request.</tt> </tt>
+<a name="L515"></a><tt class="py-lineno"> 515</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L516"></a><tt class="py-lineno"> 516</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="oauth2client.appengine.AppAssertionCredentials._refresh
+oauth2client.client.AccessTokenCredentials._refresh
+oauth2client.client.OAuth2Credentials._refresh
+oauth2client.gce.AppAssertionCredentials._refresh" class="py-name" href="#" onclick="return doclink('link-73', '_refresh', 'link-60');">_refresh</a></tt><tt class="py-op">(</tt><tt id="link-74" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-74', 'http', 'link-56');">http</a></tt><tt class="py-op">.</tt><tt id="link-75" 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-75', 'request', 'link-57');">request</a></tt><tt class="py-op">)</tt> </tt>
 </div><a name="L517"></a><tt class="py-lineno"> 517</tt>  <tt class="py-line"> </tt>
-<a name="L518"></a><tt class="py-lineno"> 518</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt>
-<a name="OAuth2Credentials.access_token_expired"></a><div id="OAuth2Credentials.access_token_expired-def"><a name="L519"></a><tt class="py-lineno"> 519</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.access_token_expired-toggle" onclick="return toggle('OAuth2Credentials.access_token_expired');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#access_token_expired">access_token_expired</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="OAuth2Credentials.access_token_expired-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.access_token_expired-expanded"><a name="L520"></a><tt class="py-lineno"> 520</tt>  <tt class="py-line">    <tt class="py-docstring">"""True if the credential is expired or invalid.</tt> </tt>
-<a name="L521"></a><tt class="py-lineno"> 521</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L522"></a><tt class="py-lineno"> 522</tt>  <tt class="py-line"><tt class="py-docstring">    If the token_expiry isn't set, we assume the token doesn't expire.</tt> </tt>
-<a name="L523"></a><tt class="py-lineno"> 523</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L524"></a><tt class="py-lineno"> 524</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt><tt class="py-op">:</tt> </tt>
-<a name="L525"></a><tt class="py-lineno"> 525</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </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 class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_expiry</tt><tt class="py-op">:</tt> </tt>
-<a name="L528"></a><tt class="py-lineno"> 528</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </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>  <tt class="py-line">    <tt class="py-name">now</tt> <tt class="py-op">=</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">utcnow</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L531"></a><tt class="py-lineno"> 531</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">now</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_expiry</tt><tt class="py-op">:</tt> </tt>
-<a name="L532"></a><tt class="py-lineno"> 532</tt>  <tt class="py-line">      <tt id="link-69" class="py-name"><a title="apiclient.discovery.logger
+<a name="OAuth2Credentials.revoke"></a><div id="OAuth2Credentials.revoke-def"><a name="L518"></a><tt class="py-lineno"> 518</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.revoke-toggle" onclick="return toggle('OAuth2Credentials.revoke');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#revoke">revoke</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Credentials.revoke-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.revoke-expanded"><a name="L519"></a><tt class="py-lineno"> 519</tt>  <tt class="py-line">    <tt class="py-docstring">"""Revokes a refresh_token and makes the credentials void.</tt> </tt>
+<a name="L520"></a><tt class="py-lineno"> 520</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L521"></a><tt class="py-lineno"> 521</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L522"></a><tt class="py-lineno"> 522</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used to make the revoke</tt> </tt>
+<a name="L523"></a><tt class="py-lineno"> 523</tt>  <tt class="py-line"><tt class="py-docstring">        request.</tt> </tt>
+<a name="L524"></a><tt class="py-lineno"> 524</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L525"></a><tt class="py-lineno"> 525</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name" targets="Method oauth2client.client.AccessTokenCredentials._revoke()=oauth2client.client.AccessTokenCredentials-class.html#_revoke,Method oauth2client.client.AssertionCredentials._revoke()=oauth2client.client.AssertionCredentials-class.html#_revoke,Method oauth2client.client.OAuth2Credentials._revoke()=oauth2client.client.OAuth2Credentials-class.html#_revoke"><a title="oauth2client.client.AccessTokenCredentials._revoke
+oauth2client.client.AssertionCredentials._revoke
+oauth2client.client.OAuth2Credentials._revoke" class="py-name" href="#" onclick="return doclink('link-76', '_revoke', 'link-76');">_revoke</a></tt><tt class="py-op">(</tt><tt id="link-77" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-77', 'http', 'link-56');">http</a></tt><tt class="py-op">.</tt><tt id="link-78" 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-78', 'request', 'link-57');">request</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L526"></a><tt class="py-lineno"> 526</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials.apply"></a><div id="OAuth2Credentials.apply-def"><a name="L527"></a><tt class="py-lineno"> 527</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.apply-toggle" onclick="return toggle('OAuth2Credentials.apply');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#apply">apply</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Credentials.apply-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.apply-expanded"><a name="L528"></a><tt class="py-lineno"> 528</tt>  <tt class="py-line">    <tt class="py-docstring">"""Add the authorization to the headers.</tt> </tt>
+<a name="L529"></a><tt class="py-lineno"> 529</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L530"></a><tt class="py-lineno"> 530</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L531"></a><tt class="py-lineno"> 531</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, the headers to add the Authorization header to.</tt> </tt>
+<a name="L532"></a><tt class="py-lineno"> 532</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L533"></a><tt class="py-lineno"> 533</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'Authorization'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'Bearer '</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> </tt>
+</div><a name="L534"></a><tt class="py-lineno"> 534</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials.to_json"></a><div id="OAuth2Credentials.to_json-def"><a name="L535"></a><tt class="py-lineno"> 535</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.to_json-toggle" onclick="return toggle('OAuth2Credentials.to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#to_json">to_json</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="OAuth2Credentials.to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.to_json-expanded"><a name="L536"></a><tt class="py-lineno"> 536</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="apiclient.http.MediaUpload._to_json
+oauth2client.client.Credentials._to_json" class="py-name" href="#" onclick="return doclink('link-79', '_to_json', 'link-31');">_to_json</a></tt><tt class="py-op">(</tt><tt id="link-80" class="py-name"><a title="oauth2client.client.Credentials" class="py-name" href="#" onclick="return doclink('link-80', 'Credentials', 'link-32');">Credentials</a></tt><tt class="py-op">.</tt><tt id="link-81" class="py-name"><a title="oauth2client.client.Credentials.NON_SERIALIZED_MEMBERS" class="py-name" href="#" onclick="return doclink('link-81', 'NON_SERIALIZED_MEMBERS', 'link-25');">NON_SERIALIZED_MEMBERS</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L537"></a><tt class="py-lineno"> 537</tt>  <tt class="py-line"> </tt>
+<a name="L538"></a><tt class="py-lineno"> 538</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="OAuth2Credentials.from_json"></a><div id="OAuth2Credentials.from_json-def"><a name="L539"></a><tt class="py-lineno"> 539</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.from_json-toggle" onclick="return toggle('OAuth2Credentials.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Credentials.from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.from_json-expanded"><a name="L540"></a><tt class="py-lineno"> 540</tt>  <tt class="py-line">    <tt class="py-docstring">"""Instantiate a Credentials object from a JSON description of it. The JSON</tt> </tt>
+<a name="L541"></a><tt class="py-lineno"> 541</tt>  <tt class="py-line"><tt class="py-docstring">    should have been produced by calling .to_json() on the object.</tt> </tt>
+<a name="L542"></a><tt class="py-lineno"> 542</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L543"></a><tt class="py-lineno"> 543</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L544"></a><tt class="py-lineno"> 544</tt>  <tt class="py-line"><tt class="py-docstring">      data: dict, A deserialized JSON object.</tt> </tt>
+<a name="L545"></a><tt class="py-lineno"> 545</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L546"></a><tt class="py-lineno"> 546</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L547"></a><tt class="py-lineno"> 547</tt>  <tt class="py-line"><tt class="py-docstring">      An instance of a Credentials subclass.</tt> </tt>
+<a name="L548"></a><tt class="py-lineno"> 548</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L549"></a><tt class="py-lineno"> 549</tt>  <tt class="py-line">    <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-82', 'loads', 'link-34');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
+<a name="L550"></a><tt class="py-lineno"> 550</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'token_expiry'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">data</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L551"></a><tt class="py-lineno"> 551</tt>  <tt class="py-line">        <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L552"></a><tt class="py-lineno"> 552</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L553"></a><tt class="py-lineno"> 553</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">strptime</tt><tt class="py-op">(</tt> </tt>
+<a name="L554"></a><tt class="py-lineno"> 554</tt>  <tt class="py-line">            <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt id="link-83" class="py-name"><a title="oauth2client.client.EXPIRY_FORMAT" class="py-name" href="#" onclick="return doclink('link-83', 'EXPIRY_FORMAT', 'link-20');">EXPIRY_FORMAT</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L555"></a><tt class="py-lineno"> 555</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L556"></a><tt class="py-lineno"> 556</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L557"></a><tt class="py-lineno"> 557</tt>  <tt class="py-line">    <tt class="py-name">retval</tt> <tt class="py-op">=</tt> <tt class="py-name">cls</tt><tt class="py-op">(</tt> </tt>
+<a name="L558"></a><tt class="py-lineno"> 558</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'access_token'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L559"></a><tt class="py-lineno"> 559</tt>  <tt class="py-line">        <tt class="py-name">data</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="L560"></a><tt class="py-lineno"> 560</tt>  <tt class="py-line">        <tt class="py-name">data</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="L561"></a><tt class="py-lineno"> 561</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'refresh_token'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L562"></a><tt class="py-lineno"> 562</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'token_expiry'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L563"></a><tt class="py-lineno"> 563</tt>  <tt class="py-line">        <tt class="py-name">data</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="L564"></a><tt class="py-lineno"> 564</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'user_agent'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L565"></a><tt class="py-lineno"> 565</tt>  <tt class="py-line">        <tt class="py-name">revoke_uri</tt><tt class="py-op">=</tt><tt class="py-name">data</tt><tt class="py-op">.</tt><tt id="link-84" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-84', 'get', 'link-24');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'revoke_uri'</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="L566"></a><tt class="py-lineno"> 566</tt>  <tt class="py-line">        <tt class="py-name">id_token</tt><tt class="py-op">=</tt><tt class="py-name">data</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-85', 'get', 'link-24');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'id_token'</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="L567"></a><tt class="py-lineno"> 567</tt>  <tt class="py-line">        <tt class="py-name">token_response</tt><tt class="py-op">=</tt><tt class="py-name">data</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-86', 'get', 'link-24');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'token_response'</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="L568"></a><tt class="py-lineno"> 568</tt>  <tt class="py-line">    <tt class="py-name">retval</tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'invalid'</tt><tt class="py-op">]</tt> </tt>
+<a name="L569"></a><tt class="py-lineno"> 569</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">retval</tt> </tt>
+</div><a name="L570"></a><tt class="py-lineno"> 570</tt>  <tt class="py-line"> </tt>
+<a name="L571"></a><tt class="py-lineno"> 571</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt>
+<a name="OAuth2Credentials.access_token_expired"></a><div id="OAuth2Credentials.access_token_expired-def"><a name="L572"></a><tt class="py-lineno"> 572</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.access_token_expired-toggle" onclick="return toggle('OAuth2Credentials.access_token_expired');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#access_token_expired">access_token_expired</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="OAuth2Credentials.access_token_expired-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.access_token_expired-expanded"><a name="L573"></a><tt class="py-lineno"> 573</tt>  <tt class="py-line">    <tt class="py-docstring">"""True if the credential is expired or invalid.</tt> </tt>
+<a name="L574"></a><tt class="py-lineno"> 574</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L575"></a><tt class="py-lineno"> 575</tt>  <tt class="py-line"><tt class="py-docstring">    If the token_expiry isn't set, we assume the token doesn't expire.</tt> </tt>
+<a name="L576"></a><tt class="py-lineno"> 576</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L577"></a><tt class="py-lineno"> 577</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt><tt class="py-op">:</tt> </tt>
+<a name="L578"></a><tt class="py-lineno"> 578</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+<a name="L579"></a><tt class="py-lineno"> 579</tt>  <tt class="py-line"> </tt>
+<a name="L580"></a><tt class="py-lineno"> 580</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_expiry</tt><tt class="py-op">:</tt> </tt>
+<a name="L581"></a><tt class="py-lineno"> 581</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+<a name="L582"></a><tt class="py-lineno"> 582</tt>  <tt class="py-line"> </tt>
+<a name="L583"></a><tt class="py-lineno"> 583</tt>  <tt class="py-line">    <tt class="py-name">now</tt> <tt class="py-op">=</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">utcnow</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L584"></a><tt class="py-lineno"> 584</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">now</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_expiry</tt><tt class="py-op">:</tt> </tt>
+<a name="L585"></a><tt class="py-lineno"> 585</tt>  <tt class="py-line">      <tt id="link-87" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-69', 'logger', 'link-9');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'access_token is expired. Now: %s, token_expiry: %s'</tt><tt class="py-op">,</tt> </tt>
-<a name="L533"></a><tt class="py-lineno"> 533</tt>  <tt class="py-line">                  <tt class="py-name">now</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_expiry</tt><tt class="py-op">)</tt> </tt>
-<a name="L534"></a><tt class="py-lineno"> 534</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L535"></a><tt class="py-lineno"> 535</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L536"></a><tt class="py-lineno"> 536</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Credentials.set_store"></a><div id="OAuth2Credentials.set_store-def"><a name="L537"></a><tt class="py-lineno"> 537</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.set_store-toggle" onclick="return toggle('OAuth2Credentials.set_store');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#set_store">set_store</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">store</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Credentials.set_store-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.set_store-expanded"><a name="L538"></a><tt class="py-lineno"> 538</tt>  <tt class="py-line">    <tt class="py-docstring">"""Set the Storage for the credential.</tt> </tt>
-<a name="L539"></a><tt class="py-lineno"> 539</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L540"></a><tt class="py-lineno"> 540</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L541"></a><tt class="py-lineno"> 541</tt>  <tt class="py-line"><tt class="py-docstring">      store: Storage, an implementation of Stroage object.</tt> </tt>
-<a name="L542"></a><tt class="py-lineno"> 542</tt>  <tt class="py-line"><tt class="py-docstring">        This is needed to store the latest access_token if it</tt> </tt>
-<a name="L543"></a><tt class="py-lineno"> 543</tt>  <tt class="py-line"><tt class="py-docstring">        has expired and been refreshed. This implementation uses</tt> </tt>
-<a name="L544"></a><tt class="py-lineno"> 544</tt>  <tt class="py-line"><tt class="py-docstring">        locking to check for updates before updating the</tt> </tt>
-<a name="L545"></a><tt class="py-lineno"> 545</tt>  <tt class="py-line"><tt class="py-docstring">        access_token.</tt> </tt>
-<a name="L546"></a><tt class="py-lineno"> 546</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L547"></a><tt class="py-lineno"> 547</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt> <tt class="py-op">=</tt> <tt class="py-name">store</tt> </tt>
-</div><a name="L548"></a><tt class="py-lineno"> 548</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Credentials._updateFromCredential"></a><div id="OAuth2Credentials._updateFromCredential-def"><a name="L549"></a><tt class="py-lineno"> 549</tt> <a class="py-toggle" href="#" id="OAuth2Credentials._updateFromCredential-toggle" onclick="return toggle('OAuth2Credentials._updateFromCredential');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential">_updateFromCredential</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Credentials._updateFromCredential-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials._updateFromCredential-expanded"><a name="L550"></a><tt class="py-lineno"> 550</tt>  <tt class="py-line">    <tt class="py-docstring">"""Update this Credential from another instance."""</tt> </tt>
-<a name="L551"></a><tt class="py-lineno"> 551</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name" targets="Method apiclient.discovery.Resource.__getstate__()=apiclient.discovery.Resource-class.html#__getstate__,Method oauth2client.client.OAuth2Credentials.__getstate__()=oauth2client.client.OAuth2Credentials-class.html#__getstate__"><a title="apiclient.discovery.Resource.__getstate__
-oauth2client.client.OAuth2Credentials.__getstate__" class="py-name" href="#" onclick="return doclink('link-70', '__getstate__', 'link-70');">__getstate__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L552"></a><tt class="py-lineno"> 552</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Credentials.__getstate__"></a><div id="OAuth2Credentials.__getstate__-def"><a name="L553"></a><tt class="py-lineno"> 553</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.__getstate__-toggle" onclick="return toggle('OAuth2Credentials.__getstate__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#__getstate__">__getstate__</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="OAuth2Credentials.__getstate__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.__getstate__-expanded"><a name="L554"></a><tt class="py-lineno"> 554</tt>  <tt class="py-line">    <tt class="py-docstring">"""Trim the state down to something that can be pickled."""</tt> </tt>
-<a name="L555"></a><tt class="py-lineno"> 555</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">)</tt> </tt>
-<a name="L556"></a><tt class="py-lineno"> 556</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'store'</tt><tt class="py-op">]</tt> </tt>
-<a name="L557"></a><tt class="py-lineno"> 557</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">d</tt> </tt>
-</div><a name="L558"></a><tt class="py-lineno"> 558</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Credentials.__setstate__"></a><div id="OAuth2Credentials.__setstate__-def"><a name="L559"></a><tt class="py-lineno"> 559</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.__setstate__-toggle" onclick="return toggle('OAuth2Credentials.__setstate__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#__setstate__">__setstate__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">state</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Credentials.__setstate__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.__setstate__-expanded"><a name="L560"></a><tt class="py-lineno"> 560</tt>  <tt class="py-line">    <tt class="py-docstring">"""Reconstitute the state of the object from being pickled."""</tt> </tt>
-<a name="L561"></a><tt class="py-lineno"> 561</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">state</tt><tt class="py-op">)</tt> </tt>
-<a name="L562"></a><tt class="py-lineno"> 562</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-</div><a name="L563"></a><tt class="py-lineno"> 563</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Credentials._generate_refresh_request_body"></a><div id="OAuth2Credentials._generate_refresh_request_body-def"><a name="L564"></a><tt class="py-lineno"> 564</tt> <a class="py-toggle" href="#" id="OAuth2Credentials._generate_refresh_request_body-toggle" onclick="return toggle('OAuth2Credentials._generate_refresh_request_body');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_body">_generate_refresh_request_body</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="OAuth2Credentials._generate_refresh_request_body-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials._generate_refresh_request_body-expanded"><a name="L565"></a><tt class="py-lineno"> 565</tt>  <tt class="py-line">    <tt class="py-docstring">"""Generate the body that will be used in the refresh request."""</tt> </tt>
-<a name="L566"></a><tt class="py-lineno"> 566</tt>  <tt class="py-line">    <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-op">{</tt> </tt>
-<a name="L567"></a><tt class="py-lineno"> 567</tt>  <tt class="py-line">        <tt class="py-string">'grant_type'</tt><tt class="py-op">:</tt> <tt class="py-string">'refresh_token'</tt><tt class="py-op">,</tt> </tt>
-<a name="L568"></a><tt class="py-lineno"> 568</tt>  <tt class="py-line">        <tt class="py-string">'client_id'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_id</tt><tt class="py-op">,</tt> </tt>
-<a name="L569"></a><tt class="py-lineno"> 569</tt>  <tt class="py-line">        <tt class="py-string">'client_secret'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_secret</tt><tt class="py-op">,</tt> </tt>
-<a name="L570"></a><tt class="py-lineno"> 570</tt>  <tt class="py-line">        <tt class="py-string">'refresh_token'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">refresh_token</tt><tt class="py-op">,</tt> </tt>
-<a name="L571"></a><tt class="py-lineno"> 571</tt>  <tt class="py-line">        <tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
-<a name="L572"></a><tt class="py-lineno"> 572</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">body</tt> </tt>
-</div><a name="L573"></a><tt class="py-lineno"> 573</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Credentials._generate_refresh_request_headers"></a><div id="OAuth2Credentials._generate_refresh_request_headers-def"><a name="L574"></a><tt class="py-lineno"> 574</tt> <a class="py-toggle" href="#" id="OAuth2Credentials._generate_refresh_request_headers-toggle" onclick="return toggle('OAuth2Credentials._generate_refresh_request_headers');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers">_generate_refresh_request_headers</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="OAuth2Credentials._generate_refresh_request_headers-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials._generate_refresh_request_headers-expanded"><a name="L575"></a><tt class="py-lineno"> 575</tt>  <tt class="py-line">    <tt class="py-docstring">"""Generate the headers that will be used in the refresh request."""</tt> </tt>
-<a name="L576"></a><tt class="py-lineno"> 576</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L577"></a><tt class="py-lineno"> 577</tt>  <tt class="py-line">        <tt class="py-string">'content-type'</tt><tt class="py-op">:</tt> <tt class="py-string">'application/x-www-form-urlencoded'</tt><tt class="py-op">,</tt> </tt>
-<a name="L578"></a><tt class="py-lineno"> 578</tt>  <tt class="py-line">    <tt class="py-op">}</tt> </tt>
-<a name="L579"></a><tt class="py-lineno"> 579</tt>  <tt class="py-line"> </tt>
-<a name="L580"></a><tt class="py-lineno"> 580</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</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="L581"></a><tt class="py-lineno"> 581</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt> </tt>
-<a name="L582"></a><tt class="py-lineno"> 582</tt>  <tt class="py-line"> </tt>
-<a name="L583"></a><tt class="py-lineno"> 583</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">headers</tt> </tt>
-</div><a name="L584"></a><tt class="py-lineno"> 584</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Credentials._refresh"></a><div id="OAuth2Credentials._refresh-def"><a name="L585"></a><tt class="py-lineno"> 585</tt> <a class="py-toggle" href="#" id="OAuth2Credentials._refresh-toggle" onclick="return toggle('OAuth2Credentials._refresh');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#_refresh">_refresh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Credentials._refresh-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials._refresh-expanded"><a name="L586"></a><tt class="py-lineno"> 586</tt>  <tt class="py-line">    <tt class="py-docstring">"""Refreshes the access_token.</tt> </tt>
-<a name="L587"></a><tt class="py-lineno"> 587</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L588"></a><tt class="py-lineno"> 588</tt>  <tt class="py-line"><tt class="py-docstring">    This method first checks by reading the Storage object if available.</tt> </tt>
-<a name="L589"></a><tt class="py-lineno"> 589</tt>  <tt class="py-line"><tt class="py-docstring">    If a refresh is still needed, it holds the Storage lock until the</tt> </tt>
-<a name="L590"></a><tt class="py-lineno"> 590</tt>  <tt class="py-line"><tt class="py-docstring">    refresh is completed.</tt> </tt>
-<a name="L591"></a><tt class="py-lineno"> 591</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L592"></a><tt class="py-lineno"> 592</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L593"></a><tt class="py-lineno"> 593</tt>  <tt class="py-line"><tt class="py-docstring">      http_request: callable, a callable that matches the method signature of</tt> </tt>
-<a name="L594"></a><tt class="py-lineno"> 594</tt>  <tt class="py-line"><tt class="py-docstring">        httplib2.Http.request, used to make the refresh request.</tt> </tt>
-<a name="L595"></a><tt class="py-lineno"> 595</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L596"></a><tt class="py-lineno"> 596</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L597"></a><tt class="py-lineno"> 597</tt>  <tt class="py-line"><tt class="py-docstring">      AccessTokenRefreshError: When the refresh fails.</tt> </tt>
-<a name="L598"></a><tt class="py-lineno"> 598</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L599"></a><tt class="py-lineno"> 599</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">:</tt> </tt>
-<a name="L600"></a><tt class="py-lineno"> 600</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name" targets="Method oauth2client.client.OAuth2Credentials._do_refresh_request()=oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request"><a title="oauth2client.client.OAuth2Credentials._do_refresh_request" class="py-name" href="#" onclick="return doclink('link-71', '_do_refresh_request', 'link-71');">_do_refresh_request</a></tt><tt class="py-op">(</tt><tt class="py-name">http_request</tt><tt class="py-op">)</tt> </tt>
-<a name="L601"></a><tt class="py-lineno"> 601</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L602"></a><tt class="py-lineno"> 602</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="oauth2client.client.Storage.acquire_lock
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-87', 'logger', 'link-19');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'access_token is expired. Now: %s, token_expiry: %s'</tt><tt class="py-op">,</tt> </tt>
+<a name="L586"></a><tt class="py-lineno"> 586</tt>  <tt class="py-line">                  <tt class="py-name">now</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_expiry</tt><tt class="py-op">)</tt> </tt>
+<a name="L587"></a><tt class="py-lineno"> 587</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+<a name="L588"></a><tt class="py-lineno"> 588</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+</div><a name="L589"></a><tt class="py-lineno"> 589</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials.set_store"></a><div id="OAuth2Credentials.set_store-def"><a name="L590"></a><tt class="py-lineno"> 590</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.set_store-toggle" onclick="return toggle('OAuth2Credentials.set_store');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#set_store">set_store</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">store</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Credentials.set_store-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.set_store-expanded"><a name="L591"></a><tt class="py-lineno"> 591</tt>  <tt class="py-line">    <tt class="py-docstring">"""Set the Storage for the credential.</tt> </tt>
+<a name="L592"></a><tt class="py-lineno"> 592</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L593"></a><tt class="py-lineno"> 593</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L594"></a><tt class="py-lineno"> 594</tt>  <tt class="py-line"><tt class="py-docstring">      store: Storage, an implementation of Stroage object.</tt> </tt>
+<a name="L595"></a><tt class="py-lineno"> 595</tt>  <tt class="py-line"><tt class="py-docstring">        This is needed to store the latest access_token if it</tt> </tt>
+<a name="L596"></a><tt class="py-lineno"> 596</tt>  <tt class="py-line"><tt class="py-docstring">        has expired and been refreshed. This implementation uses</tt> </tt>
+<a name="L597"></a><tt class="py-lineno"> 597</tt>  <tt class="py-line"><tt class="py-docstring">        locking to check for updates before updating the</tt> </tt>
+<a name="L598"></a><tt class="py-lineno"> 598</tt>  <tt class="py-line"><tt class="py-docstring">        access_token.</tt> </tt>
+<a name="L599"></a><tt class="py-lineno"> 599</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L600"></a><tt class="py-lineno"> 600</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt> <tt class="py-op">=</tt> <tt class="py-name">store</tt> </tt>
+</div><a name="L601"></a><tt class="py-lineno"> 601</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials._updateFromCredential"></a><div id="OAuth2Credentials._updateFromCredential-def"><a name="L602"></a><tt class="py-lineno"> 602</tt> <a class="py-toggle" href="#" id="OAuth2Credentials._updateFromCredential-toggle" onclick="return toggle('OAuth2Credentials._updateFromCredential');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential">_updateFromCredential</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Credentials._updateFromCredential-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials._updateFromCredential-expanded"><a name="L603"></a><tt class="py-lineno"> 603</tt>  <tt class="py-line">    <tt class="py-docstring">"""Update this Credential from another instance."""</tt> </tt>
+<a name="L604"></a><tt class="py-lineno"> 604</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-88" class="py-name" targets="Method apiclient.discovery.Resource.__getstate__()=apiclient.discovery.Resource-class.html#__getstate__,Method oauth2client.client.OAuth2Credentials.__getstate__()=oauth2client.client.OAuth2Credentials-class.html#__getstate__"><a title="apiclient.discovery.Resource.__getstate__
+oauth2client.client.OAuth2Credentials.__getstate__" class="py-name" href="#" onclick="return doclink('link-88', '__getstate__', 'link-88');">__getstate__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L605"></a><tt class="py-lineno"> 605</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials.__getstate__"></a><div id="OAuth2Credentials.__getstate__-def"><a name="L606"></a><tt class="py-lineno"> 606</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.__getstate__-toggle" onclick="return toggle('OAuth2Credentials.__getstate__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#__getstate__">__getstate__</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="OAuth2Credentials.__getstate__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.__getstate__-expanded"><a name="L607"></a><tt class="py-lineno"> 607</tt>  <tt class="py-line">    <tt class="py-docstring">"""Trim the state down to something that can be pickled."""</tt> </tt>
+<a name="L608"></a><tt class="py-lineno"> 608</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">)</tt> </tt>
+<a name="L609"></a><tt class="py-lineno"> 609</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'store'</tt><tt class="py-op">]</tt> </tt>
+<a name="L610"></a><tt class="py-lineno"> 610</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">d</tt> </tt>
+</div><a name="L611"></a><tt class="py-lineno"> 611</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials.__setstate__"></a><div id="OAuth2Credentials.__setstate__-def"><a name="L612"></a><tt class="py-lineno"> 612</tt> <a class="py-toggle" href="#" id="OAuth2Credentials.__setstate__-toggle" onclick="return toggle('OAuth2Credentials.__setstate__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#__setstate__">__setstate__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">state</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Credentials.__setstate__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials.__setstate__-expanded"><a name="L613"></a><tt class="py-lineno"> 613</tt>  <tt class="py-line">    <tt class="py-docstring">"""Reconstitute the state of the object from being pickled."""</tt> </tt>
+<a name="L614"></a><tt class="py-lineno"> 614</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">state</tt><tt class="py-op">)</tt> </tt>
+<a name="L615"></a><tt class="py-lineno"> 615</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L616"></a><tt class="py-lineno"> 616</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials._generate_refresh_request_body"></a><div id="OAuth2Credentials._generate_refresh_request_body-def"><a name="L617"></a><tt class="py-lineno"> 617</tt> <a class="py-toggle" href="#" id="OAuth2Credentials._generate_refresh_request_body-toggle" onclick="return toggle('OAuth2Credentials._generate_refresh_request_body');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_body">_generate_refresh_request_body</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="OAuth2Credentials._generate_refresh_request_body-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials._generate_refresh_request_body-expanded"><a name="L618"></a><tt class="py-lineno"> 618</tt>  <tt class="py-line">    <tt class="py-docstring">"""Generate the body that will be used in the refresh request."""</tt> </tt>
+<a name="L619"></a><tt class="py-lineno"> 619</tt>  <tt class="py-line">    <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-op">{</tt> </tt>
+<a name="L620"></a><tt class="py-lineno"> 620</tt>  <tt class="py-line">        <tt class="py-string">'grant_type'</tt><tt class="py-op">:</tt> <tt class="py-string">'refresh_token'</tt><tt class="py-op">,</tt> </tt>
+<a name="L621"></a><tt class="py-lineno"> 621</tt>  <tt class="py-line">        <tt class="py-string">'client_id'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_id</tt><tt class="py-op">,</tt> </tt>
+<a name="L622"></a><tt class="py-lineno"> 622</tt>  <tt class="py-line">        <tt class="py-string">'client_secret'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_secret</tt><tt class="py-op">,</tt> </tt>
+<a name="L623"></a><tt class="py-lineno"> 623</tt>  <tt class="py-line">        <tt class="py-string">'refresh_token'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">refresh_token</tt><tt class="py-op">,</tt> </tt>
+<a name="L624"></a><tt class="py-lineno"> 624</tt>  <tt class="py-line">        <tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L625"></a><tt class="py-lineno"> 625</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">body</tt> </tt>
+</div><a name="L626"></a><tt class="py-lineno"> 626</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials._generate_refresh_request_headers"></a><div id="OAuth2Credentials._generate_refresh_request_headers-def"><a name="L627"></a><tt class="py-lineno"> 627</tt> <a class="py-toggle" href="#" id="OAuth2Credentials._generate_refresh_request_headers-toggle" onclick="return toggle('OAuth2Credentials._generate_refresh_request_headers');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers">_generate_refresh_request_headers</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="OAuth2Credentials._generate_refresh_request_headers-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials._generate_refresh_request_headers-expanded"><a name="L628"></a><tt class="py-lineno"> 628</tt>  <tt class="py-line">    <tt class="py-docstring">"""Generate the headers that will be used in the refresh request."""</tt> </tt>
+<a name="L629"></a><tt class="py-lineno"> 629</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L630"></a><tt class="py-lineno"> 630</tt>  <tt class="py-line">        <tt class="py-string">'content-type'</tt><tt class="py-op">:</tt> <tt class="py-string">'application/x-www-form-urlencoded'</tt><tt class="py-op">,</tt> </tt>
+<a name="L631"></a><tt class="py-lineno"> 631</tt>  <tt class="py-line">    <tt class="py-op">}</tt> </tt>
+<a name="L632"></a><tt class="py-lineno"> 632</tt>  <tt class="py-line"> </tt>
+<a name="L633"></a><tt class="py-lineno"> 633</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</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="L634"></a><tt class="py-lineno"> 634</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt> </tt>
+<a name="L635"></a><tt class="py-lineno"> 635</tt>  <tt class="py-line"> </tt>
+<a name="L636"></a><tt class="py-lineno"> 636</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">headers</tt> </tt>
+</div><a name="L637"></a><tt class="py-lineno"> 637</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials._refresh"></a><div id="OAuth2Credentials._refresh-def"><a name="L638"></a><tt class="py-lineno"> 638</tt> <a class="py-toggle" href="#" id="OAuth2Credentials._refresh-toggle" onclick="return toggle('OAuth2Credentials._refresh');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#_refresh">_refresh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Credentials._refresh-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials._refresh-expanded"><a name="L639"></a><tt class="py-lineno"> 639</tt>  <tt class="py-line">    <tt class="py-docstring">"""Refreshes the access_token.</tt> </tt>
+<a name="L640"></a><tt class="py-lineno"> 640</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L641"></a><tt class="py-lineno"> 641</tt>  <tt class="py-line"><tt class="py-docstring">    This method first checks by reading the Storage object if available.</tt> </tt>
+<a name="L642"></a><tt class="py-lineno"> 642</tt>  <tt class="py-line"><tt class="py-docstring">    If a refresh is still needed, it holds the Storage lock until the</tt> </tt>
+<a name="L643"></a><tt class="py-lineno"> 643</tt>  <tt class="py-line"><tt class="py-docstring">    refresh is completed.</tt> </tt>
+<a name="L644"></a><tt class="py-lineno"> 644</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L645"></a><tt class="py-lineno"> 645</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L646"></a><tt class="py-lineno"> 646</tt>  <tt class="py-line"><tt class="py-docstring">      http_request: callable, a callable that matches the method signature of</tt> </tt>
+<a name="L647"></a><tt class="py-lineno"> 647</tt>  <tt class="py-line"><tt class="py-docstring">        httplib2.Http.request, used to make the refresh request.</tt> </tt>
+<a name="L648"></a><tt class="py-lineno"> 648</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L649"></a><tt class="py-lineno"> 649</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L650"></a><tt class="py-lineno"> 650</tt>  <tt class="py-line"><tt class="py-docstring">      AccessTokenRefreshError: When the refresh fails.</tt> </tt>
+<a name="L651"></a><tt class="py-lineno"> 651</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L652"></a><tt class="py-lineno"> 652</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">:</tt> </tt>
+<a name="L653"></a><tt class="py-lineno"> 653</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name" targets="Method oauth2client.client.OAuth2Credentials._do_refresh_request()=oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request"><a title="oauth2client.client.OAuth2Credentials._do_refresh_request" class="py-name" href="#" onclick="return doclink('link-89', '_do_refresh_request', 'link-89');">_do_refresh_request</a></tt><tt class="py-op">(</tt><tt class="py-name">http_request</tt><tt class="py-op">)</tt> </tt>
+<a name="L654"></a><tt class="py-lineno"> 654</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L655"></a><tt class="py-lineno"> 655</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name"><a title="oauth2client.client.Storage.acquire_lock
 oauth2client.file.Storage.acquire_lock
 oauth2client.keyring_storage.Storage.acquire_lock
-oauth2client.multistore_file._MultiStore._Storage.acquire_lock" class="py-name" href="#" onclick="return doclink('link-72', 'acquire_lock', 'link-30');">acquire_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L603"></a><tt class="py-lineno"> 603</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L604"></a><tt class="py-lineno"> 604</tt>  <tt class="py-line">        <tt class="py-name">new_cred</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="oauth2client.appengine.StorageByKeyName.locked_get
+oauth2client.multistore_file._MultiStore._Storage.acquire_lock" class="py-name" href="#" onclick="return doclink('link-90', 'acquire_lock', 'link-41');">acquire_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L656"></a><tt class="py-lineno"> 656</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L657"></a><tt class="py-lineno"> 657</tt>  <tt class="py-line">        <tt class="py-name">new_cred</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="oauth2client.appengine.StorageByKeyName.locked_get
 oauth2client.client.Storage.locked_get
 oauth2client.django_orm.Storage.locked_get
 oauth2client.file.Storage.locked_get
 oauth2client.keyring_storage.Storage.locked_get
-oauth2client.multistore_file._MultiStore._Storage.locked_get" class="py-name" href="#" onclick="return doclink('link-73', 'locked_get', 'link-31');">locked_get</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L605"></a><tt class="py-lineno"> 605</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">new_cred</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">new_cred</tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt> <tt class="py-keyword">and</tt> </tt>
-<a name="L606"></a><tt class="py-lineno"> 606</tt>  <tt class="py-line">            <tt class="py-name">new_cred</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L607"></a><tt class="py-lineno"> 607</tt>  <tt class="py-line">          <tt id="link-74" class="py-name"><a title="apiclient.discovery.logger
+oauth2client.multistore_file._MultiStore._Storage.locked_get" class="py-name" href="#" onclick="return doclink('link-91', 'locked_get', 'link-42');">locked_get</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L658"></a><tt class="py-lineno"> 658</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">new_cred</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">new_cred</tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt> <tt class="py-keyword">and</tt> </tt>
+<a name="L659"></a><tt class="py-lineno"> 659</tt>  <tt class="py-line">            <tt class="py-name">new_cred</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L660"></a><tt class="py-lineno"> 660</tt>  <tt class="py-line">          <tt id="link-92" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-74', 'logger', 'link-9');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Updated access_token read from Storage'</tt><tt class="py-op">)</tt> </tt>
-<a name="L608"></a><tt class="py-lineno"> 608</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name" targets="Method oauth2client.client.OAuth2Credentials._updateFromCredential()=oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential"><a title="oauth2client.client.OAuth2Credentials._updateFromCredential" class="py-name" href="#" onclick="return doclink('link-75', '_updateFromCredential', 'link-75');">_updateFromCredential</a></tt><tt class="py-op">(</tt><tt class="py-name">new_cred</tt><tt class="py-op">)</tt> </tt>
-<a name="L609"></a><tt class="py-lineno"> 609</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L610"></a><tt class="py-lineno"> 610</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name"><a title="oauth2client.client.OAuth2Credentials._do_refresh_request" class="py-name" href="#" onclick="return doclink('link-76', '_do_refresh_request', 'link-71');">_do_refresh_request</a></tt><tt class="py-op">(</tt><tt class="py-name">http_request</tt><tt class="py-op">)</tt> </tt>
-<a name="L611"></a><tt class="py-lineno"> 611</tt>  <tt class="py-line">      <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
-<a name="L612"></a><tt class="py-lineno"> 612</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="oauth2client.client.Storage.release_lock
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-92', 'logger', 'link-19');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Updated access_token read from Storage'</tt><tt class="py-op">)</tt> </tt>
+<a name="L661"></a><tt class="py-lineno"> 661</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name" targets="Method oauth2client.client.OAuth2Credentials._updateFromCredential()=oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential"><a title="oauth2client.client.OAuth2Credentials._updateFromCredential" class="py-name" href="#" onclick="return doclink('link-93', '_updateFromCredential', 'link-93');">_updateFromCredential</a></tt><tt class="py-op">(</tt><tt class="py-name">new_cred</tt><tt class="py-op">)</tt> </tt>
+<a name="L662"></a><tt class="py-lineno"> 662</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L663"></a><tt class="py-lineno"> 663</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name"><a title="oauth2client.client.OAuth2Credentials._do_refresh_request" class="py-name" href="#" onclick="return doclink('link-94', '_do_refresh_request', 'link-89');">_do_refresh_request</a></tt><tt class="py-op">(</tt><tt class="py-name">http_request</tt><tt class="py-op">)</tt> </tt>
+<a name="L664"></a><tt class="py-lineno"> 664</tt>  <tt class="py-line">      <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
+<a name="L665"></a><tt class="py-lineno"> 665</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="oauth2client.client.Storage.release_lock
 oauth2client.file.Storage.release_lock
 oauth2client.keyring_storage.Storage.release_lock
-oauth2client.multistore_file._MultiStore._Storage.release_lock" class="py-name" href="#" onclick="return doclink('link-77', 'release_lock', 'link-32');">release_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L613"></a><tt class="py-lineno"> 613</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2Credentials._do_refresh_request"></a><div id="OAuth2Credentials._do_refresh_request-def"><a name="L614"></a><tt class="py-lineno"> 614</tt> <a class="py-toggle" href="#" id="OAuth2Credentials._do_refresh_request-toggle" onclick="return toggle('OAuth2Credentials._do_refresh_request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request">_do_refresh_request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2Credentials._do_refresh_request-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials._do_refresh_request-expanded"><a name="L615"></a><tt class="py-lineno"> 615</tt>  <tt class="py-line">    <tt class="py-docstring">"""Refresh the access_token using the refresh_token.</tt> </tt>
-<a name="L616"></a><tt class="py-lineno"> 616</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L617"></a><tt class="py-lineno"> 617</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L618"></a><tt class="py-lineno"> 618</tt>  <tt class="py-line"><tt class="py-docstring">      http_request: callable, a callable that matches the method signature of</tt> </tt>
-<a name="L619"></a><tt class="py-lineno"> 619</tt>  <tt class="py-line"><tt class="py-docstring">        httplib2.Http.request, used to make the refresh request.</tt> </tt>
-<a name="L620"></a><tt class="py-lineno"> 620</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L621"></a><tt class="py-lineno"> 621</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L622"></a><tt class="py-lineno"> 622</tt>  <tt class="py-line"><tt class="py-docstring">      AccessTokenRefreshError: When the refresh fails.</tt> </tt>
-<a name="L623"></a><tt class="py-lineno"> 623</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L624"></a><tt class="py-lineno"> 624</tt>  <tt class="py-line">    <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name" targets="Method oauth2client.client.AssertionCredentials._generate_refresh_request_body()=oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body,Method oauth2client.client.OAuth2Credentials._generate_refresh_request_body()=oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_body"><a title="oauth2client.client.AssertionCredentials._generate_refresh_request_body
-oauth2client.client.OAuth2Credentials._generate_refresh_request_body" class="py-name" href="#" onclick="return doclink('link-78', '_generate_refresh_request_body', 'link-78');">_generate_refresh_request_body</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L625"></a><tt class="py-lineno"> 625</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name" targets="Method oauth2client.client.OAuth2Credentials._generate_refresh_request_headers()=oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers"><a title="oauth2client.client.OAuth2Credentials._generate_refresh_request_headers" class="py-name" href="#" onclick="return doclink('link-79', '_generate_refresh_request_headers', 'link-79');">_generate_refresh_request_headers</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L626"></a><tt class="py-lineno"> 626</tt>  <tt class="py-line"> </tt>
-<a name="L627"></a><tt class="py-lineno"> 627</tt>  <tt class="py-line">    <tt id="link-80" class="py-name"><a title="apiclient.discovery.logger
+oauth2client.multistore_file._MultiStore._Storage.release_lock" class="py-name" href="#" onclick="return doclink('link-95', 'release_lock', 'link-43');">release_lock</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L666"></a><tt class="py-lineno"> 666</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials._do_refresh_request"></a><div id="OAuth2Credentials._do_refresh_request-def"><a name="L667"></a><tt class="py-lineno"> 667</tt> <a class="py-toggle" href="#" id="OAuth2Credentials._do_refresh_request-toggle" onclick="return toggle('OAuth2Credentials._do_refresh_request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request">_do_refresh_request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Credentials._do_refresh_request-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials._do_refresh_request-expanded"><a name="L668"></a><tt class="py-lineno"> 668</tt>  <tt class="py-line">    <tt class="py-docstring">"""Refresh the access_token using the refresh_token.</tt> </tt>
+<a name="L669"></a><tt class="py-lineno"> 669</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L670"></a><tt class="py-lineno"> 670</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L671"></a><tt class="py-lineno"> 671</tt>  <tt class="py-line"><tt class="py-docstring">      http_request: callable, a callable that matches the method signature of</tt> </tt>
+<a name="L672"></a><tt class="py-lineno"> 672</tt>  <tt class="py-line"><tt class="py-docstring">        httplib2.Http.request, used to make the refresh request.</tt> </tt>
+<a name="L673"></a><tt class="py-lineno"> 673</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L674"></a><tt class="py-lineno"> 674</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L675"></a><tt class="py-lineno"> 675</tt>  <tt class="py-line"><tt class="py-docstring">      AccessTokenRefreshError: When the refresh fails.</tt> </tt>
+<a name="L676"></a><tt class="py-lineno"> 676</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L677"></a><tt class="py-lineno"> 677</tt>  <tt class="py-line">    <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name" targets="Method oauth2client.client.AssertionCredentials._generate_refresh_request_body()=oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body,Method oauth2client.client.OAuth2Credentials._generate_refresh_request_body()=oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_body"><a title="oauth2client.client.AssertionCredentials._generate_refresh_request_body
+oauth2client.client.OAuth2Credentials._generate_refresh_request_body" class="py-name" href="#" onclick="return doclink('link-96', '_generate_refresh_request_body', 'link-96');">_generate_refresh_request_body</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L678"></a><tt class="py-lineno"> 678</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-97" class="py-name" targets="Method oauth2client.client.OAuth2Credentials._generate_refresh_request_headers()=oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers"><a title="oauth2client.client.OAuth2Credentials._generate_refresh_request_headers" class="py-name" href="#" onclick="return doclink('link-97', '_generate_refresh_request_headers', 'link-97');">_generate_refresh_request_headers</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L679"></a><tt class="py-lineno"> 679</tt>  <tt class="py-line"> </tt>
+<a name="L680"></a><tt class="py-lineno"> 680</tt>  <tt class="py-line">    <tt id="link-98" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-80', 'logger', 'link-9');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Refreshing access_token'</tt><tt class="py-op">)</tt> </tt>
-<a name="L628"></a><tt class="py-lineno"> 628</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">http_request</tt><tt class="py-op">(</tt> </tt>
-<a name="L629"></a><tt class="py-lineno"> 629</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-string">'POST'</tt><tt class="py-op">,</tt> <tt class="py-name">body</tt><tt class="py-op">=</tt><tt class="py-name">body</tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
-<a name="L630"></a><tt class="py-lineno"> 630</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">200</tt><tt class="py-op">:</tt> </tt>
-<a name="L631"></a><tt class="py-lineno"> 631</tt>  <tt class="py-line">      <tt class="py-comment"># TODO(jcgregorio) Raise an error if loads fails?</tt> </tt>
-<a name="L632"></a><tt class="py-lineno"> 632</tt>  <tt class="py-line">      <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-81', 'loads', 'link-23');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L633"></a><tt class="py-lineno"> 633</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'access_token'</tt><tt class="py-op">]</tt> </tt>
-<a name="L634"></a><tt class="py-lineno"> 634</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">refresh_token</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-98', 'logger', 'link-19');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Refreshing access_token'</tt><tt class="py-op">)</tt> </tt>
+<a name="L681"></a><tt class="py-lineno"> 681</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">http_request</tt><tt class="py-op">(</tt> </tt>
+<a name="L682"></a><tt class="py-lineno"> 682</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-string">'POST'</tt><tt class="py-op">,</tt> <tt class="py-name">body</tt><tt class="py-op">=</tt><tt class="py-name">body</tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
+<a name="L683"></a><tt class="py-lineno"> 683</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">200</tt><tt class="py-op">:</tt> </tt>
+<a name="L684"></a><tt class="py-lineno"> 684</tt>  <tt class="py-line">      <tt class="py-comment"># TODO(jcgregorio) Raise an error if loads fails?</tt> </tt>
+<a name="L685"></a><tt class="py-lineno"> 685</tt>  <tt class="py-line">      <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-99', 'loads', 'link-34');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L686"></a><tt class="py-lineno"> 686</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_response</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt> </tt>
+<a name="L687"></a><tt class="py-lineno"> 687</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'access_token'</tt><tt class="py-op">]</tt> </tt>
+<a name="L688"></a><tt class="py-lineno"> 688</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">refresh_token</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-82', 'get', 'link-14');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'refresh_token'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">refresh_token</tt><tt class="py-op">)</tt> </tt>
-<a name="L635"></a><tt class="py-lineno"> 635</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'expires_in'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
-<a name="L636"></a><tt class="py-lineno"> 636</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_expiry</tt> <tt class="py-op">=</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">timedelta</tt><tt class="py-op">(</tt> </tt>
-<a name="L637"></a><tt class="py-lineno"> 637</tt>  <tt class="py-line">            <tt class="py-name">seconds</tt><tt class="py-op">=</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'expires_in'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">utcnow</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L638"></a><tt class="py-lineno"> 638</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L639"></a><tt class="py-lineno"> 639</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_expiry</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L640"></a><tt class="py-lineno"> 640</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">:</tt> </tt>
-<a name="L641"></a><tt class="py-lineno"> 641</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name"><a title="oauth2client.appengine.StorageByKeyName.locked_put
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-100', 'get', 'link-24');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'refresh_token'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">refresh_token</tt><tt class="py-op">)</tt> </tt>
+<a name="L689"></a><tt class="py-lineno"> 689</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'expires_in'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
+<a name="L690"></a><tt class="py-lineno"> 690</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_expiry</tt> <tt class="py-op">=</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">timedelta</tt><tt class="py-op">(</tt> </tt>
+<a name="L691"></a><tt class="py-lineno"> 691</tt>  <tt class="py-line">            <tt class="py-name">seconds</tt><tt class="py-op">=</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'expires_in'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">utcnow</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L692"></a><tt class="py-lineno"> 692</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L693"></a><tt class="py-lineno"> 693</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_expiry</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L694"></a><tt class="py-lineno"> 694</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">:</tt> </tt>
+<a name="L695"></a><tt class="py-lineno"> 695</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name"><a title="oauth2client.appengine.StorageByKeyName.locked_put
 oauth2client.client.Storage.locked_put
 oauth2client.django_orm.Storage.locked_put
 oauth2client.file.Storage.locked_put
 oauth2client.keyring_storage.Storage.locked_put
-oauth2client.multistore_file._MultiStore._Storage.locked_put" class="py-name" href="#" onclick="return doclink('link-83', 'locked_put', 'link-34');">locked_put</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
-<a name="L642"></a><tt class="py-lineno"> 642</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L643"></a><tt class="py-lineno"> 643</tt>  <tt class="py-line">      <tt class="py-comment"># An {'error':...} response body means the token is expired or revoked,</tt> </tt>
-<a name="L644"></a><tt class="py-lineno"> 644</tt>  <tt class="py-line">      <tt class="py-comment"># so we flag the credentials as such.</tt> </tt>
-<a name="L645"></a><tt class="py-lineno"> 645</tt>  <tt class="py-line">      <tt id="link-84" class="py-name"><a title="apiclient.discovery.logger
+oauth2client.multistore_file._MultiStore._Storage.locked_put" class="py-name" href="#" onclick="return doclink('link-101', 'locked_put', 'link-45');">locked_put</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L696"></a><tt class="py-lineno"> 696</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L697"></a><tt class="py-lineno"> 697</tt>  <tt class="py-line">      <tt class="py-comment"># An {'error':...} response body means the token is expired or revoked,</tt> </tt>
+<a name="L698"></a><tt class="py-lineno"> 698</tt>  <tt class="py-line">      <tt class="py-comment"># so we flag the credentials as such.</tt> </tt>
+<a name="L699"></a><tt class="py-lineno"> 699</tt>  <tt class="py-line">      <tt id="link-102" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-84', 'logger', 'link-9');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Failed to retrieve access token: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L646"></a><tt class="py-lineno"> 646</tt>  <tt class="py-line">      <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-string">'Invalid response %s.'</tt> <tt class="py-op">%</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'status'</tt><tt class="py-op">]</tt> </tt>
-<a name="L647"></a><tt class="py-lineno"> 647</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L648"></a><tt class="py-lineno"> 648</tt>  <tt class="py-line">        <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-85', 'loads', 'link-23');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L649"></a><tt class="py-lineno"> 649</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'error'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
-<a name="L650"></a><tt class="py-lineno"> 650</tt>  <tt class="py-line">          <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'error'</tt><tt class="py-op">]</tt> </tt>
-<a name="L651"></a><tt class="py-lineno"> 651</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L652"></a><tt class="py-lineno"> 652</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">:</tt> </tt>
-<a name="L653"></a><tt class="py-lineno"> 653</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="oauth2client.appengine.StorageByKeyName.locked_put
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-102', 'logger', 'link-19');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Failed to retrieve access token: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L700"></a><tt class="py-lineno"> 700</tt>  <tt class="py-line">      <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-string">'Invalid response %s.'</tt> <tt class="py-op">%</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'status'</tt><tt class="py-op">]</tt> </tt>
+<a name="L701"></a><tt class="py-lineno"> 701</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L702"></a><tt class="py-lineno"> 702</tt>  <tt class="py-line">        <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-103', 'loads', 'link-34');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L703"></a><tt class="py-lineno"> 703</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'error'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
+<a name="L704"></a><tt class="py-lineno"> 704</tt>  <tt class="py-line">          <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'error'</tt><tt class="py-op">]</tt> </tt>
+<a name="L705"></a><tt class="py-lineno"> 705</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L706"></a><tt class="py-lineno"> 706</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">:</tt> </tt>
+<a name="L707"></a><tt class="py-lineno"> 707</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name"><a title="oauth2client.appengine.StorageByKeyName.locked_put
 oauth2client.client.Storage.locked_put
 oauth2client.django_orm.Storage.locked_put
 oauth2client.file.Storage.locked_put
 oauth2client.keyring_storage.Storage.locked_put
-oauth2client.multistore_file._MultiStore._Storage.locked_put" class="py-name" href="#" onclick="return doclink('link-86', 'locked_put', 'link-34');">locked_put</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
-<a name="L654"></a><tt class="py-lineno"> 654</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt> <tt class="py-name">StandardError</tt><tt class="py-op">:</tt> </tt>
-<a name="L655"></a><tt class="py-lineno"> 655</tt>  <tt class="py-line">        <tt class="py-keyword">pass</tt> </tt>
-<a name="L656"></a><tt class="py-lineno"> 656</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-87" class="py-name" targets="Class oauth2client.client.AccessTokenRefreshError=oauth2client.client.AccessTokenRefreshError-class.html"><a title="oauth2client.client.AccessTokenRefreshError" class="py-name" href="#" onclick="return doclink('link-87', 'AccessTokenRefreshError', 'link-87');">AccessTokenRefreshError</a></tt><tt class="py-op">(</tt><tt class="py-name">error_msg</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L657"></a><tt class="py-lineno"> 657</tt>  <tt class="py-line"> </tt>
-<a name="AccessTokenCredentials"></a><div id="AccessTokenCredentials-def"><a name="L658"></a><tt class="py-lineno"> 658</tt>  <tt class="py-line"> </tt>
-<a name="L659"></a><tt class="py-lineno"> 659</tt> <a class="py-toggle" href="#" id="AccessTokenCredentials-toggle" onclick="return toggle('AccessTokenCredentials');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.AccessTokenCredentials-class.html">AccessTokenCredentials</a><tt class="py-op">(</tt><tt class="py-base-class">OAuth2Credentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AccessTokenCredentials-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="AccessTokenCredentials-expanded"><a name="L660"></a><tt class="py-lineno"> 660</tt>  <tt class="py-line">  <tt class="py-docstring">"""Credentials object for OAuth 2.0.</tt> </tt>
-<a name="L661"></a><tt class="py-lineno"> 661</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L662"></a><tt class="py-lineno"> 662</tt>  <tt class="py-line"><tt class="py-docstring">  Credentials can be applied to an httplib2.Http object using the</tt> </tt>
-<a name="L663"></a><tt class="py-lineno"> 663</tt>  <tt class="py-line"><tt class="py-docstring">  authorize() method, which then signs each request from that object</tt> </tt>
-<a name="L664"></a><tt class="py-lineno"> 664</tt>  <tt class="py-line"><tt class="py-docstring">  with the OAuth 2.0 access token. This set of credentials is for the</tt> </tt>
-<a name="L665"></a><tt class="py-lineno"> 665</tt>  <tt class="py-line"><tt class="py-docstring">  use case where you have acquired an OAuth 2.0 access_token from</tt> </tt>
-<a name="L666"></a><tt class="py-lineno"> 666</tt>  <tt class="py-line"><tt class="py-docstring">  another place such as a JavaScript client or another web</tt> </tt>
-<a name="L667"></a><tt class="py-lineno"> 667</tt>  <tt class="py-line"><tt class="py-docstring">  application, and wish to use it from Python. Because only the</tt> </tt>
-<a name="L668"></a><tt class="py-lineno"> 668</tt>  <tt class="py-line"><tt class="py-docstring">  access_token is present it can not be refreshed and will in time</tt> </tt>
-<a name="L669"></a><tt class="py-lineno"> 669</tt>  <tt class="py-line"><tt class="py-docstring">  expire.</tt> </tt>
-<a name="L670"></a><tt class="py-lineno"> 670</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L671"></a><tt class="py-lineno"> 671</tt>  <tt class="py-line"><tt class="py-docstring">  AccessTokenCredentials objects may be safely pickled and unpickled.</tt> </tt>
-<a name="L672"></a><tt class="py-lineno"> 672</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L673"></a><tt class="py-lineno"> 673</tt>  <tt class="py-line"><tt class="py-docstring">  Usage:</tt> </tt>
-<a name="L674"></a><tt class="py-lineno"> 674</tt>  <tt class="py-line"><tt class="py-docstring">    credentials = AccessTokenCredentials('&lt;an access token&gt;',</tt> </tt>
-<a name="L675"></a><tt class="py-lineno"> 675</tt>  <tt class="py-line"><tt class="py-docstring">      'my-user-agent/1.0')</tt> </tt>
-<a name="L676"></a><tt class="py-lineno"> 676</tt>  <tt class="py-line"><tt class="py-docstring">    http = httplib2.Http()</tt> </tt>
-<a name="L677"></a><tt class="py-lineno"> 677</tt>  <tt class="py-line"><tt class="py-docstring">    http = credentials.authorize(http)</tt> </tt>
-<a name="L678"></a><tt class="py-lineno"> 678</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L679"></a><tt class="py-lineno"> 679</tt>  <tt class="py-line"><tt class="py-docstring">  Exceptions:</tt> </tt>
-<a name="L680"></a><tt class="py-lineno"> 680</tt>  <tt class="py-line"><tt class="py-docstring">    AccessTokenCredentialsExpired: raised when the access_token expires or is</tt> </tt>
-<a name="L681"></a><tt class="py-lineno"> 681</tt>  <tt class="py-line"><tt class="py-docstring">      revoked.</tt> </tt>
-<a name="L682"></a><tt class="py-lineno"> 682</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L683"></a><tt class="py-lineno"> 683</tt>  <tt class="py-line"> </tt>
-<a name="AccessTokenCredentials.__init__"></a><div id="AccessTokenCredentials.__init__-def"><a name="L684"></a><tt class="py-lineno"> 684</tt> <a class="py-toggle" href="#" id="AccessTokenCredentials.__init__-toggle" onclick="return toggle('AccessTokenCredentials.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AccessTokenCredentials-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">access_token</tt><tt class="py-op">,</tt> <tt class="py-param">user_agent</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AccessTokenCredentials.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AccessTokenCredentials.__init__-expanded"><a name="L685"></a><tt class="py-lineno"> 685</tt>  <tt class="py-line">    <tt class="py-docstring">"""Create an instance of OAuth2Credentials</tt> </tt>
-<a name="L686"></a><tt class="py-lineno"> 686</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L687"></a><tt class="py-lineno"> 687</tt>  <tt class="py-line"><tt class="py-docstring">    This is one of the few types if Credentials that you should contrust,</tt> </tt>
-<a name="L688"></a><tt class="py-lineno"> 688</tt>  <tt class="py-line"><tt class="py-docstring">    Credentials objects are usually instantiated by a Flow.</tt> </tt>
-<a name="L689"></a><tt class="py-lineno"> 689</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L690"></a><tt class="py-lineno"> 690</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L691"></a><tt class="py-lineno"> 691</tt>  <tt class="py-line"><tt class="py-docstring">      access_token: string, access token.</tt> </tt>
-<a name="L692"></a><tt class="py-lineno"> 692</tt>  <tt class="py-line"><tt class="py-docstring">      user_agent: string, The HTTP User-Agent to provide for this application.</tt> </tt>
-<a name="L693"></a><tt class="py-lineno"> 693</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L694"></a><tt class="py-lineno"> 694</tt>  <tt class="py-line"><tt class="py-docstring">    Notes:</tt> </tt>
-<a name="L695"></a><tt class="py-lineno"> 695</tt>  <tt class="py-line"><tt class="py-docstring">      store: callable, a callable that when passed a Credential</tt> </tt>
-<a name="L696"></a><tt class="py-lineno"> 696</tt>  <tt class="py-line"><tt class="py-docstring">        will store the credential back to where it came from.</tt> </tt>
-<a name="L697"></a><tt class="py-lineno"> 697</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L698"></a><tt class="py-lineno"> 698</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-88" class="py-name" targets="Class oauth2client.client.AccessTokenCredentials=oauth2client.client.AccessTokenCredentials-class.html"><a title="oauth2client.client.AccessTokenCredentials" class="py-name" href="#" onclick="return doclink('link-88', 'AccessTokenCredentials', 'link-88');">AccessTokenCredentials</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
-apiclient.errors.BatchError.__init__
-apiclient.errors.HttpError.__init__
-apiclient.errors.UnexpectedBodyError.__init__
-apiclient.errors.UnexpectedMethodError.__init__
-apiclient.http.BatchHttpRequest.__init__
-apiclient.http.HttpMock.__init__
-apiclient.http.HttpMockSequence.__init__
-apiclient.http.HttpRequest.__init__
-apiclient.http.HttpRequestMock.__init__
-apiclient.http.MediaDownloadProgress.__init__
-apiclient.http.MediaFileUpload.__init__
-apiclient.http.MediaInMemoryUpload.__init__
-apiclient.http.MediaIoBaseDownload.__init__
-apiclient.http.MediaIoBaseUpload.__init__
-apiclient.http.MediaUploadProgress.__init__
-apiclient.http.RequestMockBuilder.__init__
-apiclient.http._StreamSlice.__init__
-apiclient.model.JsonModel.__init__
-apiclient.model.ProtocolBufferModel.__init__
-apiclient.push.Channel.__init__
-apiclient.push.Headers.__init__
-apiclient.push.Subscription.__init__
-apiclient.push.WebhookChannel.__init__
-apiclient.schema.Schemas.__init__
-apiclient.schema._SchemaToStruct.__init__
-oauth2client.appengine.AppAssertionCredentials.__init__
-oauth2client.appengine.OAuth2Decorator.__init__
-oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__
-oauth2client.appengine.StorageByKeyName.__init__
-oauth2client.client.AccessTokenCredentials.__init__
-oauth2client.client.AssertionCredentials.__init__
-oauth2client.client.MemoryCache.__init__
-oauth2client.client.OAuth2Credentials.__init__
-oauth2client.client.OAuth2WebServerFlow.__init__
-oauth2client.client.SignedJwtAssertionCredentials.__init__
-oauth2client.django_orm.CredentialsField.__init__
-oauth2client.django_orm.FlowField.__init__
-oauth2client.django_orm.Storage.__init__
-oauth2client.file.Storage.__init__
-oauth2client.gce.AppAssertionCredentials.__init__
-oauth2client.keyring_storage.Storage.__init__
-oauth2client.locked_file.LockedFile.__init__
-oauth2client.locked_file._Opener.__init__
-oauth2client.multistore_file._MultiStore._Storage.__init__
-oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-89', '__init__', 'link-89');">__init__</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L699"></a><tt class="py-lineno"> 699</tt>  <tt class="py-line">        <tt class="py-name">access_token</tt><tt class="py-op">,</tt> </tt>
-<a name="L700"></a><tt class="py-lineno"> 700</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L701"></a><tt class="py-lineno"> 701</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L702"></a><tt class="py-lineno"> 702</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L703"></a><tt class="py-lineno"> 703</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L704"></a><tt class="py-lineno"> 704</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L705"></a><tt class="py-lineno"> 705</tt>  <tt class="py-line">        <tt class="py-name">user_agent</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L706"></a><tt class="py-lineno"> 706</tt>  <tt class="py-line"> </tt>
-<a name="L707"></a><tt class="py-lineno"> 707</tt>  <tt class="py-line"> </tt>
-<a name="L708"></a><tt class="py-lineno"> 708</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
-<a name="AccessTokenCredentials.from_json"></a><div id="AccessTokenCredentials.from_json-def"><a name="L709"></a><tt class="py-lineno"> 709</tt> <a class="py-toggle" href="#" id="AccessTokenCredentials.from_json-toggle" onclick="return toggle('AccessTokenCredentials.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AccessTokenCredentials-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AccessTokenCredentials.from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AccessTokenCredentials.from_json-expanded"><a name="L710"></a><tt class="py-lineno"> 710</tt>  <tt class="py-line">    <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-90', 'loads', 'link-23');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
-<a name="L711"></a><tt class="py-lineno"> 711</tt>  <tt class="py-line">    <tt class="py-name">retval</tt> <tt class="py-op">=</tt> <tt id="link-91" class="py-name"><a title="oauth2client.client.AccessTokenCredentials" class="py-name" href="#" onclick="return doclink('link-91', 'AccessTokenCredentials', 'link-88');">AccessTokenCredentials</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L712"></a><tt class="py-lineno"> 712</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'access_token'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L713"></a><tt class="py-lineno"> 713</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'user_agent'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L714"></a><tt class="py-lineno"> 714</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">retval</tt> </tt>
-</div><a name="L715"></a><tt class="py-lineno"> 715</tt>  <tt class="py-line"> </tt>
-<a name="AccessTokenCredentials._refresh"></a><div id="AccessTokenCredentials._refresh-def"><a name="L716"></a><tt class="py-lineno"> 716</tt> <a class="py-toggle" href="#" id="AccessTokenCredentials._refresh-toggle" onclick="return toggle('AccessTokenCredentials._refresh');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AccessTokenCredentials-class.html#_refresh">_refresh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AccessTokenCredentials._refresh-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AccessTokenCredentials._refresh-expanded"><a name="L717"></a><tt class="py-lineno"> 717</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-92" class="py-name" targets="Class oauth2client.client.AccessTokenCredentialsError=oauth2client.client.AccessTokenCredentialsError-class.html"><a title="oauth2client.client.AccessTokenCredentialsError" class="py-name" href="#" onclick="return doclink('link-92', 'AccessTokenCredentialsError', 'link-92');">AccessTokenCredentialsError</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L718"></a><tt class="py-lineno"> 718</tt>  <tt class="py-line">        <tt class="py-string">"The access_token is expired or invalid and can't be refreshed."</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L719"></a><tt class="py-lineno"> 719</tt>  <tt class="py-line"> </tt>
-<a name="AssertionCredentials"></a><div id="AssertionCredentials-def"><a name="L720"></a><tt class="py-lineno"> 720</tt>  <tt class="py-line"> </tt>
-<a name="L721"></a><tt class="py-lineno"> 721</tt> <a class="py-toggle" href="#" id="AssertionCredentials-toggle" onclick="return toggle('AssertionCredentials');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.AssertionCredentials-class.html">AssertionCredentials</a><tt class="py-op">(</tt><tt class="py-base-class">OAuth2Credentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AssertionCredentials-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="AssertionCredentials-expanded"><a name="L722"></a><tt class="py-lineno"> 722</tt>  <tt class="py-line">  <tt class="py-docstring">"""Abstract Credentials object used for OAuth 2.0 assertion grants.</tt> </tt>
+oauth2client.multistore_file._MultiStore._Storage.locked_put" class="py-name" href="#" onclick="return doclink('link-104', 'locked_put', 'link-45');">locked_put</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L708"></a><tt class="py-lineno"> 708</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt> <tt class="py-name">StandardError</tt><tt class="py-op">:</tt> </tt>
+<a name="L709"></a><tt class="py-lineno"> 709</tt>  <tt class="py-line">        <tt class="py-keyword">pass</tt> </tt>
+<a name="L710"></a><tt class="py-lineno"> 710</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-105" class="py-name" targets="Class oauth2client.client.AccessTokenRefreshError=oauth2client.client.AccessTokenRefreshError-class.html"><a title="oauth2client.client.AccessTokenRefreshError" class="py-name" href="#" onclick="return doclink('link-105', 'AccessTokenRefreshError', 'link-105');">AccessTokenRefreshError</a></tt><tt class="py-op">(</tt><tt class="py-name">error_msg</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L711"></a><tt class="py-lineno"> 711</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials._revoke"></a><div id="OAuth2Credentials._revoke-def"><a name="L712"></a><tt class="py-lineno"> 712</tt> <a class="py-toggle" href="#" id="OAuth2Credentials._revoke-toggle" onclick="return toggle('OAuth2Credentials._revoke');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#_revoke">_revoke</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Credentials._revoke-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials._revoke-expanded"><a name="L713"></a><tt class="py-lineno"> 713</tt>  <tt class="py-line">    <tt class="py-docstring">"""Revokes the refresh_token and deletes the store if available.</tt> </tt>
+<a name="L714"></a><tt class="py-lineno"> 714</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L715"></a><tt class="py-lineno"> 715</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L716"></a><tt class="py-lineno"> 716</tt>  <tt class="py-line"><tt class="py-docstring">      http_request: callable, a callable that matches the method signature of</tt> </tt>
+<a name="L717"></a><tt class="py-lineno"> 717</tt>  <tt class="py-line"><tt class="py-docstring">        httplib2.Http.request, used to make the revoke request.</tt> </tt>
+<a name="L718"></a><tt class="py-lineno"> 718</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L719"></a><tt class="py-lineno"> 719</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name" targets="Method oauth2client.client.OAuth2Credentials._do_revoke()=oauth2client.client.OAuth2Credentials-class.html#_do_revoke"><a title="oauth2client.client.OAuth2Credentials._do_revoke" class="py-name" href="#" onclick="return doclink('link-106', '_do_revoke', 'link-106');">_do_revoke</a></tt><tt class="py-op">(</tt><tt class="py-name">http_request</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">refresh_token</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L720"></a><tt class="py-lineno"> 720</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2Credentials._do_revoke"></a><div id="OAuth2Credentials._do_revoke-def"><a name="L721"></a><tt class="py-lineno"> 721</tt> <a class="py-toggle" href="#" id="OAuth2Credentials._do_revoke-toggle" onclick="return toggle('OAuth2Credentials._do_revoke');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2Credentials-class.html#_do_revoke">_do_revoke</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">,</tt> <tt class="py-param">token</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2Credentials._do_revoke-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2Credentials._do_revoke-expanded"><a name="L722"></a><tt class="py-lineno"> 722</tt>  <tt class="py-line">    <tt class="py-docstring">"""Revokes the credentials and deletes the store if available.</tt> </tt>
 <a name="L723"></a><tt class="py-lineno"> 723</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L724"></a><tt class="py-lineno"> 724</tt>  <tt class="py-line"><tt class="py-docstring">  This credential does not require a flow to instantiate because it</tt> </tt>
-<a name="L725"></a><tt class="py-lineno"> 725</tt>  <tt class="py-line"><tt class="py-docstring">  represents a two legged flow, and therefore has all of the required</tt> </tt>
-<a name="L726"></a><tt class="py-lineno"> 726</tt>  <tt class="py-line"><tt class="py-docstring">  information to generate and refresh its own access tokens. It must</tt> </tt>
-<a name="L727"></a><tt class="py-lineno"> 727</tt>  <tt class="py-line"><tt class="py-docstring">  be subclassed to generate the appropriate assertion string.</tt> </tt>
-<a name="L728"></a><tt class="py-lineno"> 728</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L729"></a><tt class="py-lineno"> 729</tt>  <tt class="py-line"><tt class="py-docstring">  AssertionCredentials objects may be safely pickled and unpickled.</tt> </tt>
-<a name="L730"></a><tt class="py-lineno"> 730</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L731"></a><tt class="py-lineno"> 731</tt>  <tt class="py-line"> </tt>
-<a name="L732"></a><tt class="py-lineno"> 732</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-93', 'positional', 'link-41');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="AssertionCredentials.__init__"></a><div id="AssertionCredentials.__init__-def"><a name="L733"></a><tt class="py-lineno"> 733</tt> <a class="py-toggle" href="#" id="AssertionCredentials.__init__-toggle" onclick="return toggle('AssertionCredentials.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AssertionCredentials-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">assertion_type</tt><tt class="py-op">,</tt> <tt class="py-param">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L734"></a><tt class="py-lineno"> 734</tt>  <tt class="py-line">               <tt class="py-param">token_uri</tt><tt class="py-op">=</tt><tt class="py-string">'https://accounts.google.com/o/oauth2/token'</tt><tt class="py-op">,</tt> </tt>
-<a name="L735"></a><tt class="py-lineno"> 735</tt>  <tt class="py-line">               <tt class="py-op">**</tt><tt class="py-param">unused_kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AssertionCredentials.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AssertionCredentials.__init__-expanded"><a name="L736"></a><tt class="py-lineno"> 736</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for AssertionFlowCredentials.</tt> </tt>
-<a name="L737"></a><tt class="py-lineno"> 737</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L738"></a><tt class="py-lineno"> 738</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L739"></a><tt class="py-lineno"> 739</tt>  <tt class="py-line"><tt class="py-docstring">      assertion_type: string, assertion type that will be declared to the auth</tt> </tt>
-<a name="L740"></a><tt class="py-lineno"> 740</tt>  <tt class="py-line"><tt class="py-docstring">          server</tt> </tt>
-<a name="L741"></a><tt class="py-lineno"> 741</tt>  <tt class="py-line"><tt class="py-docstring">      user_agent: string, The HTTP User-Agent to provide for this application.</tt> </tt>
-<a name="L742"></a><tt class="py-lineno"> 742</tt>  <tt class="py-line"><tt class="py-docstring">      token_uri: string, URI for token endpoint. For convenience</tt> </tt>
-<a name="L743"></a><tt class="py-lineno"> 743</tt>  <tt class="py-line"><tt class="py-docstring">        defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
-<a name="L744"></a><tt class="py-lineno"> 744</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L745"></a><tt class="py-lineno"> 745</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-94" class="py-name" targets="Class oauth2client.client.AssertionCredentials=oauth2client.client.AssertionCredentials-class.html"><a title="oauth2client.client.AssertionCredentials" class="py-name" href="#" onclick="return doclink('link-94', 'AssertionCredentials', 'link-94');">AssertionCredentials</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="apiclient.discovery.Resource.__init__
-apiclient.errors.BatchError.__init__
-apiclient.errors.HttpError.__init__
-apiclient.errors.UnexpectedBodyError.__init__
-apiclient.errors.UnexpectedMethodError.__init__
-apiclient.http.BatchHttpRequest.__init__
-apiclient.http.HttpMock.__init__
-apiclient.http.HttpMockSequence.__init__
-apiclient.http.HttpRequest.__init__
-apiclient.http.HttpRequestMock.__init__
-apiclient.http.MediaDownloadProgress.__init__
-apiclient.http.MediaFileUpload.__init__
-apiclient.http.MediaInMemoryUpload.__init__
-apiclient.http.MediaIoBaseDownload.__init__
-apiclient.http.MediaIoBaseUpload.__init__
-apiclient.http.MediaUploadProgress.__init__
-apiclient.http.RequestMockBuilder.__init__
-apiclient.http._StreamSlice.__init__
-apiclient.model.JsonModel.__init__
-apiclient.model.ProtocolBufferModel.__init__
-apiclient.push.Channel.__init__
-apiclient.push.Headers.__init__
-apiclient.push.Subscription.__init__
-apiclient.push.WebhookChannel.__init__
-apiclient.schema.Schemas.__init__
-apiclient.schema._SchemaToStruct.__init__
-oauth2client.appengine.AppAssertionCredentials.__init__
-oauth2client.appengine.OAuth2Decorator.__init__
-oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__
-oauth2client.appengine.StorageByKeyName.__init__
-oauth2client.client.AccessTokenCredentials.__init__
-oauth2client.client.AssertionCredentials.__init__
-oauth2client.client.MemoryCache.__init__
-oauth2client.client.OAuth2Credentials.__init__
-oauth2client.client.OAuth2WebServerFlow.__init__
-oauth2client.client.SignedJwtAssertionCredentials.__init__
-oauth2client.django_orm.CredentialsField.__init__
-oauth2client.django_orm.FlowField.__init__
-oauth2client.django_orm.Storage.__init__
-oauth2client.file.Storage.__init__
-oauth2client.gce.AppAssertionCredentials.__init__
-oauth2client.keyring_storage.Storage.__init__
-oauth2client.locked_file.LockedFile.__init__
-oauth2client.locked_file._Opener.__init__
-oauth2client.multistore_file._MultiStore._Storage.__init__
-oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-95', '__init__', 'link-89');">__init__</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L746"></a><tt class="py-lineno"> 746</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L747"></a><tt class="py-lineno"> 747</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L748"></a><tt class="py-lineno"> 748</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L749"></a><tt class="py-lineno"> 749</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L750"></a><tt class="py-lineno"> 750</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L751"></a><tt class="py-lineno"> 751</tt>  <tt class="py-line">        <tt class="py-name">token_uri</tt><tt class="py-op">,</tt> </tt>
-<a name="L752"></a><tt class="py-lineno"> 752</tt>  <tt class="py-line">        <tt class="py-name">user_agent</tt><tt class="py-op">)</tt> </tt>
-<a name="L753"></a><tt class="py-lineno"> 753</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertion_type</tt> <tt class="py-op">=</tt> <tt class="py-name">assertion_type</tt> </tt>
-</div><a name="L754"></a><tt class="py-lineno"> 754</tt>  <tt class="py-line"> </tt>
-<a name="AssertionCredentials._generate_refresh_request_body"></a><div id="AssertionCredentials._generate_refresh_request_body-def"><a name="L755"></a><tt class="py-lineno"> 755</tt> <a class="py-toggle" href="#" id="AssertionCredentials._generate_refresh_request_body-toggle" onclick="return toggle('AssertionCredentials._generate_refresh_request_body');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body">_generate_refresh_request_body</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="AssertionCredentials._generate_refresh_request_body-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AssertionCredentials._generate_refresh_request_body-expanded"><a name="L756"></a><tt class="py-lineno"> 756</tt>  <tt class="py-line">    <tt class="py-name">assertion</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name" targets="Method oauth2client.client.AssertionCredentials._generate_assertion()=oauth2client.client.AssertionCredentials-class.html#_generate_assertion,Method oauth2client.client.SignedJwtAssertionCredentials._generate_assertion()=oauth2client.client.SignedJwtAssertionCredentials-class.html#_generate_assertion"><a title="oauth2client.client.AssertionCredentials._generate_assertion
-oauth2client.client.SignedJwtAssertionCredentials._generate_assertion" class="py-name" href="#" onclick="return doclink('link-96', '_generate_assertion', 'link-96');">_generate_assertion</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L757"></a><tt class="py-lineno"> 757</tt>  <tt class="py-line"> </tt>
-<a name="L758"></a><tt class="py-lineno"> 758</tt>  <tt class="py-line">    <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-op">{</tt> </tt>
-<a name="L759"></a><tt class="py-lineno"> 759</tt>  <tt class="py-line">        <tt class="py-string">'assertion_type'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertion_type</tt><tt class="py-op">,</tt> </tt>
-<a name="L760"></a><tt class="py-lineno"> 760</tt>  <tt class="py-line">        <tt class="py-string">'assertion'</tt><tt class="py-op">:</tt> <tt class="py-name">assertion</tt><tt class="py-op">,</tt> </tt>
-<a name="L761"></a><tt class="py-lineno"> 761</tt>  <tt class="py-line">        <tt class="py-string">'grant_type'</tt><tt class="py-op">:</tt> <tt class="py-string">'assertion'</tt><tt class="py-op">,</tt> </tt>
-<a name="L762"></a><tt class="py-lineno"> 762</tt>  <tt class="py-line">        <tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
-<a name="L763"></a><tt class="py-lineno"> 763</tt>  <tt class="py-line"> </tt>
-<a name="L764"></a><tt class="py-lineno"> 764</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">body</tt> </tt>
-</div><a name="L765"></a><tt class="py-lineno"> 765</tt>  <tt class="py-line"> </tt>
-<a name="AssertionCredentials._generate_assertion"></a><div id="AssertionCredentials._generate_assertion-def"><a name="L766"></a><tt class="py-lineno"> 766</tt> <a class="py-toggle" href="#" id="AssertionCredentials._generate_assertion-toggle" onclick="return toggle('AssertionCredentials._generate_assertion');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AssertionCredentials-class.html#_generate_assertion">_generate_assertion</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="AssertionCredentials._generate_assertion-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AssertionCredentials._generate_assertion-expanded"><a name="L767"></a><tt class="py-lineno"> 767</tt>  <tt class="py-line">    <tt class="py-docstring">"""Generate the assertion string that will be used in the access token</tt> </tt>
-<a name="L768"></a><tt class="py-lineno"> 768</tt>  <tt class="py-line"><tt class="py-docstring">    request.</tt> </tt>
-<a name="L769"></a><tt class="py-lineno"> 769</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L770"></a><tt class="py-lineno"> 770</tt>  <tt class="py-line">    <tt id="link-97" class="py-name"><a title="apiclient.model._abstract
-oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-97', '_abstract', 'link-16');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L771"></a><tt class="py-lineno"> 771</tt>  <tt class="py-line"> </tt>
-<a name="L772"></a><tt class="py-lineno"> 772</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt id="link-98" class="py-name"><a title="oauth2client.client.HAS_CRYPTO" class="py-name" href="#" onclick="return doclink('link-98', 'HAS_CRYPTO', 'link-5');">HAS_CRYPTO</a></tt><tt class="py-op">:</tt> </tt>
-<a name="SignedJwtAssertionCredentials"></a><div id="SignedJwtAssertionCredentials-def"><a name="L773"></a><tt class="py-lineno"> 773</tt>  <tt class="py-line">  <tt class="py-comment"># PyOpenSSL and PyCrypto are not prerequisites for oauth2client, so if it is</tt> </tt>
-<a name="L774"></a><tt class="py-lineno"> 774</tt>  <tt class="py-line">  <tt class="py-comment"># missing then don't create the SignedJwtAssertionCredentials or the</tt> </tt>
-<a name="L775"></a><tt class="py-lineno"> 775</tt>  <tt class="py-line">  <tt class="py-comment"># verify_id_token() method.</tt> </tt>
-<a name="L776"></a><tt class="py-lineno"> 776</tt>  <tt class="py-line"> </tt>
-<a name="L777"></a><tt class="py-lineno"> 777</tt> <a class="py-toggle" href="#" id="SignedJwtAssertionCredentials-toggle" onclick="return toggle('SignedJwtAssertionCredentials');">-</a><tt class="py-line">  <tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.SignedJwtAssertionCredentials-class.html">SignedJwtAssertionCredentials</a><tt class="py-op">(</tt><tt class="py-base-class">AssertionCredentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="SignedJwtAssertionCredentials-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="SignedJwtAssertionCredentials-expanded"><a name="L778"></a><tt class="py-lineno"> 778</tt>  <tt class="py-line">    <tt class="py-docstring">"""Credentials object used for OAuth 2.0 Signed JWT assertion grants.</tt> </tt>
-<a name="L779"></a><tt class="py-lineno"> 779</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L780"></a><tt class="py-lineno"> 780</tt>  <tt class="py-line"><tt class="py-docstring">    This credential does not require a flow to instantiate because it represents</tt> </tt>
-<a name="L781"></a><tt class="py-lineno"> 781</tt>  <tt class="py-line"><tt class="py-docstring">    a two legged flow, and therefore has all of the required information to</tt> </tt>
-<a name="L782"></a><tt class="py-lineno"> 782</tt>  <tt class="py-line"><tt class="py-docstring">    generate and refresh its own access tokens.</tt> </tt>
+<a name="L724"></a><tt class="py-lineno"> 724</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L725"></a><tt class="py-lineno"> 725</tt>  <tt class="py-line"><tt class="py-docstring">      http_request: callable, a callable that matches the method signature of</tt> </tt>
+<a name="L726"></a><tt class="py-lineno"> 726</tt>  <tt class="py-line"><tt class="py-docstring">        httplib2.Http.request, used to make the refresh request.</tt> </tt>
+<a name="L727"></a><tt class="py-lineno"> 727</tt>  <tt class="py-line"><tt class="py-docstring">      token: A string used as the token to be revoked. Can be either an</tt> </tt>
+<a name="L728"></a><tt class="py-lineno"> 728</tt>  <tt class="py-line"><tt class="py-docstring">        access_token or refresh_token.</tt> </tt>
+<a name="L729"></a><tt class="py-lineno"> 729</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L730"></a><tt class="py-lineno"> 730</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L731"></a><tt class="py-lineno"> 731</tt>  <tt class="py-line"><tt class="py-docstring">      TokenRevokeError: If the revoke request does not return with a 200 OK.</tt> </tt>
+<a name="L732"></a><tt class="py-lineno"> 732</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L733"></a><tt class="py-lineno"> 733</tt>  <tt class="py-line">    <tt id="link-107" class="py-name"><a title="apiclient.discovery.logger
+oauth2client.appengine.logger
+oauth2client.client.logger
+oauth2client.crypt.logger
+oauth2client.gce.logger
+oauth2client.locked_file.logger
+oauth2client.multistore_file.logger
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-107', 'logger', 'link-19');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Revoking token'</tt><tt class="py-op">)</tt> </tt>
+<a name="L734"></a><tt class="py-lineno"> 734</tt>  <tt class="py-line">    <tt id="link-108" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-108', 'query_params', 'link-52');">query_params</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'token'</tt><tt class="py-op">:</tt> <tt class="py-name">token</tt><tt class="py-op">}</tt> </tt>
+<a name="L735"></a><tt class="py-lineno"> 735</tt>  <tt class="py-line">    <tt class="py-name">token_revoke_uri</tt> <tt class="py-op">=</tt> <tt id="link-109" class="py-name" targets="Function oauth2client.client._update_query_params()=oauth2client.client-module.html#_update_query_params"><a title="oauth2client.client._update_query_params" class="py-name" href="#" onclick="return doclink('link-109', '_update_query_params', 'link-109');">_update_query_params</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">revoke_uri</tt><tt class="py-op">,</tt> <tt id="link-110" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-110', 'query_params', 'link-52');">query_params</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L736"></a><tt class="py-lineno"> 736</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">http_request</tt><tt class="py-op">(</tt><tt class="py-name">token_revoke_uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L737"></a><tt class="py-lineno"> 737</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">200</tt><tt class="py-op">:</tt> </tt>
+<a name="L738"></a><tt class="py-lineno"> 738</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L739"></a><tt class="py-lineno"> 739</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L740"></a><tt class="py-lineno"> 740</tt>  <tt class="py-line">      <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-string">'Invalid response %s.'</tt> <tt class="py-op">%</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> </tt>
+<a name="L741"></a><tt class="py-lineno"> 741</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L742"></a><tt class="py-lineno"> 742</tt>  <tt class="py-line">        <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-111', 'loads', 'link-34');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L743"></a><tt class="py-lineno"> 743</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'error'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
+<a name="L744"></a><tt class="py-lineno"> 744</tt>  <tt class="py-line">          <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'error'</tt><tt class="py-op">]</tt> </tt>
+<a name="L745"></a><tt class="py-lineno"> 745</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt> <tt class="py-name">StandardError</tt><tt class="py-op">:</tt> </tt>
+<a name="L746"></a><tt class="py-lineno"> 746</tt>  <tt class="py-line">        <tt class="py-keyword">pass</tt> </tt>
+<a name="L747"></a><tt class="py-lineno"> 747</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-112" class="py-name" targets="Class oauth2client.client.TokenRevokeError=oauth2client.client.TokenRevokeError-class.html"><a title="oauth2client.client.TokenRevokeError" class="py-name" href="#" onclick="return doclink('link-112', 'TokenRevokeError', 'link-112');">TokenRevokeError</a></tt><tt class="py-op">(</tt><tt class="py-name">error_msg</tt><tt class="py-op">)</tt> </tt>
+<a name="L748"></a><tt class="py-lineno"> 748</tt>  <tt class="py-line"> </tt>
+<a name="L749"></a><tt class="py-lineno"> 749</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">:</tt> </tt>
+<a name="L750"></a><tt class="py-lineno"> 750</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">store</tt><tt class="py-op">.</tt><tt id="link-113" class="py-name" targets="Method oauth2client.client.MemoryCache.delete()=oauth2client.client.MemoryCache-class.html#delete,Method oauth2client.client.Storage.delete()=oauth2client.client.Storage-class.html#delete"><a title="oauth2client.client.MemoryCache.delete
+oauth2client.client.Storage.delete" class="py-name" href="#" onclick="return doclink('link-113', 'delete', 'link-113');">delete</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L751"></a><tt class="py-lineno"> 751</tt>  <tt class="py-line"> </tt>
+<a name="AccessTokenCredentials"></a><div id="AccessTokenCredentials-def"><a name="L752"></a><tt class="py-lineno"> 752</tt>  <tt class="py-line"> </tt>
+<a name="L753"></a><tt class="py-lineno"> 753</tt> <a class="py-toggle" href="#" id="AccessTokenCredentials-toggle" onclick="return toggle('AccessTokenCredentials');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.AccessTokenCredentials-class.html">AccessTokenCredentials</a><tt class="py-op">(</tt><tt class="py-base-class">OAuth2Credentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AccessTokenCredentials-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="AccessTokenCredentials-expanded"><a name="L754"></a><tt class="py-lineno"> 754</tt>  <tt class="py-line">  <tt class="py-docstring">"""Credentials object for OAuth 2.0.</tt> </tt>
+<a name="L755"></a><tt class="py-lineno"> 755</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L756"></a><tt class="py-lineno"> 756</tt>  <tt class="py-line"><tt class="py-docstring">  Credentials can be applied to an httplib2.Http object using the</tt> </tt>
+<a name="L757"></a><tt class="py-lineno"> 757</tt>  <tt class="py-line"><tt class="py-docstring">  authorize() method, which then signs each request from that object</tt> </tt>
+<a name="L758"></a><tt class="py-lineno"> 758</tt>  <tt class="py-line"><tt class="py-docstring">  with the OAuth 2.0 access token. This set of credentials is for the</tt> </tt>
+<a name="L759"></a><tt class="py-lineno"> 759</tt>  <tt class="py-line"><tt class="py-docstring">  use case where you have acquired an OAuth 2.0 access_token from</tt> </tt>
+<a name="L760"></a><tt class="py-lineno"> 760</tt>  <tt class="py-line"><tt class="py-docstring">  another place such as a JavaScript client or another web</tt> </tt>
+<a name="L761"></a><tt class="py-lineno"> 761</tt>  <tt class="py-line"><tt class="py-docstring">  application, and wish to use it from Python. Because only the</tt> </tt>
+<a name="L762"></a><tt class="py-lineno"> 762</tt>  <tt class="py-line"><tt class="py-docstring">  access_token is present it can not be refreshed and will in time</tt> </tt>
+<a name="L763"></a><tt class="py-lineno"> 763</tt>  <tt class="py-line"><tt class="py-docstring">  expire.</tt> </tt>
+<a name="L764"></a><tt class="py-lineno"> 764</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L765"></a><tt class="py-lineno"> 765</tt>  <tt class="py-line"><tt class="py-docstring">  AccessTokenCredentials objects may be safely pickled and unpickled.</tt> </tt>
+<a name="L766"></a><tt class="py-lineno"> 766</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L767"></a><tt class="py-lineno"> 767</tt>  <tt class="py-line"><tt class="py-docstring">  Usage:</tt> </tt>
+<a name="L768"></a><tt class="py-lineno"> 768</tt>  <tt class="py-line"><tt class="py-docstring">    credentials = AccessTokenCredentials('&lt;an access token&gt;',</tt> </tt>
+<a name="L769"></a><tt class="py-lineno"> 769</tt>  <tt class="py-line"><tt class="py-docstring">      'my-user-agent/1.0')</tt> </tt>
+<a name="L770"></a><tt class="py-lineno"> 770</tt>  <tt class="py-line"><tt class="py-docstring">    http = httplib2.Http()</tt> </tt>
+<a name="L771"></a><tt class="py-lineno"> 771</tt>  <tt class="py-line"><tt class="py-docstring">    http = credentials.authorize(http)</tt> </tt>
+<a name="L772"></a><tt class="py-lineno"> 772</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L773"></a><tt class="py-lineno"> 773</tt>  <tt class="py-line"><tt class="py-docstring">  Exceptions:</tt> </tt>
+<a name="L774"></a><tt class="py-lineno"> 774</tt>  <tt class="py-line"><tt class="py-docstring">    AccessTokenCredentialsExpired: raised when the access_token expires or is</tt> </tt>
+<a name="L775"></a><tt class="py-lineno"> 775</tt>  <tt class="py-line"><tt class="py-docstring">      revoked.</tt> </tt>
+<a name="L776"></a><tt class="py-lineno"> 776</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L777"></a><tt class="py-lineno"> 777</tt>  <tt class="py-line"> </tt>
+<a name="AccessTokenCredentials.__init__"></a><div id="AccessTokenCredentials.__init__-def"><a name="L778"></a><tt class="py-lineno"> 778</tt> <a class="py-toggle" href="#" id="AccessTokenCredentials.__init__-toggle" onclick="return toggle('AccessTokenCredentials.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AccessTokenCredentials-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">access_token</tt><tt class="py-op">,</tt> <tt class="py-param">user_agent</tt><tt class="py-op">,</tt> <tt class="py-param">revoke_uri</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="AccessTokenCredentials.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AccessTokenCredentials.__init__-expanded"><a name="L779"></a><tt class="py-lineno"> 779</tt>  <tt class="py-line">    <tt class="py-docstring">"""Create an instance of OAuth2Credentials</tt> </tt>
+<a name="L780"></a><tt class="py-lineno"> 780</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L781"></a><tt class="py-lineno"> 781</tt>  <tt class="py-line"><tt class="py-docstring">    This is one of the few types if Credentials that you should contrust,</tt> </tt>
+<a name="L782"></a><tt class="py-lineno"> 782</tt>  <tt class="py-line"><tt class="py-docstring">    Credentials objects are usually instantiated by a Flow.</tt> </tt>
 <a name="L783"></a><tt class="py-lineno"> 783</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L784"></a><tt class="py-lineno"> 784</tt>  <tt class="py-line"><tt class="py-docstring">    SignedJwtAssertionCredentials requires either PyOpenSSL, or PyCrypto 2.6 or</tt> </tt>
-<a name="L785"></a><tt class="py-lineno"> 785</tt>  <tt class="py-line"><tt class="py-docstring">    later. For App Engine you may also consider using AppAssertionCredentials.</tt> </tt>
-<a name="L786"></a><tt class="py-lineno"> 786</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L787"></a><tt class="py-lineno"> 787</tt>  <tt class="py-line"> </tt>
-<a name="L788"></a><tt class="py-lineno"> 788</tt>  <tt class="py-line">    <tt id="link-99" class="py-name" targets="Variable oauth2client.client.SignedJwtAssertionCredentials.MAX_TOKEN_LIFETIME_SECS=oauth2client.client.SignedJwtAssertionCredentials-class.html#MAX_TOKEN_LIFETIME_SECS,Variable oauth2client.crypt.MAX_TOKEN_LIFETIME_SECS=oauth2client.crypt-module.html#MAX_TOKEN_LIFETIME_SECS"><a title="oauth2client.client.SignedJwtAssertionCredentials.MAX_TOKEN_LIFETIME_SECS
-oauth2client.crypt.MAX_TOKEN_LIFETIME_SECS" class="py-name" href="#" onclick="return doclink('link-99', 'MAX_TOKEN_LIFETIME_SECS', 'link-99');">MAX_TOKEN_LIFETIME_SECS</a></tt> <tt class="py-op">=</tt> <tt class="py-number">3600</tt> <tt class="py-comment"># 1 hour in seconds</tt> </tt>
-<a name="L789"></a><tt class="py-lineno"> 789</tt>  <tt class="py-line"> </tt>
-<a name="L790"></a><tt class="py-lineno"> 790</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-100', 'positional', 'link-41');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
-<a name="SignedJwtAssertionCredentials.__init__"></a><div id="SignedJwtAssertionCredentials.__init__-def"><a name="L791"></a><tt class="py-lineno"> 791</tt> <a class="py-toggle" href="#" id="SignedJwtAssertionCredentials.__init__-toggle" onclick="return toggle('SignedJwtAssertionCredentials.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> </tt>
-<a name="L792"></a><tt class="py-lineno"> 792</tt>  <tt class="py-line">        <tt class="py-param">service_account_name</tt><tt class="py-op">,</tt> </tt>
-<a name="L793"></a><tt class="py-lineno"> 793</tt>  <tt class="py-line">        <tt class="py-param">private_key</tt><tt class="py-op">,</tt> </tt>
-<a name="L794"></a><tt class="py-lineno"> 794</tt>  <tt class="py-line">        <tt class="py-param">scope</tt><tt class="py-op">,</tt> </tt>
-<a name="L795"></a><tt class="py-lineno"> 795</tt>  <tt class="py-line">        <tt class="py-param">private_key_password</tt><tt class="py-op">=</tt><tt class="py-string">'notasecret'</tt><tt class="py-op">,</tt> </tt>
-<a name="L796"></a><tt class="py-lineno"> 796</tt>  <tt class="py-line">        <tt class="py-param">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L797"></a><tt class="py-lineno"> 797</tt>  <tt class="py-line">        <tt class="py-param">token_uri</tt><tt class="py-op">=</tt><tt class="py-string">'https://accounts.google.com/o/oauth2/token'</tt><tt class="py-op">,</tt> </tt>
-<a name="L798"></a><tt class="py-lineno"> 798</tt>  <tt class="py-line">        <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="SignedJwtAssertionCredentials.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++++"></div><div id="SignedJwtAssertionCredentials.__init__-expanded"><a name="L799"></a><tt class="py-lineno"> 799</tt>  <tt class="py-line">      <tt class="py-docstring">"""Constructor for SignedJwtAssertionCredentials.</tt> </tt>
-<a name="L800"></a><tt class="py-lineno"> 800</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L801"></a><tt class="py-lineno"> 801</tt>  <tt class="py-line"><tt class="py-docstring">      Args:</tt> </tt>
-<a name="L802"></a><tt class="py-lineno"> 802</tt>  <tt class="py-line"><tt class="py-docstring">        service_account_name: string, id for account, usually an email address.</tt> </tt>
-<a name="L803"></a><tt class="py-lineno"> 803</tt>  <tt class="py-line"><tt class="py-docstring">        private_key: string, private key in PKCS12 or PEM format.</tt> </tt>
-<a name="L804"></a><tt class="py-lineno"> 804</tt>  <tt class="py-line"><tt class="py-docstring">        scope: string or iterable of strings, scope(s) of the credentials being</tt> </tt>
-<a name="L805"></a><tt class="py-lineno"> 805</tt>  <tt class="py-line"><tt class="py-docstring">          requested.</tt> </tt>
-<a name="L806"></a><tt class="py-lineno"> 806</tt>  <tt class="py-line"><tt class="py-docstring">        private_key_password: string, password for private_key, unused if</tt> </tt>
-<a name="L807"></a><tt class="py-lineno"> 807</tt>  <tt class="py-line"><tt class="py-docstring">          private_key is in PEM format.</tt> </tt>
-<a name="L808"></a><tt class="py-lineno"> 808</tt>  <tt class="py-line"><tt class="py-docstring">        user_agent: string, HTTP User-Agent to provide for this application.</tt> </tt>
-<a name="L809"></a><tt class="py-lineno"> 809</tt>  <tt class="py-line"><tt class="py-docstring">        token_uri: string, URI for token endpoint. For convenience</tt> </tt>
-<a name="L810"></a><tt class="py-lineno"> 810</tt>  <tt class="py-line"><tt class="py-docstring">          defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
-<a name="L811"></a><tt class="py-lineno"> 811</tt>  <tt class="py-line"><tt class="py-docstring">        kwargs: kwargs, Additional parameters to add to the JWT token, for</tt> </tt>
-<a name="L812"></a><tt class="py-lineno"> 812</tt>  <tt class="py-line"><tt class="py-docstring">          example prn=joe@xample.org."""</tt> </tt>
-<a name="L813"></a><tt class="py-lineno"> 813</tt>  <tt class="py-line"> </tt>
-<a name="L814"></a><tt class="py-lineno"> 814</tt>  <tt class="py-line">      <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-101" class="py-name" targets="Class oauth2client.client.SignedJwtAssertionCredentials=oauth2client.client.SignedJwtAssertionCredentials-class.html"><a title="oauth2client.client.SignedJwtAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-101', 'SignedJwtAssertionCredentials', 'link-101');">SignedJwtAssertionCredentials</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name"><a title="apiclient.discovery.Resource.__init__
+<a name="L784"></a><tt class="py-lineno"> 784</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L785"></a><tt class="py-lineno"> 785</tt>  <tt class="py-line"><tt class="py-docstring">      access_token: string, access token.</tt> </tt>
+<a name="L786"></a><tt class="py-lineno"> 786</tt>  <tt class="py-line"><tt class="py-docstring">      user_agent: string, The HTTP User-Agent to provide for this application.</tt> </tt>
+<a name="L787"></a><tt class="py-lineno"> 787</tt>  <tt class="py-line"><tt class="py-docstring">      revoke_uri: string, URI for revoke endpoint. Defaults to None; a token</tt> </tt>
+<a name="L788"></a><tt class="py-lineno"> 788</tt>  <tt class="py-line"><tt class="py-docstring">        can't be revoked if this is None.</tt> </tt>
+<a name="L789"></a><tt class="py-lineno"> 789</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L790"></a><tt class="py-lineno"> 790</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-114" class="py-name" targets="Class oauth2client.client.AccessTokenCredentials=oauth2client.client.AccessTokenCredentials-class.html"><a title="oauth2client.client.AccessTokenCredentials" class="py-name" href="#" onclick="return doclink('link-114', 'AccessTokenCredentials', 'link-114');">AccessTokenCredentials</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-115" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.discovery.ResourceMethodParameters.__init__()=apiclient.discovery.ResourceMethodParameters-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
 apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
@@ -1166,484 +1069,736 @@
 oauth2client.locked_file.LockedFile.__init__
 oauth2client.locked_file._Opener.__init__
 oauth2client.multistore_file._MultiStore._Storage.__init__
-oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-102', '__init__', 'link-89');">__init__</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L815"></a><tt class="py-lineno"> 815</tt>  <tt class="py-line">          <tt class="py-string">'http://oauth.net/grant_type/jwt/1.0/bearer'</tt><tt class="py-op">,</tt> </tt>
-<a name="L816"></a><tt class="py-lineno"> 816</tt>  <tt class="py-line">          <tt class="py-name">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">user_agent</tt><tt class="py-op">,</tt> </tt>
-<a name="L817"></a><tt class="py-lineno"> 817</tt>  <tt class="py-line">          <tt class="py-name">token_uri</tt><tt class="py-op">=</tt><tt class="py-name">token_uri</tt><tt class="py-op">,</tt> </tt>
-<a name="L818"></a><tt class="py-lineno"> 818</tt>  <tt class="py-line">          <tt class="py-op">)</tt> </tt>
-<a name="L819"></a><tt class="py-lineno"> 819</tt>  <tt class="py-line"> </tt>
-<a name="L820"></a><tt class="py-lineno"> 820</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt> <tt class="py-op">=</tt> <tt id="link-103" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-103', 'util', 'link-2');">util</a></tt><tt class="py-op">.</tt><tt id="link-104" class="py-name" targets="Function oauth2client.util.scopes_to_string()=oauth2client.util-module.html#scopes_to_string"><a title="oauth2client.util.scopes_to_string" class="py-name" href="#" onclick="return doclink('link-104', 'scopes_to_string', 'link-104');">scopes_to_string</a></tt><tt class="py-op">(</tt><tt class="py-name">scope</tt><tt class="py-op">)</tt> </tt>
-<a name="L821"></a><tt class="py-lineno"> 821</tt>  <tt class="py-line"> </tt>
-<a name="L822"></a><tt class="py-lineno"> 822</tt>  <tt class="py-line">      <tt class="py-comment"># Keep base64 encoded so it can be stored in JSON.</tt> </tt>
-<a name="L823"></a><tt class="py-lineno"> 823</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">private_key</tt> <tt class="py-op">=</tt> <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">b64encode</tt><tt class="py-op">(</tt><tt class="py-name">private_key</tt><tt class="py-op">)</tt> </tt>
-<a name="L824"></a><tt class="py-lineno"> 824</tt>  <tt class="py-line"> </tt>
-<a name="L825"></a><tt class="py-lineno"> 825</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">private_key_password</tt> <tt class="py-op">=</tt> <tt class="py-name">private_key_password</tt> </tt>
-<a name="L826"></a><tt class="py-lineno"> 826</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">service_account_name</tt> <tt class="py-op">=</tt> <tt class="py-name">service_account_name</tt> </tt>
-<a name="L827"></a><tt class="py-lineno"> 827</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kwargs</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt> </tt>
-</div><a name="L828"></a><tt class="py-lineno"> 828</tt>  <tt class="py-line"> </tt>
-<a name="L829"></a><tt class="py-lineno"> 829</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
-<a name="SignedJwtAssertionCredentials.from_json"></a><div id="SignedJwtAssertionCredentials.from_json-def"><a name="L830"></a><tt class="py-lineno"> 830</tt> <a class="py-toggle" href="#" id="SignedJwtAssertionCredentials.from_json-toggle" onclick="return toggle('SignedJwtAssertionCredentials.from_json');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.SignedJwtAssertionCredentials-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="SignedJwtAssertionCredentials.from_json-collapsed" style="display:none;" pad="++++" indent="++++++++++"></div><div id="SignedJwtAssertionCredentials.from_json-expanded"><a name="L831"></a><tt class="py-lineno"> 831</tt>  <tt class="py-line">      <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-105', 'loads', 'link-23');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
-<a name="L832"></a><tt class="py-lineno"> 832</tt>  <tt class="py-line">      <tt class="py-name">retval</tt> <tt class="py-op">=</tt> <tt id="link-106" class="py-name"><a title="oauth2client.client.SignedJwtAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-106', 'SignedJwtAssertionCredentials', 'link-101');">SignedJwtAssertionCredentials</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L833"></a><tt class="py-lineno"> 833</tt>  <tt class="py-line">          <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'service_account_name'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L834"></a><tt class="py-lineno"> 834</tt>  <tt class="py-line">          <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">b64decode</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'private_key'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L835"></a><tt class="py-lineno"> 835</tt>  <tt class="py-line">          <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'scope'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L836"></a><tt class="py-lineno"> 836</tt>  <tt class="py-line">          <tt class="py-name">private_key_password</tt><tt class="py-op">=</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'private_key_password'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L837"></a><tt class="py-lineno"> 837</tt>  <tt class="py-line">          <tt class="py-name">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'user_agent'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L838"></a><tt class="py-lineno"> 838</tt>  <tt class="py-line">          <tt class="py-name">token_uri</tt><tt class="py-op">=</tt><tt class="py-name">data</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="L839"></a><tt class="py-lineno"> 839</tt>  <tt class="py-line">          <tt class="py-op">**</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'kwargs'</tt><tt class="py-op">]</tt> </tt>
-<a name="L840"></a><tt class="py-lineno"> 840</tt>  <tt class="py-line">          <tt class="py-op">)</tt> </tt>
-<a name="L841"></a><tt class="py-lineno"> 841</tt>  <tt class="py-line">      <tt class="py-name">retval</tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'invalid'</tt><tt class="py-op">]</tt> </tt>
-<a name="L842"></a><tt class="py-lineno"> 842</tt>  <tt class="py-line">      <tt class="py-name">retval</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'access_token'</tt><tt class="py-op">]</tt> </tt>
-<a name="L843"></a><tt class="py-lineno"> 843</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">retval</tt> </tt>
-</div><a name="L844"></a><tt class="py-lineno"> 844</tt>  <tt class="py-line"> </tt>
-<a name="SignedJwtAssertionCredentials._generate_assertion"></a><div id="SignedJwtAssertionCredentials._generate_assertion-def"><a name="L845"></a><tt class="py-lineno"> 845</tt> <a class="py-toggle" href="#" id="SignedJwtAssertionCredentials._generate_assertion-toggle" onclick="return toggle('SignedJwtAssertionCredentials._generate_assertion');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.SignedJwtAssertionCredentials-class.html#_generate_assertion">_generate_assertion</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="SignedJwtAssertionCredentials._generate_assertion-collapsed" style="display:none;" pad="++++" indent="++++++++++"></div><div id="SignedJwtAssertionCredentials._generate_assertion-expanded"><a name="L846"></a><tt class="py-lineno"> 846</tt>  <tt class="py-line">      <tt class="py-docstring">"""Generate the assertion that will be used in the request."""</tt> </tt>
-<a name="L847"></a><tt class="py-lineno"> 847</tt>  <tt class="py-line">      <tt class="py-name">now</tt> <tt class="py-op">=</tt> <tt class="py-name">long</tt><tt class="py-op">(</tt><tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L848"></a><tt class="py-lineno"> 848</tt>  <tt class="py-line">      <tt class="py-name">payload</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L849"></a><tt class="py-lineno"> 849</tt>  <tt class="py-line">          <tt class="py-string">'aud'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_uri</tt><tt class="py-op">,</tt> </tt>
-<a name="L850"></a><tt class="py-lineno"> 850</tt>  <tt class="py-line">          <tt class="py-string">'scope'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
-<a name="L851"></a><tt class="py-lineno"> 851</tt>  <tt class="py-line">          <tt class="py-string">'iat'</tt><tt class="py-op">:</tt> <tt class="py-name">now</tt><tt class="py-op">,</tt> </tt>
-<a name="L852"></a><tt class="py-lineno"> 852</tt>  <tt class="py-line">          <tt class="py-string">'exp'</tt><tt class="py-op">:</tt> <tt class="py-name">now</tt> <tt class="py-op">+</tt> <tt id="link-107" class="py-name"><a title="oauth2client.client.SignedJwtAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-107', 'SignedJwtAssertionCredentials', 'link-101');">SignedJwtAssertionCredentials</a></tt><tt class="py-op">.</tt><tt id="link-108" class="py-name"><a title="oauth2client.client.SignedJwtAssertionCredentials.MAX_TOKEN_LIFETIME_SECS
-oauth2client.crypt.MAX_TOKEN_LIFETIME_SECS" class="py-name" href="#" onclick="return doclink('link-108', 'MAX_TOKEN_LIFETIME_SECS', 'link-99');">MAX_TOKEN_LIFETIME_SECS</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L853"></a><tt class="py-lineno"> 853</tt>  <tt class="py-line">          <tt class="py-string">'iss'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">service_account_name</tt> </tt>
-<a name="L854"></a><tt class="py-lineno"> 854</tt>  <tt class="py-line">      <tt class="py-op">}</tt> </tt>
-<a name="L855"></a><tt class="py-lineno"> 855</tt>  <tt class="py-line">      <tt class="py-name">payload</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
-<a name="L856"></a><tt class="py-lineno"> 856</tt>  <tt class="py-line">      <tt id="link-109" class="py-name"><a title="apiclient.discovery.logger
-oauth2client.appengine.logger
-oauth2client.client.logger
-oauth2client.crypt.logger
-oauth2client.gce.logger
-oauth2client.locked_file.logger
-oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-109', 'logger', 'link-9');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L857"></a><tt class="py-lineno"> 857</tt>  <tt class="py-line"> </tt>
-<a name="L858"></a><tt class="py-lineno"> 858</tt>  <tt class="py-line">      <tt class="py-name">private_key</tt> <tt class="py-op">=</tt> <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">b64decode</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">private_key</tt><tt class="py-op">)</tt> </tt>
-<a name="L859"></a><tt class="py-lineno"> 859</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-110" class="py-name"><a title="oauth2client.crypt" class="py-name" href="#" onclick="return doclink('link-110', 'crypt', 'link-7');">crypt</a></tt><tt class="py-op">.</tt><tt id="link-111" class="py-name" targets="Function oauth2client.crypt.make_signed_jwt()=oauth2client.crypt-module.html#make_signed_jwt"><a title="oauth2client.crypt.make_signed_jwt" class="py-name" href="#" onclick="return doclink('link-111', 'make_signed_jwt', 'link-111');">make_signed_jwt</a></tt><tt class="py-op">(</tt><tt id="link-112" class="py-name"><a title="oauth2client.crypt" class="py-name" href="#" onclick="return doclink('link-112', 'crypt', 'link-7');">crypt</a></tt><tt class="py-op">.</tt><tt id="link-113" class="py-name" targets="Variable oauth2client.crypt.Signer=oauth2client.crypt-module.html#Signer"><a title="oauth2client.crypt.Signer" class="py-name" href="#" onclick="return doclink('link-113', 'Signer', 'link-113');">Signer</a></tt><tt class="py-op">.</tt><tt class="py-name">from_string</tt><tt class="py-op">(</tt> </tt>
-<a name="L860"></a><tt class="py-lineno"> 860</tt>  <tt class="py-line">          <tt class="py-name">private_key</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">private_key_password</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L861"></a><tt class="py-lineno"> 861</tt>  <tt class="py-line"> </tt>
-<a name="L862"></a><tt class="py-lineno"> 862</tt>  <tt class="py-line">  <tt class="py-comment"># Only used in verify_id_token(), which is always calling to the same URI</tt> </tt>
-<a name="L863"></a><tt class="py-lineno"> 863</tt>  <tt class="py-line">  <tt class="py-comment"># for the certs.</tt> </tt>
-<a name="L864"></a><tt class="py-lineno"> 864</tt>  <tt class="py-line">  <tt id="link-114" class="py-name" targets="Variable oauth2client.client._cached_http=oauth2client.client-module.html#_cached_http"><a title="oauth2client.client._cached_http" class="py-name" href="#" onclick="return doclink('link-114', '_cached_http', 'link-114');">_cached_http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Http</tt><tt class="py-op">(</tt><tt id="link-115" class="py-name" targets="Class oauth2client.client.MemoryCache=oauth2client.client.MemoryCache-class.html"><a title="oauth2client.client.MemoryCache" class="py-name" href="#" onclick="return doclink('link-115', 'MemoryCache', 'link-115');">MemoryCache</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L865"></a><tt class="py-lineno"> 865</tt>  <tt class="py-line"> </tt>
-<a name="L866"></a><tt class="py-lineno"> 866</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-116', 'positional', 'link-41');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="verify_id_token"></a><div id="verify_id_token-def"><a name="L867"></a><tt class="py-lineno"> 867</tt> <a class="py-toggle" href="#" id="verify_id_token-toggle" onclick="return toggle('verify_id_token');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#verify_id_token">verify_id_token</a><tt class="py-op">(</tt><tt class="py-param">id_token</tt><tt class="py-op">,</tt> <tt class="py-param">audience</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L868"></a><tt class="py-lineno"> 868</tt>  <tt class="py-line">      <tt class="py-param">cert_uri</tt><tt class="py-op">=</tt><tt id="link-117" class="py-name"><a title="oauth2client.client.ID_TOKEN_VERIFICATON_CERTS" class="py-name" href="#" onclick="return doclink('link-117', 'ID_TOKEN_VERIFICATON_CERTS', 'link-11');">ID_TOKEN_VERIFICATON_CERTS</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="verify_id_token-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="verify_id_token-expanded"><a name="L869"></a><tt class="py-lineno"> 869</tt>  <tt class="py-line">    <tt class="py-docstring">"""Verifies a signed JWT id_token.</tt> </tt>
-<a name="L870"></a><tt class="py-lineno"> 870</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L871"></a><tt class="py-lineno"> 871</tt>  <tt class="py-line"><tt class="py-docstring">    This function requires PyOpenSSL and because of that it does not work on</tt> </tt>
-<a name="L872"></a><tt class="py-lineno"> 872</tt>  <tt class="py-line"><tt class="py-docstring">    App Engine.</tt> </tt>
-<a name="L873"></a><tt class="py-lineno"> 873</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L874"></a><tt class="py-lineno"> 874</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L875"></a><tt class="py-lineno"> 875</tt>  <tt class="py-line"><tt class="py-docstring">      id_token: string, A Signed JWT.</tt> </tt>
-<a name="L876"></a><tt class="py-lineno"> 876</tt>  <tt class="py-line"><tt class="py-docstring">      audience: string, The audience 'aud' that the token should be for.</tt> </tt>
-<a name="L877"></a><tt class="py-lineno"> 877</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, instance to use to make the HTTP request. Callers</tt> </tt>
-<a name="L878"></a><tt class="py-lineno"> 878</tt>  <tt class="py-line"><tt class="py-docstring">        should supply an instance that has caching enabled.</tt> </tt>
-<a name="L879"></a><tt class="py-lineno"> 879</tt>  <tt class="py-line"><tt class="py-docstring">      cert_uri: string, URI of the certificates in JSON format to</tt> </tt>
-<a name="L880"></a><tt class="py-lineno"> 880</tt>  <tt class="py-line"><tt class="py-docstring">        verify the JWT against.</tt> </tt>
-<a name="L881"></a><tt class="py-lineno"> 881</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L882"></a><tt class="py-lineno"> 882</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L883"></a><tt class="py-lineno"> 883</tt>  <tt class="py-line"><tt class="py-docstring">      The deserialized JSON in the JWT.</tt> </tt>
-<a name="L884"></a><tt class="py-lineno"> 884</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L885"></a><tt class="py-lineno"> 885</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L886"></a><tt class="py-lineno"> 886</tt>  <tt class="py-line"><tt class="py-docstring">      oauth2client.crypt.AppIdentityError if the JWT fails to verify.</tt> </tt>
-<a name="L887"></a><tt class="py-lineno"> 887</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L888"></a><tt class="py-lineno"> 888</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-118" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-118', 'http', 'link-42');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L889"></a><tt class="py-lineno"> 889</tt>  <tt class="py-line">      <tt id="link-119" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-119', 'http', 'link-42');">http</a></tt> <tt class="py-op">=</tt> <tt id="link-120" class="py-name"><a title="oauth2client.client._cached_http" class="py-name" href="#" onclick="return doclink('link-120', '_cached_http', 'link-114');">_cached_http</a></tt> </tt>
+oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-115', '__init__', 'link-115');">__init__</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L791"></a><tt class="py-lineno"> 791</tt>  <tt class="py-line">        <tt class="py-name">access_token</tt><tt class="py-op">,</tt> </tt>
+<a name="L792"></a><tt class="py-lineno"> 792</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L793"></a><tt class="py-lineno"> 793</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L794"></a><tt class="py-lineno"> 794</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L795"></a><tt class="py-lineno"> 795</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L796"></a><tt class="py-lineno"> 796</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L797"></a><tt class="py-lineno"> 797</tt>  <tt class="py-line">        <tt class="py-name">user_agent</tt><tt class="py-op">,</tt> </tt>
+<a name="L798"></a><tt class="py-lineno"> 798</tt>  <tt class="py-line">        <tt class="py-name">revoke_uri</tt><tt class="py-op">=</tt><tt class="py-name">revoke_uri</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L799"></a><tt class="py-lineno"> 799</tt>  <tt class="py-line"> </tt>
+<a name="L800"></a><tt class="py-lineno"> 800</tt>  <tt class="py-line"> </tt>
+<a name="L801"></a><tt class="py-lineno"> 801</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="AccessTokenCredentials.from_json"></a><div id="AccessTokenCredentials.from_json-def"><a name="L802"></a><tt class="py-lineno"> 802</tt> <a class="py-toggle" href="#" id="AccessTokenCredentials.from_json-toggle" onclick="return toggle('AccessTokenCredentials.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AccessTokenCredentials-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AccessTokenCredentials.from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AccessTokenCredentials.from_json-expanded"><a name="L803"></a><tt class="py-lineno"> 803</tt>  <tt class="py-line">    <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-116', 'loads', 'link-34');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
+<a name="L804"></a><tt class="py-lineno"> 804</tt>  <tt class="py-line">    <tt class="py-name">retval</tt> <tt class="py-op">=</tt> <tt id="link-117" class="py-name"><a title="oauth2client.client.AccessTokenCredentials" class="py-name" href="#" onclick="return doclink('link-117', 'AccessTokenCredentials', 'link-114');">AccessTokenCredentials</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L805"></a><tt class="py-lineno"> 805</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'access_token'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L806"></a><tt class="py-lineno"> 806</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'user_agent'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L807"></a><tt class="py-lineno"> 807</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">retval</tt> </tt>
+</div><a name="L808"></a><tt class="py-lineno"> 808</tt>  <tt class="py-line"> </tt>
+<a name="AccessTokenCredentials._refresh"></a><div id="AccessTokenCredentials._refresh-def"><a name="L809"></a><tt class="py-lineno"> 809</tt> <a class="py-toggle" href="#" id="AccessTokenCredentials._refresh-toggle" onclick="return toggle('AccessTokenCredentials._refresh');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AccessTokenCredentials-class.html#_refresh">_refresh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AccessTokenCredentials._refresh-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AccessTokenCredentials._refresh-expanded"><a name="L810"></a><tt class="py-lineno"> 810</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-118" class="py-name" targets="Class oauth2client.client.AccessTokenCredentialsError=oauth2client.client.AccessTokenCredentialsError-class.html"><a title="oauth2client.client.AccessTokenCredentialsError" class="py-name" href="#" onclick="return doclink('link-118', 'AccessTokenCredentialsError', 'link-118');">AccessTokenCredentialsError</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L811"></a><tt class="py-lineno"> 811</tt>  <tt class="py-line">        <tt class="py-string">'The access_token is expired or invalid and can\'t be refreshed.'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L812"></a><tt class="py-lineno"> 812</tt>  <tt class="py-line"> </tt>
+<a name="AccessTokenCredentials._revoke"></a><div id="AccessTokenCredentials._revoke-def"><a name="L813"></a><tt class="py-lineno"> 813</tt> <a class="py-toggle" href="#" id="AccessTokenCredentials._revoke-toggle" onclick="return toggle('AccessTokenCredentials._revoke');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AccessTokenCredentials-class.html#_revoke">_revoke</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AccessTokenCredentials._revoke-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AccessTokenCredentials._revoke-expanded"><a name="L814"></a><tt class="py-lineno"> 814</tt>  <tt class="py-line">    <tt class="py-docstring">"""Revokes the access_token and deletes the store if available.</tt> </tt>
+<a name="L815"></a><tt class="py-lineno"> 815</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L816"></a><tt class="py-lineno"> 816</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L817"></a><tt class="py-lineno"> 817</tt>  <tt class="py-line"><tt class="py-docstring">      http_request: callable, a callable that matches the method signature of</tt> </tt>
+<a name="L818"></a><tt class="py-lineno"> 818</tt>  <tt class="py-line"><tt class="py-docstring">        httplib2.Http.request, used to make the revoke request.</tt> </tt>
+<a name="L819"></a><tt class="py-lineno"> 819</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L820"></a><tt class="py-lineno"> 820</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-119" class="py-name"><a title="oauth2client.client.OAuth2Credentials._do_revoke" class="py-name" href="#" onclick="return doclink('link-119', '_do_revoke', 'link-106');">_do_revoke</a></tt><tt class="py-op">(</tt><tt class="py-name">http_request</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L821"></a><tt class="py-lineno"> 821</tt>  <tt class="py-line"> </tt>
+<a name="AssertionCredentials"></a><div id="AssertionCredentials-def"><a name="L822"></a><tt class="py-lineno"> 822</tt>  <tt class="py-line"> </tt>
+<a name="L823"></a><tt class="py-lineno"> 823</tt> <a class="py-toggle" href="#" id="AssertionCredentials-toggle" onclick="return toggle('AssertionCredentials');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.AssertionCredentials-class.html">AssertionCredentials</a><tt class="py-op">(</tt><tt class="py-base-class">OAuth2Credentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AssertionCredentials-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="AssertionCredentials-expanded"><a name="L824"></a><tt class="py-lineno"> 824</tt>  <tt class="py-line">  <tt class="py-docstring">"""Abstract Credentials object used for OAuth 2.0 assertion grants.</tt> </tt>
+<a name="L825"></a><tt class="py-lineno"> 825</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L826"></a><tt class="py-lineno"> 826</tt>  <tt class="py-line"><tt class="py-docstring">  This credential does not require a flow to instantiate because it</tt> </tt>
+<a name="L827"></a><tt class="py-lineno"> 827</tt>  <tt class="py-line"><tt class="py-docstring">  represents a two legged flow, and therefore has all of the required</tt> </tt>
+<a name="L828"></a><tt class="py-lineno"> 828</tt>  <tt class="py-line"><tt class="py-docstring">  information to generate and refresh its own access tokens. It must</tt> </tt>
+<a name="L829"></a><tt class="py-lineno"> 829</tt>  <tt class="py-line"><tt class="py-docstring">  be subclassed to generate the appropriate assertion string.</tt> </tt>
+<a name="L830"></a><tt class="py-lineno"> 830</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L831"></a><tt class="py-lineno"> 831</tt>  <tt class="py-line"><tt class="py-docstring">  AssertionCredentials objects may be safely pickled and unpickled.</tt> </tt>
+<a name="L832"></a><tt class="py-lineno"> 832</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L833"></a><tt class="py-lineno"> 833</tt>  <tt class="py-line"> </tt>
+<a name="L834"></a><tt class="py-lineno"> 834</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-120" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-120', 'positional', 'link-55');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="AssertionCredentials.__init__"></a><div id="AssertionCredentials.__init__-def"><a name="L835"></a><tt class="py-lineno"> 835</tt> <a class="py-toggle" href="#" id="AssertionCredentials.__init__-toggle" onclick="return toggle('AssertionCredentials.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AssertionCredentials-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">assertion_type</tt><tt class="py-op">,</tt> <tt class="py-param">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L836"></a><tt class="py-lineno"> 836</tt>  <tt class="py-line">               <tt class="py-param">token_uri</tt><tt class="py-op">=</tt><tt id="link-121" class="py-name"><a title="oauth2client.GOOGLE_TOKEN_URI" class="py-name" href="#" onclick="return doclink('link-121', 'GOOGLE_TOKEN_URI', 'link-6');">GOOGLE_TOKEN_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L837"></a><tt class="py-lineno"> 837</tt>  <tt class="py-line">               <tt class="py-param">revoke_uri</tt><tt class="py-op">=</tt><tt id="link-122" class="py-name"><a title="oauth2client.GOOGLE_REVOKE_URI" class="py-name" href="#" onclick="return doclink('link-122', 'GOOGLE_REVOKE_URI', 'link-4');">GOOGLE_REVOKE_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L838"></a><tt class="py-lineno"> 838</tt>  <tt class="py-line">               <tt class="py-op">**</tt><tt class="py-param">unused_kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AssertionCredentials.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AssertionCredentials.__init__-expanded"><a name="L839"></a><tt class="py-lineno"> 839</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for AssertionFlowCredentials.</tt> </tt>
+<a name="L840"></a><tt class="py-lineno"> 840</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L841"></a><tt class="py-lineno"> 841</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L842"></a><tt class="py-lineno"> 842</tt>  <tt class="py-line"><tt class="py-docstring">      assertion_type: string, assertion type that will be declared to the auth</tt> </tt>
+<a name="L843"></a><tt class="py-lineno"> 843</tt>  <tt class="py-line"><tt class="py-docstring">        server</tt> </tt>
+<a name="L844"></a><tt class="py-lineno"> 844</tt>  <tt class="py-line"><tt class="py-docstring">      user_agent: string, The HTTP User-Agent to provide for this application.</tt> </tt>
+<a name="L845"></a><tt class="py-lineno"> 845</tt>  <tt class="py-line"><tt class="py-docstring">      token_uri: string, URI for token endpoint. For convenience</tt> </tt>
+<a name="L846"></a><tt class="py-lineno"> 846</tt>  <tt class="py-line"><tt class="py-docstring">        defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
+<a name="L847"></a><tt class="py-lineno"> 847</tt>  <tt class="py-line"><tt class="py-docstring">      revoke_uri: string, URI for revoke endpoint.</tt> </tt>
+<a name="L848"></a><tt class="py-lineno"> 848</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L849"></a><tt class="py-lineno"> 849</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-123" class="py-name" targets="Class oauth2client.client.AssertionCredentials=oauth2client.client.AssertionCredentials-class.html"><a title="oauth2client.client.AssertionCredentials" class="py-name" href="#" onclick="return doclink('link-123', 'AssertionCredentials', 'link-123');">AssertionCredentials</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-124" class="py-name"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
+apiclient.errors.BatchError.__init__
+apiclient.errors.HttpError.__init__
+apiclient.errors.UnexpectedBodyError.__init__
+apiclient.errors.UnexpectedMethodError.__init__
+apiclient.http.BatchHttpRequest.__init__
+apiclient.http.HttpMock.__init__
+apiclient.http.HttpMockSequence.__init__
+apiclient.http.HttpRequest.__init__
+apiclient.http.HttpRequestMock.__init__
+apiclient.http.MediaDownloadProgress.__init__
+apiclient.http.MediaFileUpload.__init__
+apiclient.http.MediaInMemoryUpload.__init__
+apiclient.http.MediaIoBaseDownload.__init__
+apiclient.http.MediaIoBaseUpload.__init__
+apiclient.http.MediaUploadProgress.__init__
+apiclient.http.RequestMockBuilder.__init__
+apiclient.http._StreamSlice.__init__
+apiclient.model.JsonModel.__init__
+apiclient.model.ProtocolBufferModel.__init__
+apiclient.push.Channel.__init__
+apiclient.push.Headers.__init__
+apiclient.push.Subscription.__init__
+apiclient.push.WebhookChannel.__init__
+apiclient.schema.Schemas.__init__
+apiclient.schema._SchemaToStruct.__init__
+oauth2client.appengine.AppAssertionCredentials.__init__
+oauth2client.appengine.OAuth2Decorator.__init__
+oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__
+oauth2client.appengine.StorageByKeyName.__init__
+oauth2client.client.AccessTokenCredentials.__init__
+oauth2client.client.AssertionCredentials.__init__
+oauth2client.client.MemoryCache.__init__
+oauth2client.client.OAuth2Credentials.__init__
+oauth2client.client.OAuth2WebServerFlow.__init__
+oauth2client.client.SignedJwtAssertionCredentials.__init__
+oauth2client.django_orm.CredentialsField.__init__
+oauth2client.django_orm.FlowField.__init__
+oauth2client.django_orm.Storage.__init__
+oauth2client.file.Storage.__init__
+oauth2client.gce.AppAssertionCredentials.__init__
+oauth2client.keyring_storage.Storage.__init__
+oauth2client.locked_file.LockedFile.__init__
+oauth2client.locked_file._Opener.__init__
+oauth2client.multistore_file._MultiStore._Storage.__init__
+oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-124', '__init__', 'link-115');">__init__</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L850"></a><tt class="py-lineno"> 850</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L851"></a><tt class="py-lineno"> 851</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L852"></a><tt class="py-lineno"> 852</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L853"></a><tt class="py-lineno"> 853</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L854"></a><tt class="py-lineno"> 854</tt>  <tt class="py-line">        <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L855"></a><tt class="py-lineno"> 855</tt>  <tt class="py-line">        <tt class="py-name">token_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L856"></a><tt class="py-lineno"> 856</tt>  <tt class="py-line">        <tt class="py-name">user_agent</tt><tt class="py-op">,</tt> </tt>
+<a name="L857"></a><tt class="py-lineno"> 857</tt>  <tt class="py-line">        <tt class="py-name">revoke_uri</tt><tt class="py-op">=</tt><tt class="py-name">revoke_uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L858"></a><tt class="py-lineno"> 858</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertion_type</tt> <tt class="py-op">=</tt> <tt class="py-name">assertion_type</tt> </tt>
+</div><a name="L859"></a><tt class="py-lineno"> 859</tt>  <tt class="py-line"> </tt>
+<a name="AssertionCredentials._generate_refresh_request_body"></a><div id="AssertionCredentials._generate_refresh_request_body-def"><a name="L860"></a><tt class="py-lineno"> 860</tt> <a class="py-toggle" href="#" id="AssertionCredentials._generate_refresh_request_body-toggle" onclick="return toggle('AssertionCredentials._generate_refresh_request_body');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body">_generate_refresh_request_body</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="AssertionCredentials._generate_refresh_request_body-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AssertionCredentials._generate_refresh_request_body-expanded"><a name="L861"></a><tt class="py-lineno"> 861</tt>  <tt class="py-line">    <tt class="py-name">assertion</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-125" class="py-name" targets="Method oauth2client.client.AssertionCredentials._generate_assertion()=oauth2client.client.AssertionCredentials-class.html#_generate_assertion,Method oauth2client.client.SignedJwtAssertionCredentials._generate_assertion()=oauth2client.client.SignedJwtAssertionCredentials-class.html#_generate_assertion"><a title="oauth2client.client.AssertionCredentials._generate_assertion
+oauth2client.client.SignedJwtAssertionCredentials._generate_assertion" class="py-name" href="#" onclick="return doclink('link-125', '_generate_assertion', 'link-125');">_generate_assertion</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L862"></a><tt class="py-lineno"> 862</tt>  <tt class="py-line"> </tt>
+<a name="L863"></a><tt class="py-lineno"> 863</tt>  <tt class="py-line">    <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-op">{</tt> </tt>
+<a name="L864"></a><tt class="py-lineno"> 864</tt>  <tt class="py-line">        <tt class="py-string">'assertion'</tt><tt class="py-op">:</tt> <tt class="py-name">assertion</tt><tt class="py-op">,</tt> </tt>
+<a name="L865"></a><tt class="py-lineno"> 865</tt>  <tt class="py-line">        <tt class="py-string">'grant_type'</tt><tt class="py-op">:</tt> <tt class="py-string">'urn:ietf:params:oauth:grant-type:jwt-bearer'</tt><tt class="py-op">,</tt> </tt>
+<a name="L866"></a><tt class="py-lineno"> 866</tt>  <tt class="py-line">        <tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L867"></a><tt class="py-lineno"> 867</tt>  <tt class="py-line"> </tt>
+<a name="L868"></a><tt class="py-lineno"> 868</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">body</tt> </tt>
+</div><a name="L869"></a><tt class="py-lineno"> 869</tt>  <tt class="py-line"> </tt>
+<a name="AssertionCredentials._generate_assertion"></a><div id="AssertionCredentials._generate_assertion-def"><a name="L870"></a><tt class="py-lineno"> 870</tt> <a class="py-toggle" href="#" id="AssertionCredentials._generate_assertion-toggle" onclick="return toggle('AssertionCredentials._generate_assertion');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AssertionCredentials-class.html#_generate_assertion">_generate_assertion</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="AssertionCredentials._generate_assertion-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AssertionCredentials._generate_assertion-expanded"><a name="L871"></a><tt class="py-lineno"> 871</tt>  <tt class="py-line">    <tt class="py-docstring">"""Generate the assertion string that will be used in the access token</tt> </tt>
+<a name="L872"></a><tt class="py-lineno"> 872</tt>  <tt class="py-line"><tt class="py-docstring">    request.</tt> </tt>
+<a name="L873"></a><tt class="py-lineno"> 873</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L874"></a><tt class="py-lineno"> 874</tt>  <tt class="py-line">    <tt id="link-126" class="py-name"><a title="apiclient.model._abstract
+oauth2client.client._abstract" class="py-name" href="#" onclick="return doclink('link-126', '_abstract', 'link-26');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L875"></a><tt class="py-lineno"> 875</tt>  <tt class="py-line"> </tt>
+<a name="AssertionCredentials._revoke"></a><div id="AssertionCredentials._revoke-def"><a name="L876"></a><tt class="py-lineno"> 876</tt> <a class="py-toggle" href="#" id="AssertionCredentials._revoke-toggle" onclick="return toggle('AssertionCredentials._revoke');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.AssertionCredentials-class.html#_revoke">_revoke</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AssertionCredentials._revoke-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="AssertionCredentials._revoke-expanded"><a name="L877"></a><tt class="py-lineno"> 877</tt>  <tt class="py-line">    <tt class="py-docstring">"""Revokes the access_token and deletes the store if available.</tt> </tt>
+<a name="L878"></a><tt class="py-lineno"> 878</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L879"></a><tt class="py-lineno"> 879</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L880"></a><tt class="py-lineno"> 880</tt>  <tt class="py-line"><tt class="py-docstring">      http_request: callable, a callable that matches the method signature of</tt> </tt>
+<a name="L881"></a><tt class="py-lineno"> 881</tt>  <tt class="py-line"><tt class="py-docstring">        httplib2.Http.request, used to make the revoke request.</tt> </tt>
+<a name="L882"></a><tt class="py-lineno"> 882</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L883"></a><tt class="py-lineno"> 883</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-127" class="py-name"><a title="oauth2client.client.OAuth2Credentials._do_revoke" class="py-name" href="#" onclick="return doclink('link-127', '_do_revoke', 'link-106');">_do_revoke</a></tt><tt class="py-op">(</tt><tt class="py-name">http_request</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L884"></a><tt class="py-lineno"> 884</tt>  <tt class="py-line"> </tt>
+<a name="L885"></a><tt class="py-lineno"> 885</tt>  <tt class="py-line"> </tt>
+<a name="L886"></a><tt class="py-lineno"> 886</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt id="link-128" class="py-name"><a title="oauth2client.client.HAS_CRYPTO" class="py-name" href="#" onclick="return doclink('link-128', 'HAS_CRYPTO', 'link-12');">HAS_CRYPTO</a></tt><tt class="py-op">:</tt> </tt>
+<a name="SignedJwtAssertionCredentials"></a><div id="SignedJwtAssertionCredentials-def"><a name="L887"></a><tt class="py-lineno"> 887</tt>  <tt class="py-line">  <tt class="py-comment"># PyOpenSSL and PyCrypto are not prerequisites for oauth2client, so if it is</tt> </tt>
+<a name="L888"></a><tt class="py-lineno"> 888</tt>  <tt class="py-line">  <tt class="py-comment"># missing then don't create the SignedJwtAssertionCredentials or the</tt> </tt>
+<a name="L889"></a><tt class="py-lineno"> 889</tt>  <tt class="py-line">  <tt class="py-comment"># verify_id_token() method.</tt> </tt>
 <a name="L890"></a><tt class="py-lineno"> 890</tt>  <tt class="py-line"> </tt>
-<a name="L891"></a><tt class="py-lineno"> 891</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-121" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-121', 'http', 'link-42');">http</a></tt><tt class="py-op">.</tt><tt id="link-122" class="py-name"><a title="apiclient.http.HttpMock.request
-apiclient.http.HttpMockSequence.request
-apiclient.model.BaseModel.request
-apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-122', 'request', 'link-43');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">cert_uri</tt><tt class="py-op">)</tt> </tt>
-<a name="L892"></a><tt class="py-lineno"> 892</tt>  <tt class="py-line"> </tt>
-<a name="L893"></a><tt class="py-lineno"> 893</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">200</tt><tt class="py-op">:</tt> </tt>
-<a name="L894"></a><tt class="py-lineno"> 894</tt>  <tt class="py-line">      <tt class="py-name">certs</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-123" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-123', 'loads', 'link-23');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L895"></a><tt class="py-lineno"> 895</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-124" class="py-name"><a title="oauth2client.crypt" class="py-name" href="#" onclick="return doclink('link-124', 'crypt', 'link-7');">crypt</a></tt><tt class="py-op">.</tt><tt id="link-125" class="py-name" targets="Function oauth2client.crypt.verify_signed_jwt_with_certs()=oauth2client.crypt-module.html#verify_signed_jwt_with_certs"><a title="oauth2client.crypt.verify_signed_jwt_with_certs" class="py-name" href="#" onclick="return doclink('link-125', 'verify_signed_jwt_with_certs', 'link-125');">verify_signed_jwt_with_certs</a></tt><tt class="py-op">(</tt><tt class="py-name">id_token</tt><tt class="py-op">,</tt> <tt class="py-name">certs</tt><tt class="py-op">,</tt> <tt class="py-name">audience</tt><tt class="py-op">)</tt> </tt>
-<a name="L896"></a><tt class="py-lineno"> 896</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L897"></a><tt class="py-lineno"> 897</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-126" class="py-name" targets="Class oauth2client.client.VerifyJwtTokenError=oauth2client.client.VerifyJwtTokenError-class.html"><a title="oauth2client.client.VerifyJwtTokenError" class="py-name" href="#" onclick="return doclink('link-126', 'VerifyJwtTokenError', 'link-126');">VerifyJwtTokenError</a></tt><tt class="py-op">(</tt><tt class="py-string">'Status code: %d'</tt> <tt class="py-op">%</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L898"></a><tt class="py-lineno"> 898</tt>  <tt class="py-line"> </tt>
-<a name="_urlsafe_b64decode"></a><div id="_urlsafe_b64decode-def"><a name="L899"></a><tt class="py-lineno"> 899</tt>  <tt class="py-line"> </tt>
-<a name="L900"></a><tt class="py-lineno"> 900</tt> <a class="py-toggle" href="#" id="_urlsafe_b64decode-toggle" onclick="return toggle('_urlsafe_b64decode');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#_urlsafe_b64decode">_urlsafe_b64decode</a><tt class="py-op">(</tt><tt class="py-param">b64string</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_urlsafe_b64decode-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_urlsafe_b64decode-expanded"><a name="L901"></a><tt class="py-lineno"> 901</tt>  <tt class="py-line">  <tt class="py-comment"># Guard against unicode strings, which base64 can't handle.</tt> </tt>
-<a name="L902"></a><tt class="py-lineno"> 902</tt>  <tt class="py-line">  <tt class="py-name">b64string</tt> <tt class="py-op">=</tt> <tt class="py-name">b64string</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'ascii'</tt><tt class="py-op">)</tt> </tt>
-<a name="L903"></a><tt class="py-lineno"> 903</tt>  <tt class="py-line">  <tt class="py-name">padded</tt> <tt class="py-op">=</tt> <tt class="py-name">b64string</tt> <tt class="py-op">+</tt> <tt class="py-string">'='</tt> <tt class="py-op">*</tt> <tt class="py-op">(</tt><tt class="py-number">4</tt> <tt class="py-op">-</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">b64string</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
-<a name="L904"></a><tt class="py-lineno"> 904</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">urlsafe_b64decode</tt><tt class="py-op">(</tt><tt class="py-name">padded</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L905"></a><tt class="py-lineno"> 905</tt>  <tt class="py-line"> </tt>
-<a name="_extract_id_token"></a><div id="_extract_id_token-def"><a name="L906"></a><tt class="py-lineno"> 906</tt>  <tt class="py-line"> </tt>
-<a name="L907"></a><tt class="py-lineno"> 907</tt> <a class="py-toggle" href="#" id="_extract_id_token-toggle" onclick="return toggle('_extract_id_token');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#_extract_id_token">_extract_id_token</a><tt class="py-op">(</tt><tt class="py-param">id_token</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_extract_id_token-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_extract_id_token-expanded"><a name="L908"></a><tt class="py-lineno"> 908</tt>  <tt class="py-line">  <tt class="py-docstring">"""Extract the JSON payload from a JWT.</tt> </tt>
-<a name="L909"></a><tt class="py-lineno"> 909</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L910"></a><tt class="py-lineno"> 910</tt>  <tt class="py-line"><tt class="py-docstring">  Does the extraction w/o checking the signature.</tt> </tt>
-<a name="L911"></a><tt class="py-lineno"> 911</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L912"></a><tt class="py-lineno"> 912</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L913"></a><tt class="py-lineno"> 913</tt>  <tt class="py-line"><tt class="py-docstring">    id_token: string, OAuth 2.0 id_token.</tt> </tt>
-<a name="L914"></a><tt class="py-lineno"> 914</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L915"></a><tt class="py-lineno"> 915</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L916"></a><tt class="py-lineno"> 916</tt>  <tt class="py-line"><tt class="py-docstring">    object, The deserialized JSON payload.</tt> </tt>
-<a name="L917"></a><tt class="py-lineno"> 917</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L918"></a><tt class="py-lineno"> 918</tt>  <tt class="py-line">  <tt class="py-name">segments</tt> <tt class="py-op">=</tt> <tt class="py-name">id_token</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L919"></a><tt class="py-lineno"> 919</tt>  <tt class="py-line"> </tt>
-<a name="L920"></a><tt class="py-lineno"> 920</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">segments</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">3</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L921"></a><tt class="py-lineno"> 921</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-127" class="py-name"><a title="oauth2client.client.VerifyJwtTokenError" class="py-name" href="#" onclick="return doclink('link-127', 'VerifyJwtTokenError', 'link-126');">VerifyJwtTokenError</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L922"></a><tt class="py-lineno"> 922</tt>  <tt class="py-line">      <tt class="py-string">'Wrong number of segments in token: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">id_token</tt><tt class="py-op">)</tt> </tt>
-<a name="L923"></a><tt class="py-lineno"> 923</tt>  <tt class="py-line"> </tt>
-<a name="L924"></a><tt class="py-lineno"> 924</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-128" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-128', 'loads', 'link-23');">loads</a></tt><tt class="py-op">(</tt><tt id="link-129" class="py-name" targets="Function oauth2client.client._urlsafe_b64decode()=oauth2client.client-module.html#_urlsafe_b64decode,Function oauth2client.crypt._urlsafe_b64decode()=oauth2client.crypt-module.html#_urlsafe_b64decode"><a title="oauth2client.client._urlsafe_b64decode
-oauth2client.crypt._urlsafe_b64decode" class="py-name" href="#" onclick="return doclink('link-129', '_urlsafe_b64decode', 'link-129');">_urlsafe_b64decode</a></tt><tt class="py-op">(</tt><tt class="py-name">segments</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L925"></a><tt class="py-lineno"> 925</tt>  <tt class="py-line"> </tt>
-<a name="_parse_exchange_token_response"></a><div id="_parse_exchange_token_response-def"><a name="L926"></a><tt class="py-lineno"> 926</tt>  <tt class="py-line"> </tt>
-<a name="L927"></a><tt class="py-lineno"> 927</tt> <a class="py-toggle" href="#" id="_parse_exchange_token_response-toggle" onclick="return toggle('_parse_exchange_token_response');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#_parse_exchange_token_response">_parse_exchange_token_response</a><tt class="py-op">(</tt><tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_parse_exchange_token_response-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_parse_exchange_token_response-expanded"><a name="L928"></a><tt class="py-lineno"> 928</tt>  <tt class="py-line">  <tt class="py-docstring">"""Parses response of an exchange token request.</tt> </tt>
-<a name="L929"></a><tt class="py-lineno"> 929</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L930"></a><tt class="py-lineno"> 930</tt>  <tt class="py-line"><tt class="py-docstring">  Most providers return JSON but some (e.g. Facebook) return a</tt> </tt>
-<a name="L931"></a><tt class="py-lineno"> 931</tt>  <tt class="py-line"><tt class="py-docstring">  url-encoded string.</tt> </tt>
-<a name="L932"></a><tt class="py-lineno"> 932</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L933"></a><tt class="py-lineno"> 933</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L934"></a><tt class="py-lineno"> 934</tt>  <tt class="py-line"><tt class="py-docstring">    content: The body of a response</tt> </tt>
-<a name="L935"></a><tt class="py-lineno"> 935</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L936"></a><tt class="py-lineno"> 936</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L937"></a><tt class="py-lineno"> 937</tt>  <tt class="py-line"><tt class="py-docstring">    Content as a dictionary object. Note that the dict could be empty,</tt> </tt>
-<a name="L938"></a><tt class="py-lineno"> 938</tt>  <tt class="py-line"><tt class="py-docstring">    i.e. {}. That basically indicates a failure.</tt> </tt>
-<a name="L939"></a><tt class="py-lineno"> 939</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L940"></a><tt class="py-lineno"> 940</tt>  <tt class="py-line">  <tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L941"></a><tt class="py-lineno"> 941</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L942"></a><tt class="py-lineno"> 942</tt>  <tt class="py-line">    <tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-130', 'loads', 'link-23');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L943"></a><tt class="py-lineno"> 943</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">StandardError</tt><tt class="py-op">:</tt> </tt>
-<a name="L944"></a><tt class="py-lineno"> 944</tt>  <tt class="py-line">    <tt class="py-comment"># different JSON libs raise different exceptions,</tt> </tt>
-<a name="L945"></a><tt class="py-lineno"> 945</tt>  <tt class="py-line">    <tt class="py-comment"># so we just do a catch-all here</tt> </tt>
-<a name="L946"></a><tt class="py-lineno"> 946</tt>  <tt class="py-line">    <tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-name">parse_qsl</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L947"></a><tt class="py-lineno"> 947</tt>  <tt class="py-line"> </tt>
-<a name="L948"></a><tt class="py-lineno"> 948</tt>  <tt class="py-line">  <tt class="py-comment"># some providers respond with 'expires', others with 'expires_in'</tt> </tt>
-<a name="L949"></a><tt class="py-lineno"> 949</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'expires'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
-<a name="L950"></a><tt class="py-lineno"> 950</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'expires_in'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-string">'expires'</tt><tt class="py-op">)</tt> </tt>
-<a name="L951"></a><tt class="py-lineno"> 951</tt>  <tt class="py-line"> </tt>
-<a name="L952"></a><tt class="py-lineno"> 952</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">resp</tt> </tt>
-</div><a name="L953"></a><tt class="py-lineno"> 953</tt>  <tt class="py-line"> </tt>
-<a name="credentials_from_code"></a><div id="credentials_from_code-def"><a name="L954"></a><tt class="py-lineno"> 954</tt>  <tt class="py-line"> </tt>
-<a name="L955"></a><tt class="py-lineno"> 955</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-131" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-131', 'positional', 'link-41');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
-<a name="L956"></a><tt class="py-lineno"> 956</tt> <a class="py-toggle" href="#" id="credentials_from_code-toggle" onclick="return toggle('credentials_from_code');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#credentials_from_code">credentials_from_code</a><tt class="py-op">(</tt><tt class="py-param">client_id</tt><tt class="py-op">,</tt> <tt class="py-param">client_secret</tt><tt class="py-op">,</tt> <tt class="py-param">scope</tt><tt class="py-op">,</tt> <tt class="py-param">code</tt><tt class="py-op">,</tt> </tt>
-<a name="L957"></a><tt class="py-lineno"> 957</tt>  <tt class="py-line">    <tt class="py-param">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-string">'postmessage'</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L958"></a><tt class="py-lineno"> 958</tt>  <tt class="py-line">    <tt class="py-param">token_uri</tt><tt class="py-op">=</tt><tt class="py-string">'https://accounts.google.com/o/oauth2/token'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="credentials_from_code-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="credentials_from_code-expanded"><a name="L959"></a><tt class="py-lineno"> 959</tt>  <tt class="py-line">  <tt class="py-docstring">"""Exchanges an authorization code for an OAuth2Credentials object.</tt> </tt>
-<a name="L960"></a><tt class="py-lineno"> 960</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L961"></a><tt class="py-lineno"> 961</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L962"></a><tt class="py-lineno"> 962</tt>  <tt class="py-line"><tt class="py-docstring">    client_id: string, client identifier.</tt> </tt>
-<a name="L963"></a><tt class="py-lineno"> 963</tt>  <tt class="py-line"><tt class="py-docstring">    client_secret: string, client secret.</tt> </tt>
-<a name="L964"></a><tt class="py-lineno"> 964</tt>  <tt class="py-line"><tt class="py-docstring">    scope: string or iterable of strings, scope(s) to request.</tt> </tt>
-<a name="L965"></a><tt class="py-lineno"> 965</tt>  <tt class="py-line"><tt class="py-docstring">    code: string, An authroization code, most likely passed down from</tt> </tt>
-<a name="L966"></a><tt class="py-lineno"> 966</tt>  <tt class="py-line"><tt class="py-docstring">      the client</tt> </tt>
-<a name="L967"></a><tt class="py-lineno"> 967</tt>  <tt class="py-line"><tt class="py-docstring">    redirect_uri: string, this is generally set to 'postmessage' to match the</tt> </tt>
-<a name="L968"></a><tt class="py-lineno"> 968</tt>  <tt class="py-line"><tt class="py-docstring">      redirect_uri that the client specified</tt> </tt>
-<a name="L969"></a><tt class="py-lineno"> 969</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, optional http instance to use to do the fetch</tt> </tt>
-<a name="L970"></a><tt class="py-lineno"> 970</tt>  <tt class="py-line"><tt class="py-docstring">    token_uri: string, URI for token endpoint. For convenience</tt> </tt>
-<a name="L971"></a><tt class="py-lineno"> 971</tt>  <tt class="py-line"><tt class="py-docstring">      defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
-<a name="L972"></a><tt class="py-lineno"> 972</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L973"></a><tt class="py-lineno"> 973</tt>  <tt class="py-line"><tt class="py-docstring">    An OAuth2Credentials object.</tt> </tt>
-<a name="L974"></a><tt class="py-lineno"> 974</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L975"></a><tt class="py-lineno"> 975</tt>  <tt class="py-line"><tt class="py-docstring">  Raises:</tt> </tt>
-<a name="L976"></a><tt class="py-lineno"> 976</tt>  <tt class="py-line"><tt class="py-docstring">    FlowExchangeError if the authorization code cannot be exchanged for an</tt> </tt>
-<a name="L977"></a><tt class="py-lineno"> 977</tt>  <tt class="py-line"><tt class="py-docstring">     access token</tt> </tt>
-<a name="L978"></a><tt class="py-lineno"> 978</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L979"></a><tt class="py-lineno"> 979</tt>  <tt class="py-line">  <tt class="py-name">flow</tt> <tt class="py-op">=</tt> <tt id="link-132" class="py-name" targets="Class oauth2client.client.OAuth2WebServerFlow=oauth2client.client.OAuth2WebServerFlow-class.html"><a title="oauth2client.client.OAuth2WebServerFlow" class="py-name" href="#" onclick="return doclink('link-132', 'OAuth2WebServerFlow', 'link-132');">OAuth2WebServerFlow</a></tt><tt class="py-op">(</tt><tt class="py-name">client_id</tt><tt class="py-op">,</tt> <tt class="py-name">client_secret</tt><tt class="py-op">,</tt> <tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
-<a name="L980"></a><tt class="py-lineno"> 980</tt>  <tt class="py-line">                             <tt class="py-name">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-name">redirect_uri</tt><tt class="py-op">,</tt> <tt class="py-name">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">user_agent</tt><tt class="py-op">,</tt> </tt>
-<a name="L981"></a><tt class="py-lineno"> 981</tt>  <tt class="py-line">                             <tt class="py-name">auth_uri</tt><tt class="py-op">=</tt><tt class="py-string">'https://accounts.google.com/o/oauth2/auth'</tt><tt class="py-op">,</tt> </tt>
-<a name="L982"></a><tt class="py-lineno"> 982</tt>  <tt class="py-line">                             <tt class="py-name">token_uri</tt><tt class="py-op">=</tt><tt class="py-name">token_uri</tt><tt class="py-op">)</tt> </tt>
-<a name="L983"></a><tt class="py-lineno"> 983</tt>  <tt class="py-line"> </tt>
-<a name="L984"></a><tt class="py-lineno"> 984</tt>  <tt class="py-line">  <tt id="link-133" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-133', 'credentials', 'link-35');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">flow</tt><tt class="py-op">.</tt><tt id="link-134" 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-134', 'step2_exchange', 'link-134');">step2_exchange</a></tt><tt class="py-op">(</tt><tt class="py-name">code</tt><tt class="py-op">,</tt> <tt id="link-135" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-135', 'http', 'link-42');">http</a></tt><tt class="py-op">=</tt><tt id="link-136" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-136', 'http', 'link-42');">http</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L985"></a><tt class="py-lineno"> 985</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-137" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-137', 'credentials', 'link-35');">credentials</a></tt> </tt>
-</div><a name="L986"></a><tt class="py-lineno"> 986</tt>  <tt class="py-line"> </tt>
-<a name="credentials_from_clientsecrets_and_code"></a><div id="credentials_from_clientsecrets_and_code-def"><a name="L987"></a><tt class="py-lineno"> 987</tt>  <tt class="py-line"> </tt>
-<a name="L988"></a><tt class="py-lineno"> 988</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-138" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-138', 'positional', 'link-41');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt> </tt>
-<a name="L989"></a><tt class="py-lineno"> 989</tt> <a class="py-toggle" href="#" id="credentials_from_clientsecrets_and_code-toggle" onclick="return toggle('credentials_from_clientsecrets_and_code');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#credentials_from_clientsecrets_and_code">credentials_from_clientsecrets_and_code</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">code</tt><tt class="py-op">,</tt> </tt>
-<a name="L990"></a><tt class="py-lineno"> 990</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>
-<a name="L991"></a><tt class="py-lineno"> 991</tt>  <tt class="py-line">                                            <tt class="py-param">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-string">'postmessage'</tt><tt class="py-op">,</tt> </tt>
-<a name="L992"></a><tt class="py-lineno"> 992</tt>  <tt class="py-line">                                            <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L993"></a><tt class="py-lineno"> 993</tt>  <tt class="py-line">                                            <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="credentials_from_clientsecrets_and_code-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="credentials_from_clientsecrets_and_code-expanded"><a name="L994"></a><tt class="py-lineno"> 994</tt>  <tt class="py-line">  <tt class="py-docstring">"""Returns OAuth2Credentials from a clientsecrets file and an auth code.</tt> </tt>
-<a name="L995"></a><tt class="py-lineno"> 995</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L996"></a><tt class="py-lineno"> 996</tt>  <tt class="py-line"><tt class="py-docstring">  Will create the right kind of Flow based on the contents of the clientsecrets</tt> </tt>
-<a name="L997"></a><tt class="py-lineno"> 997</tt>  <tt class="py-line"><tt class="py-docstring">  file or will raise InvalidClientSecretsError for unknown types of Flows.</tt> </tt>
+<a name="L891"></a><tt class="py-lineno"> 891</tt> <a class="py-toggle" href="#" id="SignedJwtAssertionCredentials-toggle" onclick="return toggle('SignedJwtAssertionCredentials');">-</a><tt class="py-line">  <tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.SignedJwtAssertionCredentials-class.html">SignedJwtAssertionCredentials</a><tt class="py-op">(</tt><tt class="py-base-class">AssertionCredentials</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SignedJwtAssertionCredentials-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="SignedJwtAssertionCredentials-expanded"><a name="L892"></a><tt class="py-lineno"> 892</tt>  <tt class="py-line">    <tt class="py-docstring">"""Credentials object used for OAuth 2.0 Signed JWT assertion grants.</tt> </tt>
+<a name="L893"></a><tt class="py-lineno"> 893</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L894"></a><tt class="py-lineno"> 894</tt>  <tt class="py-line"><tt class="py-docstring">    This credential does not require a flow to instantiate because it represents</tt> </tt>
+<a name="L895"></a><tt class="py-lineno"> 895</tt>  <tt class="py-line"><tt class="py-docstring">    a two legged flow, and therefore has all of the required information to</tt> </tt>
+<a name="L896"></a><tt class="py-lineno"> 896</tt>  <tt class="py-line"><tt class="py-docstring">    generate and refresh its own access tokens.</tt> </tt>
+<a name="L897"></a><tt class="py-lineno"> 897</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L898"></a><tt class="py-lineno"> 898</tt>  <tt class="py-line"><tt class="py-docstring">    SignedJwtAssertionCredentials requires either PyOpenSSL, or PyCrypto 2.6 or</tt> </tt>
+<a name="L899"></a><tt class="py-lineno"> 899</tt>  <tt class="py-line"><tt class="py-docstring">    later. For App Engine you may also consider using AppAssertionCredentials.</tt> </tt>
+<a name="L900"></a><tt class="py-lineno"> 900</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L901"></a><tt class="py-lineno"> 901</tt>  <tt class="py-line"> </tt>
+<a name="L902"></a><tt class="py-lineno"> 902</tt>  <tt class="py-line">    <tt id="link-129" class="py-name" targets="Variable oauth2client.client.SignedJwtAssertionCredentials.MAX_TOKEN_LIFETIME_SECS=oauth2client.client.SignedJwtAssertionCredentials-class.html#MAX_TOKEN_LIFETIME_SECS,Variable oauth2client.crypt.MAX_TOKEN_LIFETIME_SECS=oauth2client.crypt-module.html#MAX_TOKEN_LIFETIME_SECS"><a title="oauth2client.client.SignedJwtAssertionCredentials.MAX_TOKEN_LIFETIME_SECS
+oauth2client.crypt.MAX_TOKEN_LIFETIME_SECS" class="py-name" href="#" onclick="return doclink('link-129', 'MAX_TOKEN_LIFETIME_SECS', 'link-129');">MAX_TOKEN_LIFETIME_SECS</a></tt> <tt class="py-op">=</tt> <tt class="py-number">3600</tt> <tt class="py-comment"># 1 hour in seconds</tt> </tt>
+<a name="L903"></a><tt class="py-lineno"> 903</tt>  <tt class="py-line"> </tt>
+<a name="L904"></a><tt class="py-lineno"> 904</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-130', 'positional', 'link-55');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
+<a name="SignedJwtAssertionCredentials.__init__"></a><div id="SignedJwtAssertionCredentials.__init__-def"><a name="L905"></a><tt class="py-lineno"> 905</tt> <a class="py-toggle" href="#" id="SignedJwtAssertionCredentials.__init__-toggle" onclick="return toggle('SignedJwtAssertionCredentials.__init__');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> </tt>
+<a name="L906"></a><tt class="py-lineno"> 906</tt>  <tt class="py-line">        <tt class="py-param">service_account_name</tt><tt class="py-op">,</tt> </tt>
+<a name="L907"></a><tt class="py-lineno"> 907</tt>  <tt class="py-line">        <tt class="py-param">private_key</tt><tt class="py-op">,</tt> </tt>
+<a name="L908"></a><tt class="py-lineno"> 908</tt>  <tt class="py-line">        <tt class="py-param">scope</tt><tt class="py-op">,</tt> </tt>
+<a name="L909"></a><tt class="py-lineno"> 909</tt>  <tt class="py-line">        <tt class="py-param">private_key_password</tt><tt class="py-op">=</tt><tt class="py-string">'notasecret'</tt><tt class="py-op">,</tt> </tt>
+<a name="L910"></a><tt class="py-lineno"> 910</tt>  <tt class="py-line">        <tt class="py-param">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L911"></a><tt class="py-lineno"> 911</tt>  <tt class="py-line">        <tt class="py-param">token_uri</tt><tt class="py-op">=</tt><tt id="link-131" class="py-name"><a title="oauth2client.GOOGLE_TOKEN_URI" class="py-name" href="#" onclick="return doclink('link-131', 'GOOGLE_TOKEN_URI', 'link-6');">GOOGLE_TOKEN_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L912"></a><tt class="py-lineno"> 912</tt>  <tt class="py-line">        <tt class="py-param">revoke_uri</tt><tt class="py-op">=</tt><tt id="link-132" class="py-name"><a title="oauth2client.GOOGLE_REVOKE_URI" class="py-name" href="#" onclick="return doclink('link-132', 'GOOGLE_REVOKE_URI', 'link-4');">GOOGLE_REVOKE_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L913"></a><tt class="py-lineno"> 913</tt>  <tt class="py-line">        <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SignedJwtAssertionCredentials.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++++"></div><div id="SignedJwtAssertionCredentials.__init__-expanded"><a name="L914"></a><tt class="py-lineno"> 914</tt>  <tt class="py-line">      <tt class="py-docstring">"""Constructor for SignedJwtAssertionCredentials.</tt> </tt>
+<a name="L915"></a><tt class="py-lineno"> 915</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L916"></a><tt class="py-lineno"> 916</tt>  <tt class="py-line"><tt class="py-docstring">      Args:</tt> </tt>
+<a name="L917"></a><tt class="py-lineno"> 917</tt>  <tt class="py-line"><tt class="py-docstring">        service_account_name: string, id for account, usually an email address.</tt> </tt>
+<a name="L918"></a><tt class="py-lineno"> 918</tt>  <tt class="py-line"><tt class="py-docstring">        private_key: string, private key in PKCS12 or PEM format.</tt> </tt>
+<a name="L919"></a><tt class="py-lineno"> 919</tt>  <tt class="py-line"><tt class="py-docstring">        scope: string or iterable of strings, scope(s) of the credentials being</tt> </tt>
+<a name="L920"></a><tt class="py-lineno"> 920</tt>  <tt class="py-line"><tt class="py-docstring">          requested.</tt> </tt>
+<a name="L921"></a><tt class="py-lineno"> 921</tt>  <tt class="py-line"><tt class="py-docstring">        private_key_password: string, password for private_key, unused if</tt> </tt>
+<a name="L922"></a><tt class="py-lineno"> 922</tt>  <tt class="py-line"><tt class="py-docstring">          private_key is in PEM format.</tt> </tt>
+<a name="L923"></a><tt class="py-lineno"> 923</tt>  <tt class="py-line"><tt class="py-docstring">        user_agent: string, HTTP User-Agent to provide for this application.</tt> </tt>
+<a name="L924"></a><tt class="py-lineno"> 924</tt>  <tt class="py-line"><tt class="py-docstring">        token_uri: string, URI for token endpoint. For convenience</tt> </tt>
+<a name="L925"></a><tt class="py-lineno"> 925</tt>  <tt class="py-line"><tt class="py-docstring">          defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
+<a name="L926"></a><tt class="py-lineno"> 926</tt>  <tt class="py-line"><tt class="py-docstring">        revoke_uri: string, URI for revoke endpoint.</tt> </tt>
+<a name="L927"></a><tt class="py-lineno"> 927</tt>  <tt class="py-line"><tt class="py-docstring">        kwargs: kwargs, Additional parameters to add to the JWT token, for</tt> </tt>
+<a name="L928"></a><tt class="py-lineno"> 928</tt>  <tt class="py-line"><tt class="py-docstring">          example prn=joe@xample.org."""</tt> </tt>
+<a name="L929"></a><tt class="py-lineno"> 929</tt>  <tt class="py-line"> </tt>
+<a name="L930"></a><tt class="py-lineno"> 930</tt>  <tt class="py-line">      <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-133" class="py-name" targets="Class oauth2client.client.SignedJwtAssertionCredentials=oauth2client.client.SignedJwtAssertionCredentials-class.html"><a title="oauth2client.client.SignedJwtAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-133', 'SignedJwtAssertionCredentials', 'link-133');">SignedJwtAssertionCredentials</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-134" class="py-name"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
+apiclient.errors.BatchError.__init__
+apiclient.errors.HttpError.__init__
+apiclient.errors.UnexpectedBodyError.__init__
+apiclient.errors.UnexpectedMethodError.__init__
+apiclient.http.BatchHttpRequest.__init__
+apiclient.http.HttpMock.__init__
+apiclient.http.HttpMockSequence.__init__
+apiclient.http.HttpRequest.__init__
+apiclient.http.HttpRequestMock.__init__
+apiclient.http.MediaDownloadProgress.__init__
+apiclient.http.MediaFileUpload.__init__
+apiclient.http.MediaInMemoryUpload.__init__
+apiclient.http.MediaIoBaseDownload.__init__
+apiclient.http.MediaIoBaseUpload.__init__
+apiclient.http.MediaUploadProgress.__init__
+apiclient.http.RequestMockBuilder.__init__
+apiclient.http._StreamSlice.__init__
+apiclient.model.JsonModel.__init__
+apiclient.model.ProtocolBufferModel.__init__
+apiclient.push.Channel.__init__
+apiclient.push.Headers.__init__
+apiclient.push.Subscription.__init__
+apiclient.push.WebhookChannel.__init__
+apiclient.schema.Schemas.__init__
+apiclient.schema._SchemaToStruct.__init__
+oauth2client.appengine.AppAssertionCredentials.__init__
+oauth2client.appengine.OAuth2Decorator.__init__
+oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__
+oauth2client.appengine.StorageByKeyName.__init__
+oauth2client.client.AccessTokenCredentials.__init__
+oauth2client.client.AssertionCredentials.__init__
+oauth2client.client.MemoryCache.__init__
+oauth2client.client.OAuth2Credentials.__init__
+oauth2client.client.OAuth2WebServerFlow.__init__
+oauth2client.client.SignedJwtAssertionCredentials.__init__
+oauth2client.django_orm.CredentialsField.__init__
+oauth2client.django_orm.FlowField.__init__
+oauth2client.django_orm.Storage.__init__
+oauth2client.file.Storage.__init__
+oauth2client.gce.AppAssertionCredentials.__init__
+oauth2client.keyring_storage.Storage.__init__
+oauth2client.locked_file.LockedFile.__init__
+oauth2client.locked_file._Opener.__init__
+oauth2client.multistore_file._MultiStore._Storage.__init__
+oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-134', '__init__', 'link-115');">__init__</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L931"></a><tt class="py-lineno"> 931</tt>  <tt class="py-line">          <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L932"></a><tt class="py-lineno"> 932</tt>  <tt class="py-line">          <tt class="py-name">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">user_agent</tt><tt class="py-op">,</tt> </tt>
+<a name="L933"></a><tt class="py-lineno"> 933</tt>  <tt class="py-line">          <tt class="py-name">token_uri</tt><tt class="py-op">=</tt><tt class="py-name">token_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L934"></a><tt class="py-lineno"> 934</tt>  <tt class="py-line">          <tt class="py-name">revoke_uri</tt><tt class="py-op">=</tt><tt class="py-name">revoke_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L935"></a><tt class="py-lineno"> 935</tt>  <tt class="py-line">          <tt class="py-op">)</tt> </tt>
+<a name="L936"></a><tt class="py-lineno"> 936</tt>  <tt class="py-line"> </tt>
+<a name="L937"></a><tt class="py-lineno"> 937</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt> <tt class="py-op">=</tt> <tt id="link-135" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-135', 'util', 'link-8');">util</a></tt><tt class="py-op">.</tt><tt id="link-136" class="py-name" targets="Function oauth2client.util.scopes_to_string()=oauth2client.util-module.html#scopes_to_string"><a title="oauth2client.util.scopes_to_string" class="py-name" href="#" onclick="return doclink('link-136', 'scopes_to_string', 'link-136');">scopes_to_string</a></tt><tt class="py-op">(</tt><tt class="py-name">scope</tt><tt class="py-op">)</tt> </tt>
+<a name="L938"></a><tt class="py-lineno"> 938</tt>  <tt class="py-line"> </tt>
+<a name="L939"></a><tt class="py-lineno"> 939</tt>  <tt class="py-line">      <tt class="py-comment"># Keep base64 encoded so it can be stored in JSON.</tt> </tt>
+<a name="L940"></a><tt class="py-lineno"> 940</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">private_key</tt> <tt class="py-op">=</tt> <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">b64encode</tt><tt class="py-op">(</tt><tt class="py-name">private_key</tt><tt class="py-op">)</tt> </tt>
+<a name="L941"></a><tt class="py-lineno"> 941</tt>  <tt class="py-line"> </tt>
+<a name="L942"></a><tt class="py-lineno"> 942</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">private_key_password</tt> <tt class="py-op">=</tt> <tt class="py-name">private_key_password</tt> </tt>
+<a name="L943"></a><tt class="py-lineno"> 943</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">service_account_name</tt> <tt class="py-op">=</tt> <tt class="py-name">service_account_name</tt> </tt>
+<a name="L944"></a><tt class="py-lineno"> 944</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kwargs</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt> </tt>
+</div><a name="L945"></a><tt class="py-lineno"> 945</tt>  <tt class="py-line"> </tt>
+<a name="L946"></a><tt class="py-lineno"> 946</tt>  <tt class="py-line">    <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="SignedJwtAssertionCredentials.from_json"></a><div id="SignedJwtAssertionCredentials.from_json-def"><a name="L947"></a><tt class="py-lineno"> 947</tt> <a class="py-toggle" href="#" id="SignedJwtAssertionCredentials.from_json-toggle" onclick="return toggle('SignedJwtAssertionCredentials.from_json');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.SignedJwtAssertionCredentials-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SignedJwtAssertionCredentials.from_json-collapsed" style="display:none;" pad="++++" indent="++++++++++"></div><div id="SignedJwtAssertionCredentials.from_json-expanded"><a name="L948"></a><tt class="py-lineno"> 948</tt>  <tt class="py-line">      <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-137" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-137', 'loads', 'link-34');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
+<a name="L949"></a><tt class="py-lineno"> 949</tt>  <tt class="py-line">      <tt class="py-name">retval</tt> <tt class="py-op">=</tt> <tt id="link-138" class="py-name"><a title="oauth2client.client.SignedJwtAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-138', 'SignedJwtAssertionCredentials', 'link-133');">SignedJwtAssertionCredentials</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L950"></a><tt class="py-lineno"> 950</tt>  <tt class="py-line">          <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'service_account_name'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L951"></a><tt class="py-lineno"> 951</tt>  <tt class="py-line">          <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">b64decode</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'private_key'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L952"></a><tt class="py-lineno"> 952</tt>  <tt class="py-line">          <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'scope'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L953"></a><tt class="py-lineno"> 953</tt>  <tt class="py-line">          <tt class="py-name">private_key_password</tt><tt class="py-op">=</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'private_key_password'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L954"></a><tt class="py-lineno"> 954</tt>  <tt class="py-line">          <tt class="py-name">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'user_agent'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L955"></a><tt class="py-lineno"> 955</tt>  <tt class="py-line">          <tt class="py-name">token_uri</tt><tt class="py-op">=</tt><tt class="py-name">data</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="L956"></a><tt class="py-lineno"> 956</tt>  <tt class="py-line">          <tt class="py-op">**</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'kwargs'</tt><tt class="py-op">]</tt> </tt>
+<a name="L957"></a><tt class="py-lineno"> 957</tt>  <tt class="py-line">          <tt class="py-op">)</tt> </tt>
+<a name="L958"></a><tt class="py-lineno"> 958</tt>  <tt class="py-line">      <tt class="py-name">retval</tt><tt class="py-op">.</tt><tt class="py-name">invalid</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'invalid'</tt><tt class="py-op">]</tt> </tt>
+<a name="L959"></a><tt class="py-lineno"> 959</tt>  <tt class="py-line">      <tt class="py-name">retval</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'access_token'</tt><tt class="py-op">]</tt> </tt>
+<a name="L960"></a><tt class="py-lineno"> 960</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">retval</tt> </tt>
+</div><a name="L961"></a><tt class="py-lineno"> 961</tt>  <tt class="py-line"> </tt>
+<a name="SignedJwtAssertionCredentials._generate_assertion"></a><div id="SignedJwtAssertionCredentials._generate_assertion-def"><a name="L962"></a><tt class="py-lineno"> 962</tt> <a class="py-toggle" href="#" id="SignedJwtAssertionCredentials._generate_assertion-toggle" onclick="return toggle('SignedJwtAssertionCredentials._generate_assertion');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.SignedJwtAssertionCredentials-class.html#_generate_assertion">_generate_assertion</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="SignedJwtAssertionCredentials._generate_assertion-collapsed" style="display:none;" pad="++++" indent="++++++++++"></div><div id="SignedJwtAssertionCredentials._generate_assertion-expanded"><a name="L963"></a><tt class="py-lineno"> 963</tt>  <tt class="py-line">      <tt class="py-docstring">"""Generate the assertion that will be used in the request."""</tt> </tt>
+<a name="L964"></a><tt class="py-lineno"> 964</tt>  <tt class="py-line">      <tt class="py-name">now</tt> <tt class="py-op">=</tt> <tt class="py-name">long</tt><tt class="py-op">(</tt><tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">time</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L965"></a><tt class="py-lineno"> 965</tt>  <tt class="py-line">      <tt class="py-name">payload</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L966"></a><tt class="py-lineno"> 966</tt>  <tt class="py-line">          <tt class="py-string">'aud'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L967"></a><tt class="py-lineno"> 967</tt>  <tt class="py-line">          <tt class="py-string">'scope'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
+<a name="L968"></a><tt class="py-lineno"> 968</tt>  <tt class="py-line">          <tt class="py-string">'iat'</tt><tt class="py-op">:</tt> <tt class="py-name">now</tt><tt class="py-op">,</tt> </tt>
+<a name="L969"></a><tt class="py-lineno"> 969</tt>  <tt class="py-line">          <tt class="py-string">'exp'</tt><tt class="py-op">:</tt> <tt class="py-name">now</tt> <tt class="py-op">+</tt> <tt id="link-139" class="py-name"><a title="oauth2client.client.SignedJwtAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-139', 'SignedJwtAssertionCredentials', 'link-133');">SignedJwtAssertionCredentials</a></tt><tt class="py-op">.</tt><tt id="link-140" class="py-name"><a title="oauth2client.client.SignedJwtAssertionCredentials.MAX_TOKEN_LIFETIME_SECS
+oauth2client.crypt.MAX_TOKEN_LIFETIME_SECS" class="py-name" href="#" onclick="return doclink('link-140', 'MAX_TOKEN_LIFETIME_SECS', 'link-129');">MAX_TOKEN_LIFETIME_SECS</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L970"></a><tt class="py-lineno"> 970</tt>  <tt class="py-line">          <tt class="py-string">'iss'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">service_account_name</tt> </tt>
+<a name="L971"></a><tt class="py-lineno"> 971</tt>  <tt class="py-line">      <tt class="py-op">}</tt> </tt>
+<a name="L972"></a><tt class="py-lineno"> 972</tt>  <tt class="py-line">      <tt class="py-name">payload</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
+<a name="L973"></a><tt class="py-lineno"> 973</tt>  <tt class="py-line">      <tt id="link-141" class="py-name"><a title="apiclient.discovery.logger
+oauth2client.appengine.logger
+oauth2client.client.logger
+oauth2client.crypt.logger
+oauth2client.gce.logger
+oauth2client.locked_file.logger
+oauth2client.multistore_file.logger
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-141', 'logger', 'link-19');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L974"></a><tt class="py-lineno"> 974</tt>  <tt class="py-line"> </tt>
+<a name="L975"></a><tt class="py-lineno"> 975</tt>  <tt class="py-line">      <tt class="py-name">private_key</tt> <tt class="py-op">=</tt> <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">b64decode</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">private_key</tt><tt class="py-op">)</tt> </tt>
+<a name="L976"></a><tt class="py-lineno"> 976</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-142" class="py-name"><a title="oauth2client.crypt" class="py-name" href="#" onclick="return doclink('link-142', 'crypt', 'link-14');">crypt</a></tt><tt class="py-op">.</tt><tt id="link-143" class="py-name" targets="Function oauth2client.crypt.make_signed_jwt()=oauth2client.crypt-module.html#make_signed_jwt"><a title="oauth2client.crypt.make_signed_jwt" class="py-name" href="#" onclick="return doclink('link-143', 'make_signed_jwt', 'link-143');">make_signed_jwt</a></tt><tt class="py-op">(</tt><tt id="link-144" class="py-name"><a title="oauth2client.crypt" class="py-name" href="#" onclick="return doclink('link-144', 'crypt', 'link-14');">crypt</a></tt><tt class="py-op">.</tt><tt id="link-145" class="py-name" targets="Variable oauth2client.crypt.Signer=oauth2client.crypt-module.html#Signer"><a title="oauth2client.crypt.Signer" class="py-name" href="#" onclick="return doclink('link-145', 'Signer', 'link-145');">Signer</a></tt><tt class="py-op">.</tt><tt class="py-name">from_string</tt><tt class="py-op">(</tt> </tt>
+<a name="L977"></a><tt class="py-lineno"> 977</tt>  <tt class="py-line">          <tt class="py-name">private_key</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">private_key_password</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L978"></a><tt class="py-lineno"> 978</tt>  <tt class="py-line"> </tt>
+<a name="L979"></a><tt class="py-lineno"> 979</tt>  <tt class="py-line">  <tt class="py-comment"># Only used in verify_id_token(), which is always calling to the same URI</tt> </tt>
+<a name="L980"></a><tt class="py-lineno"> 980</tt>  <tt class="py-line">  <tt class="py-comment"># for the certs.</tt> </tt>
+<a name="L981"></a><tt class="py-lineno"> 981</tt>  <tt class="py-line">  <tt id="link-146" class="py-name" targets="Variable oauth2client.client._cached_http=oauth2client.client-module.html#_cached_http"><a title="oauth2client.client._cached_http" class="py-name" href="#" onclick="return doclink('link-146', '_cached_http', 'link-146');">_cached_http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Http</tt><tt class="py-op">(</tt><tt id="link-147" class="py-name" targets="Class oauth2client.client.MemoryCache=oauth2client.client.MemoryCache-class.html"><a title="oauth2client.client.MemoryCache" class="py-name" href="#" onclick="return doclink('link-147', 'MemoryCache', 'link-147');">MemoryCache</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L982"></a><tt class="py-lineno"> 982</tt>  <tt class="py-line"> </tt>
+<a name="L983"></a><tt class="py-lineno"> 983</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-148" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-148', 'positional', 'link-55');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="verify_id_token"></a><div id="verify_id_token-def"><a name="L984"></a><tt class="py-lineno"> 984</tt> <a class="py-toggle" href="#" id="verify_id_token-toggle" onclick="return toggle('verify_id_token');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#verify_id_token">verify_id_token</a><tt class="py-op">(</tt><tt class="py-param">id_token</tt><tt class="py-op">,</tt> <tt class="py-param">audience</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L985"></a><tt class="py-lineno"> 985</tt>  <tt class="py-line">      <tt class="py-param">cert_uri</tt><tt class="py-op">=</tt><tt id="link-149" class="py-name"><a title="oauth2client.client.ID_TOKEN_VERIFICATON_CERTS" class="py-name" href="#" onclick="return doclink('link-149', 'ID_TOKEN_VERIFICATON_CERTS', 'link-21');">ID_TOKEN_VERIFICATON_CERTS</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="verify_id_token-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="verify_id_token-expanded"><a name="L986"></a><tt class="py-lineno"> 986</tt>  <tt class="py-line">    <tt class="py-docstring">"""Verifies a signed JWT id_token.</tt> </tt>
+<a name="L987"></a><tt class="py-lineno"> 987</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L988"></a><tt class="py-lineno"> 988</tt>  <tt class="py-line"><tt class="py-docstring">    This function requires PyOpenSSL and because of that it does not work on</tt> </tt>
+<a name="L989"></a><tt class="py-lineno"> 989</tt>  <tt class="py-line"><tt class="py-docstring">    App Engine.</tt> </tt>
+<a name="L990"></a><tt class="py-lineno"> 990</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L991"></a><tt class="py-lineno"> 991</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L992"></a><tt class="py-lineno"> 992</tt>  <tt class="py-line"><tt class="py-docstring">      id_token: string, A Signed JWT.</tt> </tt>
+<a name="L993"></a><tt class="py-lineno"> 993</tt>  <tt class="py-line"><tt class="py-docstring">      audience: string, The audience 'aud' that the token should be for.</tt> </tt>
+<a name="L994"></a><tt class="py-lineno"> 994</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, instance to use to make the HTTP request. Callers</tt> </tt>
+<a name="L995"></a><tt class="py-lineno"> 995</tt>  <tt class="py-line"><tt class="py-docstring">        should supply an instance that has caching enabled.</tt> </tt>
+<a name="L996"></a><tt class="py-lineno"> 996</tt>  <tt class="py-line"><tt class="py-docstring">      cert_uri: string, URI of the certificates in JSON format to</tt> </tt>
+<a name="L997"></a><tt class="py-lineno"> 997</tt>  <tt class="py-line"><tt class="py-docstring">        verify the JWT against.</tt> </tt>
 <a name="L998"></a><tt class="py-lineno"> 998</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L999"></a><tt class="py-lineno"> 999</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L1000"></a><tt class="py-lineno">1000</tt>  <tt class="py-line"><tt class="py-docstring">    filename: string, File name of clientsecrets.</tt> </tt>
-<a name="L1001"></a><tt class="py-lineno">1001</tt>  <tt class="py-line"><tt class="py-docstring">    scope: string or iterable of strings, scope(s) to request.</tt> </tt>
-<a name="L1002"></a><tt class="py-lineno">1002</tt>  <tt class="py-line"><tt class="py-docstring">    code: string, An authorization code, most likely passed down from</tt> </tt>
-<a name="L1003"></a><tt class="py-lineno">1003</tt>  <tt class="py-line"><tt class="py-docstring">      the client</tt> </tt>
-<a name="L1004"></a><tt class="py-lineno">1004</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="L1005"></a><tt class="py-lineno">1005</tt>  <tt class="py-line"><tt class="py-docstring">      clientsecrets file is missing or invalid. If message is provided then</tt> </tt>
-<a name="L1006"></a><tt class="py-lineno">1006</tt>  <tt class="py-line"><tt class="py-docstring">      sys.exit will be called in the case of an error. If message in not</tt> </tt>
-<a name="L1007"></a><tt class="py-lineno">1007</tt>  <tt class="py-line"><tt class="py-docstring">      provided then clientsecrets.InvalidClientSecretsError will be raised.</tt> </tt>
-<a name="L1008"></a><tt class="py-lineno">1008</tt>  <tt class="py-line"><tt class="py-docstring">    redirect_uri: string, this is generally set to 'postmessage' to match the</tt> </tt>
-<a name="L1009"></a><tt class="py-lineno">1009</tt>  <tt class="py-line"><tt class="py-docstring">      redirect_uri that the client specified</tt> </tt>
-<a name="L1010"></a><tt class="py-lineno">1010</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, optional http instance to use to do the fetch</tt> </tt>
-<a name="L1011"></a><tt class="py-lineno">1011</tt>  <tt class="py-line"><tt class="py-docstring">    cache: An optional cache service client that implements get() and set()</tt> </tt>
-<a name="L1012"></a><tt class="py-lineno">1012</tt>  <tt class="py-line"><tt class="py-docstring">      methods. See clientsecrets.loadfile() for details.</tt> </tt>
-<a name="L1013"></a><tt class="py-lineno">1013</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1014"></a><tt class="py-lineno">1014</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L1015"></a><tt class="py-lineno">1015</tt>  <tt class="py-line"><tt class="py-docstring">    An OAuth2Credentials object.</tt> </tt>
-<a name="L1016"></a><tt class="py-lineno">1016</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1017"></a><tt class="py-lineno">1017</tt>  <tt class="py-line"><tt class="py-docstring">  Raises:</tt> </tt>
-<a name="L1018"></a><tt class="py-lineno">1018</tt>  <tt class="py-line"><tt class="py-docstring">    FlowExchangeError if the authorization code cannot be exchanged for an</tt> </tt>
-<a name="L1019"></a><tt class="py-lineno">1019</tt>  <tt class="py-line"><tt class="py-docstring">     access token</tt> </tt>
-<a name="L1020"></a><tt class="py-lineno">1020</tt>  <tt class="py-line"><tt class="py-docstring">    UnknownClientSecretsFlowError if the file describes an unknown kind of Flow.</tt> </tt>
-<a name="L1021"></a><tt class="py-lineno">1021</tt>  <tt class="py-line"><tt class="py-docstring">    clientsecrets.InvalidClientSecretsError if the clientsecrets file is</tt> </tt>
-<a name="L1022"></a><tt class="py-lineno">1022</tt>  <tt class="py-line"><tt class="py-docstring">      invalid.</tt> </tt>
-<a name="L1023"></a><tt class="py-lineno">1023</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L1024"></a><tt class="py-lineno">1024</tt>  <tt class="py-line">  <tt class="py-name">flow</tt> <tt class="py-op">=</tt> <tt id="link-139" class="py-name" targets="Function oauth2client.client.flow_from_clientsecrets()=oauth2client.client-module.html#flow_from_clientsecrets"><a title="oauth2client.client.flow_from_clientsecrets" class="py-name" href="#" onclick="return doclink('link-139', 'flow_from_clientsecrets', 'link-139');">flow_from_clientsecrets</a></tt><tt class="py-op">(</tt><tt id="link-140" 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-140', 'filename', 'link-140');">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 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>
-<a name="L1025"></a><tt class="py-lineno">1025</tt>  <tt class="py-line">                                 <tt class="py-name">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-name">redirect_uri</tt><tt class="py-op">)</tt> </tt>
-<a name="L1026"></a><tt class="py-lineno">1026</tt>  <tt class="py-line">  <tt id="link-141" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-141', 'credentials', 'link-35');">credentials</a></tt> <tt class="py-op">=</tt> <tt class="py-name">flow</tt><tt class="py-op">.</tt><tt id="link-142" class="py-name"><a title="oauth2client.client.OAuth2WebServerFlow.step2_exchange" class="py-name" href="#" onclick="return doclink('link-142', 'step2_exchange', 'link-134');">step2_exchange</a></tt><tt class="py-op">(</tt><tt class="py-name">code</tt><tt class="py-op">,</tt> <tt id="link-143" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-143', 'http', 'link-42');">http</a></tt><tt class="py-op">=</tt><tt id="link-144" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-144', 'http', 'link-42');">http</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1027"></a><tt class="py-lineno">1027</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-145" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
-oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-145', 'credentials', 'link-35');">credentials</a></tt> </tt>
-</div><a name="L1028"></a><tt class="py-lineno">1028</tt>  <tt class="py-line"> </tt>
-<a name="OAuth2WebServerFlow"></a><div id="OAuth2WebServerFlow-def"><a name="L1029"></a><tt class="py-lineno">1029</tt>  <tt class="py-line"> </tt>
-<a name="L1030"></a><tt class="py-lineno">1030</tt> <a class="py-toggle" href="#" id="OAuth2WebServerFlow-toggle" onclick="return toggle('OAuth2WebServerFlow');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.OAuth2WebServerFlow-class.html">OAuth2WebServerFlow</a><tt class="py-op">(</tt><tt class="py-base-class">Flow</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2WebServerFlow-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="OAuth2WebServerFlow-expanded"><a name="L1031"></a><tt class="py-lineno">1031</tt>  <tt class="py-line">  <tt class="py-docstring">"""Does the Web Server Flow for OAuth 2.0.</tt> </tt>
-<a name="L1032"></a><tt class="py-lineno">1032</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1033"></a><tt class="py-lineno">1033</tt>  <tt class="py-line"><tt class="py-docstring">  OAuth2WebServerFlow objects may be safely pickled and unpickled.</tt> </tt>
-<a name="L1034"></a><tt class="py-lineno">1034</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L1035"></a><tt class="py-lineno">1035</tt>  <tt class="py-line"> </tt>
-<a name="L1036"></a><tt class="py-lineno">1036</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-146" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-146', 'positional', 'link-41');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
-<a name="OAuth2WebServerFlow.__init__"></a><div id="OAuth2WebServerFlow.__init__-def"><a name="L1037"></a><tt class="py-lineno">1037</tt> <a class="py-toggle" href="#" id="OAuth2WebServerFlow.__init__-toggle" onclick="return toggle('OAuth2WebServerFlow.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2WebServerFlow-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">client_id</tt><tt class="py-op">,</tt> <tt class="py-param">client_secret</tt><tt class="py-op">,</tt> <tt class="py-param">scope</tt><tt class="py-op">,</tt> </tt>
-<a name="L1038"></a><tt class="py-lineno">1038</tt>  <tt class="py-line">               <tt class="py-param">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L1039"></a><tt class="py-lineno">1039</tt>  <tt class="py-line">               <tt class="py-param">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L1040"></a><tt class="py-lineno">1040</tt>  <tt class="py-line">               <tt class="py-param">auth_uri</tt><tt class="py-op">=</tt><tt class="py-string">'https://accounts.google.com/o/oauth2/auth'</tt><tt class="py-op">,</tt> </tt>
-<a name="L1041"></a><tt class="py-lineno">1041</tt>  <tt class="py-line">               <tt class="py-param">token_uri</tt><tt class="py-op">=</tt><tt class="py-string">'https://accounts.google.com/o/oauth2/token'</tt><tt class="py-op">,</tt> </tt>
-<a name="L1042"></a><tt class="py-lineno">1042</tt>  <tt class="py-line">               <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OAuth2WebServerFlow.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2WebServerFlow.__init__-expanded"><a name="L1043"></a><tt class="py-lineno">1043</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for OAuth2WebServerFlow.</tt> </tt>
-<a name="L1044"></a><tt class="py-lineno">1044</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1045"></a><tt class="py-lineno">1045</tt>  <tt class="py-line"><tt class="py-docstring">    The kwargs argument is used to set extra query parameters on the</tt> </tt>
-<a name="L1046"></a><tt class="py-lineno">1046</tt>  <tt class="py-line"><tt class="py-docstring">    auth_uri. For example, the access_type and approval_prompt</tt> </tt>
-<a name="L1047"></a><tt class="py-lineno">1047</tt>  <tt class="py-line"><tt class="py-docstring">    query parameters can be set via kwargs.</tt> </tt>
-<a name="L1048"></a><tt class="py-lineno">1048</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1049"></a><tt class="py-lineno">1049</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1050"></a><tt class="py-lineno">1050</tt>  <tt class="py-line"><tt class="py-docstring">      client_id: string, client identifier.</tt> </tt>
-<a name="L1051"></a><tt class="py-lineno">1051</tt>  <tt class="py-line"><tt class="py-docstring">      client_secret: string client secret.</tt> </tt>
-<a name="L1052"></a><tt class="py-lineno">1052</tt>  <tt class="py-line"><tt class="py-docstring">      scope: string or iterable of strings, scope(s) of the credentials being</tt> </tt>
-<a name="L1053"></a><tt class="py-lineno">1053</tt>  <tt class="py-line"><tt class="py-docstring">        requested.</tt> </tt>
-<a name="L1054"></a><tt class="py-lineno">1054</tt>  <tt class="py-line"><tt class="py-docstring">      redirect_uri: string, Either the string 'urn:ietf:wg:oauth:2.0:oob' for</tt> </tt>
-<a name="L1055"></a><tt class="py-lineno">1055</tt>  <tt class="py-line"><tt class="py-docstring">          a non-web-based application, or a URI that handles the callback from</tt> </tt>
-<a name="L1056"></a><tt class="py-lineno">1056</tt>  <tt class="py-line"><tt class="py-docstring">          the authorization server.</tt> </tt>
-<a name="L1057"></a><tt class="py-lineno">1057</tt>  <tt class="py-line"><tt class="py-docstring">      user_agent: string, HTTP User-Agent to provide for this application.</tt> </tt>
-<a name="L1058"></a><tt class="py-lineno">1058</tt>  <tt class="py-line"><tt class="py-docstring">      auth_uri: string, URI for authorization endpoint. For convenience</tt> </tt>
-<a name="L1059"></a><tt class="py-lineno">1059</tt>  <tt class="py-line"><tt class="py-docstring">        defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
-<a name="L1060"></a><tt class="py-lineno">1060</tt>  <tt class="py-line"><tt class="py-docstring">      token_uri: string, URI for token endpoint. For convenience</tt> </tt>
-<a name="L1061"></a><tt class="py-lineno">1061</tt>  <tt class="py-line"><tt class="py-docstring">        defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
-<a name="L1062"></a><tt class="py-lineno">1062</tt>  <tt class="py-line"><tt class="py-docstring">      **kwargs: dict, The keyword arguments are all optional and required</tt> </tt>
-<a name="L1063"></a><tt class="py-lineno">1063</tt>  <tt class="py-line"><tt class="py-docstring">                        parameters for the OAuth calls.</tt> </tt>
-<a name="L1064"></a><tt class="py-lineno">1064</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1065"></a><tt class="py-lineno">1065</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_id</tt> <tt class="py-op">=</tt> <tt class="py-name">client_id</tt> </tt>
-<a name="L1066"></a><tt class="py-lineno">1066</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_secret</tt> <tt class="py-op">=</tt> <tt class="py-name">client_secret</tt> </tt>
-<a name="L1067"></a><tt class="py-lineno">1067</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt> <tt class="py-op">=</tt> <tt id="link-147" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-147', 'util', 'link-2');">util</a></tt><tt class="py-op">.</tt><tt id="link-148" class="py-name"><a title="oauth2client.util.scopes_to_string" class="py-name" href="#" onclick="return doclink('link-148', 'scopes_to_string', 'link-104');">scopes_to_string</a></tt><tt class="py-op">(</tt><tt class="py-name">scope</tt><tt class="py-op">)</tt> </tt>
-<a name="L1068"></a><tt class="py-lineno">1068</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">redirect_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">redirect_uri</tt> </tt>
-<a name="L1069"></a><tt class="py-lineno">1069</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt> <tt class="py-op">=</tt> <tt class="py-name">user_agent</tt> </tt>
-<a name="L1070"></a><tt class="py-lineno">1070</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">auth_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">auth_uri</tt> </tt>
-<a name="L1071"></a><tt class="py-lineno">1071</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">token_uri</tt> </tt>
-<a name="L1072"></a><tt class="py-lineno">1072</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L1073"></a><tt class="py-lineno">1073</tt>  <tt class="py-line">        <tt class="py-string">'access_type'</tt><tt class="py-op">:</tt> <tt class="py-string">'offline'</tt><tt class="py-op">,</tt> </tt>
-<a name="L1074"></a><tt class="py-lineno">1074</tt>  <tt class="py-line">        <tt class="py-string">'response_type'</tt><tt class="py-op">:</tt> <tt class="py-string">'code'</tt><tt class="py-op">,</tt> </tt>
-<a name="L1075"></a><tt class="py-lineno">1075</tt>  <tt class="py-line">        <tt class="py-op">}</tt> </tt>
-<a name="L1076"></a><tt class="py-lineno">1076</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1077"></a><tt class="py-lineno">1077</tt>  <tt class="py-line"> </tt>
-<a name="L1078"></a><tt class="py-lineno">1078</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-149" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-149', 'positional', 'link-41');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="OAuth2WebServerFlow.step1_get_authorize_url"></a><div id="OAuth2WebServerFlow.step1_get_authorize_url-def"><a name="L1079"></a><tt class="py-lineno">1079</tt> <a class="py-toggle" href="#" id="OAuth2WebServerFlow.step1_get_authorize_url-toggle" onclick="return toggle('OAuth2WebServerFlow.step1_get_authorize_url');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2WebServerFlow-class.html#step1_get_authorize_url">step1_get_authorize_url</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">redirect_uri</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="OAuth2WebServerFlow.step1_get_authorize_url-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2WebServerFlow.step1_get_authorize_url-expanded"><a name="L1080"></a><tt class="py-lineno">1080</tt>  <tt class="py-line">    <tt class="py-docstring">"""Returns a URI to redirect to the provider.</tt> </tt>
-<a name="L1081"></a><tt class="py-lineno">1081</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1082"></a><tt class="py-lineno">1082</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1083"></a><tt class="py-lineno">1083</tt>  <tt class="py-line"><tt class="py-docstring">      redirect_uri: string, Either the string 'urn:ietf:wg:oauth:2.0:oob' for</tt> </tt>
-<a name="L1084"></a><tt class="py-lineno">1084</tt>  <tt class="py-line"><tt class="py-docstring">          a non-web-based application, or a URI that handles the callback from</tt> </tt>
-<a name="L1085"></a><tt class="py-lineno">1085</tt>  <tt class="py-line"><tt class="py-docstring">          the authorization server. This parameter is deprecated, please move to</tt> </tt>
-<a name="L1086"></a><tt class="py-lineno">1086</tt>  <tt class="py-line"><tt class="py-docstring">          passing the redirect_uri in via the constructor.</tt> </tt>
-<a name="L1087"></a><tt class="py-lineno">1087</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1088"></a><tt class="py-lineno">1088</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L1089"></a><tt class="py-lineno">1089</tt>  <tt class="py-line"><tt class="py-docstring">      A URI as a string to redirect the user to begin the authorization flow.</tt> </tt>
-<a name="L1090"></a><tt class="py-lineno">1090</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1091"></a><tt class="py-lineno">1091</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">redirect_uri</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="L1092"></a><tt class="py-lineno">1092</tt>  <tt class="py-line">      <tt id="link-150" class="py-name"><a title="apiclient.discovery.logger
-oauth2client.appengine.logger
-oauth2client.client.logger
-oauth2client.crypt.logger
-oauth2client.gce.logger
-oauth2client.locked_file.logger
-oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-150', 'logger', 'link-9');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">'The redirect_uri parameter for'</tt> </tt>
-<a name="L1093"></a><tt class="py-lineno">1093</tt>  <tt class="py-line">          <tt class="py-string">'OAuth2WebServerFlow.step1_get_authorize_url is deprecated. Please'</tt> </tt>
-<a name="L1094"></a><tt class="py-lineno">1094</tt>  <tt class="py-line">          <tt class="py-string">'move to passing the redirect_uri in via the constructor.'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1095"></a><tt class="py-lineno">1095</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">redirect_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">redirect_uri</tt> </tt>
-<a name="L1096"></a><tt class="py-lineno">1096</tt>  <tt class="py-line"> </tt>
-<a name="L1097"></a><tt class="py-lineno">1097</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">redirect_uri</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1098"></a><tt class="py-lineno">1098</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'The value of redirect_uri must not be None.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1099"></a><tt class="py-lineno">1099</tt>  <tt class="py-line"> </tt>
-<a name="L1100"></a><tt class="py-lineno">1100</tt>  <tt class="py-line">    <tt class="py-name">query</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L1101"></a><tt class="py-lineno">1101</tt>  <tt class="py-line">        <tt class="py-string">'client_id'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_id</tt><tt class="py-op">,</tt> </tt>
-<a name="L1102"></a><tt class="py-lineno">1102</tt>  <tt class="py-line">        <tt class="py-string">'redirect_uri'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">redirect_uri</tt><tt class="py-op">,</tt> </tt>
-<a name="L1103"></a><tt class="py-lineno">1103</tt>  <tt class="py-line">        <tt class="py-string">'scope'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
-<a name="L1104"></a><tt class="py-lineno">1104</tt>  <tt class="py-line">        <tt class="py-op">}</tt> </tt>
-<a name="L1105"></a><tt class="py-lineno">1105</tt>  <tt class="py-line">    <tt class="py-name">query</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
-<a name="L1106"></a><tt class="py-lineno">1106</tt>  <tt class="py-line">    <tt class="py-name">parts</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urlparse</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">auth_uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1107"></a><tt class="py-lineno">1107</tt>  <tt class="py-line">    <tt class="py-name">query</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-name">parse_qsl</tt><tt class="py-op">(</tt><tt class="py-name">parts</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-comment"># 4 is the index of the query part</tt> </tt>
-<a name="L1108"></a><tt class="py-lineno">1108</tt>  <tt class="py-line">    <tt class="py-name">parts</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-name">query</tt><tt class="py-op">)</tt> </tt>
-<a name="L1109"></a><tt class="py-lineno">1109</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urlunparse</tt><tt class="py-op">(</tt><tt class="py-name">parts</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1110"></a><tt class="py-lineno">1110</tt>  <tt class="py-line"> </tt>
-<a name="L1111"></a><tt class="py-lineno">1111</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-151', 'positional', 'link-41');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="OAuth2WebServerFlow.step2_exchange"></a><div id="OAuth2WebServerFlow.step2_exchange-def"><a name="L1112"></a><tt class="py-lineno">1112</tt> <a class="py-toggle" href="#" id="OAuth2WebServerFlow.step2_exchange-toggle" onclick="return toggle('OAuth2WebServerFlow.step2_exchange');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2WebServerFlow-class.html#step2_exchange">step2_exchange</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">code</tt><tt class="py-op">,</tt> <tt class="py-param">http</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="OAuth2WebServerFlow.step2_exchange-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2WebServerFlow.step2_exchange-expanded"><a name="L1113"></a><tt class="py-lineno">1113</tt>  <tt class="py-line">    <tt class="py-docstring">"""Exhanges a code for OAuth2Credentials.</tt> </tt>
-<a name="L1114"></a><tt class="py-lineno">1114</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1115"></a><tt class="py-lineno">1115</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1116"></a><tt class="py-lineno">1116</tt>  <tt class="py-line"><tt class="py-docstring">      code: string or dict, either the code as a string, or a dictionary</tt> </tt>
-<a name="L1117"></a><tt class="py-lineno">1117</tt>  <tt class="py-line"><tt class="py-docstring">        of the query parameters to the redirect_uri, which contains</tt> </tt>
-<a name="L1118"></a><tt class="py-lineno">1118</tt>  <tt class="py-line"><tt class="py-docstring">        the code.</tt> </tt>
-<a name="L1119"></a><tt class="py-lineno">1119</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, optional http instance to use to do the fetch</tt> </tt>
-<a name="L1120"></a><tt class="py-lineno">1120</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1121"></a><tt class="py-lineno">1121</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L1122"></a><tt class="py-lineno">1122</tt>  <tt class="py-line"><tt class="py-docstring">      An OAuth2Credentials object that can be used to authorize requests.</tt> </tt>
-<a name="L1123"></a><tt class="py-lineno">1123</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1124"></a><tt class="py-lineno">1124</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L1125"></a><tt class="py-lineno">1125</tt>  <tt class="py-line"><tt class="py-docstring">      FlowExchangeError if a problem occured exchanging the code for a</tt> </tt>
-<a name="L1126"></a><tt class="py-lineno">1126</tt>  <tt class="py-line"><tt class="py-docstring">      refresh_token.</tt> </tt>
-<a name="L1127"></a><tt class="py-lineno">1127</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1128"></a><tt class="py-lineno">1128</tt>  <tt class="py-line"> </tt>
-<a name="L1129"></a><tt class="py-lineno">1129</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-op">(</tt><tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">code</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">code</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1130"></a><tt class="py-lineno">1130</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'code'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">code</tt><tt class="py-op">:</tt> </tt>
-<a name="L1131"></a><tt class="py-lineno">1131</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'error'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">code</tt><tt class="py-op">:</tt> </tt>
-<a name="L1132"></a><tt class="py-lineno">1132</tt>  <tt class="py-line">          <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-name">code</tt><tt class="py-op">[</tt><tt class="py-string">'error'</tt><tt class="py-op">]</tt> </tt>
-<a name="L1133"></a><tt class="py-lineno">1133</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1134"></a><tt class="py-lineno">1134</tt>  <tt class="py-line">          <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-string">'No code was supplied in the query parameters.'</tt> </tt>
-<a name="L1135"></a><tt class="py-lineno">1135</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt id="link-152" class="py-name" targets="Class oauth2client.client.FlowExchangeError=oauth2client.client.FlowExchangeError-class.html"><a title="oauth2client.client.FlowExchangeError" class="py-name" href="#" onclick="return doclink('link-152', 'FlowExchangeError', 'link-152');">FlowExchangeError</a></tt><tt class="py-op">(</tt><tt class="py-name">error_msg</tt><tt class="py-op">)</tt> </tt>
-<a name="L1136"></a><tt class="py-lineno">1136</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1137"></a><tt class="py-lineno">1137</tt>  <tt class="py-line">        <tt class="py-name">code</tt> <tt class="py-op">=</tt> <tt class="py-name">code</tt><tt class="py-op">[</tt><tt class="py-string">'code'</tt><tt class="py-op">]</tt> </tt>
-<a name="L1138"></a><tt class="py-lineno">1138</tt>  <tt class="py-line"> </tt>
-<a name="L1139"></a><tt class="py-lineno">1139</tt>  <tt class="py-line">    <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-op">{</tt> </tt>
-<a name="L1140"></a><tt class="py-lineno">1140</tt>  <tt class="py-line">        <tt class="py-string">'grant_type'</tt><tt class="py-op">:</tt> <tt class="py-string">'authorization_code'</tt><tt class="py-op">,</tt> </tt>
-<a name="L1141"></a><tt class="py-lineno">1141</tt>  <tt class="py-line">        <tt class="py-string">'client_id'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_id</tt><tt class="py-op">,</tt> </tt>
-<a name="L1142"></a><tt class="py-lineno">1142</tt>  <tt class="py-line">        <tt class="py-string">'client_secret'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_secret</tt><tt class="py-op">,</tt> </tt>
-<a name="L1143"></a><tt class="py-lineno">1143</tt>  <tt class="py-line">        <tt class="py-string">'code'</tt><tt class="py-op">:</tt> <tt class="py-name">code</tt><tt class="py-op">,</tt> </tt>
-<a name="L1144"></a><tt class="py-lineno">1144</tt>  <tt class="py-line">        <tt class="py-string">'redirect_uri'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">redirect_uri</tt><tt class="py-op">,</tt> </tt>
-<a name="L1145"></a><tt class="py-lineno">1145</tt>  <tt class="py-line">        <tt class="py-string">'scope'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
-<a name="L1146"></a><tt class="py-lineno">1146</tt>  <tt class="py-line">        <tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
-<a name="L1147"></a><tt class="py-lineno">1147</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L1148"></a><tt class="py-lineno">1148</tt>  <tt class="py-line">        <tt class="py-string">'content-type'</tt><tt class="py-op">:</tt> <tt class="py-string">'application/x-www-form-urlencoded'</tt><tt class="py-op">,</tt> </tt>
-<a name="L1149"></a><tt class="py-lineno">1149</tt>  <tt class="py-line">    <tt class="py-op">}</tt> </tt>
-<a name="L1150"></a><tt class="py-lineno">1150</tt>  <tt class="py-line"> </tt>
-<a name="L1151"></a><tt class="py-lineno">1151</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</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="L1152"></a><tt class="py-lineno">1152</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt> </tt>
-<a name="L1153"></a><tt class="py-lineno">1153</tt>  <tt class="py-line"> </tt>
-<a name="L1154"></a><tt class="py-lineno">1154</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-153" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-153', 'http', 'link-42');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1155"></a><tt class="py-lineno">1155</tt>  <tt class="py-line">      <tt id="link-154" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-154', 'http', 'link-42');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Http</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1156"></a><tt class="py-lineno">1156</tt>  <tt class="py-line"> </tt>
-<a name="L1157"></a><tt class="py-lineno">1157</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-155" class="py-name"><a title="apiclient.http
-oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-155', 'http', 'link-42');">http</a></tt><tt class="py-op">.</tt><tt id="link-156" class="py-name"><a title="apiclient.http.HttpMock.request
+<a name="L999"></a><tt class="py-lineno"> 999</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L1000"></a><tt class="py-lineno">1000</tt>  <tt class="py-line"><tt class="py-docstring">      The deserialized JSON in the JWT.</tt> </tt>
+<a name="L1001"></a><tt class="py-lineno">1001</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1002"></a><tt class="py-lineno">1002</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L1003"></a><tt class="py-lineno">1003</tt>  <tt class="py-line"><tt class="py-docstring">      oauth2client.crypt.AppIdentityError if the JWT fails to verify.</tt> </tt>
+<a name="L1004"></a><tt class="py-lineno">1004</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1005"></a><tt class="py-lineno">1005</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-150" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-150', 'http', 'link-56');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1006"></a><tt class="py-lineno">1006</tt>  <tt class="py-line">      <tt id="link-151" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-151', 'http', 'link-56');">http</a></tt> <tt class="py-op">=</tt> <tt id="link-152" class="py-name"><a title="oauth2client.client._cached_http" class="py-name" href="#" onclick="return doclink('link-152', '_cached_http', 'link-146');">_cached_http</a></tt> </tt>
+<a name="L1007"></a><tt class="py-lineno">1007</tt>  <tt class="py-line"> </tt>
+<a name="L1008"></a><tt class="py-lineno">1008</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-153" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-153', 'http', 'link-56');">http</a></tt><tt class="py-op">.</tt><tt id="link-154" 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-156', 'request', 'link-43');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-string">'POST'</tt><tt class="py-op">,</tt> <tt class="py-name">body</tt><tt class="py-op">=</tt><tt class="py-name">body</tt><tt class="py-op">,</tt> </tt>
-<a name="L1158"></a><tt class="py-lineno">1158</tt>  <tt class="py-line">                                 <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
-<a name="L1159"></a><tt class="py-lineno">1159</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt id="link-157" class="py-name" targets="Function oauth2client.client._parse_exchange_token_response()=oauth2client.client-module.html#_parse_exchange_token_response"><a title="oauth2client.client._parse_exchange_token_response" class="py-name" href="#" onclick="return doclink('link-157', '_parse_exchange_token_response', 'link-157');">_parse_exchange_token_response</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L1160"></a><tt class="py-lineno">1160</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">200</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'access_token'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
-<a name="L1161"></a><tt class="py-lineno">1161</tt>  <tt class="py-line">      <tt class="py-name">access_token</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'access_token'</tt><tt class="py-op">]</tt> </tt>
-<a name="L1162"></a><tt class="py-lineno">1162</tt>  <tt class="py-line">      <tt class="py-name">refresh_token</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">.</tt><tt id="link-158" class="py-name"><a title="apiclient.schema.Schemas.get
-oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-158', 'get', 'link-14');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'refresh_token'</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
-<a name="L1163"></a><tt class="py-lineno">1163</tt>  <tt class="py-line">      <tt class="py-name">token_expiry</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1164"></a><tt class="py-lineno">1164</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'expires_in'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
-<a name="L1165"></a><tt class="py-lineno">1165</tt>  <tt class="py-line">        <tt class="py-name">token_expiry</tt> <tt class="py-op">=</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">utcnow</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">timedelta</tt><tt class="py-op">(</tt> </tt>
-<a name="L1166"></a><tt class="py-lineno">1166</tt>  <tt class="py-line">            <tt class="py-name">seconds</tt><tt class="py-op">=</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'expires_in'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1167"></a><tt class="py-lineno">1167</tt>  <tt class="py-line"> </tt>
-<a name="L1168"></a><tt class="py-lineno">1168</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'id_token'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
-<a name="L1169"></a><tt class="py-lineno">1169</tt>  <tt class="py-line">        <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'id_token'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-159" class="py-name" targets="Function oauth2client.client._extract_id_token()=oauth2client.client-module.html#_extract_id_token"><a title="oauth2client.client._extract_id_token" class="py-name" href="#" onclick="return doclink('link-159', '_extract_id_token', 'link-159');">_extract_id_token</a></tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'id_token'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L1170"></a><tt class="py-lineno">1170</tt>  <tt class="py-line"> </tt>
-<a name="L1171"></a><tt class="py-lineno">1171</tt>  <tt class="py-line">      <tt id="link-160" class="py-name"><a title="apiclient.discovery.logger
+apiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-154', 'request', 'link-57');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">cert_uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L1009"></a><tt class="py-lineno">1009</tt>  <tt class="py-line"> </tt>
+<a name="L1010"></a><tt class="py-lineno">1010</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">200</tt><tt class="py-op">:</tt> </tt>
+<a name="L1011"></a><tt class="py-lineno">1011</tt>  <tt class="py-line">      <tt class="py-name">certs</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-155" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-155', 'loads', 'link-34');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L1012"></a><tt class="py-lineno">1012</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-156" class="py-name"><a title="oauth2client.crypt" class="py-name" href="#" onclick="return doclink('link-156', 'crypt', 'link-14');">crypt</a></tt><tt class="py-op">.</tt><tt id="link-157" class="py-name" targets="Function oauth2client.crypt.verify_signed_jwt_with_certs()=oauth2client.crypt-module.html#verify_signed_jwt_with_certs"><a title="oauth2client.crypt.verify_signed_jwt_with_certs" class="py-name" href="#" onclick="return doclink('link-157', 'verify_signed_jwt_with_certs', 'link-157');">verify_signed_jwt_with_certs</a></tt><tt class="py-op">(</tt><tt class="py-name">id_token</tt><tt class="py-op">,</tt> <tt class="py-name">certs</tt><tt class="py-op">,</tt> <tt class="py-name">audience</tt><tt class="py-op">)</tt> </tt>
+<a name="L1013"></a><tt class="py-lineno">1013</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1014"></a><tt class="py-lineno">1014</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-158" class="py-name" targets="Class oauth2client.client.VerifyJwtTokenError=oauth2client.client.VerifyJwtTokenError-class.html"><a title="oauth2client.client.VerifyJwtTokenError" class="py-name" href="#" onclick="return doclink('link-158', 'VerifyJwtTokenError', 'link-158');">VerifyJwtTokenError</a></tt><tt class="py-op">(</tt><tt class="py-string">'Status code: %d'</tt> <tt class="py-op">%</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1015"></a><tt class="py-lineno">1015</tt>  <tt class="py-line"> </tt>
+<a name="_urlsafe_b64decode"></a><div id="_urlsafe_b64decode-def"><a name="L1016"></a><tt class="py-lineno">1016</tt>  <tt class="py-line"> </tt>
+<a name="L1017"></a><tt class="py-lineno">1017</tt> <a class="py-toggle" href="#" id="_urlsafe_b64decode-toggle" onclick="return toggle('_urlsafe_b64decode');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#_urlsafe_b64decode">_urlsafe_b64decode</a><tt class="py-op">(</tt><tt class="py-param">b64string</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_urlsafe_b64decode-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_urlsafe_b64decode-expanded"><a name="L1018"></a><tt class="py-lineno">1018</tt>  <tt class="py-line">  <tt class="py-comment"># Guard against unicode strings, which base64 can't handle.</tt> </tt>
+<a name="L1019"></a><tt class="py-lineno">1019</tt>  <tt class="py-line">  <tt class="py-name">b64string</tt> <tt class="py-op">=</tt> <tt class="py-name">b64string</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'ascii'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1020"></a><tt class="py-lineno">1020</tt>  <tt class="py-line">  <tt class="py-name">padded</tt> <tt class="py-op">=</tt> <tt class="py-name">b64string</tt> <tt class="py-op">+</tt> <tt class="py-string">'='</tt> <tt class="py-op">*</tt> <tt class="py-op">(</tt><tt class="py-number">4</tt> <tt class="py-op">-</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">b64string</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
+<a name="L1021"></a><tt class="py-lineno">1021</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">base64</tt><tt class="py-op">.</tt><tt class="py-name">urlsafe_b64decode</tt><tt class="py-op">(</tt><tt class="py-name">padded</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1022"></a><tt class="py-lineno">1022</tt>  <tt class="py-line"> </tt>
+<a name="_extract_id_token"></a><div id="_extract_id_token-def"><a name="L1023"></a><tt class="py-lineno">1023</tt>  <tt class="py-line"> </tt>
+<a name="L1024"></a><tt class="py-lineno">1024</tt> <a class="py-toggle" href="#" id="_extract_id_token-toggle" onclick="return toggle('_extract_id_token');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#_extract_id_token">_extract_id_token</a><tt class="py-op">(</tt><tt class="py-param">id_token</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_extract_id_token-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_extract_id_token-expanded"><a name="L1025"></a><tt class="py-lineno">1025</tt>  <tt class="py-line">  <tt class="py-docstring">"""Extract the JSON payload from a JWT.</tt> </tt>
+<a name="L1026"></a><tt class="py-lineno">1026</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1027"></a><tt class="py-lineno">1027</tt>  <tt class="py-line"><tt class="py-docstring">  Does the extraction w/o checking the signature.</tt> </tt>
+<a name="L1028"></a><tt class="py-lineno">1028</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1029"></a><tt class="py-lineno">1029</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L1030"></a><tt class="py-lineno">1030</tt>  <tt class="py-line"><tt class="py-docstring">    id_token: string, OAuth 2.0 id_token.</tt> </tt>
+<a name="L1031"></a><tt class="py-lineno">1031</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1032"></a><tt class="py-lineno">1032</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L1033"></a><tt class="py-lineno">1033</tt>  <tt class="py-line"><tt class="py-docstring">    object, The deserialized JSON payload.</tt> </tt>
+<a name="L1034"></a><tt class="py-lineno">1034</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L1035"></a><tt class="py-lineno">1035</tt>  <tt class="py-line">  <tt class="py-name">segments</tt> <tt class="py-op">=</tt> <tt class="py-name">id_token</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1036"></a><tt class="py-lineno">1036</tt>  <tt class="py-line"> </tt>
+<a name="L1037"></a><tt class="py-lineno">1037</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">segments</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">3</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1038"></a><tt class="py-lineno">1038</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-159" class="py-name"><a title="oauth2client.client.VerifyJwtTokenError" class="py-name" href="#" onclick="return doclink('link-159', 'VerifyJwtTokenError', 'link-158');">VerifyJwtTokenError</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L1039"></a><tt class="py-lineno">1039</tt>  <tt class="py-line">      <tt class="py-string">'Wrong number of segments in token: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">id_token</tt><tt class="py-op">)</tt> </tt>
+<a name="L1040"></a><tt class="py-lineno">1040</tt>  <tt class="py-line"> </tt>
+<a name="L1041"></a><tt class="py-lineno">1041</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-160" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-160', 'loads', 'link-34');">loads</a></tt><tt class="py-op">(</tt><tt id="link-161" class="py-name" targets="Function oauth2client.client._urlsafe_b64decode()=oauth2client.client-module.html#_urlsafe_b64decode,Function oauth2client.crypt._urlsafe_b64decode()=oauth2client.crypt-module.html#_urlsafe_b64decode"><a title="oauth2client.client._urlsafe_b64decode
+oauth2client.crypt._urlsafe_b64decode" class="py-name" href="#" onclick="return doclink('link-161', '_urlsafe_b64decode', 'link-161');">_urlsafe_b64decode</a></tt><tt class="py-op">(</tt><tt class="py-name">segments</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1042"></a><tt class="py-lineno">1042</tt>  <tt class="py-line"> </tt>
+<a name="_parse_exchange_token_response"></a><div id="_parse_exchange_token_response-def"><a name="L1043"></a><tt class="py-lineno">1043</tt>  <tt class="py-line"> </tt>
+<a name="L1044"></a><tt class="py-lineno">1044</tt> <a class="py-toggle" href="#" id="_parse_exchange_token_response-toggle" onclick="return toggle('_parse_exchange_token_response');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#_parse_exchange_token_response">_parse_exchange_token_response</a><tt class="py-op">(</tt><tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_parse_exchange_token_response-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_parse_exchange_token_response-expanded"><a name="L1045"></a><tt class="py-lineno">1045</tt>  <tt class="py-line">  <tt class="py-docstring">"""Parses response of an exchange token request.</tt> </tt>
+<a name="L1046"></a><tt class="py-lineno">1046</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1047"></a><tt class="py-lineno">1047</tt>  <tt class="py-line"><tt class="py-docstring">  Most providers return JSON but some (e.g. Facebook) return a</tt> </tt>
+<a name="L1048"></a><tt class="py-lineno">1048</tt>  <tt class="py-line"><tt class="py-docstring">  url-encoded string.</tt> </tt>
+<a name="L1049"></a><tt class="py-lineno">1049</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1050"></a><tt class="py-lineno">1050</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L1051"></a><tt class="py-lineno">1051</tt>  <tt class="py-line"><tt class="py-docstring">    content: The body of a response</tt> </tt>
+<a name="L1052"></a><tt class="py-lineno">1052</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1053"></a><tt class="py-lineno">1053</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L1054"></a><tt class="py-lineno">1054</tt>  <tt class="py-line"><tt class="py-docstring">    Content as a dictionary object. Note that the dict could be empty,</tt> </tt>
+<a name="L1055"></a><tt class="py-lineno">1055</tt>  <tt class="py-line"><tt class="py-docstring">    i.e. {}. That basically indicates a failure.</tt> </tt>
+<a name="L1056"></a><tt class="py-lineno">1056</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L1057"></a><tt class="py-lineno">1057</tt>  <tt class="py-line">  <tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1058"></a><tt class="py-lineno">1058</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1059"></a><tt class="py-lineno">1059</tt>  <tt class="py-line">    <tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-162" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-162', 'loads', 'link-34');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L1060"></a><tt class="py-lineno">1060</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">StandardError</tt><tt class="py-op">:</tt> </tt>
+<a name="L1061"></a><tt class="py-lineno">1061</tt>  <tt class="py-line">    <tt class="py-comment"># different JSON libs raise different exceptions,</tt> </tt>
+<a name="L1062"></a><tt class="py-lineno">1062</tt>  <tt class="py-line">    <tt class="py-comment"># so we just do a catch-all here</tt> </tt>
+<a name="L1063"></a><tt class="py-lineno">1063</tt>  <tt class="py-line">    <tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-name">parse_qsl</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1064"></a><tt class="py-lineno">1064</tt>  <tt class="py-line"> </tt>
+<a name="L1065"></a><tt class="py-lineno">1065</tt>  <tt class="py-line">  <tt class="py-comment"># some providers respond with 'expires', others with 'expires_in'</tt> </tt>
+<a name="L1066"></a><tt class="py-lineno">1066</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'expires'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
+<a name="L1067"></a><tt class="py-lineno">1067</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'expires_in'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-string">'expires'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1068"></a><tt class="py-lineno">1068</tt>  <tt class="py-line"> </tt>
+<a name="L1069"></a><tt class="py-lineno">1069</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">resp</tt> </tt>
+</div><a name="L1070"></a><tt class="py-lineno">1070</tt>  <tt class="py-line"> </tt>
+<a name="credentials_from_code"></a><div id="credentials_from_code-def"><a name="L1071"></a><tt class="py-lineno">1071</tt>  <tt class="py-line"> </tt>
+<a name="L1072"></a><tt class="py-lineno">1072</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-163', 'positional', 'link-55');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
+<a name="L1073"></a><tt class="py-lineno">1073</tt> <a class="py-toggle" href="#" id="credentials_from_code-toggle" onclick="return toggle('credentials_from_code');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#credentials_from_code">credentials_from_code</a><tt class="py-op">(</tt><tt class="py-param">client_id</tt><tt class="py-op">,</tt> <tt class="py-param">client_secret</tt><tt class="py-op">,</tt> <tt class="py-param">scope</tt><tt class="py-op">,</tt> <tt class="py-param">code</tt><tt class="py-op">,</tt> </tt>
+<a name="L1074"></a><tt class="py-lineno">1074</tt>  <tt class="py-line">                          <tt class="py-param">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-string">'postmessage'</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L1075"></a><tt class="py-lineno">1075</tt>  <tt class="py-line">                          <tt class="py-param">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">token_uri</tt><tt class="py-op">=</tt><tt id="link-164" class="py-name"><a title="oauth2client.GOOGLE_TOKEN_URI" class="py-name" href="#" onclick="return doclink('link-164', 'GOOGLE_TOKEN_URI', 'link-6');">GOOGLE_TOKEN_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L1076"></a><tt class="py-lineno">1076</tt>  <tt class="py-line">                          <tt class="py-param">auth_uri</tt><tt class="py-op">=</tt><tt id="link-165" class="py-name"><a title="oauth2client.GOOGLE_AUTH_URI" class="py-name" href="#" onclick="return doclink('link-165', 'GOOGLE_AUTH_URI', 'link-2');">GOOGLE_AUTH_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L1077"></a><tt class="py-lineno">1077</tt>  <tt class="py-line">                          <tt class="py-param">revoke_uri</tt><tt class="py-op">=</tt><tt id="link-166" class="py-name"><a title="oauth2client.GOOGLE_REVOKE_URI" class="py-name" href="#" onclick="return doclink('link-166', 'GOOGLE_REVOKE_URI', 'link-4');">GOOGLE_REVOKE_URI</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="credentials_from_code-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="credentials_from_code-expanded"><a name="L1078"></a><tt class="py-lineno">1078</tt>  <tt class="py-line">  <tt class="py-docstring">"""Exchanges an authorization code for an OAuth2Credentials object.</tt> </tt>
+<a name="L1079"></a><tt class="py-lineno">1079</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1080"></a><tt class="py-lineno">1080</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L1081"></a><tt class="py-lineno">1081</tt>  <tt class="py-line"><tt class="py-docstring">    client_id: string, client identifier.</tt> </tt>
+<a name="L1082"></a><tt class="py-lineno">1082</tt>  <tt class="py-line"><tt class="py-docstring">    client_secret: string, client secret.</tt> </tt>
+<a name="L1083"></a><tt class="py-lineno">1083</tt>  <tt class="py-line"><tt class="py-docstring">    scope: string or iterable of strings, scope(s) to request.</tt> </tt>
+<a name="L1084"></a><tt class="py-lineno">1084</tt>  <tt class="py-line"><tt class="py-docstring">    code: string, An authroization code, most likely passed down from</tt> </tt>
+<a name="L1085"></a><tt class="py-lineno">1085</tt>  <tt class="py-line"><tt class="py-docstring">      the client</tt> </tt>
+<a name="L1086"></a><tt class="py-lineno">1086</tt>  <tt class="py-line"><tt class="py-docstring">    redirect_uri: string, this is generally set to 'postmessage' to match the</tt> </tt>
+<a name="L1087"></a><tt class="py-lineno">1087</tt>  <tt class="py-line"><tt class="py-docstring">      redirect_uri that the client specified</tt> </tt>
+<a name="L1088"></a><tt class="py-lineno">1088</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, optional http instance to use to do the fetch</tt> </tt>
+<a name="L1089"></a><tt class="py-lineno">1089</tt>  <tt class="py-line"><tt class="py-docstring">    token_uri: string, URI for token endpoint. For convenience</tt> </tt>
+<a name="L1090"></a><tt class="py-lineno">1090</tt>  <tt class="py-line"><tt class="py-docstring">      defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
+<a name="L1091"></a><tt class="py-lineno">1091</tt>  <tt class="py-line"><tt class="py-docstring">    auth_uri: string, URI for authorization endpoint. For convenience</tt> </tt>
+<a name="L1092"></a><tt class="py-lineno">1092</tt>  <tt class="py-line"><tt class="py-docstring">      defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
+<a name="L1093"></a><tt class="py-lineno">1093</tt>  <tt class="py-line"><tt class="py-docstring">    revoke_uri: string, URI for revoke endpoint. For convenience</tt> </tt>
+<a name="L1094"></a><tt class="py-lineno">1094</tt>  <tt class="py-line"><tt class="py-docstring">      defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
+<a name="L1095"></a><tt class="py-lineno">1095</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1096"></a><tt class="py-lineno">1096</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L1097"></a><tt class="py-lineno">1097</tt>  <tt class="py-line"><tt class="py-docstring">    An OAuth2Credentials object.</tt> </tt>
+<a name="L1098"></a><tt class="py-lineno">1098</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1099"></a><tt class="py-lineno">1099</tt>  <tt class="py-line"><tt class="py-docstring">  Raises:</tt> </tt>
+<a name="L1100"></a><tt class="py-lineno">1100</tt>  <tt class="py-line"><tt class="py-docstring">    FlowExchangeError if the authorization code cannot be exchanged for an</tt> </tt>
+<a name="L1101"></a><tt class="py-lineno">1101</tt>  <tt class="py-line"><tt class="py-docstring">     access token</tt> </tt>
+<a name="L1102"></a><tt class="py-lineno">1102</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L1103"></a><tt class="py-lineno">1103</tt>  <tt class="py-line">  <tt class="py-name">flow</tt> <tt class="py-op">=</tt> <tt id="link-167" class="py-name" targets="Class oauth2client.client.OAuth2WebServerFlow=oauth2client.client.OAuth2WebServerFlow-class.html"><a title="oauth2client.client.OAuth2WebServerFlow" class="py-name" href="#" onclick="return doclink('link-167', 'OAuth2WebServerFlow', 'link-167');">OAuth2WebServerFlow</a></tt><tt class="py-op">(</tt><tt class="py-name">client_id</tt><tt class="py-op">,</tt> <tt class="py-name">client_secret</tt><tt class="py-op">,</tt> <tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
+<a name="L1104"></a><tt class="py-lineno">1104</tt>  <tt class="py-line">                             <tt class="py-name">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-name">redirect_uri</tt><tt class="py-op">,</tt> <tt class="py-name">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">user_agent</tt><tt class="py-op">,</tt> </tt>
+<a name="L1105"></a><tt class="py-lineno">1105</tt>  <tt class="py-line">                             <tt class="py-name">auth_uri</tt><tt class="py-op">=</tt><tt class="py-name">auth_uri</tt><tt class="py-op">,</tt> <tt class="py-name">token_uri</tt><tt class="py-op">=</tt><tt class="py-name">token_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L1106"></a><tt class="py-lineno">1106</tt>  <tt class="py-line">                             <tt class="py-name">revoke_uri</tt><tt class="py-op">=</tt><tt class="py-name">revoke_uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L1107"></a><tt class="py-lineno">1107</tt>  <tt class="py-line"> </tt>
+<a name="L1108"></a><tt class="py-lineno">1108</tt>  <tt class="py-line">  <tt id="link-168" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-168', '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-169" 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-169', 'step2_exchange', 'link-169');">step2_exchange</a></tt><tt class="py-op">(</tt><tt class="py-name">code</tt><tt class="py-op">,</tt> <tt id="link-170" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-170', 'http', 'link-56');">http</a></tt><tt class="py-op">=</tt><tt id="link-171" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-171', 'http', 'link-56');">http</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1109"></a><tt class="py-lineno">1109</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-172" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-172', 'credentials', 'link-46');">credentials</a></tt> </tt>
+</div><a name="L1110"></a><tt class="py-lineno">1110</tt>  <tt class="py-line"> </tt>
+<a name="credentials_from_clientsecrets_and_code"></a><div id="credentials_from_clientsecrets_and_code-def"><a name="L1111"></a><tt class="py-lineno">1111</tt>  <tt class="py-line"> </tt>
+<a name="L1112"></a><tt class="py-lineno">1112</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-173" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-173', 'positional', 'link-55');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt> </tt>
+<a name="L1113"></a><tt class="py-lineno">1113</tt> <a class="py-toggle" href="#" id="credentials_from_clientsecrets_and_code-toggle" onclick="return toggle('credentials_from_clientsecrets_and_code');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#credentials_from_clientsecrets_and_code">credentials_from_clientsecrets_and_code</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">code</tt><tt class="py-op">,</tt> </tt>
+<a name="L1114"></a><tt class="py-lineno">1114</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>
+<a name="L1115"></a><tt class="py-lineno">1115</tt>  <tt class="py-line">                                            <tt class="py-param">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-string">'postmessage'</tt><tt class="py-op">,</tt> </tt>
+<a name="L1116"></a><tt class="py-lineno">1116</tt>  <tt class="py-line">                                            <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L1117"></a><tt class="py-lineno">1117</tt>  <tt class="py-line">                                            <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="credentials_from_clientsecrets_and_code-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="credentials_from_clientsecrets_and_code-expanded"><a name="L1118"></a><tt class="py-lineno">1118</tt>  <tt class="py-line">  <tt class="py-docstring">"""Returns OAuth2Credentials from a clientsecrets file and an auth code.</tt> </tt>
+<a name="L1119"></a><tt class="py-lineno">1119</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1120"></a><tt class="py-lineno">1120</tt>  <tt class="py-line"><tt class="py-docstring">  Will create the right kind of Flow based on the contents of the clientsecrets</tt> </tt>
+<a name="L1121"></a><tt class="py-lineno">1121</tt>  <tt class="py-line"><tt class="py-docstring">  file or will raise InvalidClientSecretsError for unknown types of Flows.</tt> </tt>
+<a name="L1122"></a><tt class="py-lineno">1122</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1123"></a><tt class="py-lineno">1123</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L1124"></a><tt class="py-lineno">1124</tt>  <tt class="py-line"><tt class="py-docstring">    filename: string, File name of clientsecrets.</tt> </tt>
+<a name="L1125"></a><tt class="py-lineno">1125</tt>  <tt class="py-line"><tt class="py-docstring">    scope: string or iterable of strings, scope(s) to request.</tt> </tt>
+<a name="L1126"></a><tt class="py-lineno">1126</tt>  <tt class="py-line"><tt class="py-docstring">    code: string, An authorization code, most likely passed down from</tt> </tt>
+<a name="L1127"></a><tt class="py-lineno">1127</tt>  <tt class="py-line"><tt class="py-docstring">      the client</tt> </tt>
+<a name="L1128"></a><tt class="py-lineno">1128</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="L1129"></a><tt class="py-lineno">1129</tt>  <tt class="py-line"><tt class="py-docstring">      clientsecrets file is missing or invalid. If message is provided then</tt> </tt>
+<a name="L1130"></a><tt class="py-lineno">1130</tt>  <tt class="py-line"><tt class="py-docstring">      sys.exit will be called in the case of an error. If message in not</tt> </tt>
+<a name="L1131"></a><tt class="py-lineno">1131</tt>  <tt class="py-line"><tt class="py-docstring">      provided then clientsecrets.InvalidClientSecretsError will be raised.</tt> </tt>
+<a name="L1132"></a><tt class="py-lineno">1132</tt>  <tt class="py-line"><tt class="py-docstring">    redirect_uri: string, this is generally set to 'postmessage' to match the</tt> </tt>
+<a name="L1133"></a><tt class="py-lineno">1133</tt>  <tt class="py-line"><tt class="py-docstring">      redirect_uri that the client specified</tt> </tt>
+<a name="L1134"></a><tt class="py-lineno">1134</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, optional http instance to use to do the fetch</tt> </tt>
+<a name="L1135"></a><tt class="py-lineno">1135</tt>  <tt class="py-line"><tt class="py-docstring">    cache: An optional cache service client that implements get() and set()</tt> </tt>
+<a name="L1136"></a><tt class="py-lineno">1136</tt>  <tt class="py-line"><tt class="py-docstring">      methods. See clientsecrets.loadfile() for details.</tt> </tt>
+<a name="L1137"></a><tt class="py-lineno">1137</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1138"></a><tt class="py-lineno">1138</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L1139"></a><tt class="py-lineno">1139</tt>  <tt class="py-line"><tt class="py-docstring">    An OAuth2Credentials object.</tt> </tt>
+<a name="L1140"></a><tt class="py-lineno">1140</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1141"></a><tt class="py-lineno">1141</tt>  <tt class="py-line"><tt class="py-docstring">  Raises:</tt> </tt>
+<a name="L1142"></a><tt class="py-lineno">1142</tt>  <tt class="py-line"><tt class="py-docstring">    FlowExchangeError if the authorization code cannot be exchanged for an</tt> </tt>
+<a name="L1143"></a><tt class="py-lineno">1143</tt>  <tt class="py-line"><tt class="py-docstring">     access token</tt> </tt>
+<a name="L1144"></a><tt class="py-lineno">1144</tt>  <tt class="py-line"><tt class="py-docstring">    UnknownClientSecretsFlowError if the file describes an unknown kind of Flow.</tt> </tt>
+<a name="L1145"></a><tt class="py-lineno">1145</tt>  <tt class="py-line"><tt class="py-docstring">    clientsecrets.InvalidClientSecretsError if the clientsecrets file is</tt> </tt>
+<a name="L1146"></a><tt class="py-lineno">1146</tt>  <tt class="py-line"><tt class="py-docstring">      invalid.</tt> </tt>
+<a name="L1147"></a><tt class="py-lineno">1147</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L1148"></a><tt class="py-lineno">1148</tt>  <tt class="py-line">  <tt class="py-name">flow</tt> <tt class="py-op">=</tt> <tt id="link-174" class="py-name" targets="Function oauth2client.client.flow_from_clientsecrets()=oauth2client.client-module.html#flow_from_clientsecrets"><a title="oauth2client.client.flow_from_clientsecrets" class="py-name" href="#" onclick="return doclink('link-174', 'flow_from_clientsecrets', 'link-174');">flow_from_clientsecrets</a></tt><tt class="py-op">(</tt><tt id="link-175" 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-175', 'filename', 'link-175');">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 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>
+<a name="L1149"></a><tt class="py-lineno">1149</tt>  <tt class="py-line">                                 <tt class="py-name">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-name">redirect_uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L1150"></a><tt class="py-lineno">1150</tt>  <tt class="py-line">  <tt id="link-176" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-176', '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-177" class="py-name"><a title="oauth2client.client.OAuth2WebServerFlow.step2_exchange" class="py-name" href="#" onclick="return doclink('link-177', 'step2_exchange', 'link-169');">step2_exchange</a></tt><tt class="py-op">(</tt><tt class="py-name">code</tt><tt class="py-op">,</tt> <tt id="link-178" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-178', 'http', 'link-56');">http</a></tt><tt class="py-op">=</tt><tt id="link-179" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-179', 'http', 'link-56');">http</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1151"></a><tt class="py-lineno">1151</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-180" class="py-name"><a title="oauth2client.appengine.CredentialsModel.credentials
+oauth2client.appengine.CredentialsNDBModel.credentials" class="py-name" href="#" onclick="return doclink('link-180', 'credentials', 'link-46');">credentials</a></tt> </tt>
+</div><a name="L1152"></a><tt class="py-lineno">1152</tt>  <tt class="py-line"> </tt>
+<a name="OAuth2WebServerFlow"></a><div id="OAuth2WebServerFlow-def"><a name="L1153"></a><tt class="py-lineno">1153</tt>  <tt class="py-line"> </tt>
+<a name="L1154"></a><tt class="py-lineno">1154</tt> <a class="py-toggle" href="#" id="OAuth2WebServerFlow-toggle" onclick="return toggle('OAuth2WebServerFlow');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.client.OAuth2WebServerFlow-class.html">OAuth2WebServerFlow</a><tt class="py-op">(</tt><tt class="py-base-class">Flow</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2WebServerFlow-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="OAuth2WebServerFlow-expanded"><a name="L1155"></a><tt class="py-lineno">1155</tt>  <tt class="py-line">  <tt class="py-docstring">"""Does the Web Server Flow for OAuth 2.0.</tt> </tt>
+<a name="L1156"></a><tt class="py-lineno">1156</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1157"></a><tt class="py-lineno">1157</tt>  <tt class="py-line"><tt class="py-docstring">  OAuth2WebServerFlow objects may be safely pickled and unpickled.</tt> </tt>
+<a name="L1158"></a><tt class="py-lineno">1158</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L1159"></a><tt class="py-lineno">1159</tt>  <tt class="py-line"> </tt>
+<a name="L1160"></a><tt class="py-lineno">1160</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-181" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-181', 'positional', 'link-55');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
+<a name="OAuth2WebServerFlow.__init__"></a><div id="OAuth2WebServerFlow.__init__-def"><a name="L1161"></a><tt class="py-lineno">1161</tt> <a class="py-toggle" href="#" id="OAuth2WebServerFlow.__init__-toggle" onclick="return toggle('OAuth2WebServerFlow.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2WebServerFlow-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">client_id</tt><tt class="py-op">,</tt> <tt class="py-param">client_secret</tt><tt class="py-op">,</tt> <tt class="py-param">scope</tt><tt class="py-op">,</tt> </tt>
+<a name="L1162"></a><tt class="py-lineno">1162</tt>  <tt class="py-line">               <tt class="py-param">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L1163"></a><tt class="py-lineno">1163</tt>  <tt class="py-line">               <tt class="py-param">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L1164"></a><tt class="py-lineno">1164</tt>  <tt class="py-line">               <tt class="py-param">auth_uri</tt><tt class="py-op">=</tt><tt id="link-182" class="py-name"><a title="oauth2client.GOOGLE_AUTH_URI" class="py-name" href="#" onclick="return doclink('link-182', 'GOOGLE_AUTH_URI', 'link-2');">GOOGLE_AUTH_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L1165"></a><tt class="py-lineno">1165</tt>  <tt class="py-line">               <tt class="py-param">token_uri</tt><tt class="py-op">=</tt><tt id="link-183" class="py-name"><a title="oauth2client.GOOGLE_TOKEN_URI" class="py-name" href="#" onclick="return doclink('link-183', 'GOOGLE_TOKEN_URI', 'link-6');">GOOGLE_TOKEN_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L1166"></a><tt class="py-lineno">1166</tt>  <tt class="py-line">               <tt class="py-param">revoke_uri</tt><tt class="py-op">=</tt><tt id="link-184" class="py-name"><a title="oauth2client.GOOGLE_REVOKE_URI" class="py-name" href="#" onclick="return doclink('link-184', 'GOOGLE_REVOKE_URI', 'link-4');">GOOGLE_REVOKE_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L1167"></a><tt class="py-lineno">1167</tt>  <tt class="py-line">               <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="OAuth2WebServerFlow.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2WebServerFlow.__init__-expanded"><a name="L1168"></a><tt class="py-lineno">1168</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for OAuth2WebServerFlow.</tt> </tt>
+<a name="L1169"></a><tt class="py-lineno">1169</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1170"></a><tt class="py-lineno">1170</tt>  <tt class="py-line"><tt class="py-docstring">    The kwargs argument is used to set extra query parameters on the</tt> </tt>
+<a name="L1171"></a><tt class="py-lineno">1171</tt>  <tt class="py-line"><tt class="py-docstring">    auth_uri. For example, the access_type and approval_prompt</tt> </tt>
+<a name="L1172"></a><tt class="py-lineno">1172</tt>  <tt class="py-line"><tt class="py-docstring">    query parameters can be set via kwargs.</tt> </tt>
+<a name="L1173"></a><tt class="py-lineno">1173</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1174"></a><tt class="py-lineno">1174</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1175"></a><tt class="py-lineno">1175</tt>  <tt class="py-line"><tt class="py-docstring">      client_id: string, client identifier.</tt> </tt>
+<a name="L1176"></a><tt class="py-lineno">1176</tt>  <tt class="py-line"><tt class="py-docstring">      client_secret: string client secret.</tt> </tt>
+<a name="L1177"></a><tt class="py-lineno">1177</tt>  <tt class="py-line"><tt class="py-docstring">      scope: string or iterable of strings, scope(s) of the credentials being</tt> </tt>
+<a name="L1178"></a><tt class="py-lineno">1178</tt>  <tt class="py-line"><tt class="py-docstring">        requested.</tt> </tt>
+<a name="L1179"></a><tt class="py-lineno">1179</tt>  <tt class="py-line"><tt class="py-docstring">      redirect_uri: string, Either the string 'urn:ietf:wg:oauth:2.0:oob' for</tt> </tt>
+<a name="L1180"></a><tt class="py-lineno">1180</tt>  <tt class="py-line"><tt class="py-docstring">        a non-web-based application, or a URI that handles the callback from</tt> </tt>
+<a name="L1181"></a><tt class="py-lineno">1181</tt>  <tt class="py-line"><tt class="py-docstring">        the authorization server.</tt> </tt>
+<a name="L1182"></a><tt class="py-lineno">1182</tt>  <tt class="py-line"><tt class="py-docstring">      user_agent: string, HTTP User-Agent to provide for this application.</tt> </tt>
+<a name="L1183"></a><tt class="py-lineno">1183</tt>  <tt class="py-line"><tt class="py-docstring">      auth_uri: string, URI for authorization endpoint. For convenience</tt> </tt>
+<a name="L1184"></a><tt class="py-lineno">1184</tt>  <tt class="py-line"><tt class="py-docstring">        defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
+<a name="L1185"></a><tt class="py-lineno">1185</tt>  <tt class="py-line"><tt class="py-docstring">      token_uri: string, URI for token endpoint. For convenience</tt> </tt>
+<a name="L1186"></a><tt class="py-lineno">1186</tt>  <tt class="py-line"><tt class="py-docstring">        defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
+<a name="L1187"></a><tt class="py-lineno">1187</tt>  <tt class="py-line"><tt class="py-docstring">      revoke_uri: string, URI for revoke endpoint. For convenience</tt> </tt>
+<a name="L1188"></a><tt class="py-lineno">1188</tt>  <tt class="py-line"><tt class="py-docstring">        defaults to Google's endpoints but any OAuth 2.0 provider can be used.</tt> </tt>
+<a name="L1189"></a><tt class="py-lineno">1189</tt>  <tt class="py-line"><tt class="py-docstring">      **kwargs: dict, The keyword arguments are all optional and required</tt> </tt>
+<a name="L1190"></a><tt class="py-lineno">1190</tt>  <tt class="py-line"><tt class="py-docstring">                        parameters for the OAuth calls.</tt> </tt>
+<a name="L1191"></a><tt class="py-lineno">1191</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1192"></a><tt class="py-lineno">1192</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_id</tt> <tt class="py-op">=</tt> <tt class="py-name">client_id</tt> </tt>
+<a name="L1193"></a><tt class="py-lineno">1193</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_secret</tt> <tt class="py-op">=</tt> <tt class="py-name">client_secret</tt> </tt>
+<a name="L1194"></a><tt class="py-lineno">1194</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt> <tt class="py-op">=</tt> <tt id="link-185" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-185', 'util', 'link-8');">util</a></tt><tt class="py-op">.</tt><tt id="link-186" class="py-name"><a title="oauth2client.util.scopes_to_string" class="py-name" href="#" onclick="return doclink('link-186', 'scopes_to_string', 'link-136');">scopes_to_string</a></tt><tt class="py-op">(</tt><tt class="py-name">scope</tt><tt class="py-op">)</tt> </tt>
+<a name="L1195"></a><tt class="py-lineno">1195</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">redirect_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">redirect_uri</tt> </tt>
+<a name="L1196"></a><tt class="py-lineno">1196</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt> <tt class="py-op">=</tt> <tt class="py-name">user_agent</tt> </tt>
+<a name="L1197"></a><tt class="py-lineno">1197</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">auth_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">auth_uri</tt> </tt>
+<a name="L1198"></a><tt class="py-lineno">1198</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">token_uri</tt> </tt>
+<a name="L1199"></a><tt class="py-lineno">1199</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">revoke_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">revoke_uri</tt> </tt>
+<a name="L1200"></a><tt class="py-lineno">1200</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L1201"></a><tt class="py-lineno">1201</tt>  <tt class="py-line">        <tt class="py-string">'access_type'</tt><tt class="py-op">:</tt> <tt class="py-string">'offline'</tt><tt class="py-op">,</tt> </tt>
+<a name="L1202"></a><tt class="py-lineno">1202</tt>  <tt class="py-line">        <tt class="py-string">'response_type'</tt><tt class="py-op">:</tt> <tt class="py-string">'code'</tt><tt class="py-op">,</tt> </tt>
+<a name="L1203"></a><tt class="py-lineno">1203</tt>  <tt class="py-line">    <tt class="py-op">}</tt> </tt>
+<a name="L1204"></a><tt class="py-lineno">1204</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1205"></a><tt class="py-lineno">1205</tt>  <tt class="py-line"> </tt>
+<a name="L1206"></a><tt class="py-lineno">1206</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-187" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-187', 'positional', 'link-55');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="OAuth2WebServerFlow.step1_get_authorize_url"></a><div id="OAuth2WebServerFlow.step1_get_authorize_url-def"><a name="L1207"></a><tt class="py-lineno">1207</tt> <a class="py-toggle" href="#" id="OAuth2WebServerFlow.step1_get_authorize_url-toggle" onclick="return toggle('OAuth2WebServerFlow.step1_get_authorize_url');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2WebServerFlow-class.html#step1_get_authorize_url">step1_get_authorize_url</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">redirect_uri</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="OAuth2WebServerFlow.step1_get_authorize_url-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2WebServerFlow.step1_get_authorize_url-expanded"><a name="L1208"></a><tt class="py-lineno">1208</tt>  <tt class="py-line">    <tt class="py-docstring">"""Returns a URI to redirect to the provider.</tt> </tt>
+<a name="L1209"></a><tt class="py-lineno">1209</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1210"></a><tt class="py-lineno">1210</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1211"></a><tt class="py-lineno">1211</tt>  <tt class="py-line"><tt class="py-docstring">      redirect_uri: string, Either the string 'urn:ietf:wg:oauth:2.0:oob' for</tt> </tt>
+<a name="L1212"></a><tt class="py-lineno">1212</tt>  <tt class="py-line"><tt class="py-docstring">        a non-web-based application, or a URI that handles the callback from</tt> </tt>
+<a name="L1213"></a><tt class="py-lineno">1213</tt>  <tt class="py-line"><tt class="py-docstring">        the authorization server. This parameter is deprecated, please move to</tt> </tt>
+<a name="L1214"></a><tt class="py-lineno">1214</tt>  <tt class="py-line"><tt class="py-docstring">        passing the redirect_uri in via the constructor.</tt> </tt>
+<a name="L1215"></a><tt class="py-lineno">1215</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1216"></a><tt class="py-lineno">1216</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L1217"></a><tt class="py-lineno">1217</tt>  <tt class="py-line"><tt class="py-docstring">      A URI as a string to redirect the user to begin the authorization flow.</tt> </tt>
+<a name="L1218"></a><tt class="py-lineno">1218</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1219"></a><tt class="py-lineno">1219</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">redirect_uri</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="L1220"></a><tt class="py-lineno">1220</tt>  <tt class="py-line">      <tt id="link-188" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-160', 'logger', 'link-9');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Successfully retrieved access token'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1172"></a><tt class="py-lineno">1172</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-161" class="py-name"><a title="oauth2client.client.OAuth2Credentials" class="py-name" href="#" onclick="return doclink('link-161', 'OAuth2Credentials', 'link-67');">OAuth2Credentials</a></tt><tt class="py-op">(</tt><tt class="py-name">access_token</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_id</tt><tt class="py-op">,</tt> </tt>
-<a name="L1173"></a><tt class="py-lineno">1173</tt>  <tt class="py-line">                               <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_secret</tt><tt class="py-op">,</tt> <tt class="py-name">refresh_token</tt><tt class="py-op">,</tt> <tt class="py-name">token_expiry</tt><tt class="py-op">,</tt> </tt>
-<a name="L1174"></a><tt class="py-lineno">1174</tt>  <tt class="py-line">                               <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_uri</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt><tt class="py-op">,</tt> </tt>
-<a name="L1175"></a><tt class="py-lineno">1175</tt>  <tt class="py-line">                               <tt class="py-name">id_token</tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">.</tt><tt id="link-162" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-188', 'logger', 'link-19');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">'The redirect_uri parameter for'</tt> </tt>
+<a name="L1221"></a><tt class="py-lineno">1221</tt>  <tt class="py-line">          <tt class="py-string">'OAuth2WebServerFlow.step1_get_authorize_url is deprecated. Please'</tt> </tt>
+<a name="L1222"></a><tt class="py-lineno">1222</tt>  <tt class="py-line">          <tt class="py-string">'move to passing the redirect_uri in via the constructor.'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1223"></a><tt class="py-lineno">1223</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">redirect_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">redirect_uri</tt> </tt>
+<a name="L1224"></a><tt class="py-lineno">1224</tt>  <tt class="py-line"> </tt>
+<a name="L1225"></a><tt class="py-lineno">1225</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">redirect_uri</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1226"></a><tt class="py-lineno">1226</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'The value of redirect_uri must not be None.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1227"></a><tt class="py-lineno">1227</tt>  <tt class="py-line"> </tt>
+<a name="L1228"></a><tt class="py-lineno">1228</tt>  <tt class="py-line">    <tt id="link-189" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-189', 'query_params', 'link-52');">query_params</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L1229"></a><tt class="py-lineno">1229</tt>  <tt class="py-line">        <tt class="py-string">'client_id'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_id</tt><tt class="py-op">,</tt> </tt>
+<a name="L1230"></a><tt class="py-lineno">1230</tt>  <tt class="py-line">        <tt class="py-string">'redirect_uri'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">redirect_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L1231"></a><tt class="py-lineno">1231</tt>  <tt class="py-line">        <tt class="py-string">'scope'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
+<a name="L1232"></a><tt class="py-lineno">1232</tt>  <tt class="py-line">    <tt class="py-op">}</tt> </tt>
+<a name="L1233"></a><tt class="py-lineno">1233</tt>  <tt class="py-line">    <tt id="link-190" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-190', 'query_params', 'link-52');">query_params</a></tt><tt class="py-op">.</tt><tt class="py-name">update</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
+<a name="L1234"></a><tt class="py-lineno">1234</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-191" class="py-name"><a title="oauth2client.client._update_query_params" class="py-name" href="#" onclick="return doclink('link-191', '_update_query_params', 'link-109');">_update_query_params</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">auth_uri</tt><tt class="py-op">,</tt> <tt id="link-192" class="py-name"><a title="oauth2client.tools.ClientRedirectServer.query_params" class="py-name" href="#" onclick="return doclink('link-192', 'query_params', 'link-52');">query_params</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1235"></a><tt class="py-lineno">1235</tt>  <tt class="py-line"> </tt>
+<a name="L1236"></a><tt class="py-lineno">1236</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-193" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-193', 'positional', 'link-55');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="OAuth2WebServerFlow.step2_exchange"></a><div id="OAuth2WebServerFlow.step2_exchange-def"><a name="L1237"></a><tt class="py-lineno">1237</tt> <a class="py-toggle" href="#" id="OAuth2WebServerFlow.step2_exchange-toggle" onclick="return toggle('OAuth2WebServerFlow.step2_exchange');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client.OAuth2WebServerFlow-class.html#step2_exchange">step2_exchange</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">code</tt><tt class="py-op">,</tt> <tt class="py-param">http</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="OAuth2WebServerFlow.step2_exchange-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="OAuth2WebServerFlow.step2_exchange-expanded"><a name="L1238"></a><tt class="py-lineno">1238</tt>  <tt class="py-line">    <tt class="py-docstring">"""Exhanges a code for OAuth2Credentials.</tt> </tt>
+<a name="L1239"></a><tt class="py-lineno">1239</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1240"></a><tt class="py-lineno">1240</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1241"></a><tt class="py-lineno">1241</tt>  <tt class="py-line"><tt class="py-docstring">      code: string or dict, either the code as a string, or a dictionary</tt> </tt>
+<a name="L1242"></a><tt class="py-lineno">1242</tt>  <tt class="py-line"><tt class="py-docstring">        of the query parameters to the redirect_uri, which contains</tt> </tt>
+<a name="L1243"></a><tt class="py-lineno">1243</tt>  <tt class="py-line"><tt class="py-docstring">        the code.</tt> </tt>
+<a name="L1244"></a><tt class="py-lineno">1244</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, optional http instance to use to do the fetch</tt> </tt>
+<a name="L1245"></a><tt class="py-lineno">1245</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1246"></a><tt class="py-lineno">1246</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L1247"></a><tt class="py-lineno">1247</tt>  <tt class="py-line"><tt class="py-docstring">      An OAuth2Credentials object that can be used to authorize requests.</tt> </tt>
+<a name="L1248"></a><tt class="py-lineno">1248</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1249"></a><tt class="py-lineno">1249</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L1250"></a><tt class="py-lineno">1250</tt>  <tt class="py-line"><tt class="py-docstring">      FlowExchangeError if a problem occured exchanging the code for a</tt> </tt>
+<a name="L1251"></a><tt class="py-lineno">1251</tt>  <tt class="py-line"><tt class="py-docstring">      refresh_token.</tt> </tt>
+<a name="L1252"></a><tt class="py-lineno">1252</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1253"></a><tt class="py-lineno">1253</tt>  <tt class="py-line"> </tt>
+<a name="L1254"></a><tt class="py-lineno">1254</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-op">(</tt><tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">code</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">code</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1255"></a><tt class="py-lineno">1255</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'code'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">code</tt><tt class="py-op">:</tt> </tt>
+<a name="L1256"></a><tt class="py-lineno">1256</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'error'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">code</tt><tt class="py-op">:</tt> </tt>
+<a name="L1257"></a><tt class="py-lineno">1257</tt>  <tt class="py-line">          <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-name">code</tt><tt class="py-op">[</tt><tt class="py-string">'error'</tt><tt class="py-op">]</tt> </tt>
+<a name="L1258"></a><tt class="py-lineno">1258</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1259"></a><tt class="py-lineno">1259</tt>  <tt class="py-line">          <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-string">'No code was supplied in the query parameters.'</tt> </tt>
+<a name="L1260"></a><tt class="py-lineno">1260</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt id="link-194" class="py-name" targets="Class oauth2client.client.FlowExchangeError=oauth2client.client.FlowExchangeError-class.html"><a title="oauth2client.client.FlowExchangeError" class="py-name" href="#" onclick="return doclink('link-194', 'FlowExchangeError', 'link-194');">FlowExchangeError</a></tt><tt class="py-op">(</tt><tt class="py-name">error_msg</tt><tt class="py-op">)</tt> </tt>
+<a name="L1261"></a><tt class="py-lineno">1261</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1262"></a><tt class="py-lineno">1262</tt>  <tt class="py-line">        <tt class="py-name">code</tt> <tt class="py-op">=</tt> <tt class="py-name">code</tt><tt class="py-op">[</tt><tt class="py-string">'code'</tt><tt class="py-op">]</tt> </tt>
+<a name="L1263"></a><tt class="py-lineno">1263</tt>  <tt class="py-line"> </tt>
+<a name="L1264"></a><tt class="py-lineno">1264</tt>  <tt class="py-line">    <tt class="py-name">body</tt> <tt class="py-op">=</tt> <tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-op">{</tt> </tt>
+<a name="L1265"></a><tt class="py-lineno">1265</tt>  <tt class="py-line">        <tt class="py-string">'grant_type'</tt><tt class="py-op">:</tt> <tt class="py-string">'authorization_code'</tt><tt class="py-op">,</tt> </tt>
+<a name="L1266"></a><tt class="py-lineno">1266</tt>  <tt class="py-line">        <tt class="py-string">'client_id'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_id</tt><tt class="py-op">,</tt> </tt>
+<a name="L1267"></a><tt class="py-lineno">1267</tt>  <tt class="py-line">        <tt class="py-string">'client_secret'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_secret</tt><tt class="py-op">,</tt> </tt>
+<a name="L1268"></a><tt class="py-lineno">1268</tt>  <tt class="py-line">        <tt class="py-string">'code'</tt><tt class="py-op">:</tt> <tt class="py-name">code</tt><tt class="py-op">,</tt> </tt>
+<a name="L1269"></a><tt class="py-lineno">1269</tt>  <tt class="py-line">        <tt class="py-string">'redirect_uri'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">redirect_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L1270"></a><tt class="py-lineno">1270</tt>  <tt class="py-line">        <tt class="py-string">'scope'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
+<a name="L1271"></a><tt class="py-lineno">1271</tt>  <tt class="py-line">        <tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L1272"></a><tt class="py-lineno">1272</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L1273"></a><tt class="py-lineno">1273</tt>  <tt class="py-line">        <tt class="py-string">'content-type'</tt><tt class="py-op">:</tt> <tt class="py-string">'application/x-www-form-urlencoded'</tt><tt class="py-op">,</tt> </tt>
+<a name="L1274"></a><tt class="py-lineno">1274</tt>  <tt class="py-line">    <tt class="py-op">}</tt> </tt>
+<a name="L1275"></a><tt class="py-lineno">1275</tt>  <tt class="py-line"> </tt>
+<a name="L1276"></a><tt class="py-lineno">1276</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</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="L1277"></a><tt class="py-lineno">1277</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt> </tt>
+<a name="L1278"></a><tt class="py-lineno">1278</tt>  <tt class="py-line"> </tt>
+<a name="L1279"></a><tt class="py-lineno">1279</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-195" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-195', 'http', 'link-56');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1280"></a><tt class="py-lineno">1280</tt>  <tt class="py-line">      <tt id="link-196" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-196', 'http', 'link-56');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Http</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1281"></a><tt class="py-lineno">1281</tt>  <tt class="py-line"> </tt>
+<a name="L1282"></a><tt class="py-lineno">1282</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-197" class="py-name"><a title="apiclient.http
+oauth2client.appengine.OAuth2Decorator.http" class="py-name" href="#" onclick="return doclink('link-197', 'http', 'link-56');">http</a></tt><tt class="py-op">.</tt><tt id="link-198" 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-198', 'request', 'link-57');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-string">'POST'</tt><tt class="py-op">,</tt> <tt class="py-name">body</tt><tt class="py-op">=</tt><tt class="py-name">body</tt><tt class="py-op">,</tt> </tt>
+<a name="L1283"></a><tt class="py-lineno">1283</tt>  <tt class="py-line">                                 <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
+<a name="L1284"></a><tt class="py-lineno">1284</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt id="link-199" class="py-name" targets="Function oauth2client.client._parse_exchange_token_response()=oauth2client.client-module.html#_parse_exchange_token_response"><a title="oauth2client.client._parse_exchange_token_response" class="py-name" href="#" onclick="return doclink('link-199', '_parse_exchange_token_response', 'link-199');">_parse_exchange_token_response</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L1285"></a><tt class="py-lineno">1285</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">200</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'access_token'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
+<a name="L1286"></a><tt class="py-lineno">1286</tt>  <tt class="py-line">      <tt class="py-name">access_token</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'access_token'</tt><tt class="py-op">]</tt> </tt>
+<a name="L1287"></a><tt class="py-lineno">1287</tt>  <tt class="py-line">      <tt class="py-name">refresh_token</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">.</tt><tt id="link-200" class="py-name"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
-oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-162', 'get', 'link-14');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'id_token'</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="L1176"></a><tt class="py-lineno">1176</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1177"></a><tt class="py-lineno">1177</tt>  <tt class="py-line">      <tt id="link-163" class="py-name"><a title="apiclient.discovery.logger
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-200', 'get', 'link-24');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'refresh_token'</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L1288"></a><tt class="py-lineno">1288</tt>  <tt class="py-line">      <tt class="py-name">token_expiry</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1289"></a><tt class="py-lineno">1289</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'expires_in'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
+<a name="L1290"></a><tt class="py-lineno">1290</tt>  <tt class="py-line">        <tt class="py-name">token_expiry</tt> <tt class="py-op">=</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">utcnow</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">timedelta</tt><tt class="py-op">(</tt> </tt>
+<a name="L1291"></a><tt class="py-lineno">1291</tt>  <tt class="py-line">            <tt class="py-name">seconds</tt><tt class="py-op">=</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'expires_in'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1292"></a><tt class="py-lineno">1292</tt>  <tt class="py-line"> </tt>
+<a name="L1293"></a><tt class="py-lineno">1293</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'id_token'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
+<a name="L1294"></a><tt class="py-lineno">1294</tt>  <tt class="py-line">        <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'id_token'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-201" class="py-name" targets="Function oauth2client.client._extract_id_token()=oauth2client.client-module.html#_extract_id_token"><a title="oauth2client.client._extract_id_token" class="py-name" href="#" onclick="return doclink('link-201', '_extract_id_token', 'link-201');">_extract_id_token</a></tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'id_token'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1295"></a><tt class="py-lineno">1295</tt>  <tt class="py-line"> </tt>
+<a name="L1296"></a><tt class="py-lineno">1296</tt>  <tt class="py-line">      <tt id="link-202" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
 oauth2client.gce.logger
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
-oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-163', 'logger', 'link-9');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Failed to retrieve access token: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L1178"></a><tt class="py-lineno">1178</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'error'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
-<a name="L1179"></a><tt class="py-lineno">1179</tt>  <tt class="py-line">        <tt class="py-comment"># you never know what those providers got to say</tt> </tt>
-<a name="L1180"></a><tt class="py-lineno">1180</tt>  <tt class="py-line">        <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'error'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L1181"></a><tt class="py-lineno">1181</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1182"></a><tt class="py-lineno">1182</tt>  <tt class="py-line">        <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-string">'Invalid response: %s.'</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">)</tt> </tt>
-<a name="L1183"></a><tt class="py-lineno">1183</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-164" class="py-name"><a title="oauth2client.client.FlowExchangeError" class="py-name" href="#" onclick="return doclink('link-164', 'FlowExchangeError', 'link-152');">FlowExchangeError</a></tt><tt class="py-op">(</tt><tt class="py-name">error_msg</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L1184"></a><tt class="py-lineno">1184</tt>  <tt class="py-line"> </tt>
-<a name="flow_from_clientsecrets"></a><div id="flow_from_clientsecrets-def"><a name="L1185"></a><tt class="py-lineno">1185</tt>  <tt class="py-line"> </tt>
-<a name="L1186"></a><tt class="py-lineno">1186</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-165" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-165', 'positional', 'link-41');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="L1187"></a><tt class="py-lineno">1187</tt> <a class="py-toggle" href="#" id="flow_from_clientsecrets-toggle" onclick="return toggle('flow_from_clientsecrets');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#flow_from_clientsecrets">flow_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">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-name">None</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="flow_from_clientsecrets-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="flow_from_clientsecrets-expanded"><a name="L1188"></a><tt class="py-lineno">1188</tt>  <tt class="py-line">  <tt class="py-docstring">"""Create a Flow from a clientsecrets file.</tt> </tt>
-<a name="L1189"></a><tt class="py-lineno">1189</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1190"></a><tt class="py-lineno">1190</tt>  <tt class="py-line"><tt class="py-docstring">  Will create the right kind of Flow based on the contents of the clientsecrets</tt> </tt>
-<a name="L1191"></a><tt class="py-lineno">1191</tt>  <tt class="py-line"><tt class="py-docstring">  file or will raise InvalidClientSecretsError for unknown types of Flows.</tt> </tt>
-<a name="L1192"></a><tt class="py-lineno">1192</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1193"></a><tt class="py-lineno">1193</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L1194"></a><tt class="py-lineno">1194</tt>  <tt class="py-line"><tt class="py-docstring">    filename: string, File name of client secrets.</tt> </tt>
-<a name="L1195"></a><tt class="py-lineno">1195</tt>  <tt class="py-line"><tt class="py-docstring">    scope: string or iterable of strings, scope(s) to request.</tt> </tt>
-<a name="L1196"></a><tt class="py-lineno">1196</tt>  <tt class="py-line"><tt class="py-docstring">    redirect_uri: string, Either the string 'urn:ietf:wg:oauth:2.0:oob' for</tt> </tt>
-<a name="L1197"></a><tt class="py-lineno">1197</tt>  <tt class="py-line"><tt class="py-docstring">        a non-web-based application, or a URI that handles the callback from</tt> </tt>
-<a name="L1198"></a><tt class="py-lineno">1198</tt>  <tt class="py-line"><tt class="py-docstring">        the authorization server.</tt> </tt>
-<a name="L1199"></a><tt class="py-lineno">1199</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="L1200"></a><tt class="py-lineno">1200</tt>  <tt class="py-line"><tt class="py-docstring">      clientsecrets file is missing or invalid. If message is provided then</tt> </tt>
-<a name="L1201"></a><tt class="py-lineno">1201</tt>  <tt class="py-line"><tt class="py-docstring">      sys.exit will be called in the case of an error. If message in not</tt> </tt>
-<a name="L1202"></a><tt class="py-lineno">1202</tt>  <tt class="py-line"><tt class="py-docstring">      provided then clientsecrets.InvalidClientSecretsError will be raised.</tt> </tt>
-<a name="L1203"></a><tt class="py-lineno">1203</tt>  <tt class="py-line"><tt class="py-docstring">    cache: An optional cache service client that implements get() and set()</tt> </tt>
-<a name="L1204"></a><tt class="py-lineno">1204</tt>  <tt class="py-line"><tt class="py-docstring">      methods. See clientsecrets.loadfile() for details.</tt> </tt>
-<a name="L1205"></a><tt class="py-lineno">1205</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1206"></a><tt class="py-lineno">1206</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L1207"></a><tt class="py-lineno">1207</tt>  <tt class="py-line"><tt class="py-docstring">    A Flow object.</tt> </tt>
-<a name="L1208"></a><tt class="py-lineno">1208</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1209"></a><tt class="py-lineno">1209</tt>  <tt class="py-line"><tt class="py-docstring">  Raises:</tt> </tt>
-<a name="L1210"></a><tt class="py-lineno">1210</tt>  <tt class="py-line"><tt class="py-docstring">    UnknownClientSecretsFlowError if the file describes an unknown kind of Flow.</tt> </tt>
-<a name="L1211"></a><tt class="py-lineno">1211</tt>  <tt class="py-line"><tt class="py-docstring">    clientsecrets.InvalidClientSecretsError if the clientsecrets file is</tt> </tt>
-<a name="L1212"></a><tt class="py-lineno">1212</tt>  <tt class="py-line"><tt class="py-docstring">      invalid.</tt> </tt>
-<a name="L1213"></a><tt class="py-lineno">1213</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L1214"></a><tt class="py-lineno">1214</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1215"></a><tt class="py-lineno">1215</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-166" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-166', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-167" 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-167', 'loadfile', 'link-167');">loadfile</a></tt><tt class="py-op">(</tt><tt id="link-168" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
-oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-168', 'filename', 'link-140');">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="L1216"></a><tt class="py-lineno">1216</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">client_type</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt id="link-169" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-169', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-170" 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-170', 'TYPE_WEB', 'link-170');">TYPE_WEB</a></tt><tt class="py-op">,</tt> <tt id="link-171" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-171', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-172" 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-172', 'TYPE_INSTALLED', 'link-172');">TYPE_INSTALLED</a></tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L1217"></a><tt class="py-lineno">1217</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-173" class="py-name"><a title="oauth2client.client.OAuth2WebServerFlow" class="py-name" href="#" onclick="return doclink('link-173', 'OAuth2WebServerFlow', 'link-132');">OAuth2WebServerFlow</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L1218"></a><tt class="py-lineno">1218</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="L1219"></a><tt class="py-lineno">1219</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="L1220"></a><tt class="py-lineno">1220</tt>  <tt class="py-line">            <tt class="py-name">scope</tt><tt class="py-op">,</tt> </tt>
-<a name="L1221"></a><tt class="py-lineno">1221</tt>  <tt class="py-line">            <tt class="py-name">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-name">redirect_uri</tt><tt class="py-op">,</tt> </tt>
-<a name="L1222"></a><tt class="py-lineno">1222</tt>  <tt class="py-line">            <tt class="py-name">user_agent</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L1223"></a><tt class="py-lineno">1223</tt>  <tt class="py-line">            <tt class="py-name">auth_uri</tt><tt class="py-op">=</tt><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="L1224"></a><tt class="py-lineno">1224</tt>  <tt class="py-line">            <tt class="py-name">token_uri</tt><tt class="py-op">=</tt><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="L1225"></a><tt class="py-lineno">1225</tt>  <tt class="py-line"> </tt>
-<a name="L1226"></a><tt class="py-lineno">1226</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt id="link-174" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-174', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-175" 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-175', 'InvalidClientSecretsError', 'link-175');">InvalidClientSecretsError</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1227"></a><tt class="py-lineno">1227</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">message</tt><tt class="py-op">:</tt> </tt>
-<a name="L1228"></a><tt class="py-lineno">1228</tt>  <tt class="py-line">      <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-name">message</tt><tt class="py-op">)</tt> </tt>
-<a name="L1229"></a><tt class="py-lineno">1229</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1230"></a><tt class="py-lineno">1230</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> </tt>
-<a name="L1231"></a><tt class="py-lineno">1231</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1232"></a><tt class="py-lineno">1232</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-176" class="py-name" targets="Class oauth2client.client.UnknownClientSecretsFlowError=oauth2client.client.UnknownClientSecretsFlowError-class.html"><a title="oauth2client.client.UnknownClientSecretsFlowError" class="py-name" href="#" onclick="return doclink('link-176', 'UnknownClientSecretsFlowError', 'link-176');">UnknownClientSecretsFlowError</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L1233"></a><tt class="py-lineno">1233</tt>  <tt class="py-line">        <tt class="py-string">'This OAuth 2.0 flow is unsupported: "%s"'</tt> <tt class="py-op">*</tt> <tt class="py-name">client_type</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1234"></a><tt class="py-lineno">1234</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-202', 'logger', 'link-19');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Successfully retrieved access token'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1297"></a><tt class="py-lineno">1297</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-203" class="py-name" targets="Class oauth2client.client.OAuth2Credentials=oauth2client.client.OAuth2Credentials-class.html"><a title="oauth2client.client.OAuth2Credentials" class="py-name" href="#" onclick="return doclink('link-203', 'OAuth2Credentials', 'link-203');">OAuth2Credentials</a></tt><tt class="py-op">(</tt><tt class="py-name">access_token</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_id</tt><tt class="py-op">,</tt> </tt>
+<a name="L1298"></a><tt class="py-lineno">1298</tt>  <tt class="py-line">                               <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">client_secret</tt><tt class="py-op">,</tt> <tt class="py-name">refresh_token</tt><tt class="py-op">,</tt> <tt class="py-name">token_expiry</tt><tt class="py-op">,</tt> </tt>
+<a name="L1299"></a><tt class="py-lineno">1299</tt>  <tt class="py-line">                               <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">token_uri</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">user_agent</tt><tt class="py-op">,</tt> </tt>
+<a name="L1300"></a><tt class="py-lineno">1300</tt>  <tt class="py-line">                               <tt class="py-name">revoke_uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">revoke_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L1301"></a><tt class="py-lineno">1301</tt>  <tt class="py-line">                               <tt class="py-name">id_token</tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">.</tt><tt id="link-204" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-204', 'get', 'link-24');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'id_token'</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="L1302"></a><tt class="py-lineno">1302</tt>  <tt class="py-line">                               <tt class="py-name">token_response</tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">)</tt> </tt>
+<a name="L1303"></a><tt class="py-lineno">1303</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1304"></a><tt class="py-lineno">1304</tt>  <tt class="py-line">      <tt id="link-205" class="py-name"><a title="apiclient.discovery.logger
+oauth2client.appengine.logger
+oauth2client.client.logger
+oauth2client.crypt.logger
+oauth2client.gce.logger
+oauth2client.locked_file.logger
+oauth2client.multistore_file.logger
+oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-205', 'logger', 'link-19');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'Failed to retrieve access token: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L1305"></a><tt class="py-lineno">1305</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'error'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">d</tt><tt class="py-op">:</tt> </tt>
+<a name="L1306"></a><tt class="py-lineno">1306</tt>  <tt class="py-line">        <tt class="py-comment"># you never know what those providers got to say</tt> </tt>
+<a name="L1307"></a><tt class="py-lineno">1307</tt>  <tt class="py-line">        <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-name">unicode</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'error'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1308"></a><tt class="py-lineno">1308</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1309"></a><tt class="py-lineno">1309</tt>  <tt class="py-line">        <tt class="py-name">error_msg</tt> <tt class="py-op">=</tt> <tt class="py-string">'Invalid response: %s.'</tt> <tt class="py-op">%</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">)</tt> </tt>
+<a name="L1310"></a><tt class="py-lineno">1310</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-206" class="py-name"><a title="oauth2client.client.FlowExchangeError" class="py-name" href="#" onclick="return doclink('link-206', 'FlowExchangeError', 'link-194');">FlowExchangeError</a></tt><tt class="py-op">(</tt><tt class="py-name">error_msg</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L1311"></a><tt class="py-lineno">1311</tt>  <tt class="py-line"> </tt>
+<a name="flow_from_clientsecrets"></a><div id="flow_from_clientsecrets-def"><a name="L1312"></a><tt class="py-lineno">1312</tt>  <tt class="py-line"> </tt>
+<a name="L1313"></a><tt class="py-lineno">1313</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt id="link-207" class="py-name"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-207', 'positional', 'link-55');">positional</a></tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="L1314"></a><tt class="py-lineno">1314</tt> <a class="py-toggle" href="#" id="flow_from_clientsecrets-toggle" onclick="return toggle('flow_from_clientsecrets');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.client-module.html#flow_from_clientsecrets">flow_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">redirect_uri</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L1315"></a><tt class="py-lineno">1315</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="flow_from_clientsecrets-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="flow_from_clientsecrets-expanded"><a name="L1316"></a><tt class="py-lineno">1316</tt>  <tt class="py-line">  <tt class="py-docstring">"""Create a Flow from a clientsecrets file.</tt> </tt>
+<a name="L1317"></a><tt class="py-lineno">1317</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1318"></a><tt class="py-lineno">1318</tt>  <tt class="py-line"><tt class="py-docstring">  Will create the right kind of Flow based on the contents of the clientsecrets</tt> </tt>
+<a name="L1319"></a><tt class="py-lineno">1319</tt>  <tt class="py-line"><tt class="py-docstring">  file or will raise InvalidClientSecretsError for unknown types of Flows.</tt> </tt>
+<a name="L1320"></a><tt class="py-lineno">1320</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1321"></a><tt class="py-lineno">1321</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L1322"></a><tt class="py-lineno">1322</tt>  <tt class="py-line"><tt class="py-docstring">    filename: string, File name of client secrets.</tt> </tt>
+<a name="L1323"></a><tt class="py-lineno">1323</tt>  <tt class="py-line"><tt class="py-docstring">    scope: string or iterable of strings, scope(s) to request.</tt> </tt>
+<a name="L1324"></a><tt class="py-lineno">1324</tt>  <tt class="py-line"><tt class="py-docstring">    redirect_uri: string, Either the string 'urn:ietf:wg:oauth:2.0:oob' for</tt> </tt>
+<a name="L1325"></a><tt class="py-lineno">1325</tt>  <tt class="py-line"><tt class="py-docstring">      a non-web-based application, or a URI that handles the callback from</tt> </tt>
+<a name="L1326"></a><tt class="py-lineno">1326</tt>  <tt class="py-line"><tt class="py-docstring">      the authorization server.</tt> </tt>
+<a name="L1327"></a><tt class="py-lineno">1327</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="L1328"></a><tt class="py-lineno">1328</tt>  <tt class="py-line"><tt class="py-docstring">      clientsecrets file is missing or invalid. If message is provided then</tt> </tt>
+<a name="L1329"></a><tt class="py-lineno">1329</tt>  <tt class="py-line"><tt class="py-docstring">      sys.exit will be called in the case of an error. If message in not</tt> </tt>
+<a name="L1330"></a><tt class="py-lineno">1330</tt>  <tt class="py-line"><tt class="py-docstring">      provided then clientsecrets.InvalidClientSecretsError will be raised.</tt> </tt>
+<a name="L1331"></a><tt class="py-lineno">1331</tt>  <tt class="py-line"><tt class="py-docstring">    cache: An optional cache service client that implements get() and set()</tt> </tt>
+<a name="L1332"></a><tt class="py-lineno">1332</tt>  <tt class="py-line"><tt class="py-docstring">      methods. See clientsecrets.loadfile() for details.</tt> </tt>
+<a name="L1333"></a><tt class="py-lineno">1333</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1334"></a><tt class="py-lineno">1334</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L1335"></a><tt class="py-lineno">1335</tt>  <tt class="py-line"><tt class="py-docstring">    A Flow object.</tt> </tt>
+<a name="L1336"></a><tt class="py-lineno">1336</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1337"></a><tt class="py-lineno">1337</tt>  <tt class="py-line"><tt class="py-docstring">  Raises:</tt> </tt>
+<a name="L1338"></a><tt class="py-lineno">1338</tt>  <tt class="py-line"><tt class="py-docstring">    UnknownClientSecretsFlowError if the file describes an unknown kind of Flow.</tt> </tt>
+<a name="L1339"></a><tt class="py-lineno">1339</tt>  <tt class="py-line"><tt class="py-docstring">    clientsecrets.InvalidClientSecretsError if the clientsecrets file is</tt> </tt>
+<a name="L1340"></a><tt class="py-lineno">1340</tt>  <tt class="py-line"><tt class="py-docstring">      invalid.</tt> </tt>
+<a name="L1341"></a><tt class="py-lineno">1341</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L1342"></a><tt class="py-lineno">1342</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1343"></a><tt class="py-lineno">1343</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-208" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-208', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-209" 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-209', 'loadfile', 'link-209');">loadfile</a></tt><tt class="py-op">(</tt><tt id="link-210" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
+oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-210', 'filename', 'link-175');">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="L1344"></a><tt class="py-lineno">1344</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">client_type</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt id="link-211" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-211', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-212" 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-212', 'TYPE_WEB', 'link-212');">TYPE_WEB</a></tt><tt class="py-op">,</tt> <tt id="link-213" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-213', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-214" 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-214', 'TYPE_INSTALLED', 'link-214');">TYPE_INSTALLED</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1345"></a><tt class="py-lineno">1345</tt>  <tt class="py-line">      <tt class="py-name">constructor_kwargs</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L1346"></a><tt class="py-lineno">1346</tt>  <tt class="py-line">          <tt class="py-string">'redirect_uri'</tt><tt class="py-op">:</tt> <tt class="py-name">redirect_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L1347"></a><tt class="py-lineno">1347</tt>  <tt class="py-line">          <tt class="py-string">'auth_uri'</tt><tt class="py-op">:</tt> <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="L1348"></a><tt class="py-lineno">1348</tt>  <tt class="py-line">          <tt class="py-string">'token_uri'</tt><tt class="py-op">:</tt> <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="L1349"></a><tt class="py-lineno">1349</tt>  <tt class="py-line">      <tt class="py-op">}</tt> </tt>
+<a name="L1350"></a><tt class="py-lineno">1350</tt>  <tt class="py-line">      <tt class="py-name">revoke_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">client_info</tt><tt class="py-op">.</tt><tt id="link-215" class="py-name"><a title="apiclient.schema.Schemas.get
+oauth2client.client.MemoryCache.get
+oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-215', 'get', 'link-24');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'revoke_uri'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1351"></a><tt class="py-lineno">1351</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">revoke_uri</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="L1352"></a><tt class="py-lineno">1352</tt>  <tt class="py-line">        <tt class="py-name">constructor_kwargs</tt><tt class="py-op">[</tt><tt class="py-string">'revoke_uri'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">revoke_uri</tt> </tt>
+<a name="L1353"></a><tt class="py-lineno">1353</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-216" class="py-name"><a title="oauth2client.client.OAuth2WebServerFlow" class="py-name" href="#" onclick="return doclink('link-216', 'OAuth2WebServerFlow', 'link-167');">OAuth2WebServerFlow</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L1354"></a><tt class="py-lineno">1354</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 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="L1355"></a><tt class="py-lineno">1355</tt>  <tt class="py-line">          <tt class="py-name">scope</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">constructor_kwargs</tt><tt class="py-op">)</tt> </tt>
+<a name="L1356"></a><tt class="py-lineno">1356</tt>  <tt class="py-line"> </tt>
+<a name="L1357"></a><tt class="py-lineno">1357</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt id="link-217" class="py-name"><a title="oauth2client.clientsecrets" class="py-name" href="#" onclick="return doclink('link-217', 'clientsecrets', 'link-0');">clientsecrets</a></tt><tt class="py-op">.</tt><tt id="link-218" 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-218', 'InvalidClientSecretsError', 'link-218');">InvalidClientSecretsError</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L1358"></a><tt class="py-lineno">1358</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">message</tt><tt class="py-op">:</tt> </tt>
+<a name="L1359"></a><tt class="py-lineno">1359</tt>  <tt class="py-line">      <tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">exit</tt><tt class="py-op">(</tt><tt class="py-name">message</tt><tt class="py-op">)</tt> </tt>
+<a name="L1360"></a><tt class="py-lineno">1360</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1361"></a><tt class="py-lineno">1361</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> </tt>
+<a name="L1362"></a><tt class="py-lineno">1362</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1363"></a><tt class="py-lineno">1363</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-219" class="py-name" targets="Class oauth2client.client.UnknownClientSecretsFlowError=oauth2client.client.UnknownClientSecretsFlowError-class.html"><a title="oauth2client.client.UnknownClientSecretsFlowError" class="py-name" href="#" onclick="return doclink('link-219', 'UnknownClientSecretsFlowError', 'link-219');">UnknownClientSecretsFlowError</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L1364"></a><tt class="py-lineno">1364</tt>  <tt class="py-line">        <tt class="py-string">'This OAuth 2.0 flow is unsupported: %r'</tt> <tt class="py-op">%</tt> <tt class="py-name">client_type</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1365"></a><tt class="py-lineno">1365</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -1673,7 +1828,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:49 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.AccessTokenCredentials-class.html b/docs/epy/oauth2client.client.AccessTokenCredentials-class.html
index f30d1fe..6a13172 100644
--- a/docs/epy/oauth2client.client.AccessTokenCredentials-class.html
+++ b/docs/epy/oauth2client.client.AccessTokenCredentials-class.html
@@ -115,7 +115,8 @@
         <tr>
           <td><span class="summary-sig"><a href="oauth2client.client.AccessTokenCredentials-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">access_token</span>,
-        <span class="summary-sig-arg">user_agent</span>)</span><br />
+        <span class="summary-sig-arg">user_agent</span>,
+        <span class="summary-sig-arg">revoke_uri</span>=<span class="summary-sig-default">None</span>)</span><br />
       Create an instance of OAuth2Credentials</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="oauth2client.client-pysrc.html#AccessTokenCredentials.__init__">source&nbsp;code</a></span>
@@ -144,6 +145,24 @@
       
     </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 href="oauth2client.client.AccessTokenCredentials-class.html#_revoke" class="summary-sig-name" onclick="show_private();">_revoke</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">http_request</span>)</span><br />
+      Revokes the access_token and deletes the store if available.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="oauth2client.client-pysrc.html#AccessTokenCredentials._revoke">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><a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a></code></b>:
@@ -153,11 +172,13 @@
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#apply">apply</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#authorize">authorize</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#refresh">refresh</a></code>,
+      <code><a href="oauth2client.client.OAuth2Credentials-class.html#revoke">revoke</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#set_store">set_store</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#to_json">to_json</a></code>
       </p>
     <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a></code></b> (private):
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request" onclick="show_private();">_do_refresh_request</a></code>,
+      <code><a href="oauth2client.client.OAuth2Credentials-class.html#_do_revoke" onclick="show_private();">_do_revoke</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_body" onclick="show_private();">_generate_refresh_request_body</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers" onclick="show_private();">_generate_refresh_request_headers</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential" onclick="show_private();">_updateFromCredential</a></code>
@@ -302,7 +323,8 @@
   <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">access_token</span>,
-        <span class="sig-arg">user_agent</span>)</span>
+        <span class="sig-arg">user_agent</span>,
+        <span class="sig-arg">revoke_uri</span>=<span class="sig-default">None</span>)</span>
     <br /><em class="fname">(Constructor)</em>
   </h3>
   </td><td align="right" valign="top"
@@ -319,10 +341,8 @@
 Args:
   access_token: string, access token.
   user_agent: string, The HTTP User-Agent to provide for this application.
-
-Notes:
-  store: callable, a callable that when passed a Credential
-    will store the credential back to where it came from.
+  revoke_uri: string, URI for revoke endpoint. Defaults to None; a token
+    can't be revoked if this is None.
 
 </pre>
   <dl class="fields">
@@ -405,6 +425,36 @@
   </dl>
 </td></tr></table>
 </div>
+<a name="_revoke"></a>
+<div class="private">
+<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">_revoke</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">http_request</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.client-pysrc.html#AccessTokenCredentials._revoke">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Revokes the access_token and deletes the store if available.
+
+Args:
+  http_request: callable, a callable that matches the method signature of
+    httplib2.Http.request, used to make the revoke request.
+
+</pre>
+  <dl class="fields">
+    <dt>Overrides:
+        <a href="oauth2client.client.OAuth2Credentials-class.html#_revoke" onclick="show_private();">OAuth2Credentials._revoke</a>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
 <br />
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
@@ -429,7 +479,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:40 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.AccessTokenCredentialsError-class.html b/docs/epy/oauth2client.client.AccessTokenCredentialsError-class.html
index 1fe9b28..83622f7 100644
--- a/docs/epy/oauth2client.client.AccessTokenCredentialsError-class.html
+++ b/docs/epy/oauth2client.client.AccessTokenCredentialsError-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:41 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.AccessTokenRefreshError-class.html b/docs/epy/oauth2client.client.AccessTokenRefreshError-class.html
index 8fff0c1..da66942 100644
--- a/docs/epy/oauth2client.client.AccessTokenRefreshError-class.html
+++ b/docs/epy/oauth2client.client.AccessTokenRefreshError-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:41 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.AssertionCredentials-class.html b/docs/epy/oauth2client.client.AssertionCredentials-class.html
index f30eef2..f5d38ea 100644
--- a/docs/epy/oauth2client.client.AssertionCredentials-class.html
+++ b/docs/epy/oauth2client.client.AssertionCredentials-class.html
@@ -102,7 +102,8 @@
           <td><span class="summary-sig"><a href="oauth2client.client.AssertionCredentials-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">assertion_type</span>,
         <span class="summary-sig-arg">user_agent</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">token_uri</span>=<span class="summary-sig-default">'https://accounts.google.com/o/oauth2/token'</span>,
+        <span class="summary-sig-arg">token_uri</span>=<span class="summary-sig-default">GOOGLE_TOKEN_URI</span>,
+        <span class="summary-sig-arg">revoke_uri</span>=<span class="summary-sig-default">GOOGLE_REVOKE_URI</span>,
         <span class="summary-sig-arg">**unused_kwargs</span>)</span><br />
       Constructor for AssertionFlowCredentials.</td>
           <td align="right" valign="top">
@@ -149,6 +150,24 @@
       
     </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 href="oauth2client.client.AssertionCredentials-class.html#_revoke" class="summary-sig-name" onclick="show_private();">_revoke</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">http_request</span>)</span><br />
+      Revokes the access_token and deletes the store if available.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="oauth2client.client-pysrc.html#AssertionCredentials._revoke">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><a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a></code></b>:
@@ -158,11 +177,13 @@
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#apply">apply</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#authorize">authorize</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#refresh">refresh</a></code>,
+      <code><a href="oauth2client.client.OAuth2Credentials-class.html#revoke">revoke</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#set_store">set_store</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#to_json">to_json</a></code>
       </p>
     <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a></code></b> (private):
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request" onclick="show_private();">_do_refresh_request</a></code>,
+      <code><a href="oauth2client.client.OAuth2Credentials-class.html#_do_revoke" onclick="show_private();">_do_revoke</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers" onclick="show_private();">_generate_refresh_request_headers</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_refresh" onclick="show_private();">_refresh</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential" onclick="show_private();">_updateFromCredential</a></code>
@@ -293,7 +314,8 @@
   <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
         <span class="sig-arg">assertion_type</span>,
         <span class="sig-arg">user_agent</span>=<span class="sig-default">None</span>,
-        <span class="sig-arg">token_uri</span>=<span class="sig-default">'https://accounts.google.com/o/oauth2/token'</span>,
+        <span class="sig-arg">token_uri</span>=<span class="sig-default">GOOGLE_TOKEN_URI</span>,
+        <span class="sig-arg">revoke_uri</span>=<span class="sig-default">GOOGLE_REVOKE_URI</span>,
         <span class="sig-arg">**unused_kwargs</span>)</span>
     <br /><em class="fname">(Constructor)</em>
   </h3>
@@ -307,10 +329,11 @@
 
 Args:
   assertion_type: string, assertion type that will be declared to the auth
-      server
+    server
   user_agent: string, The HTTP User-Agent to provide for this application.
   token_uri: string, URI for token endpoint. For convenience
     defaults to Google's endpoints but any OAuth 2.0 provider can be used.
+  revoke_uri: string, URI for revoke endpoint.
 
 </pre>
   <dl class="fields">
@@ -350,6 +373,36 @@
   </dl>
 </td></tr></table>
 </div>
+<a name="_revoke"></a>
+<div class="private">
+<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">_revoke</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">http_request</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.client-pysrc.html#AssertionCredentials._revoke">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Revokes the access_token and deletes the store if available.
+
+Args:
+  http_request: callable, a callable that matches the method signature of
+    httplib2.Http.request, used to make the revoke request.
+
+</pre>
+  <dl class="fields">
+    <dt>Overrides:
+        <a href="oauth2client.client.OAuth2Credentials-class.html#_revoke" onclick="show_private();">OAuth2Credentials._revoke</a>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
 <br />
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
@@ -374,7 +427,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:41 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.Credentials-class.html b/docs/epy/oauth2client.client.Credentials-class.html
index 5f11487..ebd7e57 100644
--- a/docs/epy/oauth2client.client.Credentials-class.html
+++ b/docs/epy/oauth2client.client.Credentials-class.html
@@ -96,13 +96,9 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="authorize"></a><span class="summary-sig-name">authorize</span>(<span class="summary-sig-arg">self</span>,
+          <td><span class="summary-sig"><a href="oauth2client.client.Credentials-class.html#authorize" class="summary-sig-name">authorize</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">http</span>)</span><br />
-      Take an httplib2.Http instance (or equivalent) and
-authorizes it for the set of credentials, usually by
-replacing http.request() with a method that adds in
-the appropriate headers and then delegates to the original
-Http.request() method.</td>
+      Take an httplib2.Http instance (or equivalent) and authorizes it.</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="oauth2client.client-pysrc.html#Credentials.authorize">source&nbsp;code</a></span>
             
@@ -136,6 +132,24 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="oauth2client.client.Credentials-class.html#revoke" class="summary-sig-name">revoke</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">http</span>)</span><br />
+      Revokes a refresh_token and makes the credentials void.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="oauth2client.client-pysrc.html#Credentials.revoke">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.client.Credentials-class.html#apply" class="summary-sig-name">apply</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">headers</span>)</span><br />
       Add the authorization to the headers.</td>
@@ -156,7 +170,7 @@
         <tr>
           <td><span class="summary-sig"><a href="oauth2client.client.Credentials-class.html#_to_json" class="summary-sig-name" onclick="show_private();">_to_json</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">strip</span>)</span><br />
-      Utility function for creating a JSON representation of an instance of Credentials.</td>
+      Utility function that creates JSON repr.</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="oauth2client.client-pysrc.html#Credentials._to_json">source&nbsp;code</a></span>
             
@@ -326,6 +340,37 @@
   </td>
 </tr>
 </table>
+<a name="authorize"></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</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">http</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.client-pysrc.html#Credentials.authorize">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Take an httplib2.Http instance (or equivalent) and authorizes it.
+
+Authorizes it for the set of credentials, usually by replacing
+http.request() with a method that adds in the appropriate headers and then
+delegates to the original Http.request() method.
+
+Args:
+  http: httplib2.Http, an http object to be used to make the refresh
+    request.
+
+</pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="refresh"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -353,6 +398,33 @@
   </dl>
 </td></tr></table>
 </div>
+<a name="revoke"></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">revoke</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">http</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.client-pysrc.html#Credentials.revoke">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Revokes a refresh_token and makes the credentials void.
+
+Args:
+  http: httplib2.Http, an http object to be used to make the revoke
+    request.
+
+</pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="apply"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -395,7 +467,7 @@
   </tr></table>
   
   <pre class="literalblock">
-Utility function for creating a JSON representation of an instance of Credentials.
+Utility function that creates JSON repr. of a Credentials object.
 
 Args:
   strip: array, An array of names of members to not include in the JSON.
@@ -523,7 +595,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:41 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.Error-class.html b/docs/epy/oauth2client.client.Error-class.html
index fdeac7f..63e6eb4 100644
--- a/docs/epy/oauth2client.client.Error-class.html
+++ b/docs/epy/oauth2client.client.Error-class.html
@@ -166,7 +166,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:41 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:24 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.Flow-class.html b/docs/epy/oauth2client.client.Flow-class.html
index 3c08a7f..a80d8b4 100644
--- a/docs/epy/oauth2client.client.Flow-class.html
+++ b/docs/epy/oauth2client.client.Flow-class.html
@@ -152,7 +152,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:41 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.FlowExchangeError-class.html b/docs/epy/oauth2client.client.FlowExchangeError-class.html
index 4cca1f2..7982066 100644
--- a/docs/epy/oauth2client.client.FlowExchangeError-class.html
+++ b/docs/epy/oauth2client.client.FlowExchangeError-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:42 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.MemoryCache-class.html b/docs/epy/oauth2client.client.MemoryCache-class.html
index 5c809db..5a40a95 100644
--- a/docs/epy/oauth2client.client.MemoryCache-class.html
+++ b/docs/epy/oauth2client.client.MemoryCache-class.html
@@ -266,7 +266,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:42 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.NonAsciiHeaderError-class.html b/docs/epy/oauth2client.client.NonAsciiHeaderError-class.html
index e7b2cff..b88cbba 100644
--- a/docs/epy/oauth2client.client.NonAsciiHeaderError-class.html
+++ b/docs/epy/oauth2client.client.NonAsciiHeaderError-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:42 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.OAuth2Credentials-class.html b/docs/epy/oauth2client.client.OAuth2Credentials-class.html
index cd3bcc1..47e54cd 100644
--- a/docs/epy/oauth2client.client.OAuth2Credentials-class.html
+++ b/docs/epy/oauth2client.client.OAuth2Credentials-class.html
@@ -104,7 +104,9 @@
         <span class="summary-sig-arg">token_expiry</span>,
         <span class="summary-sig-arg">token_uri</span>,
         <span class="summary-sig-arg">user_agent</span>,
-        <span class="summary-sig-arg">id_token</span>=<span class="summary-sig-default">None</span>)</span><br />
+        <span class="summary-sig-arg">revoke_uri</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">id_token</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">token_response</span>=<span class="summary-sig-default">None</span>)</span><br />
       Create an instance of OAuth2Credentials.</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="oauth2client.client-pysrc.html#OAuth2Credentials.__init__">source&nbsp;code</a></span>
@@ -157,6 +159,24 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="oauth2client.client.OAuth2Credentials-class.html#revoke" class="summary-sig-name">revoke</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">http</span>)</span><br />
+      Revokes a refresh_token and makes the credentials void.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="oauth2client.client-pysrc.html#OAuth2Credentials.revoke">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.client.OAuth2Credentials-class.html#apply" class="summary-sig-name">apply</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">headers</span>)</span><br />
       Add the authorization to the headers.</td>
@@ -344,6 +364,43 @@
       
     </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 href="oauth2client.client.OAuth2Credentials-class.html#_revoke" class="summary-sig-name" onclick="show_private();">_revoke</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">http_request</span>)</span><br />
+      Revokes the refresh_token and deletes the store if available.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="oauth2client.client-pysrc.html#OAuth2Credentials._revoke">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 href="oauth2client.client.OAuth2Credentials-class.html#_do_revoke" class="summary-sig-name" onclick="show_private();">_do_revoke</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">http_request</span>,
+        <span class="summary-sig-arg">token</span>)</span><br />
+      Revokes the credentials and deletes the store if available.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="oauth2client.client-pysrc.html#OAuth2Credentials._do_revoke">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
   <tr>
     <td colspan="2" class="summary">
     <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="oauth2client.client.Credentials-class.html">Credentials</a></code></b> (private):
@@ -492,7 +549,9 @@
         <span class="sig-arg">token_expiry</span>,
         <span class="sig-arg">token_uri</span>,
         <span class="sig-arg">user_agent</span>,
-        <span class="sig-arg">id_token</span>=<span class="sig-default">None</span>)</span>
+        <span class="sig-arg">revoke_uri</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">id_token</span>=<span class="sig-default">None</span>,
+        <span class="sig-arg">token_response</span>=<span class="sig-default">None</span>)</span>
     <br /><em class="fname">(Constructor)</em>
   </h3>
   </td><td align="right" valign="top"
@@ -514,7 +573,12 @@
   token_expiry: datetime, when the access_token expires.
   token_uri: string, URI of token endpoint.
   user_agent: string, The HTTP User-Agent to provide for this application.
+  revoke_uri: string, URI for revoke endpoint. Defaults to None; a token
+    can't be revoked if this is None.
   id_token: object, The identity of the resource owner.
+  token_response: dict, the decoded response to the token request. None
+    if a token hasn't been requested yet. Stored because some providers
+    (e.g. wordpress.com) include extra fields that clients may want.
 
 Notes:
   store: callable, A callable that when passed a Credential
@@ -560,7 +624,7 @@
 
 Args:
    http: An instance of httplib2.Http
-       or something that acts like it.
+     or something that acts like it.
 
 Returns:
    A modified instance of http that was passed in.
@@ -614,6 +678,36 @@
   </dl>
 </td></tr></table>
 </div>
+<a name="revoke"></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">revoke</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">http</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.client-pysrc.html#OAuth2Credentials.revoke">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Revokes a refresh_token and makes the credentials void.
+
+Args:
+  http: httplib2.Http, an http object to be used to make the revoke
+    request.
+
+</pre>
+  <dl class="fields">
+    <dt>Overrides:
+        <a href="oauth2client.client.Credentials-class.html#revoke">Credentials.revoke</a>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
 <a name="apply"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -829,6 +923,66 @@
   </dl>
 </td></tr></table>
 </div>
+<a name="_revoke"></a>
+<div class="private">
+<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">_revoke</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">http_request</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.client-pysrc.html#OAuth2Credentials._revoke">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Revokes the refresh_token and deletes the store if available.
+
+Args:
+  http_request: callable, a callable that matches the method signature of
+    httplib2.Http.request, used to make the revoke request.
+
+</pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
+<a name="_do_revoke"></a>
+<div class="private">
+<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">_do_revoke</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">http_request</span>,
+        <span class="sig-arg">token</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.client-pysrc.html#OAuth2Credentials._do_revoke">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Revokes the credentials and deletes the store if available.
+
+Args:
+  http_request: callable, a callable that matches the method signature of
+    httplib2.Http.request, used to make the refresh request.
+  token: A string used as the token to be revoked. Can be either an
+    access_token or refresh_token.
+
+Raises:
+  TokenRevokeError: If the revoke request does not return with a 200 OK.
+
+</pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <br />
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
@@ -853,7 +1007,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:42 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.OAuth2WebServerFlow-class.html b/docs/epy/oauth2client.client.OAuth2WebServerFlow-class.html
index e1d8970..3747fdc 100644
--- a/docs/epy/oauth2client.client.OAuth2WebServerFlow-class.html
+++ b/docs/epy/oauth2client.client.OAuth2WebServerFlow-class.html
@@ -99,8 +99,9 @@
         <span class="summary-sig-arg">scope</span>,
         <span class="summary-sig-arg">redirect_uri</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">user_agent</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">auth_uri</span>=<span class="summary-sig-default">'https://accounts.google.com/o/oauth2/auth'</span>,
-        <span class="summary-sig-arg">token_uri</span>=<span class="summary-sig-default">'https://accounts.google.com/o/oauth2/token'</span>,
+        <span class="summary-sig-arg">auth_uri</span>=<span class="summary-sig-default">GOOGLE_AUTH_URI</span>,
+        <span class="summary-sig-arg">token_uri</span>=<span class="summary-sig-default">GOOGLE_TOKEN_URI</span>,
+        <span class="summary-sig-arg">revoke_uri</span>=<span class="summary-sig-default">GOOGLE_REVOKE_URI</span>,
         <span class="summary-sig-arg">**kwargs</span>)</span><br />
       Constructor for OAuth2WebServerFlow.</td>
           <td align="right" valign="top">
@@ -224,8 +225,9 @@
         <span class="sig-arg">scope</span>,
         <span class="sig-arg">redirect_uri</span>=<span class="sig-default">None</span>,
         <span class="sig-arg">user_agent</span>=<span class="sig-default">None</span>,
-        <span class="sig-arg">auth_uri</span>=<span class="sig-default">'https://accounts.google.com/o/oauth2/auth'</span>,
-        <span class="sig-arg">token_uri</span>=<span class="sig-default">'https://accounts.google.com/o/oauth2/token'</span>,
+        <span class="sig-arg">auth_uri</span>=<span class="sig-default">GOOGLE_AUTH_URI</span>,
+        <span class="sig-arg">token_uri</span>=<span class="sig-default">GOOGLE_TOKEN_URI</span>,
+        <span class="sig-arg">revoke_uri</span>=<span class="sig-default">GOOGLE_REVOKE_URI</span>,
         <span class="sig-arg">**kwargs</span>)</span>
     <br /><em class="fname">(Constructor)</em>
   </h3>
@@ -247,13 +249,15 @@
   scope: string or iterable of strings, scope(s) of the credentials being
     requested.
   redirect_uri: string, Either the string 'urn:ietf:wg:oauth:2.0:oob' for
-      a non-web-based application, or a URI that handles the callback from
-      the authorization server.
+    a non-web-based application, or a URI that handles the callback from
+    the authorization server.
   user_agent: string, HTTP User-Agent to provide for this application.
   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.
+  revoke_uri: string, URI for revoke endpoint. For convenience
+    defaults to Google's endpoints but any OAuth 2.0 provider can be used.
   **kwargs: dict, The keyword arguments are all optional and required
                     parameters for the OAuth calls.
 
@@ -289,9 +293,9 @@
 
 Args:
   redirect_uri: string, Either the string 'urn:ietf:wg:oauth:2.0:oob' for
-      a non-web-based application, or a URI that handles the callback from
-      the authorization server. This parameter is deprecated, please move to
-      passing the redirect_uri in via the constructor.
+    a non-web-based application, or a URI that handles the callback from
+    the authorization server. This parameter is deprecated, please move to
+    passing the redirect_uri in via the constructor.
 
 Returns:
   A URI as a string to redirect the user to begin the authorization flow.
@@ -370,7 +374,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:42 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.SignedJwtAssertionCredentials-class.html b/docs/epy/oauth2client.client.SignedJwtAssertionCredentials-class.html
index 9834375..9a184a3 100644
--- a/docs/epy/oauth2client.client.SignedJwtAssertionCredentials-class.html
+++ b/docs/epy/oauth2client.client.SignedJwtAssertionCredentials-class.html
@@ -106,7 +106,8 @@
         <span class="summary-sig-arg">scope</span>,
         <span class="summary-sig-arg">private_key_password</span>=<span class="summary-sig-default">'notasecret'</span>,
         <span class="summary-sig-arg">user_agent</span>=<span class="summary-sig-default">None</span>,
-        <span class="summary-sig-arg">token_uri</span>=<span class="summary-sig-default">'https://accounts.google.com/o/oauth2/token'</span>,
+        <span class="summary-sig-arg">token_uri</span>=<span class="summary-sig-default">GOOGLE_TOKEN_URI</span>,
+        <span class="summary-sig-arg">revoke_uri</span>=<span class="summary-sig-default">GOOGLE_REVOKE_URI</span>,
         <span class="summary-sig-arg">**kwargs</span>)</span><br />
       Constructor for SignedJwtAssertionCredentials.</td>
           <td align="right" valign="top">
@@ -138,7 +139,8 @@
   <tr>
     <td colspan="2" class="summary">
     <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="oauth2client.client.AssertionCredentials-class.html">AssertionCredentials</a></code></b> (private):
-      <code><a href="oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body" onclick="show_private();">_generate_refresh_request_body</a></code>
+      <code><a href="oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body" onclick="show_private();">_generate_refresh_request_body</a></code>,
+      <code><a href="oauth2client.client.AssertionCredentials-class.html#_revoke" onclick="show_private();">_revoke</a></code>
       </p></div>
     <p class="indent-wrapped-lines"><b>Inherited from <code><a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a></code></b>:
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#__getstate__">__getstate__</a></code>,
@@ -147,11 +149,13 @@
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#apply">apply</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#authorize">authorize</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#refresh">refresh</a></code>,
+      <code><a href="oauth2client.client.OAuth2Credentials-class.html#revoke">revoke</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#set_store">set_store</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#to_json">to_json</a></code>
       </p>
     <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="oauth2client.client.OAuth2Credentials-class.html">OAuth2Credentials</a></code></b> (private):
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request" onclick="show_private();">_do_refresh_request</a></code>,
+      <code><a href="oauth2client.client.OAuth2Credentials-class.html#_do_revoke" onclick="show_private();">_do_revoke</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers" onclick="show_private();">_generate_refresh_request_headers</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_refresh" onclick="show_private();">_refresh</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential" onclick="show_private();">_updateFromCredential</a></code>
@@ -307,7 +311,8 @@
         <span class="sig-arg">scope</span>,
         <span class="sig-arg">private_key_password</span>=<span class="sig-default">'notasecret'</span>,
         <span class="sig-arg">user_agent</span>=<span class="sig-default">None</span>,
-        <span class="sig-arg">token_uri</span>=<span class="sig-default">'https://accounts.google.com/o/oauth2/token'</span>,
+        <span class="sig-arg">token_uri</span>=<span class="sig-default">GOOGLE_TOKEN_URI</span>,
+        <span class="sig-arg">revoke_uri</span>=<span class="sig-default">GOOGLE_REVOKE_URI</span>,
         <span class="sig-arg">**kwargs</span>)</span>
     <br /><em class="fname">(Constructor)</em>
   </h3>
@@ -329,6 +334,7 @@
   user_agent: string, HTTP User-Agent to provide for this application.
   token_uri: string, URI for token endpoint. For convenience
     defaults to Google's endpoints but any OAuth 2.0 provider can be used.
+  revoke_uri: string, URI for revoke endpoint.
   kwargs: kwargs, Additional parameters to add to the JWT token, for
     example prn=joe@xample.org.
 
@@ -428,7 +434,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:42 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.Storage-class.html b/docs/epy/oauth2client.client.Storage-class.html
index cf6d8a9..36c1525 100644
--- a/docs/epy/oauth2client.client.Storage-class.html
+++ b/docs/epy/oauth2client.client.Storage-class.html
@@ -524,7 +524,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:42 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.UnknownClientSecretsFlowError-class.html b/docs/epy/oauth2client.client.UnknownClientSecretsFlowError-class.html
index 84f145c..2a2465c 100644
--- a/docs/epy/oauth2client.client.UnknownClientSecretsFlowError-class.html
+++ b/docs/epy/oauth2client.client.UnknownClientSecretsFlowError-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:43 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.client.VerifyJwtTokenError-class.html b/docs/epy/oauth2client.client.VerifyJwtTokenError-class.html
index 81c630c..cfa04b7 100644
--- a/docs/epy/oauth2client.client.VerifyJwtTokenError-class.html
+++ b/docs/epy/oauth2client.client.VerifyJwtTokenError-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:43 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.clientsecrets-module.html b/docs/epy/oauth2client.clientsecrets-module.html
index ec89c73..86babec 100644
--- a/docs/epy/oauth2client.clientsecrets-module.html
+++ b/docs/epy/oauth2client.clientsecrets-module.html
@@ -235,10 +235,10 @@
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
         <a href="oauth2client.clientsecrets-module.html#VALID_CLIENT" class="summary-name">VALID_CLIENT</a> = <code title="{TYPE_WEB: {'required': ['client_id', 'client_secret', 'redirect_uris'\
-, 'auth_uri', 'token_uri'], 'string': ['client_id', 'client_secret']},\
- TYPE_INSTALLED: {'required': ['client_id', 'client_secret', 'redirect\
-_uris', 'auth_uri', 'token_uri'], 'string': ['client_id', 'client_secr\
-et']}}">{TYPE_WEB: {'required': ['client_id', 'client_s<code class="variable-ellipsis">...</code></code>
+, 'auth_uri', 'token_uri',], 'string': ['client_id', 'client_secret',]\
+,}, TYPE_INSTALLED: {'required': ['client_id', 'client_secret', 'redir\
+ect_uris', 'auth_uri', 'token_uri',], 'string': ['client_id', 'client_\
+secret',],},}">{TYPE_WEB: {'required': ['client_id', 'client_s<code class="variable-ellipsis">...</code></code>
     </td>
   </tr>
 </table>
@@ -293,16 +293,16 @@
 
 Args:
   filename: string, Path to a client_secrets.json file on a filesystem.
-  cache: An optional cache service client that implements get() and set() 
+  cache: An optional cache service client that implements get() and set()
     methods. If not specified, the file is always being loaded from
     a filesystem.
 
 Raises:
-  InvalidClientSecretsError: In case of a validation error or some 
+  InvalidClientSecretsError: In case of a validation error or some
     I/O failure. Can happen only on cache miss.
 
 Returns:
-  (client_type, client_info) tuple, as _loadfile() normally would. 
+  (client_type, client_info) tuple, as _loadfile() normally would.
   JSON contents is validated only during first load. Cache hits are not
   validated.
 
@@ -343,10 +343,10 @@
     <dt>Value:</dt>
       <dd><table><tr><td><pre class="variable">
 {TYPE_WEB: {'required': ['client_id', 'client_secret', 'redirect_uris'<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-, 'auth_uri', 'token_uri'], 'string': ['client_id', 'client_secret']},<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
- TYPE_INSTALLED: {'required': ['client_id', 'client_secret', 'redirect<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-_uris', 'auth_uri', 'token_uri'], 'string': ['client_id', 'client_secr<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-et']}}
+, 'auth_uri', 'token_uri',], 'string': ['client_id', 'client_secret',]<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+,}, TYPE_INSTALLED: {'required': ['client_id', 'client_secret', 'redir<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+ect_uris', 'auth_uri', 'token_uri',], 'string': ['client_id', 'client_<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+secret',],},}
 </pre></td></tr></table>
 </dd>
   </dl>
@@ -376,7 +376,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.clientsecrets-pysrc.html b/docs/epy/oauth2client.clientsecrets-pysrc.html
index 954b0e1..6fb6d56 100644
--- a/docs/epy/oauth2client.clientsecrets-pysrc.html
+++ b/docs/epy/oauth2client.clientsecrets-pysrc.html
@@ -89,134 +89,137 @@
 <a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line">            <tt class="py-string">'client_secret'</tt><tt class="py-op">,</tt> </tt>
 <a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line">            <tt class="py-string">'redirect_uris'</tt><tt class="py-op">,</tt> </tt>
 <a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line">            <tt class="py-string">'auth_uri'</tt><tt class="py-op">,</tt> </tt>
-<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line">            <tt class="py-string">'token_uri'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line">        <tt class="py-string">'string'</tt><tt class="py-op">:</tt> <tt class="py-op">[</tt> </tt>
-<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line">            <tt class="py-string">'client_id'</tt><tt class="py-op">,</tt> </tt>
-<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line">            <tt class="py-string">'client_secret'</tt> </tt>
-<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line">            <tt class="py-op">]</tt> </tt>
-<a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line">        <tt class="py-op">}</tt><tt class="py-op">,</tt> </tt>
-<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line">    <tt id="link-5" class="py-name"><a title="oauth2client.clientsecrets.TYPE_INSTALLED" class="py-name" href="#" onclick="return doclink('link-5', 'TYPE_INSTALLED', 'link-2');">TYPE_INSTALLED</a></tt><tt class="py-op">:</tt> <tt class="py-op">{</tt> </tt>
-<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line">        <tt class="py-string">'required'</tt><tt class="py-op">:</tt> <tt class="py-op">[</tt> </tt>
-<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line">            <tt class="py-string">'client_id'</tt><tt class="py-op">,</tt> </tt>
-<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line">            <tt class="py-string">'client_secret'</tt><tt class="py-op">,</tt> </tt>
-<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line">            <tt class="py-string">'redirect_uris'</tt><tt class="py-op">,</tt> </tt>
-<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line">            <tt class="py-string">'auth_uri'</tt><tt class="py-op">,</tt> </tt>
-<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line">            <tt class="py-string">'token_uri'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line">        <tt class="py-string">'string'</tt><tt class="py-op">:</tt> <tt class="py-op">[</tt> </tt>
-<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line">            <tt class="py-string">'client_id'</tt><tt class="py-op">,</tt> </tt>
-<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line">            <tt class="py-string">'client_secret'</tt> </tt>
-<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line">            <tt class="py-op">]</tt> </tt>
-<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line">      <tt class="py-op">}</tt> </tt>
-<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line">    <tt class="py-op">}</tt> </tt>
-<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"> </tt>
-<a name="Error"></a><div id="Error-def"><a name="L57"></a><tt class="py-lineno"> 57</tt> <a class="py-toggle" href="#" id="Error-toggle" onclick="return toggle('Error');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.clientsecrets.Error-class.html">Error</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Error-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Error-expanded"><a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line">  <tt class="py-docstring">"""Base error for this module."""</tt> </tt>
-<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"> </tt>
-<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line"> </tt>
-<a name="InvalidClientSecretsError"></a><div id="InvalidClientSecretsError-def"><a name="L62"></a><tt class="py-lineno"> 62</tt> <a class="py-toggle" href="#" id="InvalidClientSecretsError-toggle" onclick="return toggle('InvalidClientSecretsError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.clientsecrets.InvalidClientSecretsError-class.html">InvalidClientSecretsError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="InvalidClientSecretsError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="InvalidClientSecretsError-expanded"><a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line">  <tt class="py-docstring">"""Format of ClientSecrets file is invalid."""</tt> </tt>
-<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line"> </tt>
-<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line"> </tt>
-<a name="_validate_clientsecrets"></a><div id="_validate_clientsecrets-def"><a name="L67"></a><tt class="py-lineno"> 67</tt> <a class="py-toggle" href="#" id="_validate_clientsecrets-toggle" onclick="return toggle('_validate_clientsecrets');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.clientsecrets-module.html#_validate_clientsecrets">_validate_clientsecrets</a><tt class="py-op">(</tt><tt class="py-param">obj</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_validate_clientsecrets-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_validate_clientsecrets-expanded"><a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">obj</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">or</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">obj</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
-<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-6" 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="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line">            <tt class="py-string">'token_uri'</tt><tt class="py-op">,</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line">        <tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line">        <tt class="py-string">'string'</tt><tt class="py-op">:</tt> <tt class="py-op">[</tt> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line">            <tt class="py-string">'client_id'</tt><tt class="py-op">,</tt> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line">            <tt class="py-string">'client_secret'</tt><tt class="py-op">,</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line">        <tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line">    <tt class="py-op">}</tt><tt class="py-op">,</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line">    <tt id="link-5" class="py-name"><a title="oauth2client.clientsecrets.TYPE_INSTALLED" class="py-name" href="#" onclick="return doclink('link-5', 'TYPE_INSTALLED', 'link-2');">TYPE_INSTALLED</a></tt><tt class="py-op">:</tt> <tt class="py-op">{</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line">        <tt class="py-string">'required'</tt><tt class="py-op">:</tt> <tt class="py-op">[</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line">            <tt class="py-string">'client_id'</tt><tt class="py-op">,</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line">            <tt class="py-string">'client_secret'</tt><tt class="py-op">,</tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line">            <tt class="py-string">'redirect_uris'</tt><tt class="py-op">,</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line">            <tt class="py-string">'auth_uri'</tt><tt class="py-op">,</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line">            <tt class="py-string">'token_uri'</tt><tt class="py-op">,</tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line">        <tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line">        <tt class="py-string">'string'</tt><tt class="py-op">:</tt> <tt class="py-op">[</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line">            <tt class="py-string">'client_id'</tt><tt class="py-op">,</tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line">            <tt class="py-string">'client_secret'</tt><tt class="py-op">,</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line">        <tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line">    <tt class="py-op">}</tt><tt class="py-op">,</tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"><tt class="py-op">}</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line"> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"> </tt>
+<a name="Error"></a><div id="Error-def"><a name="L60"></a><tt class="py-lineno"> 60</tt> <a class="py-toggle" href="#" id="Error-toggle" onclick="return toggle('Error');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.clientsecrets.Error-class.html">Error</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Error-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Error-expanded"><a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line">  <tt class="py-docstring">"""Base error for this module."""</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line"> </tt>
+<a name="InvalidClientSecretsError"></a><div id="InvalidClientSecretsError-def"><a name="L65"></a><tt class="py-lineno"> 65</tt> <a class="py-toggle" href="#" id="InvalidClientSecretsError-toggle" onclick="return toggle('InvalidClientSecretsError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="oauth2client.clientsecrets.InvalidClientSecretsError-class.html">InvalidClientSecretsError</a><tt class="py-op">(</tt><tt class="py-base-class">Error</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="InvalidClientSecretsError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="InvalidClientSecretsError-expanded"><a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line">  <tt class="py-docstring">"""Format of ClientSecrets file is invalid."""</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line">  <tt class="py-keyword">pass</tt> </tt>
+</div><a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line"> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line"> </tt>
+<a name="_validate_clientsecrets"></a><div id="_validate_clientsecrets-def"><a name="L70"></a><tt class="py-lineno"> 70</tt> <a class="py-toggle" href="#" id="_validate_clientsecrets-toggle" onclick="return toggle('_validate_clientsecrets');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.clientsecrets-module.html#_validate_clientsecrets">_validate_clientsecrets</a><tt class="py-op">(</tt><tt class="py-param">obj</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_validate_clientsecrets-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_validate_clientsecrets-expanded"><a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">obj</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">or</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">obj</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-6" 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-6', 'InvalidClientSecretsError', 'link-6');">InvalidClientSecretsError</a></tt><tt class="py-op">(</tt><tt class="py-string">'Invalid file format.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line">  <tt class="py-name">client_type</tt> <tt class="py-op">=</tt> <tt class="py-name">obj</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-<a name="L71"></a><tt class="py-lineno"> 71</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 id="link-7" class="py-name"><a title="oauth2client.clientsecrets.VALID_CLIENT" class="py-name" href="#" onclick="return doclink('link-7', 'VALID_CLIENT', 'link-3');">VALID_CLIENT</a></tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-8" class="py-name"><a title="oauth2client.appengine.InvalidClientSecretsError
+<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line">  <tt class="py-name">client_type</tt> <tt class="py-op">=</tt> <tt class="py-name">obj</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</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 id="link-7" class="py-name"><a title="oauth2client.clientsecrets.VALID_CLIENT" class="py-name" href="#" onclick="return doclink('link-7', 'VALID_CLIENT', 'link-3');">VALID_CLIENT</a></tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-8" class="py-name"><a title="oauth2client.appengine.InvalidClientSecretsError
 oauth2client.clientsecrets.InvalidClientSecretsError" class="py-name" href="#" onclick="return doclink('link-8', 'InvalidClientSecretsError', 'link-6');">InvalidClientSecretsError</a></tt><tt class="py-op">(</tt><tt class="py-string">'Unknown client type: %s.'</tt> <tt class="py-op">%</tt> <tt class="py-name">client_type</tt><tt class="py-op">)</tt> </tt>
-<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line">  <tt class="py-name">client_info</tt> <tt class="py-op">=</tt> <tt class="py-name">obj</tt><tt class="py-op">[</tt><tt class="py-name">client_type</tt><tt class="py-op">]</tt> </tt>
-<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">prop_name</tt> <tt class="py-keyword">in</tt> <tt id="link-9" class="py-name"><a title="oauth2client.clientsecrets.VALID_CLIENT" class="py-name" href="#" onclick="return doclink('link-9', 'VALID_CLIENT', 'link-3');">VALID_CLIENT</a></tt><tt class="py-op">[</tt><tt class="py-name">client_type</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'required'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">prop_name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">client_info</tt><tt class="py-op">:</tt> </tt>
-<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-10" class="py-name"><a title="oauth2client.appengine.InvalidClientSecretsError
+<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line">  <tt class="py-name">client_info</tt> <tt class="py-op">=</tt> <tt class="py-name">obj</tt><tt class="py-op">[</tt><tt class="py-name">client_type</tt><tt class="py-op">]</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">prop_name</tt> <tt class="py-keyword">in</tt> <tt id="link-9" class="py-name"><a title="oauth2client.clientsecrets.VALID_CLIENT" class="py-name" href="#" onclick="return doclink('link-9', 'VALID_CLIENT', 'link-3');">VALID_CLIENT</a></tt><tt class="py-op">[</tt><tt class="py-name">client_type</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'required'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">prop_name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">client_info</tt><tt class="py-op">:</tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-10" class="py-name"><a title="oauth2client.appengine.InvalidClientSecretsError
 oauth2client.clientsecrets.InvalidClientSecretsError" class="py-name" href="#" onclick="return doclink('link-10', 'InvalidClientSecretsError', 'link-6');">InvalidClientSecretsError</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line">        <tt class="py-string">'Missing property "%s" in a client type of "%s".'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">prop_name</tt><tt class="py-op">,</tt> </tt>
-<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line">                                                           <tt class="py-name">client_type</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">prop_name</tt> <tt class="py-keyword">in</tt> <tt id="link-11" class="py-name"><a title="oauth2client.clientsecrets.VALID_CLIENT" class="py-name" href="#" onclick="return doclink('link-11', 'VALID_CLIENT', 'link-3');">VALID_CLIENT</a></tt><tt class="py-op">[</tt><tt class="py-name">client_type</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'string'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">client_info</tt><tt class="py-op">[</tt><tt class="py-name">prop_name</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'[['</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-12" class="py-name"><a title="oauth2client.appengine.InvalidClientSecretsError
+<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line">        <tt class="py-string">'Missing property "%s" in a client type of "%s".'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">prop_name</tt><tt class="py-op">,</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line">                                                           <tt class="py-name">client_type</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">prop_name</tt> <tt class="py-keyword">in</tt> <tt id="link-11" class="py-name"><a title="oauth2client.clientsecrets.VALID_CLIENT" class="py-name" href="#" onclick="return doclink('link-11', 'VALID_CLIENT', 'link-3');">VALID_CLIENT</a></tt><tt class="py-op">[</tt><tt class="py-name">client_type</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'string'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">client_info</tt><tt class="py-op">[</tt><tt class="py-name">prop_name</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'[['</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-12" class="py-name"><a title="oauth2client.appengine.InvalidClientSecretsError
 oauth2client.clientsecrets.InvalidClientSecretsError" class="py-name" href="#" onclick="return doclink('link-12', 'InvalidClientSecretsError', 'link-6');">InvalidClientSecretsError</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line">        <tt class="py-string">'Property "%s" is not configured.'</tt> <tt class="py-op">%</tt> <tt class="py-name">prop_name</tt><tt class="py-op">)</tt> </tt>
-<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">client_type</tt><tt class="py-op">,</tt> <tt class="py-name">client_info</tt> </tt>
-</div><a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line"> </tt>
-<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line"> </tt>
-<a name="load"></a><div id="load-def"><a name="L86"></a><tt class="py-lineno"> 86</tt> <a class="py-toggle" href="#" id="load-toggle" onclick="return toggle('load');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.clientsecrets-module.html#load">load</a><tt class="py-op">(</tt><tt class="py-param">fp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="load-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="load-expanded"><a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line">  <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Function oauth2client.clientsecrets.load()=oauth2client.clientsecrets-module.html#load"><a title="oauth2client.clientsecrets.load" class="py-name" href="#" onclick="return doclink('link-13', 'load', 'link-13');">load</a></tt><tt class="py-op">(</tt><tt class="py-name">fp</tt><tt class="py-op">)</tt> </tt>
-<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-14" class="py-name" targets="Function oauth2client.clientsecrets._validate_clientsecrets()=oauth2client.clientsecrets-module.html#_validate_clientsecrets"><a title="oauth2client.clientsecrets._validate_clientsecrets" class="py-name" href="#" onclick="return doclink('link-14', '_validate_clientsecrets', 'link-14');">_validate_clientsecrets</a></tt><tt class="py-op">(</tt><tt class="py-name">obj</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line"> </tt>
-<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"> </tt>
-<a name="loads"></a><div id="loads-def"><a name="L91"></a><tt class="py-lineno"> 91</tt> <a class="py-toggle" href="#" id="loads-toggle" onclick="return toggle('loads');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.clientsecrets-module.html#loads">loads</a><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="loads-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="loads-expanded"><a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line">  <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name" targets="Function oauth2client.clientsecrets.loads()=oauth2client.clientsecrets-module.html#loads"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-15', 'loads', 'link-15');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
-<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-16" class="py-name"><a title="oauth2client.clientsecrets._validate_clientsecrets" class="py-name" href="#" onclick="return doclink('link-16', '_validate_clientsecrets', 'link-14');">_validate_clientsecrets</a></tt><tt class="py-op">(</tt><tt class="py-name">obj</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line"> </tt>
-<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line"> </tt>
-<a name="_loadfile"></a><div id="_loadfile-def"><a name="L96"></a><tt class="py-lineno"> 96</tt> <a class="py-toggle" href="#" id="_loadfile-toggle" onclick="return toggle('_loadfile');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.clientsecrets-module.html#_loadfile">_loadfile</a><tt class="py-op">(</tt><tt class="py-param">filename</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_loadfile-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_loadfile-expanded"><a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line">    <tt class="py-name">fp</tt> <tt class="py-op">=</tt> <tt id="link-17" class="py-name" targets="Module oauth2client.file=oauth2client.file-module.html"><a title="oauth2client.file" class="py-name" href="#" onclick="return doclink('link-17', 'file', 'link-17');">file</a></tt><tt class="py-op">(</tt><tt id="link-18" 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
+<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line">        <tt class="py-string">'Property "%s" is not configured.'</tt> <tt class="py-op">%</tt> <tt class="py-name">prop_name</tt><tt class="py-op">)</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">client_type</tt><tt class="py-op">,</tt> <tt class="py-name">client_info</tt> </tt>
+</div><a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line"> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line"> </tt>
+<a name="load"></a><div id="load-def"><a name="L89"></a><tt class="py-lineno"> 89</tt> <a class="py-toggle" href="#" id="load-toggle" onclick="return toggle('load');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.clientsecrets-module.html#load">load</a><tt class="py-op">(</tt><tt class="py-param">fp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="load-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="load-expanded"><a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line">  <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Function oauth2client.clientsecrets.load()=oauth2client.clientsecrets-module.html#load"><a title="oauth2client.clientsecrets.load" class="py-name" href="#" onclick="return doclink('link-13', 'load', 'link-13');">load</a></tt><tt class="py-op">(</tt><tt class="py-name">fp</tt><tt class="py-op">)</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-14" class="py-name" targets="Function oauth2client.clientsecrets._validate_clientsecrets()=oauth2client.clientsecrets-module.html#_validate_clientsecrets"><a title="oauth2client.clientsecrets._validate_clientsecrets" class="py-name" href="#" onclick="return doclink('link-14', '_validate_clientsecrets', 'link-14');">_validate_clientsecrets</a></tt><tt class="py-op">(</tt><tt class="py-name">obj</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line"> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line"> </tt>
+<a name="loads"></a><div id="loads-def"><a name="L94"></a><tt class="py-lineno"> 94</tt> <a class="py-toggle" href="#" id="loads-toggle" onclick="return toggle('loads');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.clientsecrets-module.html#loads">loads</a><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="loads-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="loads-expanded"><a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line">  <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name" targets="Function oauth2client.clientsecrets.loads()=oauth2client.clientsecrets-module.html#loads"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-15', 'loads', 'link-15');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-16" class="py-name"><a title="oauth2client.clientsecrets._validate_clientsecrets" class="py-name" href="#" onclick="return doclink('link-16', '_validate_clientsecrets', 'link-14');">_validate_clientsecrets</a></tt><tt class="py-op">(</tt><tt class="py-name">obj</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line"> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line"> </tt>
+<a name="_loadfile"></a><div id="_loadfile-def"><a name="L99"></a><tt class="py-lineno"> 99</tt> <a class="py-toggle" href="#" id="_loadfile-toggle" onclick="return toggle('_loadfile');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.clientsecrets-module.html#_loadfile">_loadfile</a><tt class="py-op">(</tt><tt class="py-param">filename</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_loadfile-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_loadfile-expanded"><a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line">    <tt class="py-name">fp</tt> <tt class="py-op">=</tt> <tt id="link-17" class="py-name" targets="Module oauth2client.file=oauth2client.file-module.html"><a title="oauth2client.file" class="py-name" href="#" onclick="return doclink('link-17', 'file', 'link-17');">file</a></tt><tt class="py-op">(</tt><tt id="link-18" 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-18', 'filename', 'link-18');">filename</a></tt><tt class="py-op">,</tt> <tt class="py-string">'r'</tt><tt class="py-op">)</tt> </tt>
-<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line">      <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name"><a title="oauth2client.clientsecrets.load" class="py-name" href="#" onclick="return doclink('link-19', 'load', 'link-13');">load</a></tt><tt class="py-op">(</tt><tt class="py-name">fp</tt><tt class="py-op">)</tt> </tt>
-<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line">    <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
-<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line">      <tt class="py-name">fp</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">IOError</tt><tt class="py-op">:</tt> </tt>
-<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-20" class="py-name"><a title="oauth2client.appengine.InvalidClientSecretsError
+<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line">      <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name"><a title="oauth2client.clientsecrets.load" class="py-name" href="#" onclick="return doclink('link-19', 'load', 'link-13');">load</a></tt><tt class="py-op">(</tt><tt class="py-name">fp</tt><tt class="py-op">)</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line">    <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line">      <tt class="py-name">fp</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">IOError</tt><tt class="py-op">:</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-20" class="py-name"><a title="oauth2client.appengine.InvalidClientSecretsError
 oauth2client.clientsecrets.InvalidClientSecretsError" class="py-name" href="#" onclick="return doclink('link-20', 'InvalidClientSecretsError', 'link-6');">InvalidClientSecretsError</a></tt><tt class="py-op">(</tt><tt class="py-string">'File not found: "%s"'</tt> <tt class="py-op">%</tt> <tt id="link-21" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
 oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-21', 'filename', 'link-18');">filename</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-22" class="py-name"><a title="oauth2client.clientsecrets._validate_clientsecrets" class="py-name" href="#" onclick="return doclink('link-22', '_validate_clientsecrets', 'link-14');">_validate_clientsecrets</a></tt><tt class="py-op">(</tt><tt class="py-name">obj</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line"> </tt>
-<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line"> </tt>
-<a name="loadfile"></a><div id="loadfile-def"><a name="L108"></a><tt class="py-lineno">108</tt> <a class="py-toggle" href="#" id="loadfile-toggle" onclick="return toggle('loadfile');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.clientsecrets-module.html#loadfile">loadfile</a><tt class="py-op">(</tt><tt class="py-param">filename</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="loadfile-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="loadfile-expanded"><a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line">  <tt class="py-docstring">"""Loading of client_secrets JSON file, optionally backed by a cache.</tt> </tt>
-<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line"><tt class="py-docstring">  Typical cache storage would be App Engine memcache service,</tt> </tt>
-<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line"><tt class="py-docstring">  but you can pass in any other cache client that implements</tt> </tt>
-<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line"><tt class="py-docstring">  these methods:</tt> </tt>
-<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line"><tt class="py-docstring">    - get(key, namespace=ns)</tt> </tt>
-<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line"><tt class="py-docstring">    - set(key, value, namespace=ns)</tt> </tt>
-<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line"><tt class="py-docstring">  Usage:</tt> </tt>
-<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line"><tt class="py-docstring">    # without caching</tt> </tt>
-<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line"><tt class="py-docstring">    client_type, client_info = loadfile('secrets.json')</tt> </tt>
-<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line"><tt class="py-docstring">    # using App Engine memcache service</tt> </tt>
-<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line"><tt class="py-docstring">    from google.appengine.api import memcache</tt> </tt>
-<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line"><tt class="py-docstring">    client_type, client_info = loadfile('secrets.json', cache=memcache)</tt> </tt>
-<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line"><tt class="py-docstring">    filename: string, Path to a client_secrets.json file on a filesystem.</tt> </tt>
-<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line"><tt class="py-docstring">    cache: An optional cache service client that implements get() and set() </tt> </tt>
-<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line"><tt class="py-docstring">      methods. If not specified, the file is always being loaded from</tt> </tt>
-<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line"><tt class="py-docstring">      a filesystem.</tt> </tt>
-<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"><tt class="py-docstring">  Raises:</tt> </tt>
-<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line"><tt class="py-docstring">    InvalidClientSecretsError: In case of a validation error or some </tt> </tt>
-<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line"><tt class="py-docstring">      I/O failure. Can happen only on cache miss.</tt> </tt>
-<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line"><tt class="py-docstring">    (client_type, client_info) tuple, as _loadfile() normally would. </tt> </tt>
-<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"><tt class="py-docstring">    JSON contents is validated only during first load. Cache hits are not</tt> </tt>
-<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line"><tt class="py-docstring">    validated.</tt> </tt>
-<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line">  <tt class="py-name">_SECRET_NAMESPACE</tt> <tt class="py-op">=</tt> <tt class="py-string">'oauth2client:secrets#ns'</tt> </tt>
-<a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line"> </tt>
-<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">cache</tt><tt class="py-op">:</tt> </tt>
-<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-23" 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-23', '_loadfile', 'link-23');">_loadfile</a></tt><tt class="py-op">(</tt><tt id="link-24" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
-oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-24', 'filename', 'link-18');">filename</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-22" class="py-name"><a title="oauth2client.clientsecrets._validate_clientsecrets" class="py-name" href="#" onclick="return doclink('link-22', '_validate_clientsecrets', 'link-14');">_validate_clientsecrets</a></tt><tt class="py-op">(</tt><tt class="py-name">obj</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line"> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line"> </tt>
+<a name="loadfile"></a><div id="loadfile-def"><a name="L111"></a><tt class="py-lineno">111</tt> <a class="py-toggle" href="#" id="loadfile-toggle" onclick="return toggle('loadfile');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.clientsecrets-module.html#loadfile">loadfile</a><tt class="py-op">(</tt><tt class="py-param">filename</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="loadfile-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="loadfile-expanded"><a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line">  <tt class="py-docstring">"""Loading of client_secrets JSON file, optionally backed by a cache.</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line"><tt class="py-docstring">  Typical cache storage would be App Engine memcache service,</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line"><tt class="py-docstring">  but you can pass in any other cache client that implements</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line"><tt class="py-docstring">  these methods:</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line"><tt class="py-docstring">    - get(key, namespace=ns)</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line"><tt class="py-docstring">    - set(key, value, namespace=ns)</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line"><tt class="py-docstring">  Usage:</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line"><tt class="py-docstring">    # without caching</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line"><tt class="py-docstring">    client_type, client_info = loadfile('secrets.json')</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line"><tt class="py-docstring">    # using App Engine memcache service</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line"><tt class="py-docstring">    from google.appengine.api import memcache</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line"><tt class="py-docstring">    client_type, client_info = loadfile('secrets.json', cache=memcache)</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line"><tt class="py-docstring">    filename: string, Path to a client_secrets.json file on a filesystem.</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line"><tt class="py-docstring">    cache: An optional cache service client that implements get() and set()</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"><tt class="py-docstring">      methods. If not specified, the file is always being loaded from</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line"><tt class="py-docstring">      a filesystem.</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line"><tt class="py-docstring">  Raises:</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line"><tt class="py-docstring">    InvalidClientSecretsError: In case of a validation error or some</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line"><tt class="py-docstring">      I/O failure. Can happen only on cache miss.</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line"><tt class="py-docstring">    (client_type, client_info) tuple, as _loadfile() normally would.</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line"><tt class="py-docstring">    JSON contents is validated only during first load. Cache hits are not</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line"><tt class="py-docstring">    validated.</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line">  <tt class="py-name">_SECRET_NAMESPACE</tt> <tt class="py-op">=</tt> <tt class="py-string">'oauth2client:secrets#ns'</tt> </tt>
 <a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line"> </tt>
-<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line">  <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt class="py-name">cache</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name" targets="Method apiclient.schema.Schemas.get()=apiclient.schema.Schemas-class.html#get,Method oauth2client.client.MemoryCache.get()=oauth2client.client.MemoryCache-class.html#get,Method oauth2client.client.Storage.get()=oauth2client.client.Storage-class.html#get"><a title="apiclient.schema.Schemas.get
+<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">cache</tt><tt class="py-op">:</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-23" 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-23', '_loadfile', 'link-23');">_loadfile</a></tt><tt class="py-op">(</tt><tt id="link-24" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
+oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-24', 'filename', 'link-18');">filename</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line"> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line">  <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt class="py-name">cache</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name" targets="Method apiclient.schema.Schemas.get()=apiclient.schema.Schemas-class.html#get,Method oauth2client.client.MemoryCache.get()=oauth2client.client.MemoryCache-class.html#get,Method oauth2client.client.Storage.get()=oauth2client.client.Storage-class.html#get"><a title="apiclient.schema.Schemas.get
 oauth2client.client.MemoryCache.get
 oauth2client.client.Storage.get" class="py-name" href="#" onclick="return doclink('link-25', 'get', 'link-25');">get</a></tt><tt class="py-op">(</tt><tt id="link-26" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
 oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-26', 'filename', 'link-18');">filename</a></tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt class="py-name">_SECRET_NAMESPACE</tt><tt class="py-op">)</tt> </tt>
-<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">obj</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L146"></a><tt class="py-lineno">146</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-27" class="py-name"><a title="oauth2client.clientsecrets._loadfile" class="py-name" href="#" onclick="return doclink('link-27', '_loadfile', 'link-23');">_loadfile</a></tt><tt class="py-op">(</tt><tt id="link-28" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
+<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">obj</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</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-27" class="py-name"><a title="oauth2client.clientsecrets._loadfile" class="py-name" href="#" onclick="return doclink('link-27', '_loadfile', 'link-23');">_loadfile</a></tt><tt class="py-op">(</tt><tt id="link-28" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
 oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-28', 'filename', 'link-18');">filename</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line">    <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> <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>
-<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line">    <tt class="py-name">cache</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method oauth2client.client.MemoryCache.set()=oauth2client.client.MemoryCache-class.html#set"><a title="oauth2client.client.MemoryCache.set" class="py-name" href="#" onclick="return doclink('link-29', 'set', 'link-29');">set</a></tt><tt class="py-op">(</tt><tt id="link-30" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
+<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line">    <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><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>
+<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line">    <tt class="py-name">cache</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method oauth2client.client.MemoryCache.set()=oauth2client.client.MemoryCache-class.html#set"><a title="oauth2client.client.MemoryCache.set" class="py-name" href="#" onclick="return doclink('link-29', 'set', 'link-29');">set</a></tt><tt class="py-op">(</tt><tt id="link-30" class="py-name"><a title="oauth2client.locked_file.LockedFile.filename
 oauth2client.locked_file._Opener.filename" class="py-name" href="#" onclick="return doclink('link-30', 'filename', 'link-18');">filename</a></tt><tt class="py-op">,</tt> <tt class="py-name">obj</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt class="py-name">_SECRET_NAMESPACE</tt><tt class="py-op">)</tt> </tt>
-<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line"> </tt>
-<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">obj</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">next</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line"> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">obj</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">next</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -246,7 +249,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:49 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.clientsecrets.Error-class.html b/docs/epy/oauth2client.clientsecrets.Error-class.html
index 7784ec0..b07f34d 100644
--- a/docs/epy/oauth2client.clientsecrets.Error-class.html
+++ b/docs/epy/oauth2client.clientsecrets.Error-class.html
@@ -166,7 +166,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:43 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.clientsecrets.InvalidClientSecretsError-class.html b/docs/epy/oauth2client.clientsecrets.InvalidClientSecretsError-class.html
index 3b4ce36..2e49eba 100644
--- a/docs/epy/oauth2client.clientsecrets.InvalidClientSecretsError-class.html
+++ b/docs/epy/oauth2client.clientsecrets.InvalidClientSecretsError-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:43 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.crypt-module.html b/docs/epy/oauth2client.crypt-module.html
index a01fb1c..c2bdde2 100644
--- a/docs/epy/oauth2client.crypt-module.html
+++ b/docs/epy/oauth2client.crypt-module.html
@@ -381,7 +381,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.crypt-pysrc.html b/docs/epy/oauth2client.crypt-pysrc.html
index ded2b19..fdbdc5a 100644
--- a/docs/epy/oauth2client.crypt-pysrc.html
+++ b/docs/epy/oauth2client.crypt-pysrc.html
@@ -484,7 +484,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:48 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.crypt.AppIdentityError-class.html b/docs/epy/oauth2client.crypt.AppIdentityError-class.html
index f8439f5..99896a0 100644
--- a/docs/epy/oauth2client.crypt.AppIdentityError-class.html
+++ b/docs/epy/oauth2client.crypt.AppIdentityError-class.html
@@ -161,7 +161,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:43 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.django_orm-module.html b/docs/epy/oauth2client.django_orm-module.html
index 6a117b0..f68584d 100644
--- a/docs/epy/oauth2client.django_orm-module.html
+++ b/docs/epy/oauth2client.django_orm-module.html
@@ -129,7 +129,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.django_orm-pysrc.html b/docs/epy/oauth2client.django_orm-pysrc.html
index c466504..dc2136a 100644
--- a/docs/epy/oauth2client.django_orm-pysrc.html
+++ b/docs/epy/oauth2client.django_orm-pysrc.html
@@ -93,7 +93,8 @@
 <a name="CredentialsField.__init__"></a><div id="CredentialsField.__init__-def"><a name="L34"></a><tt class="py-lineno"> 34</tt> <a class="py-toggle" href="#" id="CredentialsField.__init__-toggle" onclick="return toggle('CredentialsField.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.django_orm.CredentialsField-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
 </div><div id="CredentialsField.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="CredentialsField.__init__-expanded"><a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'null'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
 <a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line">      <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-string">'null'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-5" class="py-name" targets="Class oauth2client.django_orm.CredentialsField=oauth2client.django_orm.CredentialsField-class.html"><a title="oauth2client.django_orm.CredentialsField" class="py-name" href="#" onclick="return doclink('link-5', 'CredentialsField', 'link-5');">CredentialsField</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
+<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-5" class="py-name" targets="Class oauth2client.django_orm.CredentialsField=oauth2client.django_orm.CredentialsField-class.html"><a title="oauth2client.django_orm.CredentialsField" class="py-name" href="#" onclick="return doclink('link-5', 'CredentialsField', 'link-5');">CredentialsField</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.discovery.ResourceMethodParameters.__init__()=apiclient.discovery.ResourceMethodParameters-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
 apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
@@ -165,6 +166,7 @@
 </div><div id="FlowField.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="FlowField.__init__-expanded"><a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'null'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
 <a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line">      <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-string">'null'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
 <a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-12" class="py-name" targets="Class oauth2client.django_orm.FlowField=oauth2client.django_orm.FlowField-class.html"><a title="oauth2client.django_orm.FlowField" class="py-name" href="#" onclick="return doclink('link-12', 'FlowField', 'link-12');">FlowField</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
 apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
@@ -314,7 +316,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:46 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.django_orm.CredentialsField-class.html b/docs/epy/oauth2client.django_orm.CredentialsField-class.html
index 1829330..784214c 100644
--- a/docs/epy/oauth2client.django_orm.CredentialsField-class.html
+++ b/docs/epy/oauth2client.django_orm.CredentialsField-class.html
@@ -199,7 +199,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:43 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.django_orm.FlowField-class.html b/docs/epy/oauth2client.django_orm.FlowField-class.html
index 04ebc5f..7b8eb30 100644
--- a/docs/epy/oauth2client.django_orm.FlowField-class.html
+++ b/docs/epy/oauth2client.django_orm.FlowField-class.html
@@ -199,7 +199,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:43 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.django_orm.Storage-class.html b/docs/epy/oauth2client.django_orm.Storage-class.html
index 8bc867f..ab63b8b 100644
--- a/docs/epy/oauth2client.django_orm.Storage-class.html
+++ b/docs/epy/oauth2client.django_orm.Storage-class.html
@@ -374,7 +374,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:44 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.file-module.html b/docs/epy/oauth2client.file-module.html
index f92d283..b183ae9 100644
--- a/docs/epy/oauth2client.file-module.html
+++ b/docs/epy/oauth2client.file-module.html
@@ -122,7 +122,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.file-pysrc.html b/docs/epy/oauth2client.file-pysrc.html
index 9800877..5054fd4 100644
--- a/docs/epy/oauth2client.file-pysrc.html
+++ b/docs/epy/oauth2client.file-pysrc.html
@@ -226,7 +226,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:49 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.file.CredentialsFileSymbolicLinkError-class.html b/docs/epy/oauth2client.file.CredentialsFileSymbolicLinkError-class.html
index 1894525..7c90c90 100644
--- a/docs/epy/oauth2client.file.CredentialsFileSymbolicLinkError-class.html
+++ b/docs/epy/oauth2client.file.CredentialsFileSymbolicLinkError-class.html
@@ -166,7 +166,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:44 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.file.Storage-class.html b/docs/epy/oauth2client.file.Storage-class.html
index b7d35ad..4f08b5c 100644
--- a/docs/epy/oauth2client.file.Storage-class.html
+++ b/docs/epy/oauth2client.file.Storage-class.html
@@ -512,7 +512,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:44 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.gce-module.html b/docs/epy/oauth2client.gce-module.html
index 33c7ea2..3fec9cb 100644
--- a/docs/epy/oauth2client.gce-module.html
+++ b/docs/epy/oauth2client.gce-module.html
@@ -184,7 +184,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.gce-pysrc.html b/docs/epy/oauth2client.gce-pysrc.html
index f729a3f..6063bf3 100644
--- a/docs/epy/oauth2client.gce-pysrc.html
+++ b/docs/epy/oauth2client.gce-pysrc.html
@@ -120,8 +120,10 @@
 <a name="L58"></a><tt class="py-lineno">58</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
 <a name="L59"></a><tt class="py-lineno">59</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt> <tt class="py-op">=</tt> <tt id="link-13" class="py-name"><a title="oauth2client.util" class="py-name" href="#" onclick="return doclink('link-13', 'util', 'link-1');">util</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Function oauth2client.util.scopes_to_string()=oauth2client.util-module.html#scopes_to_string"><a title="oauth2client.util.scopes_to_string" class="py-name" href="#" onclick="return doclink('link-14', 'scopes_to_string', 'link-14');">scopes_to_string</a></tt><tt class="py-op">(</tt><tt class="py-name">scope</tt><tt class="py-op">)</tt> </tt>
 <a name="L60"></a><tt class="py-lineno">60</tt>  <tt class="py-line"> </tt>
-<a name="L61"></a><tt class="py-lineno">61</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-15" class="py-name" targets="Class oauth2client.appengine.AppAssertionCredentials=oauth2client.appengine.AppAssertionCredentials-class.html,Class oauth2client.gce.AppAssertionCredentials=oauth2client.gce.AppAssertionCredentials-class.html"><a title="oauth2client.appengine.AppAssertionCredentials
-oauth2client.gce.AppAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-15', 'AppAssertionCredentials', 'link-15');">AppAssertionCredentials</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-16" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
+<a name="L61"></a><tt class="py-lineno">61</tt>  <tt class="py-line">    <tt class="py-comment"># Assertion type is no longer used, but still in the parent class signature.</tt> </tt>
+<a name="L62"></a><tt class="py-lineno">62</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-15" class="py-name" targets="Class oauth2client.appengine.AppAssertionCredentials=oauth2client.appengine.AppAssertionCredentials-class.html,Class oauth2client.gce.AppAssertionCredentials=oauth2client.gce.AppAssertionCredentials-class.html"><a title="oauth2client.appengine.AppAssertionCredentials
+oauth2client.gce.AppAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-15', 'AppAssertionCredentials', 'link-15');">AppAssertionCredentials</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-16" class="py-name" targets="Method apiclient.discovery.Resource.__init__()=apiclient.discovery.Resource-class.html#__init__,Method apiclient.discovery.ResourceMethodParameters.__init__()=apiclient.discovery.ResourceMethodParameters-class.html#__init__,Method apiclient.errors.BatchError.__init__()=apiclient.errors.BatchError-class.html#__init__,Method apiclient.errors.HttpError.__init__()=apiclient.errors.HttpError-class.html#__init__,Method apiclient.errors.UnexpectedBodyError.__init__()=apiclient.errors.UnexpectedBodyError-class.html#__init__,Method apiclient.errors.UnexpectedMethodError.__init__()=apiclient.errors.UnexpectedMethodError-class.html#__init__,Method apiclient.http.BatchHttpRequest.__init__()=apiclient.http.BatchHttpRequest-class.html#__init__,Method apiclient.http.HttpMock.__init__()=apiclient.http.HttpMock-class.html#__init__,Method apiclient.http.HttpMockSequence.__init__()=apiclient.http.HttpMockSequence-class.html#__init__,Method apiclient.http.HttpRequest.__init__()=apiclient.http.HttpRequest-class.html#__init__,Method apiclient.http.HttpRequestMock.__init__()=apiclient.http.HttpRequestMock-class.html#__init__,Method apiclient.http.MediaDownloadProgress.__init__()=apiclient.http.MediaDownloadProgress-class.html#__init__,Method apiclient.http.MediaFileUpload.__init__()=apiclient.http.MediaFileUpload-class.html#__init__,Method apiclient.http.MediaInMemoryUpload.__init__()=apiclient.http.MediaInMemoryUpload-class.html#__init__,Method apiclient.http.MediaIoBaseDownload.__init__()=apiclient.http.MediaIoBaseDownload-class.html#__init__,Method apiclient.http.MediaIoBaseUpload.__init__()=apiclient.http.MediaIoBaseUpload-class.html#__init__,Method apiclient.http.MediaUploadProgress.__init__()=apiclient.http.MediaUploadProgress-class.html#__init__,Method apiclient.http.RequestMockBuilder.__init__()=apiclient.http.RequestMockBuilder-class.html#__init__,Method apiclient.http._StreamSlice.__init__()=apiclient.http._StreamSlice-class.html#__init__,Method apiclient.model.JsonModel.__init__()=apiclient.model.JsonModel-class.html#__init__,Method apiclient.model.ProtocolBufferModel.__init__()=apiclient.model.ProtocolBufferModel-class.html#__init__,Method apiclient.push.Channel.__init__()=apiclient.push.Channel-class.html#__init__,Method apiclient.push.Headers.__init__()=apiclient.push.Headers-class.html#__init__,Method apiclient.push.Subscription.__init__()=apiclient.push.Subscription-class.html#__init__,Method apiclient.push.WebhookChannel.__init__()=apiclient.push.WebhookChannel-class.html#__init__,Method apiclient.schema.Schemas.__init__()=apiclient.schema.Schemas-class.html#__init__,Method apiclient.schema._SchemaToStruct.__init__()=apiclient.schema._SchemaToStruct-class.html#__init__,Method oauth2client.appengine.AppAssertionCredentials.__init__()=oauth2client.appengine.AppAssertionCredentials-class.html#__init__,Method oauth2client.appengine.OAuth2Decorator.__init__()=oauth2client.appengine.OAuth2Decorator-class.html#__init__,Method oauth2client.appengine.OAuth2DecoratorFromClientSecrets.__init__()=oauth2client.appengine.OAuth2DecoratorFromClientSecrets-class.html#__init__,Method oauth2client.appengine.StorageByKeyName.__init__()=oauth2client.appengine.StorageByKeyName-class.html#__init__,Method oauth2client.client.AccessTokenCredentials.__init__()=oauth2client.client.AccessTokenCredentials-class.html#__init__,Method oauth2client.client.AssertionCredentials.__init__()=oauth2client.client.AssertionCredentials-class.html#__init__,Method oauth2client.client.MemoryCache.__init__()=oauth2client.client.MemoryCache-class.html#__init__,Method oauth2client.client.OAuth2Credentials.__init__()=oauth2client.client.OAuth2Credentials-class.html#__init__,Method oauth2client.client.OAuth2WebServerFlow.__init__()=oauth2client.client.OAuth2WebServerFlow-class.html#__init__,Method oauth2client.client.SignedJwtAssertionCredentials.__init__()=oauth2client.client.SignedJwtAssertionCredentials-class.html#__init__,Method oauth2client.django_orm.CredentialsField.__init__()=oauth2client.django_orm.CredentialsField-class.html#__init__,Method oauth2client.django_orm.FlowField.__init__()=oauth2client.django_orm.FlowField-class.html#__init__,Method oauth2client.django_orm.Storage.__init__()=oauth2client.django_orm.Storage-class.html#__init__,Method oauth2client.file.Storage.__init__()=oauth2client.file.Storage-class.html#__init__,Method oauth2client.gce.AppAssertionCredentials.__init__()=oauth2client.gce.AppAssertionCredentials-class.html#__init__,Method oauth2client.keyring_storage.Storage.__init__()=oauth2client.keyring_storage.Storage-class.html#__init__,Method oauth2client.locked_file.LockedFile.__init__()=oauth2client.locked_file.LockedFile-class.html#__init__,Method oauth2client.locked_file._Opener.__init__()=oauth2client.locked_file._Opener-class.html#__init__,Method oauth2client.multistore_file._MultiStore._Storage.__init__()=oauth2client.multistore_file._MultiStore._Storage-class.html#__init__,Method oauth2client.multistore_file._MultiStore.__init__()=oauth2client.multistore_file._MultiStore-class.html#__init__"><a title="apiclient.discovery.Resource.__init__
+apiclient.discovery.ResourceMethodParameters.__init__
 apiclient.errors.BatchError.__init__
 apiclient.errors.HttpError.__init__
 apiclient.errors.UnexpectedBodyError.__init__
@@ -166,41 +168,39 @@
 oauth2client.locked_file.LockedFile.__init__
 oauth2client.locked_file._Opener.__init__
 oauth2client.multistore_file._MultiStore._Storage.__init__
-oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-16', '__init__', 'link-16');">__init__</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L62"></a><tt class="py-lineno">62</tt>  <tt class="py-line">        <tt class="py-string">'ignored'</tt> <tt class="py-comment"># assertion_type is ignore in this subclass.</tt> </tt>
-<a name="L63"></a><tt class="py-lineno">63</tt>  <tt class="py-line">        <tt class="py-op">)</tt> </tt>
-</div><a name="L64"></a><tt class="py-lineno">64</tt>  <tt class="py-line"> </tt>
-<a name="L65"></a><tt class="py-lineno">65</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
-<a name="AppAssertionCredentials.from_json"></a><div id="AppAssertionCredentials.from_json-def"><a name="L66"></a><tt class="py-lineno">66</tt> <a class="py-toggle" href="#" id="AppAssertionCredentials.from_json-toggle" onclick="return toggle('AppAssertionCredentials.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.gce.AppAssertionCredentials-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">json</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AppAssertionCredentials.from_json-collapsed" style="display:none;" pad="++" indent="++++++"></div><div id="AppAssertionCredentials.from_json-expanded"><a name="L67"></a><tt class="py-lineno">67</tt>  <tt class="py-line">    <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Function oauth2client.clientsecrets.loads()=oauth2client.clientsecrets-module.html#loads"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-17', 'loads', 'link-17');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">json</tt><tt class="py-op">)</tt> </tt>
-<a name="L68"></a><tt class="py-lineno">68</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-18" class="py-name"><a title="oauth2client.appengine.AppAssertionCredentials
+oauth2client.multistore_file._MultiStore.__init__" class="py-name" href="#" onclick="return doclink('link-16', '__init__', 'link-16');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L63"></a><tt class="py-lineno">63</tt>  <tt class="py-line"> </tt>
+<a name="L64"></a><tt class="py-lineno">64</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="AppAssertionCredentials.from_json"></a><div id="AppAssertionCredentials.from_json-def"><a name="L65"></a><tt class="py-lineno">65</tt> <a class="py-toggle" href="#" id="AppAssertionCredentials.from_json-toggle" onclick="return toggle('AppAssertionCredentials.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.gce.AppAssertionCredentials-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">json</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AppAssertionCredentials.from_json-collapsed" style="display:none;" pad="++" indent="++++++"></div><div id="AppAssertionCredentials.from_json-expanded"><a name="L66"></a><tt class="py-lineno">66</tt>  <tt class="py-line">    <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Function oauth2client.clientsecrets.loads()=oauth2client.clientsecrets-module.html#loads"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-17', 'loads', 'link-17');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">json</tt><tt class="py-op">)</tt> </tt>
+<a name="L67"></a><tt class="py-lineno">67</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-18" class="py-name"><a title="oauth2client.appengine.AppAssertionCredentials
 oauth2client.gce.AppAssertionCredentials" class="py-name" href="#" onclick="return doclink('link-18', 'AppAssertionCredentials', 'link-15');">AppAssertionCredentials</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'scope'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L69"></a><tt class="py-lineno">69</tt>  <tt class="py-line"> </tt>
-<a name="AppAssertionCredentials._refresh"></a><div id="AppAssertionCredentials._refresh-def"><a name="L70"></a><tt class="py-lineno">70</tt> <a class="py-toggle" href="#" id="AppAssertionCredentials._refresh-toggle" onclick="return toggle('AppAssertionCredentials._refresh');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.gce.AppAssertionCredentials-class.html#_refresh">_refresh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AppAssertionCredentials._refresh-collapsed" style="display:none;" pad="++" indent="++++++"></div><div id="AppAssertionCredentials._refresh-expanded"><a name="L71"></a><tt class="py-lineno">71</tt>  <tt class="py-line">    <tt class="py-docstring">"""Refreshes the access_token.</tt> </tt>
-<a name="L72"></a><tt class="py-lineno">72</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L73"></a><tt class="py-lineno">73</tt>  <tt class="py-line"><tt class="py-docstring">    Skip all the storage hoops and just refresh using the API.</tt> </tt>
-<a name="L74"></a><tt class="py-lineno">74</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L75"></a><tt class="py-lineno">75</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L76"></a><tt class="py-lineno">76</tt>  <tt class="py-line"><tt class="py-docstring">      http_request: callable, a callable that matches the method signature of</tt> </tt>
-<a name="L77"></a><tt class="py-lineno">77</tt>  <tt class="py-line"><tt class="py-docstring">        httplib2.Http.request, used to make the refresh request.</tt> </tt>
-<a name="L78"></a><tt class="py-lineno">78</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L79"></a><tt class="py-lineno">79</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L80"></a><tt class="py-lineno">80</tt>  <tt class="py-line"><tt class="py-docstring">      AccessTokenRefreshError: When the refresh fails.</tt> </tt>
-<a name="L81"></a><tt class="py-lineno">81</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L82"></a><tt class="py-lineno">82</tt>  <tt class="py-line">    <tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt id="link-19" class="py-name"><a title="oauth2client.gce.META" class="py-name" href="#" onclick="return doclink('link-19', 'META', 'link-11');">META</a></tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-string">'scope'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
-<a name="L83"></a><tt class="py-lineno">83</tt>  <tt class="py-line">    <tt id="link-20" class="py-name" targets="Method apiclient.model.BaseModel.response()=apiclient.model.BaseModel-class.html#response,Method apiclient.model.Model.response()=apiclient.model.Model-class.html#response"><a title="apiclient.model.BaseModel.response
+</div><a name="L68"></a><tt class="py-lineno">68</tt>  <tt class="py-line"> </tt>
+<a name="AppAssertionCredentials._refresh"></a><div id="AppAssertionCredentials._refresh-def"><a name="L69"></a><tt class="py-lineno">69</tt> <a class="py-toggle" href="#" id="AppAssertionCredentials._refresh-toggle" onclick="return toggle('AppAssertionCredentials._refresh');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.gce.AppAssertionCredentials-class.html#_refresh">_refresh</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http_request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="AppAssertionCredentials._refresh-collapsed" style="display:none;" pad="++" indent="++++++"></div><div id="AppAssertionCredentials._refresh-expanded"><a name="L70"></a><tt class="py-lineno">70</tt>  <tt class="py-line">    <tt class="py-docstring">"""Refreshes the access_token.</tt> </tt>
+<a name="L71"></a><tt class="py-lineno">71</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L72"></a><tt class="py-lineno">72</tt>  <tt class="py-line"><tt class="py-docstring">    Skip all the storage hoops and just refresh using the API.</tt> </tt>
+<a name="L73"></a><tt class="py-lineno">73</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L74"></a><tt class="py-lineno">74</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L75"></a><tt class="py-lineno">75</tt>  <tt class="py-line"><tt class="py-docstring">      http_request: callable, a callable that matches the method signature of</tt> </tt>
+<a name="L76"></a><tt class="py-lineno">76</tt>  <tt class="py-line"><tt class="py-docstring">        httplib2.Http.request, used to make the refresh request.</tt> </tt>
+<a name="L77"></a><tt class="py-lineno">77</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L78"></a><tt class="py-lineno">78</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L79"></a><tt class="py-lineno">79</tt>  <tt class="py-line"><tt class="py-docstring">      AccessTokenRefreshError: When the refresh fails.</tt> </tt>
+<a name="L80"></a><tt class="py-lineno">80</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L81"></a><tt class="py-lineno">81</tt>  <tt class="py-line">    <tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt id="link-19" class="py-name"><a title="oauth2client.gce.META" class="py-name" href="#" onclick="return doclink('link-19', 'META', 'link-11');">META</a></tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-string">'scope'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">scope</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L82"></a><tt class="py-lineno">82</tt>  <tt class="py-line">    <tt id="link-20" class="py-name" targets="Method apiclient.model.BaseModel.response()=apiclient.model.BaseModel-class.html#response,Method apiclient.model.Model.response()=apiclient.model.Model-class.html#response"><a title="apiclient.model.BaseModel.response
 apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-20', 'response', 'link-20');">response</a></tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">http_request</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
-<a name="L84"></a><tt class="py-lineno">84</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-21" class="py-name"><a title="apiclient.model.BaseModel.response
+<a name="L83"></a><tt class="py-lineno">83</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-21" class="py-name"><a title="apiclient.model.BaseModel.response
 apiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-21', 'response', 'link-20');">response</a></tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">200</tt><tt class="py-op">:</tt> </tt>
-<a name="L85"></a><tt class="py-lineno">85</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L86"></a><tt class="py-lineno">86</tt>  <tt class="py-line">        <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-22', 'loads', 'link-17');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L87"></a><tt class="py-lineno">87</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt> <tt class="py-name">StandardError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
-<a name="L88"></a><tt class="py-lineno">88</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt id="link-23" class="py-name"><a title="oauth2client.client.AccessTokenRefreshError" class="py-name" href="#" onclick="return doclink('link-23', 'AccessTokenRefreshError', 'link-6');">AccessTokenRefreshError</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L89"></a><tt class="py-lineno">89</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'accessToken'</tt><tt class="py-op">]</tt> </tt>
-<a name="L90"></a><tt class="py-lineno">90</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L91"></a><tt class="py-lineno">91</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-24" class="py-name"><a title="oauth2client.client.AccessTokenRefreshError" class="py-name" href="#" onclick="return doclink('link-24', 'AccessTokenRefreshError', 'link-6');">AccessTokenRefreshError</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L92"></a><tt class="py-lineno">92</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<a name="L84"></a><tt class="py-lineno">84</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L85"></a><tt class="py-lineno">85</tt>  <tt class="py-line">        <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">simplejson</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="oauth2client.clientsecrets.loads" class="py-name" href="#" onclick="return doclink('link-22', 'loads', 'link-17');">loads</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L86"></a><tt class="py-lineno">86</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt> <tt class="py-name">StandardError</tt><tt class="py-op">,</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L87"></a><tt class="py-lineno">87</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt id="link-23" class="py-name"><a title="oauth2client.client.AccessTokenRefreshError" class="py-name" href="#" onclick="return doclink('link-23', 'AccessTokenRefreshError', 'link-6');">AccessTokenRefreshError</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L88"></a><tt class="py-lineno">88</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">access_token</tt> <tt class="py-op">=</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'accessToken'</tt><tt class="py-op">]</tt> </tt>
+<a name="L89"></a><tt class="py-lineno">89</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L90"></a><tt class="py-lineno">90</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-24" class="py-name"><a title="oauth2client.client.AccessTokenRefreshError" class="py-name" href="#" onclick="return doclink('link-24', 'AccessTokenRefreshError', 'link-6');">AccessTokenRefreshError</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L91"></a><tt class="py-lineno">91</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -230,7 +230,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:48 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.gce.AppAssertionCredentials-class.html b/docs/epy/oauth2client.gce.AppAssertionCredentials-class.html
index 79ce7d6..94e348a 100644
--- a/docs/epy/oauth2client.gce.AppAssertionCredentials-class.html
+++ b/docs/epy/oauth2client.gce.AppAssertionCredentials-class.html
@@ -137,7 +137,8 @@
     <td colspan="2" class="summary">
     <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="oauth2client.client.AssertionCredentials-class.html">client.AssertionCredentials</a></code></b> (private):
       <code><a href="oauth2client.client.AssertionCredentials-class.html#_generate_assertion" onclick="show_private();">_generate_assertion</a></code>,
-      <code><a href="oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body" onclick="show_private();">_generate_refresh_request_body</a></code>
+      <code><a href="oauth2client.client.AssertionCredentials-class.html#_generate_refresh_request_body" onclick="show_private();">_generate_refresh_request_body</a></code>,
+      <code><a href="oauth2client.client.AssertionCredentials-class.html#_revoke" onclick="show_private();">_revoke</a></code>
       </p></div>
     <p class="indent-wrapped-lines"><b>Inherited from <code><a href="oauth2client.client.OAuth2Credentials-class.html">client.OAuth2Credentials</a></code></b>:
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#__getstate__">__getstate__</a></code>,
@@ -146,11 +147,13 @@
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#apply">apply</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#authorize">authorize</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#refresh">refresh</a></code>,
+      <code><a href="oauth2client.client.OAuth2Credentials-class.html#revoke">revoke</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#set_store">set_store</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#to_json">to_json</a></code>
       </p>
     <div class="private">    <p class="indent-wrapped-lines"><b>Inherited from <code><a href="oauth2client.client.OAuth2Credentials-class.html">client.OAuth2Credentials</a></code></b> (private):
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_do_refresh_request" onclick="show_private();">_do_refresh_request</a></code>,
+      <code><a href="oauth2client.client.OAuth2Credentials-class.html#_do_revoke" onclick="show_private();">_do_revoke</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_generate_refresh_request_headers" onclick="show_private();">_generate_refresh_request_headers</a></code>,
       <code><a href="oauth2client.client.OAuth2Credentials-class.html#_updateFromCredential" onclick="show_private();">_updateFromCredential</a></code>
       </p></div>
@@ -415,7 +418,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:44 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.keyring_storage-module.html b/docs/epy/oauth2client.keyring_storage-module.html
index 55899e8..b5269dc 100644
--- a/docs/epy/oauth2client.keyring_storage-module.html
+++ b/docs/epy/oauth2client.keyring_storage-module.html
@@ -113,7 +113,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.keyring_storage-pysrc.html b/docs/epy/oauth2client.keyring_storage-pysrc.html
index caffbc1..f17854f 100644
--- a/docs/epy/oauth2client.keyring_storage-pysrc.html
+++ b/docs/epy/oauth2client.keyring_storage-pysrc.html
@@ -206,7 +206,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:48 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.keyring_storage.Storage-class.html b/docs/epy/oauth2client.keyring_storage.Storage-class.html
index 1786007..b2dc263 100644
--- a/docs/epy/oauth2client.keyring_storage.Storage-class.html
+++ b/docs/epy/oauth2client.keyring_storage.Storage-class.html
@@ -470,7 +470,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:44 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.locked_file-module.html b/docs/epy/oauth2client.locked_file-module.html
index efb4977..10e1e01 100644
--- a/docs/epy/oauth2client.locked_file-module.html
+++ b/docs/epy/oauth2client.locked_file-module.html
@@ -229,7 +229,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.locked_file-pysrc.html b/docs/epy/oauth2client.locked_file-pysrc.html
index 2e62a8e..502d46d 100644
--- a/docs/epy/oauth2client.locked_file-pysrc.html
+++ b/docs/epy/oauth2client.locked_file-pysrc.html
@@ -215,8 +215,8 @@
 </div><div id="_PosixOpener.unlock_and_close-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="_PosixOpener.unlock_and_close-expanded"><a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line">    <tt class="py-docstring">"""Unlock a file by removing the .lock file, and close the handle."""</tt> </tt>
 <a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_locked</tt><tt class="py-op">:</tt> </tt>
 <a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line">      <tt class="py-name">lock_filename</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name"><a title="oauth2client.locked_file._PosixOpener._posix_lockfile" class="py-name" href="#" onclick="return doclink('link-11', '_posix_lockfile', 'link-9');">_posix_lockfile</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_filename</tt><tt class="py-op">)</tt> </tt>
-<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">      <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">unlink</tt><tt class="py-op">(</tt><tt class="py-name">lock_filename</tt><tt class="py-op">)</tt> </tt>
-<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line">      <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_lock_fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">      <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_lock_fd</tt><tt class="py-op">)</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line">      <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">unlink</tt><tt class="py-op">(</tt><tt class="py-name">lock_filename</tt><tt class="py-op">)</tt> </tt>
 <a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_locked</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
 <a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_lock_fd</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
 <a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fh</tt><tt class="py-op">:</tt> </tt>
@@ -486,7 +486,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:47 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.locked_file.AlreadyLockedException-class.html b/docs/epy/oauth2client.locked_file.AlreadyLockedException-class.html
index 44d1ca9..1b6efdb 100644
--- a/docs/epy/oauth2client.locked_file.AlreadyLockedException-class.html
+++ b/docs/epy/oauth2client.locked_file.AlreadyLockedException-class.html
@@ -166,7 +166,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:44 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.locked_file.CredentialsFileSymbolicLinkError-class.html b/docs/epy/oauth2client.locked_file.CredentialsFileSymbolicLinkError-class.html
index 56a4c40..849f4dc 100644
--- a/docs/epy/oauth2client.locked_file.CredentialsFileSymbolicLinkError-class.html
+++ b/docs/epy/oauth2client.locked_file.CredentialsFileSymbolicLinkError-class.html
@@ -166,7 +166,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:45 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.locked_file.LockedFile-class.html b/docs/epy/oauth2client.locked_file.LockedFile-class.html
index a941c60..ba30f43 100644
--- a/docs/epy/oauth2client.locked_file.LockedFile-class.html
+++ b/docs/epy/oauth2client.locked_file.LockedFile-class.html
@@ -350,7 +350,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:45 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.locked_file._Opener-class.html b/docs/epy/oauth2client.locked_file._Opener-class.html
index 99601ca..e587f42 100644
--- a/docs/epy/oauth2client.locked_file._Opener-class.html
+++ b/docs/epy/oauth2client.locked_file._Opener-class.html
@@ -361,7 +361,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:45 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.locked_file._PosixOpener-class.html b/docs/epy/oauth2client.locked_file._PosixOpener-class.html
index 8b6f731..0f68334 100644
--- a/docs/epy/oauth2client.locked_file._PosixOpener-class.html
+++ b/docs/epy/oauth2client.locked_file._PosixOpener-class.html
@@ -294,7 +294,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:45 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.multistore_file-module.html b/docs/epy/oauth2client.multistore_file-module.html
index 9783b53..2256e64 100644
--- a/docs/epy/oauth2client.multistore_file-module.html
+++ b/docs/epy/oauth2client.multistore_file-module.html
@@ -411,7 +411,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:31 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.multistore_file-pysrc.html b/docs/epy/oauth2client.multistore_file-pysrc.html
index 6f19879..fa6b2b6 100644
--- a/docs/epy/oauth2client.multistore_file-pysrc.html
+++ b/docs/epy/oauth2client.multistore_file-pysrc.html
@@ -571,7 +571,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:46 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.multistore_file.Error-class.html b/docs/epy/oauth2client.multistore_file.Error-class.html
index cafc3fa..43924d5 100644
--- a/docs/epy/oauth2client.multistore_file.Error-class.html
+++ b/docs/epy/oauth2client.multistore_file.Error-class.html
@@ -166,7 +166,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:45 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.multistore_file.NewerCredentialStoreError-class.html b/docs/epy/oauth2client.multistore_file.NewerCredentialStoreError-class.html
index c368600..fb1e0e7 100644
--- a/docs/epy/oauth2client.multistore_file.NewerCredentialStoreError-class.html
+++ b/docs/epy/oauth2client.multistore_file.NewerCredentialStoreError-class.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:45 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.multistore_file._MultiStore-class.html b/docs/epy/oauth2client.multistore_file._MultiStore-class.html
index 1bdf78b..5d01ab5 100644
--- a/docs/epy/oauth2client.multistore_file._MultiStore-class.html
+++ b/docs/epy/oauth2client.multistore_file._MultiStore-class.html
@@ -742,7 +742,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:45 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.multistore_file._MultiStore._Storage-class.html b/docs/epy/oauth2client.multistore_file._MultiStore._Storage-class.html
index 37d3707..5ecf3fa 100644
--- a/docs/epy/oauth2client.multistore_file._MultiStore._Storage-class.html
+++ b/docs/epy/oauth2client.multistore_file._MultiStore._Storage-class.html
@@ -457,7 +457,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:46 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.tools-module.html b/docs/epy/oauth2client.tools-module.html
index e914f8a..7ad7db6 100644
--- a/docs/epy/oauth2client.tools-module.html
+++ b/docs/epy/oauth2client.tools-module.html
@@ -269,7 +269,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:32 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.tools-pysrc.html b/docs/epy/oauth2client.tools-pysrc.html
index a2f4536..34fc4f4 100644
--- a/docs/epy/oauth2client.tools-pysrc.html
+++ b/docs/epy/oauth2client.tools-pysrc.html
@@ -310,7 +310,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:48 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.tools.ClientRedirectHandler-class.html b/docs/epy/oauth2client.tools.ClientRedirectHandler-class.html
index 16f5236..56e4914 100644
--- a/docs/epy/oauth2client.tools.ClientRedirectHandler-class.html
+++ b/docs/epy/oauth2client.tools.ClientRedirectHandler-class.html
@@ -288,7 +288,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:46 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.tools.ClientRedirectServer-class.html b/docs/epy/oauth2client.tools.ClientRedirectServer-class.html
index 730ea79..aa9bfeb 100644
--- a/docs/epy/oauth2client.tools.ClientRedirectServer-class.html
+++ b/docs/epy/oauth2client.tools.ClientRedirectServer-class.html
@@ -183,7 +183,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:46 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.util-module.html b/docs/epy/oauth2client.util-module.html
index 4dec008..92c65c5 100644
--- a/docs/epy/oauth2client.util-module.html
+++ b/docs/epy/oauth2client.util-module.html
@@ -133,6 +133,25 @@
       
     </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 href="oauth2client.util-module.html#_add_query_parameter" class="summary-sig-name" onclick="show_private();">_add_query_parameter</a>(<span class="summary-sig-arg">url</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">value</span>)</span><br />
+      Adds a query parameter to a url.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="oauth2client.util-pysrc.html#_add_query_parameter">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
 </table>
 <!-- ==================== VARIABLES ==================== -->
 <a name="section-Variables"></a>
@@ -332,6 +351,40 @@
   </dl>
 </td></tr></table>
 </div>
+<a name="_add_query_parameter"></a>
+<div class="private">
+<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">_add_query_parameter</span>(<span class="sig-arg">url</span>,
+        <span class="sig-arg">name</span>,
+        <span class="sig-arg">value</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="oauth2client.util-pysrc.html#_add_query_parameter">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Adds a query parameter to a url.
+
+Replaces the current value if it already exists in the URL.
+
+Args:
+  url: string, url to add the query parameter to.
+  name: string, query parameter name.
+  value: string, query parameter value.
+
+Returns:
+  Updated query parameter. Does not update the url if value is None.
+
+</pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <br />
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
@@ -356,7 +409,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:32 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.util-pysrc.html b/docs/epy/oauth2client.util-pysrc.html
index 531bba6..481d795 100644
--- a/docs/epy/oauth2client.util-pysrc.html
+++ b/docs/epy/oauth2client.util-pysrc.html
@@ -83,8 +83,15 @@
 <a name="L28"></a><tt class="py-lineno"> 28</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">inspect</tt> </tt>
 <a name="L29"></a><tt class="py-lineno"> 29</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
 <a name="L30"></a><tt class="py-lineno"> 30</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">types</tt> </tt>
-<a name="L31"></a><tt class="py-lineno"> 31</tt>  <tt class="py-line"> </tt>
-<a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable apiclient.discovery.logger=apiclient.discovery-module.html#logger,Variable oauth2client.appengine.logger=oauth2client.appengine-module.html#logger,Variable oauth2client.client.logger=oauth2client.client-module.html#logger,Variable oauth2client.crypt.logger=oauth2client.crypt-module.html#logger,Variable oauth2client.gce.logger=oauth2client.gce-module.html#logger,Variable oauth2client.locked_file.logger=oauth2client.locked_file-module.html#logger,Variable oauth2client.multistore_file.logger=oauth2client.multistore_file-module.html#logger,Variable oauth2client.util.logger=oauth2client.util-module.html#logger"><a title="apiclient.discovery.logger
+<a name="L31"></a><tt class="py-lineno"> 31</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">urllib</tt> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">urlparse</tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt class="py-name">urlparse</tt> <tt class="py-keyword">import</tt> <tt class="py-name">parse_qsl</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt class="py-name">cgi</tt> <tt class="py-keyword">import</tt> <tt class="py-name">parse_qsl</tt> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable apiclient.discovery.logger=apiclient.discovery-module.html#logger,Variable oauth2client.appengine.logger=oauth2client.appengine-module.html#logger,Variable oauth2client.client.logger=oauth2client.client-module.html#logger,Variable oauth2client.crypt.logger=oauth2client.crypt-module.html#logger,Variable oauth2client.gce.logger=oauth2client.gce-module.html#logger,Variable oauth2client.locked_file.logger=oauth2client.locked_file-module.html#logger,Variable oauth2client.multistore_file.logger=oauth2client.multistore_file-module.html#logger,Variable oauth2client.util.logger=oauth2client.util-module.html#logger"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
@@ -92,100 +99,100 @@
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
 oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-0', 'logger', 'link-0');">logger</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
-<a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"> </tt>
-<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt id="link-1" class="py-name" targets="Variable apiclient.model.FLAGS=apiclient.model-module.html#FLAGS,Variable oauth2client.tools.FLAGS=oauth2client.tools-module.html#FLAGS,Variable oauth2client.util.FLAGS=oauth2client.util-module.html#FLAGS"><a title="apiclient.model.FLAGS
+<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"><tt id="link-1" class="py-name" targets="Variable apiclient.model.FLAGS=apiclient.model-module.html#FLAGS,Variable oauth2client.tools.FLAGS=oauth2client.tools-module.html#FLAGS,Variable oauth2client.util.FLAGS=oauth2client.util-module.html#FLAGS"><a title="apiclient.model.FLAGS
 oauth2client.tools.FLAGS
 oauth2client.util.FLAGS" class="py-name" href="#" onclick="return doclink('link-1', 'FLAGS', 'link-1');">FLAGS</a></tt> <tt class="py-op">=</tt> <tt class="py-name">gflags</tt><tt class="py-op">.</tt><tt id="link-2" class="py-name"><a title="apiclient.model.FLAGS
 oauth2client.tools.FLAGS
 oauth2client.util.FLAGS" class="py-name" href="#" onclick="return doclink('link-2', 'FLAGS', 'link-1');">FLAGS</a></tt> </tt>
-<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"> </tt>
-<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt class="py-name">gflags</tt><tt class="py-op">.</tt><tt class="py-name">DEFINE_enum</tt><tt class="py-op">(</tt><tt class="py-string">'positional_parameters_enforcement'</tt><tt class="py-op">,</tt> <tt class="py-string">'WARNING'</tt><tt class="py-op">,</tt> </tt>
-<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line">    <tt class="py-op">[</tt><tt class="py-string">'EXCEPTION'</tt><tt class="py-op">,</tt> <tt class="py-string">'WARNING'</tt><tt class="py-op">,</tt> <tt class="py-string">'IGNORE'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line">    <tt class="py-string">'The action when an oauth2client.util.positional declaration is violated.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"> </tt>
-<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"> </tt>
-<a name="positional"></a><div id="positional-def"><a name="L41"></a><tt class="py-lineno"> 41</tt> <a class="py-toggle" href="#" id="positional-toggle" onclick="return toggle('positional');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.util-module.html#positional">positional</a><tt class="py-op">(</tt><tt class="py-param">max_positional_args</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="positional-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="positional-expanded"><a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line">  <tt class="py-docstring">"""A decorator to declare that only the first N arguments my be positional.</tt> </tt>
-<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line"><tt class="py-docstring">  This decorator makes it easy to support Python 3 style key-word only</tt> </tt>
-<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line"><tt class="py-docstring">  parameters. For example, in Python 3 it is possible to write:</tt> </tt>
-<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line"><tt class="py-docstring">    def fn(pos1, *, kwonly1=None, kwonly1=None):</tt> </tt>
-<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line"><tt class="py-docstring">      ...</tt> </tt>
-<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"><tt class="py-docstring">  All named parameters after * must be a keyword:</tt> </tt>
-<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line"><tt class="py-docstring">    fn(10, 'kw1', 'kw2')  # Raises exception.</tt> </tt>
-<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"><tt class="py-docstring">    fn(10, kwonly1='kw1')  # Ok.</tt> </tt>
-<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
-<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"><tt class="py-docstring">    To define a function like above, do:</tt> </tt>
-<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line"><tt class="py-docstring">      @positional(1)</tt> </tt>
-<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"><tt class="py-docstring">      def fn(pos1, kwonly1=None, kwonly2=None):</tt> </tt>
-<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"><tt class="py-docstring">        ...</tt> </tt>
+<a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line"> </tt>
+<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"><tt class="py-name">gflags</tt><tt class="py-op">.</tt><tt class="py-name">DEFINE_enum</tt><tt class="py-op">(</tt><tt class="py-string">'positional_parameters_enforcement'</tt><tt class="py-op">,</tt> <tt class="py-string">'WARNING'</tt><tt class="py-op">,</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line">    <tt class="py-op">[</tt><tt class="py-string">'EXCEPTION'</tt><tt class="py-op">,</tt> <tt class="py-string">'WARNING'</tt><tt class="py-op">,</tt> <tt class="py-string">'IGNORE'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line">    <tt class="py-string">'The action when an oauth2client.util.positional declaration is violated.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line"> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line"> </tt>
+<a name="positional"></a><div id="positional-def"><a name="L48"></a><tt class="py-lineno"> 48</tt> <a class="py-toggle" href="#" id="positional-toggle" onclick="return toggle('positional');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.util-module.html#positional">positional</a><tt class="py-op">(</tt><tt class="py-param">max_positional_args</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="positional-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="positional-expanded"><a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line">  <tt class="py-docstring">"""A decorator to declare that only the first N arguments my be positional.</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line"><tt class="py-docstring">  This decorator makes it easy to support Python 3 style key-word only</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line"><tt class="py-docstring">  parameters. For example, in Python 3 it is possible to write:</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line"><tt class="py-docstring">    def fn(pos1, *, kwonly1=None, kwonly1=None):</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line"><tt class="py-docstring">      ...</tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"><tt class="py-docstring">  All named parameters after * must be a keyword:</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"><tt class="py-docstring">    fn(10, 'kw1', 'kw2')  # Raises exception.</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"><tt class="py-docstring">    fn(10, kwonly1='kw1')  # Ok.</tt> </tt>
 <a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line"><tt class="py-docstring">    If no default value is provided to a keyword argument, it becomes a required</tt> </tt>
-<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"><tt class="py-docstring">    keyword argument:</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"><tt class="py-docstring">    To define a function like above, do:</tt> </tt>
 <a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line"><tt class="py-docstring">      @positional(0)</tt> </tt>
-<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line"><tt class="py-docstring">      def fn(required_kw):</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line"><tt class="py-docstring">      @positional(1)</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line"><tt class="py-docstring">      def fn(pos1, kwonly1=None, kwonly2=None):</tt> </tt>
 <a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line"><tt class="py-docstring">        ...</tt> </tt>
 <a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line"><tt class="py-docstring">    This must be called with the keyword parameter:</tt> </tt>
-<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line"><tt class="py-docstring">      fn()  # Raises exception.</tt> </tt>
-<a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line"><tt class="py-docstring">      fn(10)  # Raises exception.</tt> </tt>
-<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line"><tt class="py-docstring">      fn(required_kw=10)  # Ok.</tt> </tt>
-<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line"><tt class="py-docstring">    When defining instance or class methods always remember to account for</tt> </tt>
-<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line"><tt class="py-docstring">    'self' and 'cls':</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line"><tt class="py-docstring">    If no default value is provided to a keyword argument, it becomes a required</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line"><tt class="py-docstring">    keyword argument:</tt> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line"><tt class="py-docstring">      @positional(0)</tt> </tt>
+<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line"><tt class="py-docstring">      def fn(required_kw):</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"><tt class="py-docstring">        ...</tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line"><tt class="py-docstring">    This must be called with the keyword parameter:</tt> </tt>
 <a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line"><tt class="py-docstring">      class MyClass(object):</tt> </tt>
-<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"><tt class="py-docstring">        @positional(2)</tt> </tt>
-<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line"><tt class="py-docstring">        def my_method(self, pos1, kwonly1=None):</tt> </tt>
-<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line"><tt class="py-docstring">          ...</tt> </tt>
-<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line"><tt class="py-docstring">        @classmethod</tt> </tt>
-<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line"><tt class="py-docstring">        @positional(2)</tt> </tt>
-<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line"><tt class="py-docstring">        def my_method(cls, pos1, kwonly1=None):</tt> </tt>
-<a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line"><tt class="py-docstring">          ...</tt> </tt>
-<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line"><tt class="py-docstring">  The positional decorator behavior is controlled by the</tt> </tt>
-<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"><tt class="py-docstring">  --positional_parameters_enforcement flag. The flag may be set to 'EXCEPTION',</tt> </tt>
-<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line"><tt class="py-docstring">  'WARNING' or 'IGNORE' to raise an exception, log a warning, or do nothing,</tt> </tt>
-<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line"><tt class="py-docstring">  respectively, if a declaration is violated.</tt> </tt>
-<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line"><tt class="py-docstring">    max_positional_arguments: Maximum number of positional arguments. All</tt> </tt>
-<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line"><tt class="py-docstring">      parameters after the this index must be keyword only.</tt> </tt>
-<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line"><tt class="py-docstring">    A decorator that prevents using arguments after max_positional_args from</tt> </tt>
-<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line"><tt class="py-docstring">    being used as positional parameters.</tt> </tt>
-<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line"><tt class="py-docstring">  Raises:</tt> </tt>
-<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line"><tt class="py-docstring">    TypeError if a key-word only argument is provided as a positional parameter,</tt> </tt>
-<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line"><tt class="py-docstring">    but only if the --positional_parameters_enforcement flag is set to</tt> </tt>
-<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line"><tt class="py-docstring">    'EXCEPTION'.</tt> </tt>
-<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">positional_decorator</tt><tt class="py-op">(</tt><tt class="py-param">wrapped</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">positional_wrapper</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">max_positional_args</tt><tt class="py-op">:</tt> </tt>
-<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line">        <tt class="py-name">plural_s</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
-<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">max_positional_args</tt> <tt class="py-op">!=</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
-<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line">          <tt class="py-name">plural_s</tt> <tt class="py-op">=</tt> <tt class="py-string">'s'</tt> </tt>
-<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line">        <tt class="py-name">message</tt> <tt class="py-op">=</tt> <tt class="py-string">'%s() takes at most %d positional argument%s (%d given)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
-<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line">            <tt class="py-name">wrapped</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">max_positional_args</tt><tt class="py-op">,</tt> <tt class="py-name">plural_s</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-3" class="py-name"><a title="apiclient.model.FLAGS
+<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line"><tt class="py-docstring">      fn()  # Raises exception.</tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"><tt class="py-docstring">      fn(10)  # Raises exception.</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"><tt class="py-docstring">      fn(required_kw=10)  # Ok.</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line"><tt class="py-docstring">    When defining instance or class methods always remember to account for</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line"><tt class="py-docstring">    'self' and 'cls':</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line"><tt class="py-docstring">      class MyClass(object):</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line"><tt class="py-docstring">        @positional(2)</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line"><tt class="py-docstring">        def my_method(self, pos1, kwonly1=None):</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line"><tt class="py-docstring">          ...</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line"><tt class="py-docstring">        @classmethod</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line"><tt class="py-docstring">        @positional(2)</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line"><tt class="py-docstring">        def my_method(cls, pos1, kwonly1=None):</tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line"><tt class="py-docstring">          ...</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line"><tt class="py-docstring">  The positional decorator behavior is controlled by the</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line"><tt class="py-docstring">  --positional_parameters_enforcement flag. The flag may be set to 'EXCEPTION',</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line"><tt class="py-docstring">  'WARNING' or 'IGNORE' to raise an exception, log a warning, or do nothing,</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line"><tt class="py-docstring">  respectively, if a declaration is violated.</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line"><tt class="py-docstring">    max_positional_arguments: Maximum number of positional arguments. All</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line"><tt class="py-docstring">      parameters after the this index must be keyword only.</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line"><tt class="py-docstring">    A decorator that prevents using arguments after max_positional_args from</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line"><tt class="py-docstring">    being used as positional parameters.</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line"><tt class="py-docstring">  Raises:</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line"><tt class="py-docstring">    TypeError if a key-word only argument is provided as a positional parameter,</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line"><tt class="py-docstring">    but only if the --positional_parameters_enforcement flag is set to</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line"><tt class="py-docstring">    'EXCEPTION'.</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">positional_decorator</tt><tt class="py-op">(</tt><tt class="py-param">wrapped</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">positional_wrapper</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">max_positional_args</tt><tt class="py-op">:</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line">        <tt class="py-name">plural_s</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">max_positional_args</tt> <tt class="py-op">!=</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line">          <tt class="py-name">plural_s</tt> <tt class="py-op">=</tt> <tt class="py-string">'s'</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line">        <tt class="py-name">message</tt> <tt class="py-op">=</tt> <tt class="py-string">'%s() takes at most %d positional argument%s (%d given)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line">            <tt class="py-name">wrapped</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">max_positional_args</tt><tt class="py-op">,</tt> <tt class="py-name">plural_s</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-3" class="py-name"><a title="apiclient.model.FLAGS
 oauth2client.tools.FLAGS
 oauth2client.util.FLAGS" class="py-name" href="#" onclick="return doclink('link-3', 'FLAGS', 'link-1');">FLAGS</a></tt><tt class="py-op">.</tt><tt class="py-name">positional_parameters_enforcement</tt> <tt class="py-op">==</tt> <tt class="py-string">'EXCEPTION'</tt><tt class="py-op">:</tt> </tt>
-<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-name">message</tt><tt class="py-op">)</tt> </tt>
-<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt id="link-4" class="py-name"><a title="apiclient.model.FLAGS
+<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-name">message</tt><tt class="py-op">)</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt id="link-4" class="py-name"><a title="apiclient.model.FLAGS
 oauth2client.tools.FLAGS
 oauth2client.util.FLAGS" class="py-name" href="#" onclick="return doclink('link-4', 'FLAGS', 'link-1');">FLAGS</a></tt><tt class="py-op">.</tt><tt class="py-name">positional_parameters_enforcement</tt> <tt class="py-op">==</tt> <tt class="py-string">'WARNING'</tt><tt class="py-op">:</tt> </tt>
-<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line">          <tt id="link-5" class="py-name"><a title="apiclient.discovery.logger
+<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line">          <tt id="link-5" class="py-name"><a title="apiclient.discovery.logger
 oauth2client.appengine.logger
 oauth2client.client.logger
 oauth2client.crypt.logger
@@ -193,51 +200,74 @@
 oauth2client.locked_file.logger
 oauth2client.multistore_file.logger
 oauth2client.util.logger" class="py-name" href="#" onclick="return doclink('link-5', 'logger', 'link-0');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-name">message</tt><tt class="py-op">)</tt> </tt>
-<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> <tt class="py-comment"># IGNORE</tt> </tt>
-<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line">          <tt class="py-keyword">pass</tt> </tt>
-<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">wrapped</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">positional_wrapper</tt> </tt>
-</div><a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line"> </tt>
-<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">max_positional_args</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">positional_decorator</tt> </tt>
-<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line">    <tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-name">_</tt><tt class="py-op">,</tt> <tt class="py-name">_</tt><tt class="py-op">,</tt> <tt class="py-name">defaults</tt> <tt class="py-op">=</tt> <tt class="py-name">inspect</tt><tt class="py-op">.</tt><tt class="py-name">getargspec</tt><tt class="py-op">(</tt><tt class="py-name">max_positional_args</tt><tt class="py-op">)</tt> </tt>
-<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-6" class="py-name" targets="Function oauth2client.util.positional()=oauth2client.util-module.html#positional"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-6', 'positional', 'link-6');">positional</a></tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">defaults</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt class="py-name">max_positional_args</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line"> </tt>
-<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"> </tt>
-<a name="scopes_to_string"></a><div id="scopes_to_string-def"><a name="L131"></a><tt class="py-lineno">131</tt> <a class="py-toggle" href="#" id="scopes_to_string-toggle" onclick="return toggle('scopes_to_string');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.util-module.html#scopes_to_string">scopes_to_string</a><tt class="py-op">(</tt><tt class="py-param">scopes</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="scopes_to_string-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="scopes_to_string-expanded"><a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">  <tt class="py-docstring">"""Converts scope value to a string.</tt> </tt>
-<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line"><tt class="py-docstring">  If scopes is a string then it is simply passed through. If scopes is an</tt> </tt>
-<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line"><tt class="py-docstring">  iterable then a string is returned that is all the individual scopes</tt> </tt>
-<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"><tt class="py-docstring">  concatenated with spaces.</tt> </tt>
-<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line"><tt class="py-docstring">    scopes: string or iterable of strings, the scopes.</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> <tt class="py-comment"># IGNORE</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line">          <tt class="py-keyword">pass</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">wrapped</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">positional_wrapper</tt> </tt>
+</div><a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">max_positional_args</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">positional_decorator</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line">    <tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-name">_</tt><tt class="py-op">,</tt> <tt class="py-name">_</tt><tt class="py-op">,</tt> <tt class="py-name">defaults</tt> <tt class="py-op">=</tt> <tt class="py-name">inspect</tt><tt class="py-op">.</tt><tt class="py-name">getargspec</tt><tt class="py-op">(</tt><tt class="py-name">max_positional_args</tt><tt class="py-op">)</tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-6" class="py-name" targets="Function oauth2client.util.positional()=oauth2client.util-module.html#positional"><a title="oauth2client.util.positional" class="py-name" href="#" onclick="return doclink('link-6', 'positional', 'link-6');">positional</a></tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">args</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">defaults</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">(</tt><tt class="py-name">max_positional_args</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line"> </tt>
+<a name="scopes_to_string"></a><div id="scopes_to_string-def"><a name="L138"></a><tt class="py-lineno">138</tt> <a class="py-toggle" href="#" id="scopes_to_string-toggle" onclick="return toggle('scopes_to_string');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.util-module.html#scopes_to_string">scopes_to_string</a><tt class="py-op">(</tt><tt class="py-param">scopes</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="scopes_to_string-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="scopes_to_string-expanded"><a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line">  <tt class="py-docstring">"""Converts scope value to a string.</tt> </tt>
 <a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line"><tt class="py-docstring">    The scopes formatted as a single string.</tt> </tt>
-<a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">scopes</tt><tt class="py-op">,</tt> <tt class="py-name">types</tt><tt class="py-op">.</tt><tt class="py-name">StringTypes</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">scopes</tt> </tt>
-<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">scopes</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line"> </tt>
-<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line"> </tt>
-<a name="dict_to_tuple_key"></a><div id="dict_to_tuple_key-def"><a name="L150"></a><tt class="py-lineno">150</tt> <a class="py-toggle" href="#" id="dict_to_tuple_key-toggle" onclick="return toggle('dict_to_tuple_key');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.util-module.html#dict_to_tuple_key">dict_to_tuple_key</a><tt class="py-op">(</tt><tt class="py-param">dictionary</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="dict_to_tuple_key-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="dict_to_tuple_key-expanded"><a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line">  <tt class="py-docstring">"""Converts a dictionary to a tuple that can be used as an immutable key.</tt> </tt>
-<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line"><tt class="py-docstring">  The resulting key is always sorted so that logically equivalent dictionaries</tt> </tt>
-<a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line"><tt class="py-docstring">  always produce an identical tuple for a key.</tt> </tt>
-<a name="L155"></a><tt class="py-lineno">155</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line"><tt class="py-docstring">    dictionary: the dictionary to use as the key.</tt> </tt>
-<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line"><tt class="py-docstring">    A tuple representing the dictionary in it's naturally sorted ordering.</tt> </tt>
-<a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">tuple</tt><tt class="py-op">(</tt><tt class="py-name">sorted</tt><tt class="py-op">(</tt><tt class="py-name">dictionary</tt><tt class="py-op">.</tt><tt id="link-7" class="py-name" targets="Method apiclient.push.Headers.items()=apiclient.push.Headers-class.html#items"><a title="apiclient.push.Headers.items" class="py-name" href="#" onclick="return doclink('link-7', 'items', 'link-7');">items</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L163"></a><tt class="py-lineno">163</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line"><tt class="py-docstring">  If scopes is a string then it is simply passed through. If scopes is an</tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line"><tt class="py-docstring">  iterable then a string is returned that is all the individual scopes</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line"><tt class="py-docstring">  concatenated with spaces.</tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line"><tt class="py-docstring">    scopes: string or iterable of strings, the scopes.</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line"><tt class="py-docstring">    The scopes formatted as a single string.</tt> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">scopes</tt><tt class="py-op">,</tt> <tt class="py-name">types</tt><tt class="py-op">.</tt><tt class="py-name">StringTypes</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">scopes</tt> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">scopes</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L155"></a><tt class="py-lineno">155</tt>  <tt class="py-line"> </tt>
+<a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line"> </tt>
+<a name="dict_to_tuple_key"></a><div id="dict_to_tuple_key-def"><a name="L157"></a><tt class="py-lineno">157</tt> <a class="py-toggle" href="#" id="dict_to_tuple_key-toggle" onclick="return toggle('dict_to_tuple_key');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.util-module.html#dict_to_tuple_key">dict_to_tuple_key</a><tt class="py-op">(</tt><tt class="py-param">dictionary</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="dict_to_tuple_key-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="dict_to_tuple_key-expanded"><a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line">  <tt class="py-docstring">"""Converts a dictionary to a tuple that can be used as an immutable key.</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line"><tt class="py-docstring">  The resulting key is always sorted so that logically equivalent dictionaries</tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line"><tt class="py-docstring">  always produce an identical tuple for a key.</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt>  <tt class="py-line"><tt class="py-docstring">    dictionary: the dictionary to use as the key.</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line"><tt class="py-docstring">    A tuple representing the dictionary in it's naturally sorted ordering.</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">tuple</tt><tt class="py-op">(</tt><tt class="py-name">sorted</tt><tt class="py-op">(</tt><tt class="py-name">dictionary</tt><tt class="py-op">.</tt><tt id="link-7" class="py-name" targets="Method apiclient.push.Headers.items()=apiclient.push.Headers-class.html#items"><a title="apiclient.push.Headers.items" class="py-name" href="#" onclick="return doclink('link-7', 'items', 'link-7');">items</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line"> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line"> </tt>
+<a name="_add_query_parameter"></a><div id="_add_query_parameter-def"><a name="L172"></a><tt class="py-lineno">172</tt> <a class="py-toggle" href="#" id="_add_query_parameter-toggle" onclick="return toggle('_add_query_parameter');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="oauth2client.util-module.html#_add_query_parameter">_add_query_parameter</a><tt class="py-op">(</tt><tt class="py-param">url</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_add_query_parameter-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_add_query_parameter-expanded"><a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line">  <tt class="py-docstring">"""Adds a query parameter to a url.</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line"><tt class="py-docstring">  Replaces the current value if it already exists in the URL.</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L178"></a><tt class="py-lineno">178</tt>  <tt class="py-line"><tt class="py-docstring">    url: string, url to add the query parameter to.</tt> </tt>
+<a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line"><tt class="py-docstring">    name: string, query parameter name.</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line"><tt class="py-docstring">    value: string, query parameter value.</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line"><tt class="py-docstring">    Updated query parameter. Does not update the url if value is None.</tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">url</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urlparse</tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line">    <tt class="py-name">q</tt> <tt class="py-op">=</tt> <tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-name">parse_qsl</tt><tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line">    <tt class="py-name">q</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-name">q</tt><tt class="py-op">)</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">urlparse</tt><tt class="py-op">.</tt><tt class="py-name">urlunparse</tt><tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -267,7 +297,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:49 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:26 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.xsrfutil-module.html b/docs/epy/oauth2client.xsrfutil-module.html
index 8a34496..25d9dae 100644
--- a/docs/epy/oauth2client.xsrfutil-module.html
+++ b/docs/epy/oauth2client.xsrfutil-module.html
@@ -282,7 +282,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:32 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:23 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/oauth2client.xsrfutil-pysrc.html b/docs/epy/oauth2client.xsrfutil-pysrc.html
index 05ff704..4f04399 100644
--- a/docs/epy/oauth2client.xsrfutil-pysrc.html
+++ b/docs/epy/oauth2client.xsrfutil-pysrc.html
@@ -196,7 +196,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Jan 24 16:14:47 2013
+    Generated by Epydoc 3.0.1 on Thu Mar  7 10:31:25 2013
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/redirect.html b/docs/epy/redirect.html
index 1296a93..ec89b23 100644
--- a/docs/epy/redirect.html
+++ b/docs/epy/redirect.html
@@ -7,7 +7,7 @@
 <body>
 <script type="text/javascript">
 <!--
-var pages = ["oauth2client.locked_file.CredentialsFileSymbolicLinkError-c", "oauth2client.appengine.OAuth2DecoratorFromClientSecrets-c", "oauth2client.multistore_file.NewerCredentialStoreError-c", "oauth2client.clientsecrets.InvalidClientSecretsError-c", "oauth2client.file.CredentialsFileSymbolicLinkError-c", "oauth2client.client.SignedJwtAssertionCredentials-c", "oauth2client.client.UnknownClientSecretsFlowError-c", "oauth2client.multistore_file._MultiStore._Storage-c", "oauth2client.appengine.InvalidClientSecretsError-c", "oauth2client.client.AccessTokenCredentialsError-c", "oauth2client.locked_file.AlreadyLockedException-c", "apiclient.push.InvalidSubscriptionRequestError-c", "oauth2client.appengine.AppAssertionCredentials-c", "oauth2client.appengine.CredentialsNDBProperty-c", "oauth2client.appengine.InvalidXsrfTokenError-c", "oauth2client.appengine.SiteXsrfSecretKeyNDB-c", "oauth2client.client.AccessTokenRefreshError-c", "apiclient.errors.UnacceptableMimeTypeError-c", "oauth2client.appengine.CredentialsNDBModel-c", "oauth2client.appengine.CredentialsProperty-c", "oauth2client.client.AccessTokenCredentials-c", "apiclient.errors.UnknownApiNameOrVersion-c", "oauth2client.appengine.SiteXsrfSecretKey-c", "oauth2client.client.AssertionCredentials-c", "oauth2client.django_orm.CredentialsField-c", "oauth2client.gce.AppAssertionCredentials-c", "oauth2client.multistore_file._MultiStore-c", "oauth2client.tools.ClientRedirectHandler-c", "oauth2client.appengine.CredentialsModel-c", "oauth2client.appengine.StorageByKeyName-c", "oauth2client.client.NonAsciiHeaderError-c", "oauth2client.client.OAuth2WebServerFlow-c", "oauth2client.client.VerifyJwtTokenError-c", "oauth2client.tools.ClientRedirectServer-c", "apiclient.errors.InvalidChunkSizeError-c", "apiclient.errors.UnexpectedMethodError-c", "oauth2client.appengine.FlowNDBProperty-c", "oauth2client.appengine.OAuth2Decorator-c", "apiclient.errors.MediaUploadSizeError-c", "apiclient.errors.ResumableUploadError-c", "oauth2client.client.FlowExchangeError-c", "oauth2client.client.OAuth2Credentials-c", "oauth2client.locked_file._PosixOpener-c", "apiclient.errors.UnexpectedBodyError-c", "apiclient.http.MediaDownloadProgress-c", "oauth2client.keyring_storage.Storage-c", "apiclient.model.ProtocolBufferModel-c", "oauth2client.appengine.FlowProperty-c", "oauth2client.crypt.AppIdentityError-c", "oauth2client.locked_file.LockedFile-c", "apiclient.http.MediaInMemoryUpload-c", "apiclient.http.MediaIoBaseDownload-c", "apiclient.http.MediaUploadProgress-c", "oauth2client.multistore_file.Error-c", "apiclient.errors.InvalidJsonError-c", "apiclient.http.RequestMockBuilder-c", "oauth2client.django_orm.FlowField-c", "apiclient.errors.UnknownFileType-c", "apiclient.errors.UnknownLinkType-c", "apiclient.http.MediaIoBaseUpload-c", "apiclient.schema._SchemaToStruct-c", "oauth2client.clientsecrets.Error-c", "oauth2client.locked_file._Opener-c", "apiclient.http.BatchHttpRequest-c", "apiclient.http.HttpMockSequence-c", "oauth2client.client.Credentials-c", "oauth2client.client.MemoryCache-c", "oauth2client.django_orm.Storage-c", "apiclient.http.HttpRequestMock-c", "apiclient.http.MediaFileUpload-c", "apiclient.push.WebhookChannel-c", "oauth2client.keyring_storage-m", "oauth2client.multistore_file-m", "apiclient.discovery.Resource-c", "apiclient.errors.BatchError-c", "apiclient.http._StreamSlice-c", "apiclient.push.Subscription-c", "oauth2client.client.Storage-c", "oauth2client.clientsecrets-m", "apiclient.errors.HttpError-c", "apiclient.http.HttpRequest-c", "apiclient.http.MediaUpload-c", "apiclient.model.MediaModel-c", "apiclient.model.BaseModel-c", "apiclient.model.JsonModel-c", "oauth2client.client.Error-c", "oauth2client.file.Storage-c", "oauth2client.locked_file-m", "apiclient.model.RawModel-c", "apiclient.schema.Schemas-c", "oauth2client.client.Flow-c", "oauth2client.django_orm-m", "apiclient.http.HttpMock-c", "oauth2client.appengine-m", "apiclient.errors.Error-c", "apiclient.push.Channel-c", "apiclient.push.Headers-c", "oauth2client.xsrfutil-m", "apiclient.model.Model-c", "oauth2client.anyjson-m", "apiclient.discovery-m", "apiclient.mimeparse-m", "oauth2client.client-m", "oauth2client.crypt-m", "oauth2client.tools-m", "oauth2client.file-m", "oauth2client.util-m", "apiclient.errors-m", "apiclient.schema-m", "oauth2client.gce-m", "apiclient.model-m", "apiclient.http-m", "apiclient.push-m", "apiclient.ext-m", "oauth2client-m", "apiclient-m"];
+var pages = ["oauth2client.locked_file.CredentialsFileSymbolicLinkError-c", "oauth2client.appengine.OAuth2DecoratorFromClientSecrets-c", "oauth2client.multistore_file.NewerCredentialStoreError-c", "oauth2client.clientsecrets.InvalidClientSecretsError-c", "oauth2client.file.CredentialsFileSymbolicLinkError-c", "oauth2client.client.SignedJwtAssertionCredentials-c", "oauth2client.client.UnknownClientSecretsFlowError-c", "oauth2client.multistore_file._MultiStore._Storage-c", "oauth2client.appengine.InvalidClientSecretsError-c", "oauth2client.client.AccessTokenCredentialsError-c", "oauth2client.locked_file.AlreadyLockedException-c", "apiclient.push.InvalidSubscriptionRequestError-c", "oauth2client.appengine.AppAssertionCredentials-c", "oauth2client.appengine.CredentialsNDBProperty-c", "apiclient.discovery.ResourceMethodParameters-c", "oauth2client.appengine.InvalidXsrfTokenError-c", "oauth2client.appengine.SiteXsrfSecretKeyNDB-c", "oauth2client.client.AccessTokenRefreshError-c", "apiclient.errors.UnacceptableMimeTypeError-c", "oauth2client.appengine.CredentialsNDBModel-c", "oauth2client.appengine.CredentialsProperty-c", "oauth2client.client.AccessTokenCredentials-c", "apiclient.errors.UnknownApiNameOrVersion-c", "oauth2client.appengine.SiteXsrfSecretKey-c", "oauth2client.client.AssertionCredentials-c", "oauth2client.django_orm.CredentialsField-c", "oauth2client.gce.AppAssertionCredentials-c", "oauth2client.multistore_file._MultiStore-c", "oauth2client.tools.ClientRedirectHandler-c", "google.appengine.ext.db.PropertiedClass-c", "oauth2client.appengine.CredentialsModel-c", "oauth2client.appengine.StorageByKeyName-c", "oauth2client.client.NonAsciiHeaderError-c", "oauth2client.client.OAuth2WebServerFlow-c", "oauth2client.client.VerifyJwtTokenError-c", "oauth2client.tools.ClientRedirectServer-c", "apiclient.errors.InvalidChunkSizeError-c", "apiclient.errors.UnexpectedMethodError-c", "oauth2client.appengine.FlowNDBProperty-c", "oauth2client.appengine.OAuth2Decorator-c", "apiclient.errors.MediaUploadSizeError-c", "apiclient.errors.ResumableUploadError-c", "oauth2client.client.FlowExchangeError-c", "oauth2client.client.OAuth2Credentials-c", "oauth2client.locked_file._PosixOpener-c", "apiclient.errors.UnexpectedBodyError-c", "apiclient.http.MediaDownloadProgress-c", "oauth2client.client.TokenRevokeError-c", "oauth2client.keyring_storage.Storage-c", "apiclient.model.ProtocolBufferModel-c", "oauth2client.appengine.FlowProperty-c", "oauth2client.crypt.AppIdentityError-c", "oauth2client.locked_file.LockedFile-c", "apiclient.http.MediaInMemoryUpload-c", "apiclient.http.MediaIoBaseDownload-c", "apiclient.http.MediaUploadProgress-c", "oauth2client.multistore_file.Error-c", "apiclient.errors.InvalidJsonError-c", "apiclient.http.RequestMockBuilder-c", "oauth2client.django_orm.FlowField-c", "apiclient.errors.UnknownFileType-c", "apiclient.errors.UnknownLinkType-c", "apiclient.http.MediaIoBaseUpload-c", "apiclient.schema._SchemaToStruct-c", "oauth2client.clientsecrets.Error-c", "oauth2client.locked_file._Opener-c", "apiclient.http.BatchHttpRequest-c", "apiclient.http.HttpMockSequence-c", "oauth2client.client.Credentials-c", "oauth2client.client.MemoryCache-c", "oauth2client.django_orm.Storage-c", "apiclient.http.HttpRequestMock-c", "apiclient.http.MediaFileUpload-c", "apiclient.push.WebhookChannel-c", "oauth2client.keyring_storage-m", "oauth2client.multistore_file-m", "apiclient.discovery.Resource-c", "apiclient.errors.BatchError-c", "apiclient.http._StreamSlice-c", "apiclient.push.Subscription-c", "oauth2client.client.Storage-c", "oauth2client.clientsecrets-m", "apiclient.errors.HttpError-c", "apiclient.http.HttpRequest-c", "apiclient.http.MediaUpload-c", "apiclient.model.MediaModel-c", "apiclient.model.BaseModel-c", "apiclient.model.JsonModel-c", "oauth2client.client.Error-c", "oauth2client.file.Storage-c", "oauth2client.locked_file-m", "apiclient.model.RawModel-c", "apiclient.schema.Schemas-c", "oauth2client.client.Flow-c", "oauth2client.django_orm-m", "apiclient.http.HttpMock-c", "oauth2client.appengine-m", "apiclient.errors.Error-c", "apiclient.push.Channel-c", "apiclient.push.Headers-c", "oauth2client.xsrfutil-m", "apiclient.model.Model-c", "oauth2client.anyjson-m", "apiclient.discovery-m", "apiclient.mimeparse-m", "oauth2client.client-m", "oauth2client.crypt-m", "oauth2client.tools-m", "oauth2client.file-m", "oauth2client.util-m", "apiclient.errors-m", "apiclient.schema-m", "oauth2client.gce-m", "apiclient.model-m", "apiclient.http-m", "apiclient.push-m", "apiclient.ext-m", "oauth2client-m", "apiclient-m"];
 var dottedName = get_anchor();
 if (dottedName) {
     var target = redirect_url(dottedName);
diff --git a/docs/epy/toc-apiclient.discovery-module.html b/docs/epy/toc-apiclient.discovery-module.html
index 0bd25a7..f2b2b9e 100644
--- a/docs/epy/toc-apiclient.discovery-module.html
+++ b/docs/epy/toc-apiclient.discovery-module.html
@@ -13,61 +13,79 @@
 <h1 class="toc">Module discovery</h1>
 <hr />
   <h2 class="toc">Classes</h2>
-    <a target="mainFrame" href="apiclient.discovery.Resource-class.html"
-     >Resource</a><br />  <h2 class="toc">Functions</h2>
   <div class="private">
-    <a target="mainFrame" href="apiclient.discovery-module.html#_add_query_parameter"
-     >_add_query_parameter</a><br />  </div>
+    <a target="mainFrame" href="apiclient.discovery.Resource-class.html"
+     >Resource</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery.ResourceMethodParameters-class.html"
+     >ResourceMethodParameters</a><br />  </div>
+  <h2 class="toc">Functions</h2>
   <div class="private">
     <a target="mainFrame" href="apiclient.discovery-module.html#_cast"
      >_cast</a><br />  </div>
   <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#_fix_up_media_upload"
+     >_fix_up_media_upload</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#_fix_up_method_description"
+     >_fix_up_method_description</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#_fix_up_parameters"
+     >_fix_up_parameters</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#_media_path_url_from_info"
+     >_media_path_url_from_info</a><br />  </div>
+  <div class="private">
     <a target="mainFrame" href="apiclient.discovery-module.html#_media_size_to_long"
      >_media_size_to_long</a><br />  </div>
     <a target="mainFrame" href="apiclient.discovery-module.html#build"
      >build</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#build_from_document"
-     >build_from_document</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#createMethod"
-     >createMethod</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#createNextMethod"
-     >createNextMethod</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#fix_method_name"
+     >build_from_document</a><br />  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#createMethod"
+     >createMethod</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#createNextMethod"
+     >createNextMethod</a><br />  </div>
+    <a target="mainFrame" href="apiclient.discovery-module.html#fix_method_name"
      >fix_method_name</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#key2param"
      >key2param</a><br />  <h2 class="toc">Variables</h2>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#BODY_PARAMETER_DEFAULT_VALUE"
+     >BODY_PARAMETER_DEFAULT_VALUE</a><br />  </div>
+  <div class="private">
     <a target="mainFrame" href="apiclient.discovery-module.html#DEFAULT_METHOD_DOC"
-     >DEFAULT_METHOD_DOC</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#DISCOVERY_URI"
-     >DISCOVERY_URI</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#HttpError"
-     >HttpError</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#HttpRequest"
-     >HttpRequest</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#InvalidJsonError"
-     >InvalidJsonError</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#JsonModel"
-     >JsonModel</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MIMEMultipart"
-     >MIMEMultipart</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MIMENonMultipart"
-     >MIMENonMultipart</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MULTIPLIERS"
-     >MULTIPLIERS</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MediaFileUpload"
-     >MediaFileUpload</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MediaModel"
-     >MediaModel</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MediaUpload"
-     >MediaUpload</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MediaUploadSizeError"
-     >MediaUploadSizeError</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#RESERVED_WORDS"
-     >RESERVED_WORDS</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#RawModel"
-     >RawModel</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#STACK_QUERY_PARAMETERS"
-     >STACK_QUERY_PARAMETERS</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#Schemas"
-     >Schemas</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#URITEMPLATE"
-     >URITEMPLATE</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#UnacceptableMimeTypeError"
-     >UnacceptableMimeTypeError</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#UnknownApiNameOrVersion"
-     >UnknownApiNameOrVersion</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#UnknownFileType"
-     >UnknownFileType</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#VARNAME"
-     >VARNAME</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#copy"
-     >copy</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#httplib2"
-     >httplib2</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#logger"
-     >logger</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#logging"
-     >logging</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#mimeparse"
-     >mimeparse</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#mimetypes"
-     >mimetypes</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#os"
-     >os</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#parse_qsl"
-     >parse_qsl</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#positional"
-     >positional</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#re"
-     >re</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#simplejson"
-     >simplejson</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#uritemplate"
-     >uritemplate</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#urllib"
-     >urllib</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#urlparse"
-     >urlparse</a><br /><hr />
+     >DEFAULT_METHOD_DOC</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#DISCOVERY_URI"
+     >DISCOVERY_URI</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#HTTP_PAYLOAD_METHODS"
+     >HTTP_PAYLOAD_METHODS</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#MEDIA_BODY_PARAMETER_DEFAULT_VALUE"
+     >MEDIA_BODY_PARAMETER_DEFAULT_VALUE</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#RESERVED_WORDS"
+     >RESERVED_WORDS</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#STACK_QUERY_PARAMETERS"
+     >STACK_QUERY_PARAMETERS</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#STACK_QUERY_PARAMETER_DEFAULT_VALUE"
+     >STACK_QUERY_PARAMETER_DEFAULT_VALUE</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#URITEMPLATE"
+     >URITEMPLATE</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#VARNAME"
+     >VARNAME</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#_MEDIA_SIZE_BIT_SHIFTS"
+     >_MEDIA_SIZE_BIT_SHIFTS</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#logger"
+     >logger</a><br />  </div>
+<hr />
 <span class="options">[<a href="javascript:void(0);" class="privatelink"
     onclick="toggle_private();">hide&nbsp;private</a>]</span>
 
diff --git a/docs/epy/toc-everything.html b/docs/epy/toc-everything.html
index f96a6f3..239b732 100644
--- a/docs/epy/toc-everything.html
+++ b/docs/epy/toc-everything.html
@@ -13,8 +13,13 @@
 <h1 class="toc">Everything</h1>
 <hr />
   <h2 class="toc">All Classes</h2>
+  <div class="private">
     <a target="mainFrame" href="apiclient.discovery.Resource-class.html"
-     >apiclient.discovery.Resource</a><br />    <a target="mainFrame" href="apiclient.errors.BatchError-class.html"
+     >apiclient.discovery.Resource</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery.ResourceMethodParameters-class.html"
+     >apiclient.discovery.ResourceMethodParameters</a><br />  </div>
+    <a target="mainFrame" href="apiclient.errors.BatchError-class.html"
      >apiclient.errors.BatchError</a><br />    <a target="mainFrame" href="apiclient.errors.Error-class.html"
      >apiclient.errors.Error</a><br />    <a target="mainFrame" href="apiclient.errors.HttpError-class.html"
      >apiclient.errors.HttpError</a><br />    <a target="mainFrame" href="apiclient.errors.InvalidChunkSizeError-class.html"
@@ -58,7 +63,8 @@
      >apiclient.schema.Schemas</a><br />  <div class="private">
     <a target="mainFrame" href="apiclient.schema._SchemaToStruct-class.html"
      >apiclient.schema._SchemaToStruct</a><br />  </div>
-    <a target="mainFrame" href="oauth2client.appengine.AppAssertionCredentials-class.html"
+    <a target="mainFrame" href="google.appengine.ext.db.PropertiedClass-class.html"
+     >google.appengine.ext.db.PropertiedClass</a><br />    <a target="mainFrame" href="oauth2client.appengine.AppAssertionCredentials-class.html"
      >oauth2client.appengine.AppAssertionCredentials</a><br />    <a target="mainFrame" href="oauth2client.appengine.CredentialsModel-class.html"
      >oauth2client.appengine.CredentialsModel</a><br />    <a target="mainFrame" href="oauth2client.appengine.CredentialsNDBModel-class.html"
      >oauth2client.appengine.CredentialsNDBModel</a><br />    <a target="mainFrame" href="oauth2client.appengine.CredentialsNDBProperty-class.html"
@@ -86,7 +92,8 @@
      >oauth2client.client.OAuth2Credentials</a><br />    <a target="mainFrame" href="oauth2client.client.OAuth2WebServerFlow-class.html"
      >oauth2client.client.OAuth2WebServerFlow</a><br />    <a target="mainFrame" href="oauth2client.client.SignedJwtAssertionCredentials-class.html"
      >oauth2client.client.SignedJwtAssertionCredentials</a><br />    <a target="mainFrame" href="oauth2client.client.Storage-class.html"
-     >oauth2client.client.Storage</a><br />    <a target="mainFrame" href="oauth2client.client.UnknownClientSecretsFlowError-class.html"
+     >oauth2client.client.Storage</a><br />    <a target="mainFrame" href="oauth2client.client.TokenRevokeError-class.html"
+     >oauth2client.client.TokenRevokeError</a><br />    <a target="mainFrame" href="oauth2client.client.UnknownClientSecretsFlowError-class.html"
      >oauth2client.client.UnknownClientSecretsFlowError</a><br />    <a target="mainFrame" href="oauth2client.client.VerifyJwtTokenError-class.html"
      >oauth2client.client.VerifyJwtTokenError</a><br />    <a target="mainFrame" href="oauth2client.clientsecrets.Error-class.html"
      >oauth2client.clientsecrets.Error</a><br />    <a target="mainFrame" href="oauth2client.clientsecrets.InvalidClientSecretsError-class.html"
@@ -123,19 +130,32 @@
      >oauth2client.tools.ClientRedirectServer</a><br />  </div>
   <h2 class="toc">All Functions</h2>
   <div class="private">
-    <a target="mainFrame" href="apiclient.discovery-module.html#_add_query_parameter"
-     >apiclient.discovery._add_query_parameter</a><br />  </div>
-  <div class="private">
     <a target="mainFrame" href="apiclient.discovery-module.html#_cast"
      >apiclient.discovery._cast</a><br />  </div>
   <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#_fix_up_media_upload"
+     >apiclient.discovery._fix_up_media_upload</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#_fix_up_method_description"
+     >apiclient.discovery._fix_up_method_description</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#_fix_up_parameters"
+     >apiclient.discovery._fix_up_parameters</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#_media_path_url_from_info"
+     >apiclient.discovery._media_path_url_from_info</a><br />  </div>
+  <div class="private">
     <a target="mainFrame" href="apiclient.discovery-module.html#_media_size_to_long"
      >apiclient.discovery._media_size_to_long</a><br />  </div>
     <a target="mainFrame" href="apiclient.discovery-module.html#build"
      >apiclient.discovery.build</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#build_from_document"
-     >apiclient.discovery.build_from_document</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#createMethod"
-     >apiclient.discovery.createMethod</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#createNextMethod"
-     >apiclient.discovery.createNextMethod</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#fix_method_name"
+     >apiclient.discovery.build_from_document</a><br />  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#createMethod"
+     >apiclient.discovery.createMethod</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#createNextMethod"
+     >apiclient.discovery.createNextMethod</a><br />  </div>
+    <a target="mainFrame" href="apiclient.discovery-module.html#fix_method_name"
      >apiclient.discovery.fix_method_name</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#key2param"
      >apiclient.discovery.key2param</a><br />    <a target="mainFrame" href="apiclient.http-module.html#set_user_agent"
      >apiclient.http.set_user_agent</a><br />    <a target="mainFrame" href="apiclient.http-module.html#tunnel_patch"
@@ -177,6 +197,9 @@
     <a target="mainFrame" href="oauth2client.client-module.html#_parse_exchange_token_response"
      >oauth2client.client._parse_exchange_token_response</a><br />  </div>
   <div class="private">
+    <a target="mainFrame" href="oauth2client.client-module.html#_update_query_params"
+     >oauth2client.client._update_query_params</a><br />  </div>
+  <div class="private">
     <a target="mainFrame" href="oauth2client.client-module.html#_urlsafe_b64decode"
      >oauth2client.client._urlsafe_b64decode</a><br />  </div>
     <a target="mainFrame" href="oauth2client.client-module.html#clean_headers"
@@ -210,6 +233,9 @@
      >oauth2client.multistore_file.get_credential_storage_custom_key</a><br />    <a target="mainFrame" href="oauth2client.multistore_file-module.html#get_credential_storage_custom_string_key"
      >oauth2client.multistore_file.get_credential_storage_custom_string_key</a><br />    <a target="mainFrame" href="oauth2client.tools-module.html#run"
      >oauth2client.tools.run</a><br />  <div class="private">
+    <a target="mainFrame" href="oauth2client.util-module.html#_add_query_parameter"
+     >oauth2client.util._add_query_parameter</a><br />  </div>
+  <div class="private">
     <a target="mainFrame" href="oauth2client.util-module.html#dict_to_tuple_key"
      >oauth2client.util.dict_to_tuple_key</a><br />  </div>
     <a target="mainFrame" href="oauth2client.util-module.html#positional"
@@ -219,43 +245,43 @@
     <a target="mainFrame" href="oauth2client.xsrfutil-module.html#generate_token"
      >oauth2client.xsrfutil.generate_token</a><br />    <a target="mainFrame" href="oauth2client.xsrfutil-module.html#validate_token"
      >oauth2client.xsrfutil.validate_token</a><br />  <h2 class="toc">All Variables</h2>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#BODY_PARAMETER_DEFAULT_VALUE"
+     >apiclient.discovery.BODY_PARAMETER_DEFAULT_VALUE</a><br />  </div>
+  <div class="private">
     <a target="mainFrame" href="apiclient.discovery-module.html#DEFAULT_METHOD_DOC"
-     >apiclient.discovery.DEFAULT_METHOD_DOC</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#DISCOVERY_URI"
-     >apiclient.discovery.DISCOVERY_URI</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#HttpError"
-     >apiclient.discovery.HttpError</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#HttpRequest"
-     >apiclient.discovery.HttpRequest</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#InvalidJsonError"
-     >apiclient.discovery.InvalidJsonError</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#JsonModel"
-     >apiclient.discovery.JsonModel</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MIMEMultipart"
-     >apiclient.discovery.MIMEMultipart</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MIMENonMultipart"
-     >apiclient.discovery.MIMENonMultipart</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MULTIPLIERS"
-     >apiclient.discovery.MULTIPLIERS</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MediaFileUpload"
-     >apiclient.discovery.MediaFileUpload</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MediaModel"
-     >apiclient.discovery.MediaModel</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MediaUpload"
-     >apiclient.discovery.MediaUpload</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#MediaUploadSizeError"
-     >apiclient.discovery.MediaUploadSizeError</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#RESERVED_WORDS"
-     >apiclient.discovery.RESERVED_WORDS</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#RawModel"
-     >apiclient.discovery.RawModel</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#STACK_QUERY_PARAMETERS"
-     >apiclient.discovery.STACK_QUERY_PARAMETERS</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#Schemas"
-     >apiclient.discovery.Schemas</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#URITEMPLATE"
-     >apiclient.discovery.URITEMPLATE</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#UnacceptableMimeTypeError"
-     >apiclient.discovery.UnacceptableMimeTypeError</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#UnknownApiNameOrVersion"
-     >apiclient.discovery.UnknownApiNameOrVersion</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#UnknownFileType"
-     >apiclient.discovery.UnknownFileType</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#VARNAME"
-     >apiclient.discovery.VARNAME</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#copy"
-     >apiclient.discovery.copy</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#httplib2"
-     >apiclient.discovery.httplib2</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#logger"
-     >apiclient.discovery.logger</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#logging"
-     >apiclient.discovery.logging</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#mimeparse"
-     >apiclient.discovery.mimeparse</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#mimetypes"
-     >apiclient.discovery.mimetypes</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#os"
-     >apiclient.discovery.os</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#parse_qsl"
-     >apiclient.discovery.parse_qsl</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#positional"
-     >apiclient.discovery.positional</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#re"
-     >apiclient.discovery.re</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#simplejson"
-     >apiclient.discovery.simplejson</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#uritemplate"
-     >apiclient.discovery.uritemplate</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#urllib"
-     >apiclient.discovery.urllib</a><br />    <a target="mainFrame" href="apiclient.discovery-module.html#urlparse"
-     >apiclient.discovery.urlparse</a><br />    <a target="mainFrame" href="apiclient.http-module.html#DEFAULT_CHUNK_SIZE"
+     >apiclient.discovery.DEFAULT_METHOD_DOC</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#DISCOVERY_URI"
+     >apiclient.discovery.DISCOVERY_URI</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#HTTP_PAYLOAD_METHODS"
+     >apiclient.discovery.HTTP_PAYLOAD_METHODS</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#MEDIA_BODY_PARAMETER_DEFAULT_VALUE"
+     >apiclient.discovery.MEDIA_BODY_PARAMETER_DEFAULT_VALUE</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#RESERVED_WORDS"
+     >apiclient.discovery.RESERVED_WORDS</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#STACK_QUERY_PARAMETERS"
+     >apiclient.discovery.STACK_QUERY_PARAMETERS</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#STACK_QUERY_PARAMETER_DEFAULT_VALUE"
+     >apiclient.discovery.STACK_QUERY_PARAMETER_DEFAULT_VALUE</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#URITEMPLATE"
+     >apiclient.discovery.URITEMPLATE</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#VARNAME"
+     >apiclient.discovery.VARNAME</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#_MEDIA_SIZE_BIT_SHIFTS"
+     >apiclient.discovery._MEDIA_SIZE_BIT_SHIFTS</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="apiclient.discovery-module.html#logger"
+     >apiclient.discovery.logger</a><br />  </div>
+    <a target="mainFrame" href="apiclient.http-module.html#DEFAULT_CHUNK_SIZE"
      >apiclient.http.DEFAULT_CHUNK_SIZE</a><br />    <a target="mainFrame" href="apiclient.http-module.html#MAX_URI_LENGTH"
      >apiclient.http.MAX_URI_LENGTH</a><br />    <a target="mainFrame" href="apiclient.mimeparse-module.html#__credits__"
      >apiclient.mimeparse.__credits__</a><br />    <a target="mainFrame" href="apiclient.mimeparse-module.html#__email__"
@@ -267,12 +293,17 @@
      >apiclient.push.SUBSCRIPTION_ID</a><br />    <a target="mainFrame" href="apiclient.push-module.html#TOPIC_ID"
      >apiclient.push.TOPIC_ID</a><br />    <a target="mainFrame" href="apiclient.push-module.html#TOPIC_URI"
      >apiclient.push.TOPIC_URI</a><br />    <a target="mainFrame" href="apiclient.push-module.html#UNSUBSCRIBE"
-     >apiclient.push.UNSUBSCRIBE</a><br />    <a target="mainFrame" href="oauth2client.appengine-module.html#OAUTH2CLIENT_NAMESPACE"
+     >apiclient.push.UNSUBSCRIBE</a><br />    <a target="mainFrame" href="oauth2client-module.html#GOOGLE_AUTH_URI"
+     >oauth2client.GOOGLE_AUTH_URI</a><br />    <a target="mainFrame" href="oauth2client-module.html#GOOGLE_REVOKE_URI"
+     >oauth2client.GOOGLE_REVOKE_URI</a><br />    <a target="mainFrame" href="oauth2client-module.html#GOOGLE_TOKEN_URI"
+     >oauth2client.GOOGLE_TOKEN_URI</a><br />    <a target="mainFrame" href="oauth2client.appengine-module.html#OAUTH2CLIENT_NAMESPACE"
      >oauth2client.appengine.OAUTH2CLIENT_NAMESPACE</a><br />    <a target="mainFrame" href="oauth2client.appengine-module.html#XSRF_MEMCACHE_ID"
      >oauth2client.appengine.XSRF_MEMCACHE_ID</a><br />    <a target="mainFrame" href="oauth2client.appengine-module.html#logger"
-     >oauth2client.appengine.logger</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#EXPIRY_FORMAT"
+     >oauth2client.appengine.logger</a><br />    <a target="mainFrame" href="oauth2client.appengine-module.html#ndb"
+     >oauth2client.appengine.ndb</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#EXPIRY_FORMAT"
      >oauth2client.client.EXPIRY_FORMAT</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#HAS_CRYPTO"
-     >oauth2client.client.HAS_CRYPTO</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#ID_TOKEN_VERIFICATON_CERTS"
+     >oauth2client.client.HAS_CRYPTO</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#HAS_OPENSSL"
+     >oauth2client.client.HAS_OPENSSL</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#ID_TOKEN_VERIFICATON_CERTS"
      >oauth2client.client.ID_TOKEN_VERIFICATON_CERTS</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#OOB_CALLBACK_URN"
      >oauth2client.client.OOB_CALLBACK_URN</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#REFRESH_STATUS_CODES"
      >oauth2client.client.REFRESH_STATUS_CODES</a><br />  <div class="private">
diff --git a/docs/epy/toc-oauth2client-module.html b/docs/epy/toc-oauth2client-module.html
index fa3c8b8..79b9d85 100644
--- a/docs/epy/toc-oauth2client-module.html
+++ b/docs/epy/toc-oauth2client-module.html
@@ -12,7 +12,11 @@
       alink="#204080">
 <h1 class="toc">Module oauth2client</h1>
 <hr />
-<hr />
+  <h2 class="toc">Variables</h2>
+    <a target="mainFrame" href="oauth2client-module.html#GOOGLE_AUTH_URI"
+     >GOOGLE_AUTH_URI</a><br />    <a target="mainFrame" href="oauth2client-module.html#GOOGLE_REVOKE_URI"
+     >GOOGLE_REVOKE_URI</a><br />    <a target="mainFrame" href="oauth2client-module.html#GOOGLE_TOKEN_URI"
+     >GOOGLE_TOKEN_URI</a><br /><hr />
 <span class="options">[<a href="javascript:void(0);" class="privatelink"
     onclick="toggle_private();">hide&nbsp;private</a>]</span>
 
diff --git a/docs/epy/toc-oauth2client.appengine-module.html b/docs/epy/toc-oauth2client.appengine-module.html
index 89f005b..3acc0eb 100644
--- a/docs/epy/toc-oauth2client.appengine-module.html
+++ b/docs/epy/toc-oauth2client.appengine-module.html
@@ -46,7 +46,8 @@
     <a target="mainFrame" href="oauth2client.appengine-module.html#OAUTH2CLIENT_NAMESPACE"
      >OAUTH2CLIENT_NAMESPACE</a><br />    <a target="mainFrame" href="oauth2client.appengine-module.html#XSRF_MEMCACHE_ID"
      >XSRF_MEMCACHE_ID</a><br />    <a target="mainFrame" href="oauth2client.appengine-module.html#logger"
-     >logger</a><br /><hr />
+     >logger</a><br />    <a target="mainFrame" href="oauth2client.appengine-module.html#ndb"
+     >ndb</a><br /><hr />
 <span class="options">[<a href="javascript:void(0);" class="privatelink"
     onclick="toggle_private();">hide&nbsp;private</a>]</span>
 
diff --git a/docs/epy/toc-oauth2client.client-module.html b/docs/epy/toc-oauth2client.client-module.html
index 235f7e3..2c73ba1 100644
--- a/docs/epy/toc-oauth2client.client-module.html
+++ b/docs/epy/toc-oauth2client.client-module.html
@@ -27,7 +27,8 @@
      >OAuth2Credentials</a><br />    <a target="mainFrame" href="oauth2client.client.OAuth2WebServerFlow-class.html"
      >OAuth2WebServerFlow</a><br />    <a target="mainFrame" href="oauth2client.client.SignedJwtAssertionCredentials-class.html"
      >SignedJwtAssertionCredentials</a><br />    <a target="mainFrame" href="oauth2client.client.Storage-class.html"
-     >Storage</a><br />    <a target="mainFrame" href="oauth2client.client.UnknownClientSecretsFlowError-class.html"
+     >Storage</a><br />    <a target="mainFrame" href="oauth2client.client.TokenRevokeError-class.html"
+     >TokenRevokeError</a><br />    <a target="mainFrame" href="oauth2client.client.UnknownClientSecretsFlowError-class.html"
      >UnknownClientSecretsFlowError</a><br />    <a target="mainFrame" href="oauth2client.client.VerifyJwtTokenError-class.html"
      >VerifyJwtTokenError</a><br />  <h2 class="toc">Functions</h2>
   <div class="private">
@@ -40,6 +41,9 @@
     <a target="mainFrame" href="oauth2client.client-module.html#_parse_exchange_token_response"
      >_parse_exchange_token_response</a><br />  </div>
   <div class="private">
+    <a target="mainFrame" href="oauth2client.client-module.html#_update_query_params"
+     >_update_query_params</a><br />  </div>
+  <div class="private">
     <a target="mainFrame" href="oauth2client.client-module.html#_urlsafe_b64decode"
      >_urlsafe_b64decode</a><br />  </div>
     <a target="mainFrame" href="oauth2client.client-module.html#clean_headers"
@@ -50,7 +54,8 @@
      >verify_id_token</a><br />  <h2 class="toc">Variables</h2>
     <a target="mainFrame" href="oauth2client.client-module.html#EXPIRY_FORMAT"
      >EXPIRY_FORMAT</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#HAS_CRYPTO"
-     >HAS_CRYPTO</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#ID_TOKEN_VERIFICATON_CERTS"
+     >HAS_CRYPTO</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#HAS_OPENSSL"
+     >HAS_OPENSSL</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#ID_TOKEN_VERIFICATON_CERTS"
      >ID_TOKEN_VERIFICATON_CERTS</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#OOB_CALLBACK_URN"
      >OOB_CALLBACK_URN</a><br />    <a target="mainFrame" href="oauth2client.client-module.html#REFRESH_STATUS_CODES"
      >REFRESH_STATUS_CODES</a><br />  <div class="private">
diff --git a/docs/epy/toc-oauth2client.util-module.html b/docs/epy/toc-oauth2client.util-module.html
index df65386..4274b02 100644
--- a/docs/epy/toc-oauth2client.util-module.html
+++ b/docs/epy/toc-oauth2client.util-module.html
@@ -14,6 +14,9 @@
 <hr />
   <h2 class="toc">Functions</h2>
   <div class="private">
+    <a target="mainFrame" href="oauth2client.util-module.html#_add_query_parameter"
+     >_add_query_parameter</a><br />  </div>
+  <div class="private">
     <a target="mainFrame" href="oauth2client.util-module.html#dict_to_tuple_key"
      >dict_to_tuple_key</a><br />  </div>
     <a target="mainFrame" href="oauth2client.util-module.html#positional"