<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="fusiontables_v2.html">Fusion Tables API</a> . <a href="fusiontables_v2.template.html">template</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(tableId, templateId)</a></code></p>
<p class="firstline">Deletes a template</p>
<p class="toc_element">
  <code><a href="#get">get(tableId, templateId)</a></code></p>
<p class="firstline">Retrieves a specific template by its id</p>
<p class="toc_element">
  <code><a href="#insert">insert(tableId, body)</a></code></p>
<p class="firstline">Creates a new template for the table.</p>
<p class="toc_element">
  <code><a href="#list">list(tableId, pageToken=None, maxResults=None)</a></code></p>
<p class="firstline">Retrieves a list of templates.</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="#patch">patch(tableId, templateId, body)</a></code></p>
<p class="firstline">Updates an existing template. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(tableId, templateId, body)</a></code></p>
<p class="firstline">Updates an existing template</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(tableId, templateId)</code>
  <pre>Deletes a template

Args:
  tableId: string, Table from which the template is being deleted (required)
  templateId: integer, Identifier for the template which is being deleted (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(tableId, templateId)</code>
  <pre>Retrieves a specific template by its id

Args:
  tableId: string, Table to which the template belongs (required)
  templateId: integer, Identifier for the template that is being requested (required)

Returns:
  An object of the form:

    { # Represents the contents of InfoWindow templates.
      "body": "A String", # Body of the template. It contains HTML with {column_name} to insert values from a particular column. The body is sanitized to remove certain tags, e.g., script. Only one of body or automaticColumns can be specified.
      "kind": "fusiontables#template", # The kind of item this is. For a template, this is always fusiontables#template.
      "name": "A String", # Optional name assigned to a template.
      "automaticColumnNames": [ # List of columns from which the template is to be automatically constructed. Only one of body or automaticColumns can be specified.
        "A String",
      ],
      "tableId": "A String", # Identifier for the table for which the template is defined.
      "templateId": 42, # Identifier for the template, unique within the context of a particular table.
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(tableId, body)</code>
  <pre>Creates a new template for the table.

Args:
  tableId: string, Table for which a new template is being created (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Represents the contents of InfoWindow templates.
    "body": "A String", # Body of the template. It contains HTML with {column_name} to insert values from a particular column. The body is sanitized to remove certain tags, e.g., script. Only one of body or automaticColumns can be specified.
    "kind": "fusiontables#template", # The kind of item this is. For a template, this is always fusiontables#template.
    "name": "A String", # Optional name assigned to a template.
    "automaticColumnNames": [ # List of columns from which the template is to be automatically constructed. Only one of body or automaticColumns can be specified.
      "A String",
    ],
    "tableId": "A String", # Identifier for the table for which the template is defined.
    "templateId": 42, # Identifier for the template, unique within the context of a particular table.
  }


Returns:
  An object of the form:

    { # Represents the contents of InfoWindow templates.
      "body": "A String", # Body of the template. It contains HTML with {column_name} to insert values from a particular column. The body is sanitized to remove certain tags, e.g., script. Only one of body or automaticColumns can be specified.
      "kind": "fusiontables#template", # The kind of item this is. For a template, this is always fusiontables#template.
      "name": "A String", # Optional name assigned to a template.
      "automaticColumnNames": [ # List of columns from which the template is to be automatically constructed. Only one of body or automaticColumns can be specified.
        "A String",
      ],
      "tableId": "A String", # Identifier for the table for which the template is defined.
      "templateId": 42, # Identifier for the template, unique within the context of a particular table.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(tableId, pageToken=None, maxResults=None)</code>
  <pre>Retrieves a list of templates.

Args:
  tableId: string, Identifier for the table whose templates are being requested (required)
  pageToken: string, Continuation token specifying which results page to return. Optional.
  maxResults: integer, Maximum number of templates to return. Optional. Default is 5.

Returns:
  An object of the form:

    { # Represents a list of templates for a given table.
    "nextPageToken": "A String", # Token used to access the next page of this result. No token is displayed if there are no more pages left.
    "items": [ # List of all requested templates.
      { # Represents the contents of InfoWindow templates.
          "body": "A String", # Body of the template. It contains HTML with {column_name} to insert values from a particular column. The body is sanitized to remove certain tags, e.g., script. Only one of body or automaticColumns can be specified.
          "kind": "fusiontables#template", # The kind of item this is. For a template, this is always fusiontables#template.
          "name": "A String", # Optional name assigned to a template.
          "automaticColumnNames": [ # List of columns from which the template is to be automatically constructed. Only one of body or automaticColumns can be specified.
            "A String",
          ],
          "tableId": "A String", # Identifier for the table for which the template is defined.
          "templateId": 42, # Identifier for the template, unique within the context of a particular table.
        },
    ],
    "kind": "fusiontables#templateList", # The kind of item this is. For a template list, this is always fusiontables#templateList .
    "totalItems": 42, # Total number of templates for the table.
  }</pre>
</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="patch">patch(tableId, templateId, body)</code>
  <pre>Updates an existing template. This method supports patch semantics.

Args:
  tableId: string, Table to which the updated template belongs (required)
  templateId: integer, Identifier for the template that is being updated (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Represents the contents of InfoWindow templates.
    "body": "A String", # Body of the template. It contains HTML with {column_name} to insert values from a particular column. The body is sanitized to remove certain tags, e.g., script. Only one of body or automaticColumns can be specified.
    "kind": "fusiontables#template", # The kind of item this is. For a template, this is always fusiontables#template.
    "name": "A String", # Optional name assigned to a template.
    "automaticColumnNames": [ # List of columns from which the template is to be automatically constructed. Only one of body or automaticColumns can be specified.
      "A String",
    ],
    "tableId": "A String", # Identifier for the table for which the template is defined.
    "templateId": 42, # Identifier for the template, unique within the context of a particular table.
  }


Returns:
  An object of the form:

    { # Represents the contents of InfoWindow templates.
      "body": "A String", # Body of the template. It contains HTML with {column_name} to insert values from a particular column. The body is sanitized to remove certain tags, e.g., script. Only one of body or automaticColumns can be specified.
      "kind": "fusiontables#template", # The kind of item this is. For a template, this is always fusiontables#template.
      "name": "A String", # Optional name assigned to a template.
      "automaticColumnNames": [ # List of columns from which the template is to be automatically constructed. Only one of body or automaticColumns can be specified.
        "A String",
      ],
      "tableId": "A String", # Identifier for the table for which the template is defined.
      "templateId": 42, # Identifier for the template, unique within the context of a particular table.
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(tableId, templateId, body)</code>
  <pre>Updates an existing template

Args:
  tableId: string, Table to which the updated template belongs (required)
  templateId: integer, Identifier for the template that is being updated (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Represents the contents of InfoWindow templates.
    "body": "A String", # Body of the template. It contains HTML with {column_name} to insert values from a particular column. The body is sanitized to remove certain tags, e.g., script. Only one of body or automaticColumns can be specified.
    "kind": "fusiontables#template", # The kind of item this is. For a template, this is always fusiontables#template.
    "name": "A String", # Optional name assigned to a template.
    "automaticColumnNames": [ # List of columns from which the template is to be automatically constructed. Only one of body or automaticColumns can be specified.
      "A String",
    ],
    "tableId": "A String", # Identifier for the table for which the template is defined.
    "templateId": 42, # Identifier for the template, unique within the context of a particular table.
  }


Returns:
  An object of the form:

    { # Represents the contents of InfoWindow templates.
      "body": "A String", # Body of the template. It contains HTML with {column_name} to insert values from a particular column. The body is sanitized to remove certain tags, e.g., script. Only one of body or automaticColumns can be specified.
      "kind": "fusiontables#template", # The kind of item this is. For a template, this is always fusiontables#template.
      "name": "A String", # Optional name assigned to a template.
      "automaticColumnNames": [ # List of columns from which the template is to be automatically constructed. Only one of body or automaticColumns can be specified.
        "A String",
      ],
      "tableId": "A String", # Identifier for the table for which the template is defined.
      "templateId": 42, # Identifier for the template, unique within the context of a particular table.
    }</pre>
</div>

</body></html>