<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="bigtableadmin_v2.html">Cloud Bigtable Admin API</a> . <a href="bigtableadmin_v2.projects.html">projects</a> . <a href="bigtableadmin_v2.projects.instances.html">instances</a> . <a href="bigtableadmin_v2.projects.instances.appProfiles.html">appProfiles</a></h1>
<h2>Instance Methods</h2>
<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, appProfileId=None, body=None, ignoreWarnings=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates an app profile within an instance.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, ignoreWarnings=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an app profile from an instance.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets information about an app profile.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists information about app profiles in an instance.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</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, ignoreWarnings=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an app profile within an instance.</p>
<h3>Method Details</h3>
<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, appProfileId=None, body=None, ignoreWarnings=None, x__xgafv=None)</code>
  <pre>Creates an app profile within an instance.

Args:
  parent: string, Required. The unique name of the instance in which to create the new app profile. Values are of the form `projects/{project}/instances/{instance}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A configuration object describing how Cloud Bigtable should treat traffic from a particular end user application.
  &quot;description&quot;: &quot;A String&quot;, # Long form description of the use case for this AppProfile.
  &quot;etag&quot;: &quot;A String&quot;, # Strongly validated etag for optimistic concurrency control. Preserve the value returned from `GetAppProfile` when calling `UpdateAppProfile` to fail the request if there has been a modification in the mean time. The `update_mask` of the request need not include `etag` for this protection to apply. See [Wikipedia](https://en.wikipedia.org/wiki/HTTP_ETag) and [RFC 7232](https://tools.ietf.org/html/rfc7232#section-2.3) for more details.
  &quot;multiClusterRoutingUseAny&quot;: { # Read/write requests are routed to the nearest cluster in the instance, and will fail over to the nearest cluster that is available in the event of transient errors or delays. Clusters in a region are considered equidistant. Choosing this option sacrifices read-your-writes consistency to improve availability. # Use a multi-cluster routing policy.
    &quot;clusterIds&quot;: [ # The set of clusters to route to. The order is ignored; clusters will be tried in order of distance. If left empty, all clusters are eligible.
      &quot;A String&quot;,
    ],
  },
  &quot;name&quot;: &quot;A String&quot;, # The unique name of the app profile. Values are of the form `projects/{project}/instances/{instance}/appProfiles/_a-zA-Z0-9*`.
  &quot;priority&quot;: &quot;A String&quot;, # This field has been deprecated in favor of `standard_isolation.priority`. If you set this field, `standard_isolation.priority` will be set instead. The priority of requests sent using this app profile.
  &quot;singleClusterRouting&quot;: { # Unconditionally routes all read/write requests to a specific cluster. This option preserves read-your-writes consistency but does not improve availability. # Use a single-cluster routing policy.
    &quot;allowTransactionalWrites&quot;: True or False, # Whether or not `CheckAndMutateRow` and `ReadModifyWriteRow` requests are allowed by this app profile. It is unsafe to send these requests to the same table/row/column in multiple clusters.
    &quot;clusterId&quot;: &quot;A String&quot;, # The cluster to which read/write requests should be routed.
  },
  &quot;standardIsolation&quot;: { # Standard options for isolating this app profile&#x27;s traffic from other use cases. # The standard options used for isolating this app profile&#x27;s traffic from other use cases.
    &quot;priority&quot;: &quot;A String&quot;, # The priority of requests sent using this app profile.
  },
}

  appProfileId: string, Required. The ID to be used when referring to the new app profile within its instance, e.g., just `myprofile` rather than `projects/myproject/instances/myinstance/appProfiles/myprofile`.
  ignoreWarnings: boolean, If true, ignore safety checks when creating the app profile.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A configuration object describing how Cloud Bigtable should treat traffic from a particular end user application.
  &quot;description&quot;: &quot;A String&quot;, # Long form description of the use case for this AppProfile.
  &quot;etag&quot;: &quot;A String&quot;, # Strongly validated etag for optimistic concurrency control. Preserve the value returned from `GetAppProfile` when calling `UpdateAppProfile` to fail the request if there has been a modification in the mean time. The `update_mask` of the request need not include `etag` for this protection to apply. See [Wikipedia](https://en.wikipedia.org/wiki/HTTP_ETag) and [RFC 7232](https://tools.ietf.org/html/rfc7232#section-2.3) for more details.
  &quot;multiClusterRoutingUseAny&quot;: { # Read/write requests are routed to the nearest cluster in the instance, and will fail over to the nearest cluster that is available in the event of transient errors or delays. Clusters in a region are considered equidistant. Choosing this option sacrifices read-your-writes consistency to improve availability. # Use a multi-cluster routing policy.
    &quot;clusterIds&quot;: [ # The set of clusters to route to. The order is ignored; clusters will be tried in order of distance. If left empty, all clusters are eligible.
      &quot;A String&quot;,
    ],
  },
  &quot;name&quot;: &quot;A String&quot;, # The unique name of the app profile. Values are of the form `projects/{project}/instances/{instance}/appProfiles/_a-zA-Z0-9*`.
  &quot;priority&quot;: &quot;A String&quot;, # This field has been deprecated in favor of `standard_isolation.priority`. If you set this field, `standard_isolation.priority` will be set instead. The priority of requests sent using this app profile.
  &quot;singleClusterRouting&quot;: { # Unconditionally routes all read/write requests to a specific cluster. This option preserves read-your-writes consistency but does not improve availability. # Use a single-cluster routing policy.
    &quot;allowTransactionalWrites&quot;: True or False, # Whether or not `CheckAndMutateRow` and `ReadModifyWriteRow` requests are allowed by this app profile. It is unsafe to send these requests to the same table/row/column in multiple clusters.
    &quot;clusterId&quot;: &quot;A String&quot;, # The cluster to which read/write requests should be routed.
  },
  &quot;standardIsolation&quot;: { # Standard options for isolating this app profile&#x27;s traffic from other use cases. # The standard options used for isolating this app profile&#x27;s traffic from other use cases.
    &quot;priority&quot;: &quot;A String&quot;, # The priority of requests sent using this app profile.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, ignoreWarnings=None, x__xgafv=None)</code>
  <pre>Deletes an app profile from an instance.

Args:
  name: string, Required. The unique name of the app profile to be deleted. Values are of the form `projects/{project}/instances/{instance}/appProfiles/{app_profile}`. (required)
  ignoreWarnings: boolean, Required. If true, ignore safety checks when deleting the app profile.
  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); }
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets information about an app profile.

Args:
  name: string, Required. The unique name of the requested app profile. Values are of the form `projects/{project}/instances/{instance}/appProfiles/{app_profile}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A configuration object describing how Cloud Bigtable should treat traffic from a particular end user application.
  &quot;description&quot;: &quot;A String&quot;, # Long form description of the use case for this AppProfile.
  &quot;etag&quot;: &quot;A String&quot;, # Strongly validated etag for optimistic concurrency control. Preserve the value returned from `GetAppProfile` when calling `UpdateAppProfile` to fail the request if there has been a modification in the mean time. The `update_mask` of the request need not include `etag` for this protection to apply. See [Wikipedia](https://en.wikipedia.org/wiki/HTTP_ETag) and [RFC 7232](https://tools.ietf.org/html/rfc7232#section-2.3) for more details.
  &quot;multiClusterRoutingUseAny&quot;: { # Read/write requests are routed to the nearest cluster in the instance, and will fail over to the nearest cluster that is available in the event of transient errors or delays. Clusters in a region are considered equidistant. Choosing this option sacrifices read-your-writes consistency to improve availability. # Use a multi-cluster routing policy.
    &quot;clusterIds&quot;: [ # The set of clusters to route to. The order is ignored; clusters will be tried in order of distance. If left empty, all clusters are eligible.
      &quot;A String&quot;,
    ],
  },
  &quot;name&quot;: &quot;A String&quot;, # The unique name of the app profile. Values are of the form `projects/{project}/instances/{instance}/appProfiles/_a-zA-Z0-9*`.
  &quot;priority&quot;: &quot;A String&quot;, # This field has been deprecated in favor of `standard_isolation.priority`. If you set this field, `standard_isolation.priority` will be set instead. The priority of requests sent using this app profile.
  &quot;singleClusterRouting&quot;: { # Unconditionally routes all read/write requests to a specific cluster. This option preserves read-your-writes consistency but does not improve availability. # Use a single-cluster routing policy.
    &quot;allowTransactionalWrites&quot;: True or False, # Whether or not `CheckAndMutateRow` and `ReadModifyWriteRow` requests are allowed by this app profile. It is unsafe to send these requests to the same table/row/column in multiple clusters.
    &quot;clusterId&quot;: &quot;A String&quot;, # The cluster to which read/write requests should be routed.
  },
  &quot;standardIsolation&quot;: { # Standard options for isolating this app profile&#x27;s traffic from other use cases. # The standard options used for isolating this app profile&#x27;s traffic from other use cases.
    &quot;priority&quot;: &quot;A String&quot;, # The priority of requests sent using this app profile.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists information about app profiles in an instance.

Args:
  parent: string, Required. The unique name of the instance for which a list of app profiles is requested. Values are of the form `projects/{project}/instances/{instance}`. Use `{instance} = &#x27;-&#x27;` to list AppProfiles for all Instances in a project, e.g., `projects/myproject/instances/-`. (required)
  pageSize: integer, Maximum number of results per page. A page_size of zero lets the server choose the number of items to return. A page_size which is strictly positive will return at most that many items. A negative page_size will cause an error. Following the first request, subsequent paginated calls are not required to pass a page_size. If a page_size is set in subsequent calls, it must match the page_size given in the first request.
  pageToken: string, The value of `next_page_token` returned by a previous call.
  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 BigtableInstanceAdmin.ListAppProfiles.
  &quot;appProfiles&quot;: [ # The list of requested app profiles.
    { # A configuration object describing how Cloud Bigtable should treat traffic from a particular end user application.
      &quot;description&quot;: &quot;A String&quot;, # Long form description of the use case for this AppProfile.
      &quot;etag&quot;: &quot;A String&quot;, # Strongly validated etag for optimistic concurrency control. Preserve the value returned from `GetAppProfile` when calling `UpdateAppProfile` to fail the request if there has been a modification in the mean time. The `update_mask` of the request need not include `etag` for this protection to apply. See [Wikipedia](https://en.wikipedia.org/wiki/HTTP_ETag) and [RFC 7232](https://tools.ietf.org/html/rfc7232#section-2.3) for more details.
      &quot;multiClusterRoutingUseAny&quot;: { # Read/write requests are routed to the nearest cluster in the instance, and will fail over to the nearest cluster that is available in the event of transient errors or delays. Clusters in a region are considered equidistant. Choosing this option sacrifices read-your-writes consistency to improve availability. # Use a multi-cluster routing policy.
        &quot;clusterIds&quot;: [ # The set of clusters to route to. The order is ignored; clusters will be tried in order of distance. If left empty, all clusters are eligible.
          &quot;A String&quot;,
        ],
      },
      &quot;name&quot;: &quot;A String&quot;, # The unique name of the app profile. Values are of the form `projects/{project}/instances/{instance}/appProfiles/_a-zA-Z0-9*`.
      &quot;priority&quot;: &quot;A String&quot;, # This field has been deprecated in favor of `standard_isolation.priority`. If you set this field, `standard_isolation.priority` will be set instead. The priority of requests sent using this app profile.
      &quot;singleClusterRouting&quot;: { # Unconditionally routes all read/write requests to a specific cluster. This option preserves read-your-writes consistency but does not improve availability. # Use a single-cluster routing policy.
        &quot;allowTransactionalWrites&quot;: True or False, # Whether or not `CheckAndMutateRow` and `ReadModifyWriteRow` requests are allowed by this app profile. It is unsafe to send these requests to the same table/row/column in multiple clusters.
        &quot;clusterId&quot;: &quot;A String&quot;, # The cluster to which read/write requests should be routed.
      },
      &quot;standardIsolation&quot;: { # Standard options for isolating this app profile&#x27;s traffic from other use cases. # The standard options used for isolating this app profile&#x27;s traffic from other use cases.
        &quot;priority&quot;: &quot;A String&quot;, # The priority of requests sent using this app profile.
      },
    },
  ],
  &quot;failedLocations&quot;: [ # Locations from which AppProfile information could not be retrieved, due to an outage or some other transient condition. AppProfiles from these locations may be missing from `app_profiles`. Values are of the form `projects//locations/`
    &quot;A String&quot;,
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Set if not all app profiles could be returned in a single response. Pass this value to `page_token` in another request to get the next page of results.
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next()</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, ignoreWarnings=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates an app profile within an instance.

Args:
  name: string, The unique name of the app profile. Values are of the form `projects/{project}/instances/{instance}/appProfiles/_a-zA-Z0-9*`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A configuration object describing how Cloud Bigtable should treat traffic from a particular end user application.
  &quot;description&quot;: &quot;A String&quot;, # Long form description of the use case for this AppProfile.
  &quot;etag&quot;: &quot;A String&quot;, # Strongly validated etag for optimistic concurrency control. Preserve the value returned from `GetAppProfile` when calling `UpdateAppProfile` to fail the request if there has been a modification in the mean time. The `update_mask` of the request need not include `etag` for this protection to apply. See [Wikipedia](https://en.wikipedia.org/wiki/HTTP_ETag) and [RFC 7232](https://tools.ietf.org/html/rfc7232#section-2.3) for more details.
  &quot;multiClusterRoutingUseAny&quot;: { # Read/write requests are routed to the nearest cluster in the instance, and will fail over to the nearest cluster that is available in the event of transient errors or delays. Clusters in a region are considered equidistant. Choosing this option sacrifices read-your-writes consistency to improve availability. # Use a multi-cluster routing policy.
    &quot;clusterIds&quot;: [ # The set of clusters to route to. The order is ignored; clusters will be tried in order of distance. If left empty, all clusters are eligible.
      &quot;A String&quot;,
    ],
  },
  &quot;name&quot;: &quot;A String&quot;, # The unique name of the app profile. Values are of the form `projects/{project}/instances/{instance}/appProfiles/_a-zA-Z0-9*`.
  &quot;priority&quot;: &quot;A String&quot;, # This field has been deprecated in favor of `standard_isolation.priority`. If you set this field, `standard_isolation.priority` will be set instead. The priority of requests sent using this app profile.
  &quot;singleClusterRouting&quot;: { # Unconditionally routes all read/write requests to a specific cluster. This option preserves read-your-writes consistency but does not improve availability. # Use a single-cluster routing policy.
    &quot;allowTransactionalWrites&quot;: True or False, # Whether or not `CheckAndMutateRow` and `ReadModifyWriteRow` requests are allowed by this app profile. It is unsafe to send these requests to the same table/row/column in multiple clusters.
    &quot;clusterId&quot;: &quot;A String&quot;, # The cluster to which read/write requests should be routed.
  },
  &quot;standardIsolation&quot;: { # Standard options for isolating this app profile&#x27;s traffic from other use cases. # The standard options used for isolating this app profile&#x27;s traffic from other use cases.
    &quot;priority&quot;: &quot;A String&quot;, # The priority of requests sent using this app profile.
  },
}

  ignoreWarnings: boolean, If true, ignore safety checks when updating the app profile.
  updateMask: string, Required. The subset of app profile fields which should be replaced. If unset, all fields will be replaced.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

</body></html>