<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="cloudiot_v1.html">Cloud IoT API</a> . <a href="cloudiot_v1.projects.html">projects</a> . <a href="cloudiot_v1.projects.locations.html">locations</a> . <a href="cloudiot_v1.projects.locations.registries.html">registries</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="cloudiot_v1.projects.locations.registries.devices.html">devices()</a></code>
</p>
<p class="firstline">Returns the devices Resource.</p>

<p class="toc_element">
  <code><a href="cloudiot_v1.projects.locations.registries.groups.html">groups()</a></code>
</p>
<p class="firstline">Returns the groups Resource.</p>

<p class="toc_element">
  <code><a href="#bindDeviceToGateway">bindDeviceToGateway(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Associates the device with the gateway.</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, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a device registry that contains devices.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a device registry configuration.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a device registry configuration.</p>
<p class="toc_element">
  <code><a href="#getIamPolicy">getIamPolicy(resource, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.</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 device registries.</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 device registry configuration.</p>
<p class="toc_element">
  <code><a href="#setIamPolicy">setIamPolicy(resource, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Sets the access control policy on the specified resource. Replaces any existing policy.</p>
<p class="toc_element">
  <code><a href="#testIamPermissions">testIamPermissions(resource, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a NOT_FOUND error.</p>
<p class="toc_element">
  <code><a href="#unbindDeviceFromGateway">unbindDeviceFromGateway(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the association between the device and the gateway.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="bindDeviceToGateway">bindDeviceToGateway(parent, body=None, x__xgafv=None)</code>
  <pre>Associates the device with the gateway.

Args:
  parent: string, Required. The name of the registry. For example, `projects/example-project/locations/us-central1/registries/my-registry`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request for `BindDeviceToGateway`.
    &quot;deviceId&quot;: &quot;A String&quot;, # Required. The device to associate with the specified gateway. The value of `device_id` can be either the device numeric ID or the user-defined device identifier.
    &quot;gatewayId&quot;: &quot;A String&quot;, # Required. The value of `gateway_id` can be either the device numeric ID or the user-defined device identifier.
  }

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

Returns:
  An object of the form:

    { # Response for `BindDeviceToGateway`.
  }</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, x__xgafv=None)</code>
  <pre>Creates a device registry that contains devices.

Args:
  parent: string, Required. The project and cloud region where this device registry must be created. For example, `projects/example-project/locations/us-central1`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A container for a group of devices.
    &quot;stateNotificationConfig&quot;: { # The configuration for notification of new states received from the device. # The configuration for notification of new states received from the device. State updates are guaranteed to be stored in the state history, but notifications to Cloud Pub/Sub are not guaranteed. For example, if permissions are misconfigured or the specified topic doesn&#x27;t exist, no notification will be published but the state will still be stored in Cloud IoT Core.
      &quot;pubsubTopicName&quot;: &quot;A String&quot;, # A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.
    },
    &quot;httpConfig&quot;: { # The configuration of the HTTP bridge for a device registry. # The DeviceService (HTTP) configuration for this device registry.
      &quot;httpEnabledState&quot;: &quot;A String&quot;, # If enabled, allows devices to use DeviceService via the HTTP protocol. Otherwise, any requests to DeviceService will fail for this registry.
    },
    &quot;credentials&quot;: [ # The credentials used to verify the device credentials. No more than 10 credentials can be bound to a single registry at a time. The verification process occurs at the time of device creation or update. If this field is empty, no verification is performed. Otherwise, the credentials of a newly created device or added credentials of an updated device should be signed with one of these registry credentials. Note, however, that existing devices will never be affected by modifications to this list of credentials: after a device has been successfully created in a registry, it should be able to connect even if its registry credentials are revoked, deleted, or modified.
      { # A server-stored registry credential used to validate device credentials.
        &quot;publicKeyCertificate&quot;: { # A public key certificate format and data. # A public key certificate used to verify the device credentials.
          &quot;x509Details&quot;: { # Details of an X.509 certificate. For informational purposes only. # [Output only] The certificate details. Used only for X.509 certificates.
            &quot;expiryTime&quot;: &quot;A String&quot;, # The time the certificate becomes invalid.
            &quot;subject&quot;: &quot;A String&quot;, # The entity the certificate and public key belong to.
            &quot;signatureAlgorithm&quot;: &quot;A String&quot;, # The algorithm used to sign the certificate.
            &quot;publicKeyType&quot;: &quot;A String&quot;, # The type of public key in the certificate.
            &quot;startTime&quot;: &quot;A String&quot;, # The time the certificate becomes valid.
            &quot;issuer&quot;: &quot;A String&quot;, # The entity that signed the certificate.
          },
          &quot;format&quot;: &quot;A String&quot;, # The certificate format.
          &quot;certificate&quot;: &quot;A String&quot;, # The certificate data.
        },
      },
    ],
    &quot;eventNotificationConfigs&quot;: [ # The configuration for notification of telemetry events received from the device. All telemetry events that were successfully published by the device and acknowledged by Cloud IoT Core are guaranteed to be delivered to Cloud Pub/Sub. If multiple configurations match a message, only the first matching configuration is used. If you try to publish a device telemetry event using MQTT without specifying a Cloud Pub/Sub topic for the device&#x27;s registry, the connection closes automatically. If you try to do so using an HTTP connection, an error is returned. Up to 10 configurations may be provided.
      { # The configuration for forwarding telemetry events.
        &quot;pubsubTopicName&quot;: &quot;A String&quot;, # A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.
        &quot;subfolderMatches&quot;: &quot;A String&quot;, # If the subfolder name matches this string exactly, this configuration will be used. The string must not include the leading &#x27;/&#x27; character. If empty, all strings are matched. This field is used only for telemetry events; subfolders are not supported for state changes.
      },
    ],
    &quot;mqttConfig&quot;: { # The configuration of MQTT for a device registry. # The MQTT configuration for this device registry.
      &quot;mqttEnabledState&quot;: &quot;A String&quot;, # If enabled, allows connections using the MQTT protocol. Otherwise, MQTT connections to this registry will fail.
    },
    &quot;logLevel&quot;: &quot;A String&quot;, # **Beta Feature** The default logging verbosity for activity from devices in this registry. The verbosity level can be overridden by Device.log_level.
    &quot;name&quot;: &quot;A String&quot;, # The resource path name. For example, `projects/example-project/locations/us-central1/registries/my-registry`.
    &quot;id&quot;: &quot;A String&quot;, # The identifier of this device registry. For example, `myRegistry`.
  }

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

Returns:
  An object of the form:

    { # A container for a group of devices.
      &quot;stateNotificationConfig&quot;: { # The configuration for notification of new states received from the device. # The configuration for notification of new states received from the device. State updates are guaranteed to be stored in the state history, but notifications to Cloud Pub/Sub are not guaranteed. For example, if permissions are misconfigured or the specified topic doesn&#x27;t exist, no notification will be published but the state will still be stored in Cloud IoT Core.
        &quot;pubsubTopicName&quot;: &quot;A String&quot;, # A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.
      },
      &quot;httpConfig&quot;: { # The configuration of the HTTP bridge for a device registry. # The DeviceService (HTTP) configuration for this device registry.
        &quot;httpEnabledState&quot;: &quot;A String&quot;, # If enabled, allows devices to use DeviceService via the HTTP protocol. Otherwise, any requests to DeviceService will fail for this registry.
      },
      &quot;credentials&quot;: [ # The credentials used to verify the device credentials. No more than 10 credentials can be bound to a single registry at a time. The verification process occurs at the time of device creation or update. If this field is empty, no verification is performed. Otherwise, the credentials of a newly created device or added credentials of an updated device should be signed with one of these registry credentials. Note, however, that existing devices will never be affected by modifications to this list of credentials: after a device has been successfully created in a registry, it should be able to connect even if its registry credentials are revoked, deleted, or modified.
        { # A server-stored registry credential used to validate device credentials.
          &quot;publicKeyCertificate&quot;: { # A public key certificate format and data. # A public key certificate used to verify the device credentials.
            &quot;x509Details&quot;: { # Details of an X.509 certificate. For informational purposes only. # [Output only] The certificate details. Used only for X.509 certificates.
              &quot;expiryTime&quot;: &quot;A String&quot;, # The time the certificate becomes invalid.
              &quot;subject&quot;: &quot;A String&quot;, # The entity the certificate and public key belong to.
              &quot;signatureAlgorithm&quot;: &quot;A String&quot;, # The algorithm used to sign the certificate.
              &quot;publicKeyType&quot;: &quot;A String&quot;, # The type of public key in the certificate.
              &quot;startTime&quot;: &quot;A String&quot;, # The time the certificate becomes valid.
              &quot;issuer&quot;: &quot;A String&quot;, # The entity that signed the certificate.
            },
            &quot;format&quot;: &quot;A String&quot;, # The certificate format.
            &quot;certificate&quot;: &quot;A String&quot;, # The certificate data.
          },
        },
      ],
      &quot;eventNotificationConfigs&quot;: [ # The configuration for notification of telemetry events received from the device. All telemetry events that were successfully published by the device and acknowledged by Cloud IoT Core are guaranteed to be delivered to Cloud Pub/Sub. If multiple configurations match a message, only the first matching configuration is used. If you try to publish a device telemetry event using MQTT without specifying a Cloud Pub/Sub topic for the device&#x27;s registry, the connection closes automatically. If you try to do so using an HTTP connection, an error is returned. Up to 10 configurations may be provided.
        { # The configuration for forwarding telemetry events.
          &quot;pubsubTopicName&quot;: &quot;A String&quot;, # A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.
          &quot;subfolderMatches&quot;: &quot;A String&quot;, # If the subfolder name matches this string exactly, this configuration will be used. The string must not include the leading &#x27;/&#x27; character. If empty, all strings are matched. This field is used only for telemetry events; subfolders are not supported for state changes.
        },
      ],
      &quot;mqttConfig&quot;: { # The configuration of MQTT for a device registry. # The MQTT configuration for this device registry.
        &quot;mqttEnabledState&quot;: &quot;A String&quot;, # If enabled, allows connections using the MQTT protocol. Otherwise, MQTT connections to this registry will fail.
      },
      &quot;logLevel&quot;: &quot;A String&quot;, # **Beta Feature** The default logging verbosity for activity from devices in this registry. The verbosity level can be overridden by Device.log_level.
      &quot;name&quot;: &quot;A String&quot;, # The resource path name. For example, `projects/example-project/locations/us-central1/registries/my-registry`.
      &quot;id&quot;: &quot;A String&quot;, # The identifier of this device registry. For example, `myRegistry`.
    }</pre>
</div>

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

Args:
  name: string, Required. The name of the device registry. For example, `projects/example-project/locations/us-central1/registries/my-registry`. (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 device registry configuration.

Args:
  name: string, Required. The name of the device registry. For example, `projects/example-project/locations/us-central1/registries/my-registry`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A container for a group of devices.
      &quot;stateNotificationConfig&quot;: { # The configuration for notification of new states received from the device. # The configuration for notification of new states received from the device. State updates are guaranteed to be stored in the state history, but notifications to Cloud Pub/Sub are not guaranteed. For example, if permissions are misconfigured or the specified topic doesn&#x27;t exist, no notification will be published but the state will still be stored in Cloud IoT Core.
        &quot;pubsubTopicName&quot;: &quot;A String&quot;, # A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.
      },
      &quot;httpConfig&quot;: { # The configuration of the HTTP bridge for a device registry. # The DeviceService (HTTP) configuration for this device registry.
        &quot;httpEnabledState&quot;: &quot;A String&quot;, # If enabled, allows devices to use DeviceService via the HTTP protocol. Otherwise, any requests to DeviceService will fail for this registry.
      },
      &quot;credentials&quot;: [ # The credentials used to verify the device credentials. No more than 10 credentials can be bound to a single registry at a time. The verification process occurs at the time of device creation or update. If this field is empty, no verification is performed. Otherwise, the credentials of a newly created device or added credentials of an updated device should be signed with one of these registry credentials. Note, however, that existing devices will never be affected by modifications to this list of credentials: after a device has been successfully created in a registry, it should be able to connect even if its registry credentials are revoked, deleted, or modified.
        { # A server-stored registry credential used to validate device credentials.
          &quot;publicKeyCertificate&quot;: { # A public key certificate format and data. # A public key certificate used to verify the device credentials.
            &quot;x509Details&quot;: { # Details of an X.509 certificate. For informational purposes only. # [Output only] The certificate details. Used only for X.509 certificates.
              &quot;expiryTime&quot;: &quot;A String&quot;, # The time the certificate becomes invalid.
              &quot;subject&quot;: &quot;A String&quot;, # The entity the certificate and public key belong to.
              &quot;signatureAlgorithm&quot;: &quot;A String&quot;, # The algorithm used to sign the certificate.
              &quot;publicKeyType&quot;: &quot;A String&quot;, # The type of public key in the certificate.
              &quot;startTime&quot;: &quot;A String&quot;, # The time the certificate becomes valid.
              &quot;issuer&quot;: &quot;A String&quot;, # The entity that signed the certificate.
            },
            &quot;format&quot;: &quot;A String&quot;, # The certificate format.
            &quot;certificate&quot;: &quot;A String&quot;, # The certificate data.
          },
        },
      ],
      &quot;eventNotificationConfigs&quot;: [ # The configuration for notification of telemetry events received from the device. All telemetry events that were successfully published by the device and acknowledged by Cloud IoT Core are guaranteed to be delivered to Cloud Pub/Sub. If multiple configurations match a message, only the first matching configuration is used. If you try to publish a device telemetry event using MQTT without specifying a Cloud Pub/Sub topic for the device&#x27;s registry, the connection closes automatically. If you try to do so using an HTTP connection, an error is returned. Up to 10 configurations may be provided.
        { # The configuration for forwarding telemetry events.
          &quot;pubsubTopicName&quot;: &quot;A String&quot;, # A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.
          &quot;subfolderMatches&quot;: &quot;A String&quot;, # If the subfolder name matches this string exactly, this configuration will be used. The string must not include the leading &#x27;/&#x27; character. If empty, all strings are matched. This field is used only for telemetry events; subfolders are not supported for state changes.
        },
      ],
      &quot;mqttConfig&quot;: { # The configuration of MQTT for a device registry. # The MQTT configuration for this device registry.
        &quot;mqttEnabledState&quot;: &quot;A String&quot;, # If enabled, allows connections using the MQTT protocol. Otherwise, MQTT connections to this registry will fail.
      },
      &quot;logLevel&quot;: &quot;A String&quot;, # **Beta Feature** The default logging verbosity for activity from devices in this registry. The verbosity level can be overridden by Device.log_level.
      &quot;name&quot;: &quot;A String&quot;, # The resource path name. For example, `projects/example-project/locations/us-central1/registries/my-registry`.
      &quot;id&quot;: &quot;A String&quot;, # The identifier of this device registry. For example, `myRegistry`.
    }</pre>
</div>

<div class="method">
    <code class="details" id="getIamPolicy">getIamPolicy(resource, body=None, x__xgafv=None)</code>
  <pre>Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.

Args:
  resource: string, REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for `GetIamPolicy` method.
    &quot;options&quot;: { # Encapsulates settings provided to GetIamPolicy. # OPTIONAL: A `GetPolicyOptions` object for specifying options to `GetIamPolicy`.
      &quot;requestedPolicyVersion&quot;: 42, # Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
    },
  }

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

Returns:
  An object of the form:

    { # An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { &quot;bindings&quot;: [ { &quot;role&quot;: &quot;roles/resourcemanager.organizationAdmin&quot;, &quot;members&quot;: [ &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot; ] }, { &quot;role&quot;: &quot;roles/resourcemanager.organizationViewer&quot;, &quot;members&quot;: [ &quot;user:eve@example.com&quot; ], &quot;condition&quot;: { &quot;title&quot;: &quot;expirable access&quot;, &quot;description&quot;: &quot;Does not grant access after Sep 2020&quot;, &quot;expression&quot;: &quot;request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;)&quot;, } } ], &quot;etag&quot;: &quot;BwWWja0YfJA=&quot;, &quot;version&quot;: 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;) - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).
    &quot;etag&quot;: &quot;A String&quot;, # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.
    &quot;bindings&quot;: [ # Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.
      { # Associates `members` with a `role`.
        &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
          &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
          &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
          &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
          &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
        },
        &quot;bindingId&quot;: &quot;A String&quot;,
        &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
        &quot;members&quot;: [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
          &quot;A String&quot;,
        ],
      },
    ],
    &quot;version&quot;: 42, # Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
  }</pre>
