<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="logging_v2.html">Cloud Logging API</a> . <a href="logging_v2.locations.html">locations</a> . <a href="logging_v2.locations.buckets.html">buckets</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="logging_v2.locations.buckets.views.html">views()</a></code>
</p>
<p class="firstline">Returns the views Resource.</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, bucketId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a log bucket that can be used to store log entries. After a bucket has been created, the bucket's location cannot be changed.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a log bucket.Changes the bucket's lifecycle_state to the DELETE_REQUESTED state. After 7 days, the bucket will be purged and all log entries in the bucket will be permanently deleted.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a log bucket.</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 log buckets.</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, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a log bucket. This method replaces the following fields in the existing bucket with values from the new bucket: retention_periodIf the retention period is decreased and the bucket is locked, FAILED_PRECONDITION will be returned.If the bucket has a lifecycle_state of DELETE_REQUESTED, then FAILED_PRECONDITION will be returned.After a bucket has been created, the bucket's location cannot be changed.</p>
<p class="toc_element">
  <code><a href="#undelete">undelete(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Undeletes a log bucket. A bucket that has been deleted can be undeleted within the grace period of 7 days.</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, body=None, bucketId=None, x__xgafv=None)</code>
  <pre>Creates a log bucket that can be used to store log entries. After a bucket has been created, the bucket&#x27;s location cannot be changed.

Args:
  parent: string, Required. The resource in which to create the log bucket: &quot;projects/[PROJECT_ID]/locations/[LOCATION_ID]&quot; For example:&quot;projects/my-project/locations/global&quot; (required)
  body: object, The request body.
    The object takes the form of:

{ # Describes a repository in which log entries are stored.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp of the bucket. This is not set for any of the default buckets.
  &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
  &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
  &quot;locked&quot;: True or False, # Whether the bucket is locked.The retention period on a locked bucket cannot be changed. Locked buckets may only be deleted if they are empty.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket.For example:projects/my-project/locations/global/buckets/my-bucketFor a list of supported locations, see Supported Regions (https://cloud.google.com/logging/docs/region-support)For the location of global it is unspecified where log entries are actually stored.After a bucket has been created, the location cannot be changed.
  &quot;restrictedFields&quot;: [ # Log entry field paths that are denied access in this bucket.The following fields and their children are eligible: textPayload, jsonPayload, protoPayload, httpRequest, labels, sourceLocation.Restricting a repeated field will restrict all values. Adding a parent will block all child fields. (e.g. foo.bar will block foo.bar.baz)
    &quot;A String&quot;,
  ],
  &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
}

  bucketId: string, Required. A client-assigned identifier such as &quot;my-bucket&quot;. Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Describes a repository in which log entries are stored.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp of the bucket. This is not set for any of the default buckets.
  &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
  &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
  &quot;locked&quot;: True or False, # Whether the bucket is locked.The retention period on a locked bucket cannot be changed. Locked buckets may only be deleted if they are empty.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket.For example:projects/my-project/locations/global/buckets/my-bucketFor a list of supported locations, see Supported Regions (https://cloud.google.com/logging/docs/region-support)For the location of global it is unspecified where log entries are actually stored.After a bucket has been created, the location cannot be changed.
  &quot;restrictedFields&quot;: [ # Log entry field paths that are denied access in this bucket.The following fields and their children are eligible: textPayload, jsonPayload, protoPayload, httpRequest, labels, sourceLocation.Restricting a repeated field will restrict all values. Adding a parent will block all child fields. (e.g. foo.bar will block foo.bar.baz)
    &quot;A String&quot;,
  ],
  &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a log bucket.Changes the bucket&#x27;s lifecycle_state to the DELETE_REQUESTED state. After 7 days, the bucket will be purged and all log entries in the bucket will be permanently deleted.

Args:
  name: string, Required. The full resource name of the bucket to delete. &quot;projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; &quot;organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; &quot;billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; &quot;folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; For example:&quot;projects/my-project/locations/global/buckets/my-bucket&quot; (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, x__xgafv=None)</code>
  <pre>Gets a log bucket.

