<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="datacatalog_v1.html">Google Cloud Data Catalog API</a> . <a href="datacatalog_v1.projects.html">projects</a> . <a href="datacatalog_v1.projects.locations.html">locations</a> . <a href="datacatalog_v1.projects.locations.taxonomies.html">taxonomies</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="datacatalog_v1.projects.locations.taxonomies.policyTags.html">policyTags()</a></code>
</p>
<p class="firstline">Returns the policyTags 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, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a taxonomy in a specified project. The taxonomy is initially empty, that is, it doesn't contain policy tags.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a taxonomy, including all policy tags in this taxonomy, their associated policies, and the policy tags references from BigQuery columns.</p>
<p class="toc_element">
  <code><a href="#export">export(parent, serializedTaxonomies=None, taxonomies=None, x__xgafv=None)</a></code></p>
<p class="firstline">Exports taxonomies in the requested type and returns them, including their policy tags. The requested taxonomies must belong to the same project. This method generates `SerializedTaxonomy` protocol buffers with nested policy tags that can be used as input for `ImportTaxonomies` calls.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a taxonomy.</p>
<p class="toc_element">
  <code><a href="#getIamPolicy">getIamPolicy(resource, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the IAM policy for a policy tag or a taxonomy.</p>
<p class="toc_element">
  <code><a href="#import_">import_(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates new taxonomies (including their policy tags) in a given project by importing from inlined or cross-regional sources. For a cross-regional source, new taxonomies are created by copying from a source in another region. For an inlined source, taxonomies and policy tags are created in bulk using nested protocol buffer structures.</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 all taxonomies in a project in a particular location that you have a permission to view.</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 taxonomy, including its display name, description, and activated policy types.</p>
<p class="toc_element">
  <code><a href="#replace">replace(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Replaces (updates) a taxonomy and all its policy tags. The taxonomy and its entire hierarchy of policy tags must be represented literally by `SerializedTaxonomy` and the nested `SerializedPolicyTag` messages. This operation automatically does the following: - Deletes the existing policy tags that are missing from the `SerializedPolicyTag`. - Creates policy tags that don't have resource names. They are considered new. - Updates policy tags with valid resources names accordingly.</p>
<p class="toc_element">
  <code><a href="#setIamPolicy">setIamPolicy(resource, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Sets the IAM policy for a policy tag or a taxonomy.</p>
<p class="toc_element">
  <code><a href="#testIamPermissions">testIamPermissions(resource, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns your permissions on a specified policy tag or taxonomy.</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, x__xgafv=None)</code>
  <pre>Creates a taxonomy in a specified project. The taxonomy is initially empty, that is, it doesn&#x27;t contain policy tags.

Args:
  parent: string, Required. Resource name of the project that the taxonomy will belong to.  (required)
  body: object, The request body.
    The object takes the form of:

{ # A taxonomy is a collection of hierarchical policy tags that classify data along a common axis. For example, a &quot;data sensitivity&quot; taxonomy might contain the following policy tags: ``` + PII + Account number + Age + SSN + Zipcode + Financials + Revenue ``` A &quot;data origin&quot; taxonomy might contain the following policy tags: ``` + User data + Employee data + Partner data + Public data ```
  &quot;activatedPolicyTypes&quot;: [ # Optional. A list of policy types that are activated for this taxonomy. If not set, defaults to an empty list.
    &quot;A String&quot;,
  ],
  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of this taxonomy. If not set, defaults to empty. The description must contain only Unicode characters, tabs, newlines, carriage returns, and page breaks, and be at most 2000 bytes long when encoded in UTF-8.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. User-defined name of this taxonomy. The name can&#x27;t start or end with spaces, must contain only Unicode letters, numbers, underscores, dashes, and spaces, and be at most 200 bytes long when encoded in UTF-8.
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this taxonomy in URL format. Note: Policy tag manager generates unique taxonomy IDs.
  &quot;policyTagCount&quot;: 42, # Output only. Number of policy tags in this taxonomy.
  &quot;taxonomyTimestamps&quot;: { # Timestamps associated with this resource in a particular system. # Output only. Creation and modification timestamps of this taxonomy.
    &quot;createTime&quot;: &quot;A String&quot;, # Creation timestamp of the resource within the given system.
    &quot;expireTime&quot;: &quot;A String&quot;, # Output only. Expiration timestamp of the resource within the given system. Currently only applicable to BigQuery resources.
    &quot;updateTime&quot;: &quot;A String&quot;, # Timestamp of the last modification of the resource or its metadata within a given system. Note: Depending on the source system, not every modification updates this timestamp. For example, BigQuery timestamps every metadata modification but not data or permission changes.
  },
}

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

Returns:
  An object of the form:

    { # A taxonomy is a collection of hierarchical policy tags that classify data along a common axis. For example, a &quot;data sensitivity&quot; taxonomy might contain the following policy tags: ``` + PII + Account number + Age + SSN + Zipcode + Financials + Revenue ``` A &quot;data origin&quot; taxonomy might contain the following policy tags: ``` + User data + Employee data + Partner data + Public data ```
  &quot;activatedPolicyTypes&quot;: [ # Optional. A list of policy types that are activated for this taxonomy. If not set, defaults to an empty list.
    &quot;A String&quot;,
  ],
  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of this taxonomy. If not set, defaults to empty. The description must contain only Unicode characters, tabs, newlines, carriage returns, and page breaks, and be at most 2000 bytes long when encoded in UTF-8.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. User-defined name of this taxonomy. The name can&#x27;t start or end with spaces, must contain only Unicode letters, numbers, underscores, dashes, and spaces, and be at most 200 bytes long when encoded in UTF-8.
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this taxonomy in URL format. Note: Policy tag manager generates unique taxonomy IDs.
  &quot;policyTagCount&quot;: 42, # Output only. Number of policy tags in this taxonomy.
  &quot;taxonomyTimestamps&quot;: { # Timestamps associated with this resource in a particular system. # Output only. Creation and modification timestamps of this taxonomy.
    &quot;createTime&quot;: &quot;A String&quot;, # Creation timestamp of the resource within the given system.
    &quot;expireTime&quot;: &quot;A String&quot;, # Output only. Expiration timestamp of the resource within the given system. Currently only applicable to BigQuery resources.
    &quot;updateTime&quot;: &quot;A String&quot;, # Timestamp of the last modification of the resource or its metadata within a given system. Note: Depending on the source system, not every modification updates this timestamp. For example, BigQuery timestamps every metadata modification but not data or permission changes.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a taxonomy, including all policy tags in this taxonomy, their associated policies, and the policy tags references from BigQuery columns.

Args:
  name: string, Required. Resource name of the taxonomy to delete. Note: All policy tags in this taxonomy are also deleted.  (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="export">export(parent, serializedTaxonomies=None, taxonomies=None, x__xgafv=None)</code>
  <pre>Exports taxonomies in the requested type and returns them, including their policy tags. The requested taxonomies must belong to the same project. This method generates `SerializedTaxonomy` protocol buffers with nested policy tags that can be used as input for `ImportTaxonomies` calls.

Args:
  parent: string, Required. Resource name of the project that the exported taxonomies belong to.  (required)
  serializedTaxonomies: boolean, Serialized export taxonomies that contain all the policy tags as nested protocol buffers.
  taxonomies: string, Required. Resource names of the taxonomies to export. (repeated)
  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 ExportTaxonomies.
  &quot;taxonomies&quot;: [ # List of taxonomies and policy tags as nested protocol buffers.
    { # A nested protocol buffer that represents a taxonomy and the hierarchy of its policy tags. Used for taxonomy replacement, import, and export.
      &quot;activatedPolicyTypes&quot;: [ # A list of policy types that are activated per taxonomy.
        &quot;A String&quot;,
      ],
      &quot;description&quot;: &quot;A String&quot;, # Description of the serialized taxonomy. At most 2000 bytes when encoded in UTF-8. If not set, defaults to an empty description.
      &quot;displayName&quot;: &quot;A String&quot;, # Required. Display name of the taxonomy. At most 200 bytes when encoded in UTF-8.
      &quot;policyTags&quot;: [ # Top level policy tags associated with the taxonomy, if any.
        { # A nested protocol buffer that represents a policy tag and all its descendants.
          &quot;childPolicyTags&quot;: [ # Children of the policy tag, if any.
            # Object with schema name: GoogleCloudDatacatalogV1SerializedPolicyTag
          ],
          &quot;description&quot;: &quot;A String&quot;, # Description of the serialized policy tag. At most 2000 bytes when encoded in UTF-8. If not set, defaults to an empty description.
          &quot;displayName&quot;: &quot;A String&quot;, # Required. Display name of the policy tag. At most 200 bytes when encoded in UTF-8.
          &quot;policyTag&quot;: &quot;A String&quot;, # Resource name of the policy tag. This field is ignored when calling `ImportTaxonomies`.
        },
      ],
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets a taxonomy.

Args:
  name: string, Required. Resource name of the taxonomy to get.  (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A taxonomy is a collection of hierarchical policy tags that classify data along a common axis. For example, a &quot;data sensitivity&quot; taxonomy might contain the following policy tags: ``` + PII + Account number + Age + SSN + Zipcode + Financials + Revenue ``` A &quot;data origin&quot; taxonomy might contain the following policy tags: ``` + User data + Employee data + Partner data + Public data ```
  &quot;activatedPolicyTypes&quot;: [ # Optional. A list of policy types that are activated for this taxonomy. If not set, defaults to an empty list.
    &quot;A String&quot;,
  ],
  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of this taxonomy. If not set, defaults to empty. The description must contain only Unicode characters, tabs, newlines, carriage returns, and page breaks, and be at most 2000 bytes long when encoded in UTF-8.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. User-defined name of this taxonomy. The name can&#x27;t start or end with spaces, must contain only Unicode letters, numbers, underscores, dashes, and spaces, and be at most 200 bytes long when encoded in UTF-8.
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this taxonomy in URL format. Note: Policy tag manager generates unique taxonomy IDs.
  &quot;policyTagCount&quot;: 42, # Output only. Number of policy tags in this taxonomy.
  &quot;taxonomyTimestamps&quot;: { # Timestamps associated with this resource in a particular system. # Output only. Creation and modification timestamps of this taxonomy.
    &quot;createTime&quot;: &quot;A String&quot;, # Creation timestamp of the resource within the given system.
    &quot;expireTime&quot;: &quot;A String&quot;, # Output only. Expiration timestamp of the resource within the given system. Currently only applicable to BigQuery resources.
    &quot;updateTime&quot;: &quot;A String&quot;, # Timestamp of the last modification of the resource or its metadata within a given system. Note: Depending on the source system, not every modification updates this timestamp. For example, BigQuery timestamps every metadata modification but not data or permission changes.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="getIamPolicy">getIamPolicy(resource, body=None, x__xgafv=None)</code>
  <pre>Gets the IAM policy for a policy tag or a taxonomy.

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;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;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;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
        &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;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;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
    },
  ],
  &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;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="import_">import_(parent, body=None, x__xgafv=None)</code>
  <pre>Creates new taxonomies (including their policy tags) in a given project by importing from inlined or cross-regional sources. For a cross-regional source, new taxonomies are created by copying from a source in another region. For an inlined source, taxonomies and policy tags are created in bulk using nested protocol buffer structures.

Args:
  parent: string, Required. Resource name of project that the imported taxonomies will belong to.  (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for ImportTaxonomies.
  &quot;crossRegionalSource&quot;: { # Cross-regional source used to import an existing taxonomy into a different region. # Cross-regional source taxonomy to import.
    &quot;taxonomy&quot;: &quot;A String&quot;, # Required. The resource name of the source taxonomy to import.
  },
  &quot;inlineSource&quot;: { # Inline source containing taxonomies to import. # Inline source taxonomy to import.
    &quot;taxonomies&quot;: [ # Required. Taxonomies to import.
      { # A nested protocol buffer that represents a taxonomy and the hierarchy of its policy tags. Used for taxonomy replacement, import, and export.
        &quot;activatedPolicyTypes&quot;: [ # A list of policy types that are activated per taxonomy.
          &quot;A String&quot;,
        ],
        &quot;description&quot;: &quot;A String&quot;, # Description of the serialized taxonomy. At most 2000 bytes when encoded in UTF-8. If not set, defaults to an empty description.
        &quot;displayName&quot;: &quot;A String&quot;, # Required. Display name of the taxonomy. At most 200 bytes when encoded in UTF-8.
        &quot;policyTags&quot;: [ # Top level policy tags associated with the taxonomy, if any.
          { # A nested protocol buffer that represents a policy tag and all its descendants.
            &quot;childPolicyTags&quot;: [ # Children of the policy tag, if any.
              # Object with schema name: GoogleCloudDatacatalogV1SerializedPolicyTag
            ],
            &quot;description&quot;: &quot;A String&quot;, # Description of the serialized policy tag. At most 2000 bytes when encoded in UTF-8. If not set, defaults to an empty description.
            &quot;displayName&quot;: &quot;A String&quot;, # Required. Display name of the policy tag. At most 200 bytes when encoded in UTF-8.
            &quot;policyTag&quot;: &quot;A String&quot;, # Resource name of the policy tag. This field is ignored when calling `ImportTaxonomies`.
          },
        ],
      },
    ],
  },
}

  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 ImportTaxonomies.
  &quot;taxonomies&quot;: [ # Imported taxonomies.
    { # A taxonomy is a collection of hierarchical policy tags that classify data along a common axis. For example, a &quot;data sensitivity&quot; taxonomy might contain the following policy tags: ``` + PII + Account number + Age + SSN + Zipcode + Financials + Revenue ``` A &quot;data origin&quot; taxonomy might contain the following policy tags: ``` + User data + Employee data + Partner data + Public data ```
      &quot;activatedPolicyTypes&quot;: [ # Optional. A list of policy types that are activated for this taxonomy. If not set, defaults to an empty list.
        &quot;A String&quot;,
      ],
      &quot;description&quot;: &quot;A String&quot;, # Optional. Description of this taxonomy. If not set, defaults to empty. The description must contain only Unicode characters, tabs, newlines, carriage returns, and page breaks, and be at most 2000 bytes long when encoded in UTF-8.
      &quot;displayName&quot;: &quot;A String&quot;, # Required. User-defined name of this taxonomy. The name can&#x27;t start or end with spaces, must contain only Unicode letters, numbers, underscores, dashes, and spaces, and be at most 200 bytes long when encoded in UTF-8.
      &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this taxonomy in URL format. Note: Policy tag manager generates unique taxonomy IDs.
      &quot;policyTagCount&quot;: 42, # Output only. Number of policy tags in this taxonomy.
      &quot;taxonomyTimestamps&quot;: { # Timestamps associated with this resource in a particular system. # Output only. Creation and modification timestamps of this taxonomy.
        &quot;createTime&quot;: &quot;A String&quot;, # Creation timestamp of the resource within the given system.
        &quot;expireTime&quot;: &quot;A String&quot;, # Output only. Expiration timestamp of the resource within the given system. Currently only applicable to BigQuery resources.
        &quot;updateTime&quot;: &quot;A String&quot;, # Timestamp of the last modification of the resource or its metadata within a given system. Note: Depending on the source system, not every modification updates this timestamp. For example, BigQuery timestamps every metadata modification but not data or permission changes.
      },
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists all taxonomies in a project in a particular location that you have a permission to view.

Args:
  parent: string, Required. Resource name of the project to list the taxonomies of.  (required)
  pageSize: integer, The maximum number of items to return. Must be a value between 1 and 1000 inclusively. If not set, defaults to 50.
  pageToken: string, The pagination token of the next results page. If not set, the first page is returned. The token is returned in the response to a previous list request.
  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 ListTaxonomies.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Pagination token of the next results page. Empty if there are no more results in the list.
  &quot;taxonomies&quot;: [ # Taxonomies that the project contains.
    { # A taxonomy is a collection of hierarchical policy tags that classify data along a common axis. For example, a &quot;data sensitivity&quot; taxonomy might contain the following policy tags: ``` + PII + Account number + Age + SSN + Zipcode + Financials + Revenue ``` A &quot;data origin&quot; taxonomy might contain the following policy tags: ``` + User data + Employee data + Partner data + Public data ```
      &quot;activatedPolicyTypes&quot;: [ # Optional. A list of policy types that are activated for this taxonomy. If not set, defaults to an empty list.
        &quot;A String&quot;,
      ],
      &quot;description&quot;: &quot;A String&quot;, # Optional. Description of this taxonomy. If not set, defaults to empty. The description must contain only Unicode characters, tabs, newlines, carriage returns, and page breaks, and be at most 2000 bytes long when encoded in UTF-8.
      &quot;displayName&quot;: &quot;A String&quot;, # Required. User-defined name of this taxonomy. The name can&#x27;t start or end with spaces, must contain only Unicode letters, numbers, underscores, dashes, and spaces, and be at most 200 bytes long when encoded in UTF-8.
      &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this taxonomy in URL format. Note: Policy tag manager generates unique taxonomy IDs.
      &quot;policyTagCount&quot;: 42, # Output only. Number of policy tags in this taxonomy.
      &quot;taxonomyTimestamps&quot;: { # Timestamps associated with this resource in a particular system. # Output only. Creation and modification timestamps of this taxonomy.
        &quot;createTime&quot;: &quot;A String&quot;, # Creation timestamp of the resource within the given system.
        &quot;expireTime&quot;: &quot;A String&quot;, # Output only. Expiration timestamp of the resource within the given system. Currently only applicable to BigQuery resources.
        &quot;updateTime&quot;: &quot;A String&quot;, # Timestamp of the last modification of the resource or its metadata within a given system. Note: Depending on the source system, not every modification updates this timestamp. For example, BigQuery timestamps every metadata modification but not data or permission changes.
      },
    },
  ],
}</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 taxonomy, including its display name, description, and activated policy types.

Args:
  name: string, Output only. Resource name of this taxonomy in URL format. Note: Policy tag manager generates unique taxonomy IDs.  (required)
  body: object, The request body.
    The object takes the form of:

{ # A taxonomy is a collection of hierarchical policy tags that classify data along a common axis. For example, a &quot;data sensitivity&quot; taxonomy might contain the following policy tags: ``` + PII + Account number + Age + SSN + Zipcode + Financials + Revenue ``` A &quot;data origin&quot; taxonomy might contain the following policy tags: ``` + User data + Employee data + Partner data + Public data ```
  &quot;activatedPolicyTypes&quot;: [ # Optional. A list of policy types that are activated for this taxonomy. If not set, defaults to an empty list.
    &quot;A String&quot;,
  ],
  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of this taxonomy. If not set, defaults to empty. The description must contain only Unicode characters, tabs, newlines, carriage returns, and page breaks, and be at most 2000 bytes long when encoded in UTF-8.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. User-defined name of this taxonomy. The name can&#x27;t start or end with spaces, must contain only Unicode letters, numbers, underscores, dashes, and spaces, and be at most 200 bytes long when encoded in UTF-8.
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this taxonomy in URL format. Note: Policy tag manager generates unique taxonomy IDs.
  &quot;policyTagCount&quot;: 42, # Output only. Number of policy tags in this taxonomy.
  &quot;taxonomyTimestamps&quot;: { # Timestamps associated with this resource in a particular system. # Output only. Creation and modification timestamps of this taxonomy.
    &quot;createTime&quot;: &quot;A String&quot;, # Creation timestamp of the resource within the given system.
    &quot;expireTime&quot;: &quot;A String&quot;, # Output only. Expiration timestamp of the resource within the given system. Currently only applicable to BigQuery resources.
    &quot;updateTime&quot;: &quot;A String&quot;, # Timestamp of the last modification of the resource or its metadata within a given system. Note: Depending on the source system, not every modification updates this timestamp. For example, BigQuery timestamps every metadata modification but not data or permission changes.
  },
}

  updateMask: string, Specifies fields to update. If not set, defaults to all fields you can update. For more information, see [FieldMask] (https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask).
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A taxonomy is a collection of hierarchical policy tags that classify data along a common axis. For example, a &quot;data sensitivity&quot; taxonomy might contain the following policy tags: ``` + PII + Account number + Age + SSN + Zipcode + Financials + Revenue ``` A &quot;data origin&quot; taxonomy might contain the following policy tags: ``` + User data + Employee data + Partner data + Public data ```
  &quot;activatedPolicyTypes&quot;: [ # Optional. A list of policy types that are activated for this taxonomy. If not set, defaults to an empty list.
    &quot;A String&quot;,
  ],
  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of this taxonomy. If not set, defaults to empty. The description must contain only Unicode characters, tabs, newlines, carriage returns, and page breaks, and be at most 2000 bytes long when encoded in UTF-8.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. User-defined name of this taxonomy. The name can&#x27;t start or end with spaces, must contain only Unicode letters, numbers, underscores, dashes, and spaces, and be at most 200 bytes long when encoded in UTF-8.
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this taxonomy in URL format. Note: Policy tag manager generates unique taxonomy IDs.
  &quot;policyTagCount&quot;: 42, # Output only. Number of policy tags in this taxonomy.
  &quot;taxonomyTimestamps&quot;: { # Timestamps associated with this resource in a particular system. # Output only. Creation and modification timestamps of this taxonomy.
    &quot;createTime&quot;: &quot;A String&quot;, # Creation timestamp of the resource within the given system.
    &quot;expireTime&quot;: &quot;A String&quot;, # Output only. Expiration timestamp of the resource within the given system. Currently only applicable to BigQuery resources.
    &quot;updateTime&quot;: &quot;A String&quot;, # Timestamp of the last modification of the resource or its metadata within a given system. Note: Depending on the source system, not every modification updates this timestamp. For example, BigQuery timestamps every metadata modification but not data or permission changes.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="replace">replace(name, body=None, x__xgafv=None)</code>
  <pre>Replaces (updates) a taxonomy and all its policy tags. The taxonomy and its entire hierarchy of policy tags must be represented literally by `SerializedTaxonomy` and the nested `SerializedPolicyTag` messages. This operation automatically does the following: - Deletes the existing policy tags that are missing from the `SerializedPolicyTag`. - Creates policy tags that don&#x27;t have resource names. They are considered new. - Updates policy tags with valid resources names accordingly.

Args:
  name: string, Required. Resource name of the taxonomy to update. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for ReplaceTaxonomy.
  &quot;serializedTaxonomy&quot;: { # A nested protocol buffer that represents a taxonomy and the hierarchy of its policy tags. Used for taxonomy replacement, import, and export. # Required. Taxonomy to update along with its child policy tags.
    &quot;activatedPolicyTypes&quot;: [ # A list of policy types that are activated per taxonomy.
      &quot;A String&quot;,
    ],
    &quot;description&quot;: &quot;A String&quot;, # Description of the serialized taxonomy. At most 2000 bytes when encoded in UTF-8. If not set, defaults to an empty description.
    &quot;displayName&quot;: &quot;A String&quot;, # Required. Display name of the taxonomy. At most 200 bytes when encoded in UTF-8.
    &quot;policyTags&quot;: [ # Top level policy tags associated with the taxonomy, if any.
      { # A nested protocol buffer that represents a policy tag and all its descendants.
        &quot;childPolicyTags&quot;: [ # Children of the policy tag, if any.
          # Object with schema name: GoogleCloudDatacatalogV1SerializedPolicyTag
        ],
        &quot;description&quot;: &quot;A String&quot;, # Description of the serialized policy tag. At most 2000 bytes when encoded in UTF-8. If not set, defaults to an empty description.
        &quot;displayName&quot;: &quot;A String&quot;, # Required. Display name of the policy tag. At most 200 bytes when encoded in UTF-8.
        &quot;policyTag&quot;: &quot;A String&quot;, # Resource name of the policy tag. This field is ignored when calling `ImportTaxonomies`.
      },
    ],
  },
}

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

Returns:
  An object of the form:

    { # A taxonomy is a collection of hierarchical policy tags that classify data along a common axis. For example, a &quot;data sensitivity&quot; taxonomy might contain the following policy tags: ``` + PII + Account number + Age + SSN + Zipcode + Financials + Revenue ``` A &quot;data origin&quot; taxonomy might contain the following policy tags: ``` + User data + Employee data + Partner data + Public data ```
  &quot;activatedPolicyTypes&quot;: [ # Optional. A list of policy types that are activated for this taxonomy. If not set, defaults to an empty list.
    &quot;A String&quot;,
  ],
  &quot;description&quot;: &quot;A String&quot;, # Optional. Description of this taxonomy. If not set, defaults to empty. The description must contain only Unicode characters, tabs, newlines, carriage returns, and page breaks, and be at most 2000 bytes long when encoded in UTF-8.
  &quot;displayName&quot;: &quot;A String&quot;, # Required. User-defined name of this taxonomy. The name can&#x27;t start or end with spaces, must contain only Unicode letters, numbers, underscores, dashes, and spaces, and be at most 200 bytes long when encoded in UTF-8.
  &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of this taxonomy in URL format. Note: Policy tag manager generates unique taxonomy IDs.
  &quot;policyTagCount&quot;: 42, # Output only. Number of policy tags in this taxonomy.
  &quot;taxonomyTimestamps&quot;: { # Timestamps associated with this resource in a particular system. # Output only. Creation and modification timestamps of this taxonomy.
    &quot;createTime&quot;: &quot;A String&quot;, # Creation timestamp of the resource within the given system.
    &quot;expireTime&quot;: &quot;A String&quot;, # Output only. Expiration timestamp of the resource within the given system. Currently only applicable to BigQuery resources.
    &quot;updateTime&quot;: &quot;A String&quot;, # Timestamp of the last modification of the resource or its metadata within a given system. Note: Depending on the source system, not every modification updates this timestamp. For example, BigQuery timestamps every metadata modification but not data or permission changes.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="setIamPolicy">setIamPolicy(resource, body=None, x__xgafv=None)</code>
  <pre>Sets the IAM policy for a policy tag or a taxonomy.

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;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;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;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
          &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;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;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
      },
    ],
    &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;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;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;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;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
        &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;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;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
    },
  ],
  &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;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 your permissions on a specified policy tag or taxonomy.

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>

</body></html>