</div>

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

Args:
  parent: string, Required. The project and cloud region path. For example, `projects/example-project/locations/us-central1`. (required)
  pageSize: integer, The maximum number of registries to return in the response. If this value is zero, the service will select a default size. A call may return fewer objects than requested. A non-empty `next_page_token` in the response indicates that more data is available.
  pageToken: string, The value returned by the last `ListDeviceRegistriesResponse`; indicates that this is a continuation of a prior `ListDeviceRegistries` call and the system should return the next page of data.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for `ListDeviceRegistries`.
    &quot;deviceRegistries&quot;: [ # The registries that matched the query.
      { # A container for a group of devices.
          &quot;stateNotificationConfig&quot;: { # The configuration for notification of new states received from the device. # The configuration for notification of new states received from the device. State updates are guaranteed to be stored in the state history, but notifications to Cloud Pub/Sub are not guaranteed. For example, if permissions are misconfigured or the specified topic doesn&#x27;t exist, no notification will be published but the state will still be stored in Cloud IoT Core.
            &quot;pubsubTopicName&quot;: &quot;A String&quot;, # A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.
          },
          &quot;httpConfig&quot;: { # The configuration of the HTTP bridge for a device registry. # The DeviceService (HTTP) configuration for this device registry.
            &quot;httpEnabledState&quot;: &quot;A String&quot;, # If enabled, allows devices to use DeviceService via the HTTP protocol. Otherwise, any requests to DeviceService will fail for this registry.
          },
          &quot;credentials&quot;: [ # The credentials used to verify the device credentials. No more than 10 credentials can be bound to a single registry at a time. The verification process occurs at the time of device creation or update. If this field is empty, no verification is performed. Otherwise, the credentials of a newly created device or added credentials of an updated device should be signed with one of these registry credentials. Note, however, that existing devices will never be affected by modifications to this list of credentials: after a device has been successfully created in a registry, it should be able to connect even if its registry credentials are revoked, deleted, or modified.
            { # A server-stored registry credential used to validate device credentials.
              &quot;publicKeyCertificate&quot;: { # A public key certificate format and data. # A public key certificate used to verify the device credentials.
                &quot;x509Details&quot;: { # Details of an X.509 certificate. For informational purposes only. # [Output only] The certificate details. Used only for X.509 certificates.
                  &quot;expiryTime&quot;: &quot;A String&quot;, # The time the certificate becomes invalid.
                  &quot;subject&quot;: &quot;A String&quot;, # The entity the certificate and public key belong to.
                  &quot;signatureAlgorithm&quot;: &quot;A String&quot;, # The algorithm used to sign the certificate.
                  &quot;publicKeyType&quot;: &quot;A String&quot;, # The type of public key in the certificate.
                  &quot;startTime&quot;: &quot;A String&quot;, # The time the certificate becomes valid.
                  &quot;issuer&quot;: &quot;A String&quot;, # The entity that signed the certificate.
                },
                &quot;format&quot;: &quot;A String&quot;, # The certificate format.
                &quot;certificate&quot;: &quot;A String&quot;, # The certificate data.
              },
            },
          ],
          &quot;eventNotificationConfigs&quot;: [ # The configuration for notification of telemetry events received from the device. All telemetry events that were successfully published by the device and acknowledged by Cloud IoT Core are guaranteed to be delivered to Cloud Pub/Sub. If multiple configurations match a message, only the first matching configuration is used. If you try to publish a device telemetry event using MQTT without specifying a Cloud Pub/Sub topic for the device&#x27;s registry, the connection closes automatically. If you try to do so using an HTTP connection, an error is returned. Up to 10 configurations may be provided.
            { # The configuration for forwarding telemetry events.
              &quot;pubsubTopicName&quot;: &quot;A String&quot;, # A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.
              &quot;subfolderMatches&quot;: &quot;A String&quot;, # If the subfolder name matches this string exactly, this configuration will be used. The string must not include the leading &#x27;/&#x27; character. If empty, all strings are matched. This field is used only for telemetry events; subfolders are not supported for state changes.
            },
          ],
          &quot;mqttConfig&quot;: { # The configuration of MQTT for a device registry. # The MQTT configuration for this device registry.
            &quot;mqttEnabledState&quot;: &quot;A String&quot;, # If enabled, allows connections using the MQTT protocol. Otherwise, MQTT connections to this registry will fail.
          },
          &quot;logLevel&quot;: &quot;A String&quot;, # **Beta Feature** The default logging verbosity for activity from devices in this registry. The verbosity level can be overridden by Device.log_level.
          &quot;name&quot;: &quot;A String&quot;, # The resource path name. For example, `projects/example-project/locations/us-central1/registries/my-registry`.
          &quot;id&quot;: &quot;A String&quot;, # The identifier of this device registry. For example, `myRegistry`.
        },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # If not empty, indicates that there may be more registries that match the request; this value should be passed in a new `ListDeviceRegistriesRequest`.
  }</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 device registry configuration.