Args:
  name: string, Required. The resource name of the bucket: &quot;projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; &quot;organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; &quot;billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; &quot;folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; For example:&quot;projects/my-project/locations/global/buckets/my-bucket&quot; (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Describes a repository in which log entries are stored.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp of the bucket. This is not set for any of the default buckets.
  &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
  &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
  &quot;locked&quot;: True or False, # Whether the bucket is locked.The retention period on a locked bucket cannot be changed. Locked buckets may only be deleted if they are empty.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket.For example:projects/my-project/locations/global/buckets/my-bucketFor a list of supported locations, see Supported Regions (https://cloud.google.com/logging/docs/region-support)For the location of global it is unspecified where log entries are actually stored.After a bucket has been created, the location cannot be changed.
  &quot;restrictedFields&quot;: [ # Log entry field paths that are denied access in this bucket.The following fields and their children are eligible: textPayload, jsonPayload, protoPayload, httpRequest, labels, sourceLocation.Restricting a repeated field will restrict all values. Adding a parent will block all child fields. (e.g. foo.bar will block foo.bar.baz)
    &quot;A String&quot;,
  ],
  &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists log buckets.

Args:
  parent: string, Required. The parent resource whose buckets are to be listed: &quot;projects/[PROJECT_ID]/locations/[LOCATION_ID]&quot; &quot;organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]&quot; &quot;billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]&quot; &quot;folders/[FOLDER_ID]/locations/[LOCATION_ID]&quot; Note: The locations portion of the resource must be specified, but supplying the character - in place of LOCATION_ID will return all buckets. (required)
  pageSize: integer, Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.
  pageToken: string, Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response from ListBuckets.
  &quot;buckets&quot;: [ # A list of buckets.
    { # Describes a repository in which log entries are stored.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp of the bucket. This is not set for any of the default buckets.
      &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
      &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
      &quot;locked&quot;: True or False, # Whether the bucket is locked.The retention period on a locked bucket cannot be changed. Locked buckets may only be deleted if they are empty.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket.For example:projects/my-project/locations/global/buckets/my-bucketFor a list of supported locations, see Supported Regions (https://cloud.google.com/logging/docs/region-support)For the location of global it is unspecified where log entries are actually stored.After a bucket has been created, the location cannot be changed.
      &quot;restrictedFields&quot;: [ # Log entry field paths that are denied access in this bucket.The following fields and their children are eligible: textPayload, jsonPayload, protoPayload, httpRequest, labels, sourceLocation.Restricting a repeated field will restrict all values. Adding a parent will block all child fields. (e.g. foo.bar will block foo.bar.baz)
        &quot;A String&quot;,
      ],
      &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken.
}</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, x__xgafv=None)</code>
  <pre>Updates a log bucket. This method replaces the following fields in the existing bucket with values from the new bucket: retention_periodIf the retention period is decreased and the bucket is locked, FAILED_PRECONDITION will be returned.If the bucket has a lifecycle_state of DELETE_REQUESTED, then FAILED_PRECONDITION will be returned.After a bucket has been created, the bucket&#x27;s location cannot be changed.

Args:
  name: string, Required. The full resource name of the bucket to update. &quot;projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; &quot;organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; &quot;billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; &quot;folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; For example:&quot;projects/my-project/locations/global/buckets/my-bucket&quot; (required)
  body: object, The request body.
    The object takes the form of:

{ # Describes a repository in which log entries are stored.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp of the bucket. This is not set for any of the default buckets.
  &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
  &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
  &quot;locked&quot;: True or False, # Whether the bucket is locked.The retention period on a locked bucket cannot be changed. Locked buckets may only be deleted if they are empty.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket.For example:projects/my-project/locations/global/buckets/my-bucketFor a list of supported locations, see Supported Regions (https://cloud.google.com/logging/docs/region-support)For the location of global it is unspecified where log entries are actually stored.After a bucket has been created, the location cannot be changed.
  &quot;restrictedFields&quot;: [ # Log entry field paths that are denied access in this bucket.The following fields and their children are eligible: textPayload, jsonPayload, protoPayload, httpRequest, labels, sourceLocation.Restricting a repeated field will restrict all values. Adding a parent will block all child fields. (e.g. foo.bar will block foo.bar.baz)
    &quot;A String&quot;,
  ],
  &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
}

  updateMask: string, Required. Field mask that specifies the fields in bucket that need an update. A bucket field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see: https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskFor example: updateMask=retention_days
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Describes a repository in which log entries are stored.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp of the bucket. This is not set for any of the default buckets.
  &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
  &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
  &quot;locked&quot;: True or False, # Whether the bucket is locked.The retention period on a locked bucket cannot be changed. Locked buckets may only be deleted if they are empty.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket.For example:projects/my-project/locations/global/buckets/my-bucketFor a list of supported locations, see Supported Regions (https://cloud.google.com/logging/docs/region-support)For the location of global it is unspecified where log entries are actually stored.After a bucket has been created, the location cannot be changed.
  &quot;restrictedFields&quot;: [ # Log entry field paths that are denied access in this bucket.The following fields and their children are eligible: textPayload, jsonPayload, protoPayload, httpRequest, labels, sourceLocation.Restricting a repeated field will restrict all values. Adding a parent will block all child fields. (e.g. foo.bar will block foo.bar.baz)
    &quot;A String&quot;,
  ],
  &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
}</pre>
</div>

<div class="method">
    <code class="details" id="undelete">undelete(name, body=None, x__xgafv=None)</code>
  <pre>Undeletes a log bucket. A bucket that has been deleted can be undeleted within the grace period of 7 days.

Args:
  name: string, Required. The full resource name of the bucket to undelete. &quot;projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; &quot;organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; &quot;billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; &quot;folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]&quot; For example:&quot;projects/my-project/locations/global/buckets/my-bucket&quot; (required)
  body: object, The request body.
    The object takes the form of:

{ # The parameters to UndeleteBucket.
}

  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>

</body></html>