<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="pubsublite_v1.html">Pub/Sub Lite API</a> . <a href="pubsublite_v1.admin.html">admin</a> . <a href="pubsublite_v1.admin.projects.html">projects</a> . <a href="pubsublite_v1.admin.projects.locations.html">locations</a> . <a href="pubsublite_v1.admin.projects.locations.topics.html">topics</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="pubsublite_v1.admin.projects.locations.topics.subscriptions.html">subscriptions()</a></code>
</p>
<p class="firstline">Returns the subscriptions 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, topicId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new topic.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified topic.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the topic configuration.</p>
<p class="toc_element">
  <code><a href="#getPartitions">getPartitions(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the partition information for the requested topic.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the list of topics for the given project.</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 properties of the specified topic.</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, topicId=None, x__xgafv=None)</code>
  <pre>Creates a new topic.

Args:
  parent: string, Required. The parent location in which to create the topic. Structured like `projects/{project_number}/locations/{location}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Metadata about a topic resource.
    &quot;partitionConfig&quot;: { # The settings for a topic&#x27;s partitions. # The settings for this topic&#x27;s partitions.
      &quot;count&quot;: &quot;A String&quot;, # The number of partitions in the topic. Must be at least 1.
      &quot;capacity&quot;: { # The throughput capacity configuration for each partition. # The capacity configuration.
        &quot;subscribeMibPerSec&quot;: 42, # Subscribe throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 32.
        &quot;publishMibPerSec&quot;: 42, # Publish throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 16.
      },
      &quot;scale&quot;: 42, # DEPRECATED: Use capacity instead which can express a superset of configurations. Every partition in the topic is allocated throughput equivalent to `scale` times the standard partition throughput (4 MiB/s). This is also reflected in the cost of this topic; a topic with `scale` of 2 and count of 10 is charged for 20 partitions. This value must be in the range [1,4].
    },
    &quot;retentionConfig&quot;: { # The settings for a topic&#x27;s message retention. # The settings for this topic&#x27;s message retention.
      &quot;period&quot;: &quot;A String&quot;, # How long a published message is retained. If unset, messages will be retained as long as the bytes retained for each partition is below `per_partition_bytes`.
      &quot;perPartitionBytes&quot;: &quot;A String&quot;, # The provisioned storage, in bytes, per partition. If the number of bytes stored in any of the topic&#x27;s partitions grows beyond this value, older messages will be dropped to make room for newer ones, regardless of the value of `period`.
    },
    &quot;name&quot;: &quot;A String&quot;, # The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
  }

  topicId: string, Required. The ID to use for the topic, which will become the final component of the topic&#x27;s name. This value is structured like: `my-topic-name`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Metadata about a topic resource.
      &quot;partitionConfig&quot;: { # The settings for a topic&#x27;s partitions. # The settings for this topic&#x27;s partitions.
        &quot;count&quot;: &quot;A String&quot;, # The number of partitions in the topic. Must be at least 1.
        &quot;capacity&quot;: { # The throughput capacity configuration for each partition. # The capacity configuration.
          &quot;subscribeMibPerSec&quot;: 42, # Subscribe throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 32.
          &quot;publishMibPerSec&quot;: 42, # Publish throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 16.
        },
        &quot;scale&quot;: 42, # DEPRECATED: Use capacity instead which can express a superset of configurations. Every partition in the topic is allocated throughput equivalent to `scale` times the standard partition throughput (4 MiB/s). This is also reflected in the cost of this topic; a topic with `scale` of 2 and count of 10 is charged for 20 partitions. This value must be in the range [1,4].
      },
      &quot;retentionConfig&quot;: { # The settings for a topic&#x27;s message retention. # The settings for this topic&#x27;s message retention.
        &quot;period&quot;: &quot;A String&quot;, # How long a published message is retained. If unset, messages will be retained as long as the bytes retained for each partition is below `per_partition_bytes`.
        &quot;perPartitionBytes&quot;: &quot;A String&quot;, # The provisioned storage, in bytes, per partition. If the number of bytes stored in any of the topic&#x27;s partitions grows beyond this value, older messages will be dropped to make room for newer ones, regardless of the value of `period`.
      },
      &quot;name&quot;: &quot;A String&quot;, # The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
    }</pre>
</div>

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

Args:
  name: string, Required. The name of the topic to delete. (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>Returns the topic configuration.

Args:
  name: string, Required. The name of the topic whose configuration to return. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Metadata about a topic resource.
      &quot;partitionConfig&quot;: { # The settings for a topic&#x27;s partitions. # The settings for this topic&#x27;s partitions.
        &quot;count&quot;: &quot;A String&quot;, # The number of partitions in the topic. Must be at least 1.
        &quot;capacity&quot;: { # The throughput capacity configuration for each partition. # The capacity configuration.
          &quot;subscribeMibPerSec&quot;: 42, # Subscribe throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 32.
          &quot;publishMibPerSec&quot;: 42, # Publish throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 16.
        },
        &quot;scale&quot;: 42, # DEPRECATED: Use capacity instead which can express a superset of configurations. Every partition in the topic is allocated throughput equivalent to `scale` times the standard partition throughput (4 MiB/s). This is also reflected in the cost of this topic; a topic with `scale` of 2 and count of 10 is charged for 20 partitions. This value must be in the range [1,4].
      },
      &quot;retentionConfig&quot;: { # The settings for a topic&#x27;s message retention. # The settings for this topic&#x27;s message retention.
        &quot;period&quot;: &quot;A String&quot;, # How long a published message is retained. If unset, messages will be retained as long as the bytes retained for each partition is below `per_partition_bytes`.
        &quot;perPartitionBytes&quot;: &quot;A String&quot;, # The provisioned storage, in bytes, per partition. If the number of bytes stored in any of the topic&#x27;s partitions grows beyond this value, older messages will be dropped to make room for newer ones, regardless of the value of `period`.
      },
      &quot;name&quot;: &quot;A String&quot;, # The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
    }</pre>
</div>

<div class="method">
    <code class="details" id="getPartitions">getPartitions(name, x__xgafv=None)</code>
  <pre>Returns the partition information for the requested topic.

Args:
  name: string, Required. The topic whose partition information to return. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for GetTopicPartitions.
    &quot;partitionCount&quot;: &quot;A String&quot;, # The number of partitions in the topic.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Returns the list of topics for the given project.

Args:
  parent: string, Required. The parent whose topics are to be listed. Structured like `projects/{project_number}/locations/{location}`. (required)
  pageSize: integer, The maximum number of topics to return. The service may return fewer than this value. If unset or zero, all topics for the parent will be returned.
  pageToken: string, A page token, received from a previous `ListTopics` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListTopics` must match the call that provided the page token.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for ListTopics.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A token that can be sent as `page_token` to retrieve the next page of results. If this field is omitted, there are no more results.
    &quot;topics&quot;: [ # The list of topic in the requested parent. The order of the topics is unspecified.
      { # Metadata about a topic resource.
          &quot;partitionConfig&quot;: { # The settings for a topic&#x27;s partitions. # The settings for this topic&#x27;s partitions.
            &quot;count&quot;: &quot;A String&quot;, # The number of partitions in the topic. Must be at least 1.
            &quot;capacity&quot;: { # The throughput capacity configuration for each partition. # The capacity configuration.
              &quot;subscribeMibPerSec&quot;: 42, # Subscribe throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 32.
              &quot;publishMibPerSec&quot;: 42, # Publish throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 16.
            },
            &quot;scale&quot;: 42, # DEPRECATED: Use capacity instead which can express a superset of configurations. Every partition in the topic is allocated throughput equivalent to `scale` times the standard partition throughput (4 MiB/s). This is also reflected in the cost of this topic; a topic with `scale` of 2 and count of 10 is charged for 20 partitions. This value must be in the range [1,4].
          },
          &quot;retentionConfig&quot;: { # The settings for a topic&#x27;s message retention. # The settings for this topic&#x27;s message retention.
            &quot;period&quot;: &quot;A String&quot;, # How long a published message is retained. If unset, messages will be retained as long as the bytes retained for each partition is below `per_partition_bytes`.
            &quot;perPartitionBytes&quot;: &quot;A String&quot;, # The provisioned storage, in bytes, per partition. If the number of bytes stored in any of the topic&#x27;s partitions grows beyond this value, older messages will be dropped to make room for newer ones, regardless of the value of `period`.
          },
          &quot;name&quot;: &quot;A String&quot;, # The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
        },
    ],
  }</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 properties of the specified topic.