Args:
  name: string, The resource path name. For example, `projects/example-project/locations/us-central1/registries/my-registry`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A container for a group of devices.
    &quot;stateNotificationConfig&quot;: { # The configuration for notification of new states received from the device. # The configuration for notification of new states received from the device. State updates are guaranteed to be stored in the state history, but notifications to Cloud Pub/Sub are not guaranteed. For example, if permissions are misconfigured or the specified topic doesn&#x27;t exist, no notification will be published but the state will still be stored in Cloud IoT Core.
      &quot;pubsubTopicName&quot;: &quot;A String&quot;, # A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.
    },
    &quot;httpConfig&quot;: { # The configuration of the HTTP bridge for a device registry. # The DeviceService (HTTP) configuration for this device registry.
      &quot;httpEnabledState&quot;: &quot;A String&quot;, # If enabled, allows devices to use DeviceService via the HTTP protocol. Otherwise, any requests to DeviceService will fail for this registry.
    },
    &quot;credentials&quot;: [ # The credentials used to verify the device credentials. No more than 10 credentials can be bound to a single registry at a time. The verification process occurs at the time of device creation or update. If this field is empty, no verification is performed. Otherwise, the credentials of a newly created device or added credentials of an updated device should be signed with one of these registry credentials. Note, however, that existing devices will never be affected by modifications to this list of credentials: after a device has been successfully created in a registry, it should be able to connect even if its registry credentials are revoked, deleted, or modified.
      { # A server-stored registry credential used to validate device credentials.
        &quot;publicKeyCertificate&quot;: { # A public key certificate format and data. # A public key certificate used to verify the device credentials.
          &quot;x509Details&quot;: { # Details of an X.509 certificate. For informational purposes only. # [Output only] The certificate details. Used only for X.509 certificates.
            &quot;expiryTime&quot;: &quot;A String&quot;, # The time the certificate becomes invalid.
            &quot;subject&quot;: &quot;A String&quot;, # The entity the certificate and public key belong to.
            &quot;signatureAlgorithm&quot;: &quot;A String&quot;, # The algorithm used to sign the certificate.
            &quot;publicKeyType&quot;: &quot;A String&quot;, # The type of public key in the certificate.
            &quot;startTime&quot;: &quot;A String&quot;, # The time the certificate becomes valid.
            &quot;issuer&quot;: &quot;A String&quot;, # The entity that signed the certificate.
          },
          &quot;format&quot;: &quot;A String&quot;, # The certificate format.
          &quot;certificate&quot;: &quot;A String&quot;, # The certificate data.
        },
      },
    ],
    &quot;eventNotificationConfigs&quot;: [ # The configuration for notification of telemetry events received from the device. All telemetry events that were successfully published by the device and acknowledged by Cloud IoT Core are guaranteed to be delivered to Cloud Pub/Sub. If multiple configurations match a message, only the first matching configuration is used. If you try to publish a device telemetry event using MQTT without specifying a Cloud Pub/Sub topic for the device&#x27;s registry, the connection closes automatically. If you try to do so using an HTTP connection, an error is returned. Up to 10 configurations may be provided.
      { # The configuration for forwarding telemetry events.
        &quot;pubsubTopicName&quot;: &quot;A String&quot;, # A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.
        &quot;subfolderMatches&quot;: &quot;A String&quot;, # If the subfolder name matches this string exactly, this configuration will be used. The string must not include the leading &#x27;/&#x27; character. If empty, all strings are matched. This field is used only for telemetry events; subfolders are not supported for state changes.
      },
    ],
    &quot;mqttConfig&quot;: { # The configuration of MQTT for a device registry. # The MQTT configuration for this device registry.
      &quot;mqttEnabledState&quot;: &quot;A String&quot;, # If enabled, allows connections using the MQTT protocol. Otherwise, MQTT connections to this registry will fail.
    },
    &quot;logLevel&quot;: &quot;A String&quot;, # **Beta Feature** The default logging verbosity for activity from devices in this registry. The verbosity level can be overridden by Device.log_level.
    &quot;name&quot;: &quot;A String&quot;, # The resource path name. For example, `projects/example-project/locations/us-central1/registries/my-registry`.
    &quot;id&quot;: &quot;A String&quot;, # The identifier of this device registry. For example, `myRegistry`.
  }

  updateMask: string, Required. Only updates the `device_registry` fields indicated by this mask. The field mask must not be empty, and it must not contain fields that are immutable or only set by the server. Mutable top-level fields: `event_notification_config`, `http_config`, `mqtt_config`, and `state_notification_config`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A container for a group of devices.
      &quot;stateNotificationConfig&quot;: { # The configuration for notification of new states received from the device. # The configuration for notification of new states received from the device. State updates are guaranteed to be stored in the state history, but notifications to Cloud Pub/Sub are not guaranteed. For example, if permissions are misconfigured or the specified topic doesn&#x27;t exist, no notification will be published but the state will still be stored in Cloud IoT Core.
        &quot;pubsubTopicName&quot;: &quot;A String&quot;, # A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.
      },
      &quot;httpConfig&quot;: { # The configuration of the HTTP bridge for a device registry. # The DeviceService (HTTP) configuration for this device registry.
        &quot;httpEnabledState&quot;: &quot;A String&quot;, # If enabled, allows devices to use DeviceService via the HTTP protocol. Otherwise, any requests to DeviceService will fail for this registry.
      },
      &quot;credentials&quot;: [ # The credentials used to verify the device credentials. No more than 10 credentials can be bound to a single registry at a time. The verification process occurs at the time of device creation or update. If this field is empty, no verification is performed. Otherwise, the credentials of a newly created device or added credentials of an updated device should be signed with one of these registry credentials. Note, however, that existing devices will never be affected by modifications to this list of credentials: after a device has been successfully created in a registry, it should be able to connect even if its registry credentials are revoked, deleted, or modified.
        { # A server-stored registry credential used to validate device credentials.
          &quot;publicKeyCertificate&quot;: { # A public key certificate format and data. # A public key certificate used to verify the device credentials.
            &quot;x509Details&quot;: { # Details of an X.509 certificate. For informational purposes only. # [Output only] The certificate details. Used only for X.509 certificates.
              &quot;expiryTime&quot;: &quot;A String&quot;, # The time the certificate becomes invalid.
              &quot;subject&quot;: &quot;A String&quot;, # The entity the certificate and public key belong to.
              &quot;signatureAlgorithm&quot;: &quot;A String&quot;, # The algorithm used to sign the certificate.
              &quot;publicKeyType&quot;: &quot;A String&quot;, # The type of public key in the certificate.
              &quot;startTime&quot;: &quot;A String&quot;, # The time the certificate becomes valid.
              &quot;issuer&quot;: &quot;A String&quot;, # The entity that signed the certificate.
            },
            &quot;format&quot;: &quot;A String&quot;, # The certificate format.
            &quot;certificate&quot;: &quot;A String&quot;, # The certificate data.
          },
        },
      ],
      &quot;eventNotificationConfigs&quot;: [ # The configuration for notification of telemetry events received from the device. All telemetry events that were successfully published by the device and acknowledged by Cloud IoT Core are guaranteed to be delivered to Cloud Pub/Sub. If multiple configurations match a message, only the first matching configuration is used. If you try to publish a device telemetry event using MQTT without specifying a Cloud Pub/Sub topic for the device&#x27;s registry, the connection closes automatically. If you try to do so using an HTTP connection, an error is returned. Up to 10 configurations may be provided.
        { # The configuration for forwarding telemetry events.
          &quot;pubsubTopicName&quot;: &quot;A String&quot;, # A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.
          &quot;subfolderMatches&quot;: &quot;A String&quot;, # If the subfolder name matches this string exactly, this configuration will be used. The string must not include the leading &#x27;/&#x27; character. If empty, all strings are matched. This field is used only for telemetry events; subfolders are not supported for state changes.
        },
      ],
      &quot;mqttConfig&quot;: { # The configuration of MQTT for a device registry. # The MQTT configuration for this device registry.
        &quot;mqttEnabledState&quot;: &quot;A String&quot;, # If enabled, allows connections using the MQTT protocol. Otherwise, MQTT connections to this registry will fail.
      },
      &quot;logLevel&quot;: &quot;A String&quot;, # **Beta Feature** The default logging verbosity for activity from devices in this registry. The verbosity level can be overridden by Device.log_level.
      &quot;name&quot;: &quot;A String&quot;, # The resource path name. For example, `projects/example-project/locations/us-central1/registries/my-registry`.
      &quot;id&quot;: &quot;A String&quot;, # The identifier of this device registry. For example, `myRegistry`.
    }</pre>
