<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="storage_v1.html">Cloud Storage JSON API</a> . <a href="storage_v1.anywhereCache.html">anywhereCache</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="#disable">disable(bucket, anywhereCacheId)</a></code></p>
<p class="firstline">Disables an Anywhere Cache instance.</p>
<p class="toc_element">
  <code><a href="#get">get(bucket, anywhereCacheId)</a></code></p>
<p class="firstline">Returns the metadata of an Anywhere Cache instance.</p>
<p class="toc_element">
  <code><a href="#insert">insert(bucket, body=None)</a></code></p>
<p class="firstline">Creates an Anywhere Cache instance.</p>
<p class="toc_element">
  <code><a href="#list">list(bucket, pageSize=None, pageToken=None)</a></code></p>
<p class="firstline">Returns a list of Anywhere Cache instances of the bucket matching the criteria.</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="#pause">pause(bucket, anywhereCacheId)</a></code></p>
<p class="firstline">Pauses an Anywhere Cache instance.</p>
<p class="toc_element">
  <code><a href="#resume">resume(bucket, anywhereCacheId)</a></code></p>
<p class="firstline">Resumes a paused or disabled Anywhere Cache instance.</p>
<p class="toc_element">
  <code><a href="#update">update(bucket, anywhereCacheId, body=None)</a></code></p>
<p class="firstline">Updates the config(ttl and admissionPolicy) of an Anywhere Cache 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="disable">disable(bucket, anywhereCacheId)</code>
  <pre>Disables an Anywhere Cache instance.

Args:
  bucket: string, Name of the partent bucket (required)
  anywhereCacheId: string, The ID of requested Anywhere Cache instance. (required)