Args:
  name: string, The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id} (required)
  body: object, The request body.
    The object takes the form of:

{ # Metadata about a topic resource.
    &quot;partitionConfig&quot;: { # The settings for a topic&#x27;s partitions. # The settings for this topic&#x27;s partitions.
      &quot;count&quot;: &quot;A String&quot;, # The number of partitions in the topic. Must be at least 1.
      &quot;capacity&quot;: { # The throughput capacity configuration for each partition. # The capacity configuration.
        &quot;subscribeMibPerSec&quot;: 42, # Subscribe throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 32.
        &quot;publishMibPerSec&quot;: 42, # Publish throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 16.
      },
      &quot;scale&quot;: 42, # DEPRECATED: Use capacity instead which can express a superset of configurations. Every partition in the topic is allocated throughput equivalent to `scale` times the standard partition throughput (4 MiB/s). This is also reflected in the cost of this topic; a topic with `scale` of 2 and count of 10 is charged for 20 partitions. This value must be in the range [1,4].
    },
    &quot;retentionConfig&quot;: { # The settings for a topic&#x27;s message retention. # The settings for this topic&#x27;s message retention.
      &quot;period&quot;: &quot;A String&quot;, # How long a published message is retained. If unset, messages will be retained as long as the bytes retained for each partition is below `per_partition_bytes`.
      &quot;perPartitionBytes&quot;: &quot;A String&quot;, # The provisioned storage, in bytes, per partition. If the number of bytes stored in any of the topic&#x27;s partitions grows beyond this value, older messages will be dropped to make room for newer ones, regardless of the value of `period`.
    },
    &quot;name&quot;: &quot;A String&quot;, # The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
  }

  updateMask: string, Required. A mask specifying the topic fields to change.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Metadata about a topic resource.
      &quot;partitionConfig&quot;: { # The settings for a topic&#x27;s partitions. # The settings for this topic&#x27;s partitions.
        &quot;count&quot;: &quot;A String&quot;, # The number of partitions in the topic. Must be at least 1.
        &quot;capacity&quot;: { # The throughput capacity configuration for each partition. # The capacity configuration.
          &quot;subscribeMibPerSec&quot;: 42, # Subscribe throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 32.
          &quot;publishMibPerSec&quot;: 42, # Publish throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 16.
        },
        &quot;scale&quot;: 42, # DEPRECATED: Use capacity instead which can express a superset of configurations. Every partition in the topic is allocated throughput equivalent to `scale` times the standard partition throughput (4 MiB/s). This is also reflected in the cost of this topic; a topic with `scale` of 2 and count of 10 is charged for 20 partitions. This value must be in the range [1,4].
      },
      &quot;retentionConfig&quot;: { # The settings for a topic&#x27;s message retention. # The settings for this topic&#x27;s message retention.
        &quot;period&quot;: &quot;A String&quot;, # How long a published message is retained. If unset, messages will be retained as long as the bytes retained for each partition is below `per_partition_bytes`.
        &quot;perPartitionBytes&quot;: &quot;A String&quot;, # The provisioned storage, in bytes, per partition. If the number of bytes stored in any of the topic&#x27;s partitions grows beyond this value, older messages will be dropped to make room for newer ones, regardless of the value of `period`.
      },
      &quot;name&quot;: &quot;A String&quot;, # The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
    }</pre>
</div>

</body></html>