</div>

<div class="method">
    <code class="details" id="setIamPolicy">setIamPolicy(resource, body=None, x__xgafv=None)</code>
  <pre>Sets the access control policy on the specified resource. Replaces any existing policy.

Args:
  resource: string, REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for `SetIamPolicy` method.
    &quot;policy&quot;: { # An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { &quot;bindings&quot;: [ { &quot;role&quot;: &quot;roles/resourcemanager.organizationAdmin&quot;, &quot;members&quot;: [ &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot; ] }, { &quot;role&quot;: &quot;roles/resourcemanager.organizationViewer&quot;, &quot;members&quot;: [ &quot;user:eve@example.com&quot; ], &quot;condition&quot;: { &quot;title&quot;: &quot;expirable access&quot;, &quot;description&quot;: &quot;Does not grant access after Sep 2020&quot;, &quot;expression&quot;: &quot;request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;)&quot;, } } ], &quot;etag&quot;: &quot;BwWWja0YfJA=&quot;, &quot;version&quot;: 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;) - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/). # REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them.
      &quot;etag&quot;: &quot;A String&quot;, # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.
      &quot;bindings&quot;: [ # Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.
        { # Associates `members` with a `role`.
          &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
            &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
            &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
            &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
            &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
          },
          &quot;bindingId&quot;: &quot;A String&quot;,
          &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
          &quot;members&quot;: [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
            &quot;A String&quot;,
          ],
        },
      ],
      &quot;version&quot;: 42, # Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
    },
  }

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