Returns:
  An object of the form:

    { # An Anywhere Cache instance.
  &quot;admissionPolicy&quot;: &quot;A String&quot;, # The cache-level entry admission policy.
  &quot;anywhereCacheId&quot;: &quot;A String&quot;, # The ID of the Anywhere cache instance.
  &quot;bucket&quot;: &quot;A String&quot;, # The name of the bucket containing this cache instance.
  &quot;createTime&quot;: &quot;A String&quot;, # The creation time of the cache instance in RFC 3339 format.
  &quot;id&quot;: &quot;A String&quot;, # The ID of the resource, including the project number, bucket name and anywhere cache ID.
  &quot;kind&quot;: &quot;storage#anywhereCache&quot;, # The kind of item this is. For Anywhere Cache, this is always storage#anywhereCache.
  &quot;pendingUpdate&quot;: True or False, # True if the cache instance has an active Update long-running operation.
  &quot;selfLink&quot;: &quot;A String&quot;, # The link to this cache instance.
  &quot;state&quot;: &quot;A String&quot;, # The current state of the cache instance.
  &quot;ttl&quot;: &quot;A String&quot;, # The TTL of all cache entries in whole seconds. e.g., &quot;7200s&quot;.
  &quot;updateTime&quot;: &quot;A String&quot;, # The modification time of the cache instance metadata in RFC 3339 format.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(bucket, anywhereCacheId)</code>
  <pre>Returns the metadata of an Anywhere Cache instance.

Args:
  bucket: string, Name of the partent bucket (required)
  anywhereCacheId: string, The ID of requested Anywhere Cache instance. (required)

Returns:
  An object of the form:

    { # An Anywhere Cache instance.
  &quot;admissionPolicy&quot;: &quot;A String&quot;, # The cache-level entry admission policy.
  &quot;anywhereCacheId&quot;: &quot;A String&quot;, # The ID of the Anywhere cache instance.
  &quot;bucket&quot;: &quot;A String&quot;, # The name of the bucket containing this cache instance.
  &quot;createTime&quot;: &quot;A String&quot;, # The creation time of the cache instance in RFC 3339 format.
  &quot;id&quot;: &quot;A String&quot;, # The ID of the resource, including the project number, bucket name and anywhere cache ID.
  &quot;kind&quot;: &quot;storage#anywhereCache&quot;, # The kind of item this is. For Anywhere Cache, this is always storage#anywhereCache.
  &quot;pendingUpdate&quot;: True or False, # True if the cache instance has an active Update long-running operation.
  &quot;selfLink&quot;: &quot;A String&quot;, # The link to this cache instance.
  &quot;state&quot;: &quot;A String&quot;, # The current state of the cache instance.
  &quot;ttl&quot;: &quot;A String&quot;, # The TTL of all cache entries in whole seconds. e.g., &quot;7200s&quot;.
  &quot;updateTime&quot;: &quot;A String&quot;, # The modification time of the cache instance metadata in RFC 3339 format.
}</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(bucket, body=None)</code>
  <pre>Creates an Anywhere Cache instance.

Args:
  bucket: string, Name of the partent bucket (required)
  body: object, The request body.
    The object takes the form of:

{ # An Anywhere Cache instance.
  &quot;admissionPolicy&quot;: &quot;A String&quot;, # The cache-level entry admission policy.
  &quot;anywhereCacheId&quot;: &quot;A String&quot;, # The ID of the Anywhere cache instance.
  &quot;bucket&quot;: &quot;A String&quot;, # The name of the bucket containing this cache instance.
  &quot;createTime&quot;: &quot;A String&quot;, # The creation time of the cache instance in RFC 3339 format.
  &quot;id&quot;: &quot;A String&quot;, # The ID of the resource, including the project number, bucket name and anywhere cache ID.
  &quot;kind&quot;: &quot;storage#anywhereCache&quot;, # The kind of item this is. For Anywhere Cache, this is always storage#anywhereCache.
  &quot;pendingUpdate&quot;: True or False, # True if the cache instance has an active Update long-running operation.
  &quot;selfLink&quot;: &quot;A String&quot;, # The link to this cache instance.
  &quot;state&quot;: &quot;A String&quot;, # The current state of the cache instance.
  &quot;ttl&quot;: &quot;A String&quot;, # The TTL of all cache entries in whole seconds. e.g., &quot;7200s&quot;.
  &quot;updateTime&quot;: &quot;A String&quot;, # The modification time of the cache instance metadata in RFC 3339 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 &quot;false&quot;, it means the operation is still in progress. If &quot;true&quot;, the operation is completed, and either &quot;error&quot; or &quot;response&quot; is available.
  &quot;error&quot;: { # The &quot;Status&quot; 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 &quot;Status&quot; 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.
  },
  &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 &quot;name&quot; should be a resource name ending with &quot;operations/{operationId}&quot;.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as &quot;Delete&quot;, 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 &quot;XxxResponse&quot;, where &quot;Xxx&quot; is the original method name. For example, if the original method name is &quot;TakeSnapshot()&quot;, the inferred response type is &quot;TakeSnapshotResponse&quot;.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(bucket, pageSize=None, pageToken=None)</code>
  <pre>Returns a list of Anywhere Cache instances of the bucket matching the criteria.

Args:
  bucket: string, Name of the partent bucket (required)
  pageSize: integer, Maximum number of items return in a single page of responses. Maximum 1000.
  pageToken: string, A previously-returned page token representing part of the larger set of results to view.

Returns:
  An object of the form:

    { # A list of Anywhere Caches.
  &quot;items&quot;: [ # The list of items.
    { # An Anywhere Cache instance.
      &quot;admissionPolicy&quot;: &quot;A String&quot;, # The cache-level entry admission policy.
      &quot;anywhereCacheId&quot;: &quot;A String&quot;, # The ID of the Anywhere cache instance.
      &quot;bucket&quot;: &quot;A String&quot;, # The name of the bucket containing this cache instance.
      &quot;createTime&quot;: &quot;A String&quot;, # The creation time of the cache instance in RFC 3339 format.
      &quot;id&quot;: &quot;A String&quot;, # The ID of the resource, including the project number, bucket name and anywhere cache ID.
      &quot;kind&quot;: &quot;storage#anywhereCache&quot;, # The kind of item this is. For Anywhere Cache, this is always storage#anywhereCache.
      &quot;pendingUpdate&quot;: True or False, # True if the cache instance has an active Update long-running operation.
      &quot;selfLink&quot;: &quot;A String&quot;, # The link to this cache instance.
      &quot;state&quot;: &quot;A String&quot;, # The current state of the cache instance.
      &quot;ttl&quot;: &quot;A String&quot;, # The TTL of all cache entries in whole seconds. e.g., &quot;7200s&quot;.
      &quot;updateTime&quot;: &quot;A String&quot;, # The modification time of the cache instance metadata in RFC 3339 format.
    },
  ],
  &quot;kind&quot;: &quot;storage#anywhereCaches&quot;, # The kind of item this is. For lists of Anywhere Caches, this is always storage#anywhereCaches.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The continuation token, used to page through large result sets. Provide this value in a subsequent request to return 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="pause">pause(bucket, anywhereCacheId)</code>
  <pre>Pauses an Anywhere Cache instance.

Args:
  bucket: string, Name of the partent bucket (required)
  anywhereCacheId: string, The ID of requested Anywhere Cache instance. (required)

Returns:
  An object of the form:

    { # An Anywhere Cache instance.
  &quot;admissionPolicy&quot;: &quot;A String&quot;, # The cache-level entry admission policy.
  &quot;anywhereCacheId&quot;: &quot;A String&quot;, # The ID of the Anywhere cache instance.
  &quot;bucket&quot;: &quot;A String&quot;, # The name of the bucket containing this cache instance.
  &quot;createTime&quot;: &quot;A String&quot;, # The creation time of the cache instance in RFC 3339 format.
  &quot;id&quot;: &quot;A String&quot;, # The ID of the resource, including the project number, bucket name and anywhere cache ID.
  &quot;kind&quot;: &quot;storage#anywhereCache&quot;, # The kind of item this is. For Anywhere Cache, this is always storage#anywhereCache.
  &quot;pendingUpdate&quot;: True or False, # True if the cache instance has an active Update long-running operation.
  &quot;selfLink&quot;: &quot;A String&quot;, # The link to this cache instance.
  &quot;state&quot;: &quot;A String&quot;, # The current state of the cache instance.
  &quot;ttl&quot;: &quot;A String&quot;, # The TTL of all cache entries in whole seconds. e.g., &quot;7200s&quot;.
  &quot;updateTime&quot;: &quot;A String&quot;, # The modification time of the cache instance metadata in RFC 3339 format.
}</pre>
</div>

<div class="method">
    <code class="details" id="resume">resume(bucket, anywhereCacheId)</code>
  <pre>Resumes a paused or disabled Anywhere Cache instance.

Args:
  bucket: string, Name of the partent bucket (required)
  anywhereCacheId: string, The ID of requested Anywhere Cache instance. (required)

Returns:
  An object of the form:

    { # An Anywhere Cache instance.
  &quot;admissionPolicy&quot;: &quot;A String&quot;, # The cache-level entry admission policy.
  &quot;anywhereCacheId&quot;: &quot;A String&quot;, # The ID of the Anywhere cache instance.
  &quot;bucket&quot;: &quot;A String&quot;, # The name of the bucket containing this cache instance.
  &quot;createTime&quot;: &quot;A String&quot;, # The creation time of the cache instance in RFC 3339 format.
  &quot;id&quot;: &quot;A String&quot;, # The ID of the resource, including the project number, bucket name and anywhere cache ID.
  &quot;kind&quot;: &quot;storage#anywhereCache&quot;, # The kind of item this is. For Anywhere Cache, this is always storage#anywhereCache.
  &quot;pendingUpdate&quot;: True or False, # True if the cache instance has an active Update long-running operation.
  &quot;selfLink&quot;: &quot;A String&quot;, # The link to this cache instance.
  &quot;state&quot;: &quot;A String&quot;, # The current state of the cache instance.
  &quot;ttl&quot;: &quot;A String&quot;, # The TTL of all cache entries in whole seconds. e.g., &quot;7200s&quot;.
  &quot;updateTime&quot;: &quot;A String&quot;, # The modification time of the cache instance metadata in RFC 3339 format.
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(bucket, anywhereCacheId, body=None)</code>
  <pre>Updates the config(ttl and admissionPolicy) of an Anywhere Cache instance.

Args:
  bucket: string, Name of the partent bucket (required)
  anywhereCacheId: string, The ID of requested Anywhere Cache instance. (required)
  body: object, The request body.
    The object takes the form of:

{ # An Anywhere Cache instance.
  &quot;admissionPolicy&quot;: &quot;A String&quot;, # The cache-level entry admission policy.
  &quot;anywhereCacheId&quot;: &quot;A String&quot;, # The ID of the Anywhere cache instance.
  &quot;bucket&quot;: &quot;A String&quot;, # The name of the bucket containing this cache instance.
  &quot;createTime&quot;: &quot;A String&quot;, # The creation time of the cache instance in RFC 3339 format.
  &quot;id&quot;: &quot;A String&quot;, # The ID of the resource, including the project number, bucket name and anywhere cache ID.
  &quot;kind&quot;: &quot;storage#anywhereCache&quot;, # The kind of item this is. For Anywhere Cache, this is always storage#anywhereCache.
  &quot;pendingUpdate&quot;: True or False, # True if the cache instance has an active Update long-running operation.
  &quot;selfLink&quot;: &quot;A String&quot;, # The link to this cache instance.
  &quot;state&quot;: &quot;A String&quot;, # The current state of the cache instance.
  &quot;ttl&quot;: &quot;A String&quot;, # The TTL of all cache entries in whole seconds. e.g., &quot;7200s&quot;.
  &quot;updateTime&quot;: &quot;A String&quot;, # The modification time of the cache instance metadata in RFC 3339 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 &quot;false&quot;, it means the operation is still in progress. If &quot;true&quot;, the operation is completed, and either &quot;error&quot; or &quot;response&quot; is available.
  &quot;error&quot;: { # The &quot;Status&quot; 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 &quot;Status&quot; 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.
  },
  &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 &quot;name&quot; should be a resource name ending with &quot;operations/{operationId}&quot;.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as &quot;Delete&quot;, 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 &quot;XxxResponse&quot;, where &quot;Xxx&quot; is the original method name. For example, if the original method name is &quot;TakeSnapshot()&quot;, the inferred response type is &quot;TakeSnapshotResponse&quot;.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

</body></html>