<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="area120tables_v1alpha1.html">Area120 Tables API</a> . <a href="area120tables_v1alpha1.tables.html">tables</a> . <a href="area120tables_v1alpha1.tables.rows.html">rows</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#batchCreate">batchCreate(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates multiple rows.</p>
<p class="toc_element">
  <code><a href="#batchDelete">batchDelete(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes multiple rows.</p>
<p class="toc_element">
  <code><a href="#batchUpdate">batchUpdate(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates multiple rows.</p>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a row.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a row.</p>
<p class="toc_element">
  <code><a href="#get">get(name, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a row. Returns NOT_FOUND if the row does not exist in the table.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists rows in a table. Returns NOT_FOUND if the table does not exist.</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(name, body=None, updateMask=None, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a row.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchCreate">batchCreate(parent, body=None, x__xgafv=None)</code>
  <pre>Creates multiple rows.

Args:
  parent: string, Required. The parent table where the rows will be created. Format: tables/{table} (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for TablesService.BatchCreateRows.
  &quot;requests&quot;: [ # Required. The request message specifying the rows to create. A maximum of 500 rows can be created in a single batch.
    { # Request message for TablesService.CreateRow.
      &quot;parent&quot;: &quot;A String&quot;, # Required. The parent table where this row will be created. Format: tables/{table}
      &quot;row&quot;: { # A single row in a table. # Required. The row to create.
        &quot;createTime&quot;: &quot;A String&quot;, # Time when the row was created.
        &quot;name&quot;: &quot;A String&quot;, # The resource name of the row. Row names have the form `tables/{table}/rows/{row}`. The name is ignored when creating a row.
        &quot;updateTime&quot;: &quot;A String&quot;, # Time when the row was last updated.
        &quot;values&quot;: { # The values of the row. This is a map of column key to value. Key is user entered name(default) or the internal column id based on the view in the request.
          &quot;a_key&quot;: &quot;&quot;,
        },
      },
      &quot;view&quot;: &quot;A String&quot;, # Optional. Column key to use for values in the row. Defaults to user entered name.
    },
  ],
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for TablesService.BatchCreateRows.
  &quot;rows&quot;: [ # The created rows.
    { # A single row in a table.
      &quot;createTime&quot;: &quot;A String&quot;, # Time when the row was created.
      &quot;name&quot;: &quot;A String&quot;, # The resource name of the row. Row names have the form `tables/{table}/rows/{row}`. The name is ignored when creating a row.
      &quot;updateTime&quot;: &quot;A String&quot;, # Time when the row was last updated.
      &quot;values&quot;: { # The values of the row. This is a map of column key to value. Key is user entered name(default) or the internal column id based on the view in the request.
        &quot;a_key&quot;: &quot;&quot;,
      },
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="batchDelete">batchDelete(parent, body=None, x__xgafv=None)</code>
  <pre>Deletes multiple rows.

Args:
  parent: string, Required. The parent table shared by all rows being deleted. Format: tables/{table} (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for TablesService.BatchDeleteRows
  &quot;names&quot;: [ # Required. The names of the rows to delete. All rows must belong to the parent table or else the entire batch will fail. A maximum of 500 rows can be deleted in a batch. Format: tables/{table}/rows/{row}
    &quot;A String&quot;,
  ],
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="batchUpdate">batchUpdate(parent, body=None, x__xgafv=None)</code>
  <pre>Updates multiple rows.

Args:
  parent: string, Required. The parent table shared by all rows being updated. Format: tables/{table} (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for TablesService.BatchUpdateRows.
  &quot;requests&quot;: [ # Required. The request messages specifying the rows to update. A maximum of 500 rows can be modified in a single batch.
    { # Request message for TablesService.UpdateRow.
      &quot;row&quot;: { # A single row in a table. # Required. The row to update.
        &quot;createTime&quot;: &quot;A String&quot;, # Time when the row was created.
        &quot;name&quot;: &quot;A String&quot;, # The resource name of the row. Row names have the form `tables/{table}/rows/{row}`. The name is ignored when creating a row.
        &quot;updateTime&quot;: &quot;A String&quot;, # Time when the row was last updated.
        &quot;values&quot;: { # The values of the row. This is a map of column key to value. Key is user entered name(default) or the internal column id based on the view in the request.
          &quot;a_key&quot;: &quot;&quot;,
        },
      },
      &quot;updateMask&quot;: &quot;A String&quot;, # The list of fields to update.
      &quot;view&quot;: &quot;A String&quot;, # Optional. Column key to use for values in the row. Defaults to user entered name.
    },
  ],
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for TablesService.BatchUpdateRows.
  &quot;rows&quot;: [ # The updated rows.
    { # A single row in a table.
      &quot;createTime&quot;: &quot;A String&quot;, # Time when the row was created.
      &quot;name&quot;: &quot;A String&quot;, # The resource name of the row. Row names have the form `tables/{table}/rows/{row}`. The name is ignored when creating a row.
      &quot;updateTime&quot;: &quot;A String&quot;, # Time when the row was last updated.
      &quot;values&quot;: { # The values of the row. This is a map of column key to value. Key is user entered name(default) or the internal column id based on the view in the request.
        &quot;a_key&quot;: &quot;&quot;,
      },
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, view=None, x__xgafv=None)</code>
  <pre>Creates a row.

Args:
  parent: string, Required. The parent table where this row will be created. Format: tables/{table} (required)
  body: object, The request body.
    The object takes the form of:

{ # A single row in a table.
  &quot;createTime&quot;: &quot;A String&quot;, # Time when the row was created.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the row. Row names have the form `tables/{table}/rows/{row}`. The name is ignored when creating a row.
  &quot;updateTime&quot;: &quot;A String&quot;, # Time when the row was last updated.
  &quot;values&quot;: { # The values of the row. This is a map of column key to value. Key is user entered name(default) or the internal column id based on the view in the request.
    &quot;a_key&quot;: &quot;&quot;,
  },
}

  view: string, Optional. Column key to use for values in the row. Defaults to user entered name.
    Allowed values
      VIEW_UNSPECIFIED - Defaults to user entered text.
      COLUMN_ID_VIEW - Uses internally generated column id to identify values.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A single row in a table.
  &quot;createTime&quot;: &quot;A String&quot;, # Time when the row was created.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the row. Row names have the form `tables/{table}/rows/{row}`. The name is ignored when creating a row.
  &quot;updateTime&quot;: &quot;A String&quot;, # Time when the row was last updated.
  &quot;values&quot;: { # The values of the row. This is a map of column key to value. Key is user entered name(default) or the internal column id based on the view in the request.
    &quot;a_key&quot;: &quot;&quot;,
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a row.

Args:
  name: string, Required. The name of the row to delete. Format: tables/{table}/rows/{row} (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, view=None, x__xgafv=None)</code>
  <pre>Gets a row. Returns NOT_FOUND if the row does not exist in the table.

Args:
  name: string, Required. The name of the row to retrieve. Format: tables/{table}/rows/{row} (required)
  view: string, Optional. Column key to use for values in the row. Defaults to user entered name.
    Allowed values
      VIEW_UNSPECIFIED - Defaults to user entered text.
      COLUMN_ID_VIEW - Uses internally generated column id to identify values.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A single row in a table.
  &quot;createTime&quot;: &quot;A String&quot;, # Time when the row was created.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the row. Row names have the form `tables/{table}/rows/{row}`. The name is ignored when creating a row.
  &quot;updateTime&quot;: &quot;A String&quot;, # Time when the row was last updated.
  &quot;values&quot;: { # The values of the row. This is a map of column key to value. Key is user entered name(default) or the internal column id based on the view in the request.
    &quot;a_key&quot;: &quot;&quot;,
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, view=None, x__xgafv=None)</code>
  <pre>Lists rows in a table. Returns NOT_FOUND if the table does not exist.

Args:
  parent: string, Required. The parent table. Format: tables/{table} (required)
  filter: string, Optional. Filter to only include resources matching the requirements. For more information, see [Filtering list results](https://support.google.com/area120-tables/answer/10503371).
  orderBy: string, Optional. Sorting order for the list of rows on createTime/updateTime.
  pageSize: integer, The maximum number of rows to return. The service may return fewer than this value. If unspecified, at most 50 rows are returned. The maximum value is 1,000; values above 1,000 are coerced to 1,000.
  pageToken: string, A page token, received from a previous `ListRows` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListRows` must match the call that provided the page token.
  view: string, Optional. Column key to use for values in the row. Defaults to user entered name.
    Allowed values
      VIEW_UNSPECIFIED - Defaults to user entered text.
      COLUMN_ID_VIEW - Uses internally generated column id to identify values.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for TablesService.ListRows.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token, which can be sent as `page_token` to retrieve the next page. If this field is empty, there are no subsequent pages.
  &quot;rows&quot;: [ # The rows from the specified table.
    { # A single row in a table.
      &quot;createTime&quot;: &quot;A String&quot;, # Time when the row was created.
      &quot;name&quot;: &quot;A String&quot;, # The resource name of the row. Row names have the form `tables/{table}/rows/{row}`. The name is ignored when creating a row.
      &quot;updateTime&quot;: &quot;A String&quot;, # Time when the row was last updated.
      &quot;values&quot;: { # The values of the row. This is a map of column key to value. Key is user entered name(default) or the internal column id based on the view in the request.
        &quot;a_key&quot;: &quot;&quot;,
      },
    },
  ],
}</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 &#x27;execute()&#x27; 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(name, body=None, updateMask=None, view=None, x__xgafv=None)</code>
  <pre>Updates a row.

Args:
  name: string, The resource name of the row. Row names have the form `tables/{table}/rows/{row}`. The name is ignored when creating a row. (required)
  body: object, The request body.
    The object takes the form of:

{ # A single row in a table.
  &quot;createTime&quot;: &quot;A String&quot;, # Time when the row was created.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the row. Row names have the form `tables/{table}/rows/{row}`. The name is ignored when creating a row.
  &quot;updateTime&quot;: &quot;A String&quot;, # Time when the row was last updated.
  &quot;values&quot;: { # The values of the row. This is a map of column key to value. Key is user entered name(default) or the internal column id based on the view in the request.
    &quot;a_key&quot;: &quot;&quot;,
  },
}

  updateMask: string, The list of fields to update.
  view: string, Optional. Column key to use for values in the row. Defaults to user entered name.
    Allowed values
      VIEW_UNSPECIFIED - Defaults to user entered text.
      COLUMN_ID_VIEW - Uses internally generated column id to identify values.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A single row in a table.
  &quot;createTime&quot;: &quot;A String&quot;, # Time when the row was created.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the row. Row names have the form `tables/{table}/rows/{row}`. The name is ignored when creating a row.
  &quot;updateTime&quot;: &quot;A String&quot;, # Time when the row was last updated.
  &quot;values&quot;: { # The values of the row. This is a map of column key to value. Key is user entered name(default) or the internal column id based on the view in the request.
    &quot;a_key&quot;: &quot;&quot;,
  },
}</pre>
</div>

</body></html>