Returns:
  An object of the form:

    { # An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { &quot;bindings&quot;: [ { &quot;role&quot;: &quot;roles/resourcemanager.organizationAdmin&quot;, &quot;members&quot;: [ &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot; ] }, { &quot;role&quot;: &quot;roles/resourcemanager.organizationViewer&quot;, &quot;members&quot;: [ &quot;user:eve@example.com&quot; ], &quot;condition&quot;: { &quot;title&quot;: &quot;expirable access&quot;, &quot;description&quot;: &quot;Does not grant access after Sep 2020&quot;, &quot;expression&quot;: &quot;request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;)&quot;, } } ], &quot;etag&quot;: &quot;BwWWja0YfJA=&quot;, &quot;version&quot;: 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;) - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).
    &quot;etag&quot;: &quot;A String&quot;, # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.
    &quot;bindings&quot;: [ # Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.
      { # Associates `members` with a `role`.
        &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
          &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
          &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
          &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
          &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
        },
        &quot;bindingId&quot;: &quot;A String&quot;,
        &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
        &quot;members&quot;: [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
          &quot;A String&quot;,
        ],
      },
    ],
    &quot;version&quot;: 42, # Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
  }</pre>
</div>

<div class="method">
    <code class="details" id="testIamPermissions">testIamPermissions(resource, body=None, x__xgafv=None)</code>
  <pre>Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a NOT_FOUND error.

Args:
  resource: string, REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for `TestIamPermissions` method.
    &quot;permissions&quot;: [ # The set of permissions to check for the `resource`. Permissions with wildcards (such as &#x27;*&#x27; or &#x27;storage.*&#x27;) are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).
      &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:

    { # Response message for `TestIamPermissions` method.
    &quot;permissions&quot;: [ # A subset of `TestPermissionsRequest.permissions` that the caller is allowed.
      &quot;A String&quot;,
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="unbindDeviceFromGateway">unbindDeviceFromGateway(parent, body=None, x__xgafv=None)</code>
  <pre>Deletes the association between the device and the gateway.

Args:
  parent: string, Required. The name of the registry. For example, `projects/example-project/locations/us-central1/registries/my-registry`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request for `UnbindDeviceFromGateway`.
    &quot;gatewayId&quot;: &quot;A String&quot;, # Required. The value of `gateway_id` can be either the device numeric ID or the user-defined device identifier.
    &quot;deviceId&quot;: &quot;A String&quot;, # Required. The device to disassociate from the specified gateway. The value of `device_id` can be either the device numeric ID or the user-defined device identifier.
  }

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

Returns:
  An object of the form:

    { # Response for `UnbindDeviceFromGateway`.
  }</pre>
</div>

</body></html>