<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="containeranalysis_v1alpha1.html">Container Analysis API</a> . <a href="containeranalysis_v1alpha1.providers.html">providers</a> . <a href="containeranalysis_v1alpha1.providers.notes.html">notes</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="containeranalysis_v1alpha1.providers.notes.occurrences.html">occurrences()</a></code>
</p>
<p class="firstline">Returns the occurrences 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(name, body=None, noteId=None, parent=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new `Note`.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the given `Note` from the system.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the requested `Note`.</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 note or an `Occurrence` resource. Requires `containeranalysis.notes.setIamPolicy` or `containeranalysis.occurrences.setIamPolicy` permission if the resource is a note or occurrence, respectively. Attempting to call this method on a resource without the required permission will result in a `PERMISSION_DENIED` error. Attempting to call this method on a non-existent resource will result in a `NOT_FOUND` error if the user has list permission on the project, or a `PERMISSION_DENIED` error otherwise. The resource takes the following formats: `projects/{PROJECT_ID}/occurrences/{OCCURRENCE_ID}` for occurrences and projects/{PROJECT_ID}/notes/{NOTE_ID} for notes</p>
<p class="toc_element">
  <code><a href="#list">list(name, filter=None, parent=None, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all `Notes` for a given project.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing `Note`.</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 `Note` or `Occurrence`. Requires `containeranalysis.notes.setIamPolicy` or `containeranalysis.occurrences.setIamPolicy` permission if the resource is a `Note` or an `Occurrence`, respectively. Attempting to call this method without these permissions will result in a ` `PERMISSION_DENIED` error. Attempting to call this method on a non-existent resource will result in a `NOT_FOUND` error if the user has `containeranalysis.notes.list` permission on a `Note` or `containeranalysis.occurrences.list` on an `Occurrence`, or a `PERMISSION_DENIED` error otherwise. The resource takes the following formats: `projects/{projectid}/occurrences/{occurrenceid}` for occurrences and projects/{projectid}/notes/{noteid} for notes</p>
<p class="toc_element">
  <code><a href="#testIamPermissions">testIamPermissions(resource, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the permissions that a caller has on the specified note or occurrence resource. Requires list permission on the project (for example, "storage.objects.list" on the containing bucket for testing permission of an object). Attempting to call this method on a non-existent resource will result in a `NOT_FOUND` error if the user has list permission on the project, or a `PERMISSION_DENIED` error otherwise. The resource takes the following formats: `projects/{PROJECT_ID}/occurrences/{OCCURRENCE_ID}` for `Occurrences` and `projects/{PROJECT_ID}/notes/{NOTE_ID}` for `Notes`</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(name, body=None, noteId=None, parent=None, x__xgafv=None)</code>
  <pre>Creates a new `Note`.

Args:
  name: string, The name of the project. Should be of the form &quot;providers/{provider_id}&quot;. @Deprecated (required)
  body: object, The request body.
    The object takes the form of:

{ # Provides a detailed description of a `Note`.
    &quot;baseImage&quot;: { # Basis describes the base image portion (Note) of the DockerImage relationship. Linked occurrences are derived from this or an equivalent image via: FROM Or an equivalent reference, e.g. a tag of the resource_url. # A note describing a base image.
      &quot;fingerprint&quot;: { # A set of properties that uniquely identify a given Docker image. # The fingerprint of the base image.
        &quot;v2Name&quot;: &quot;A String&quot;, # Output only. The name of the image&#x27;s v2 blobs computed via: [bottom] := v2_blobbottom := sha256(v2_blob[N] + &quot; &quot; + v2_name[N+1]) Only the name of the final blob is kept. This field can be used as a filter in list requests.
        &quot;v1Name&quot;: &quot;A String&quot;, # The layer-id of the final layer in the Docker image&#x27;s v1 representation. This field can be used as a filter in list requests.
        &quot;v2Blob&quot;: [ # The ordered list of v2 blobs that represent a given image.
          &quot;A String&quot;,
        ],
      },
      &quot;resourceUrl&quot;: &quot;A String&quot;, # The resource_url for the resource representing the basis of associated occurrence images.
    },
    &quot;kind&quot;: &quot;A String&quot;, # Output only. This explicitly denotes which kind of note is specified. This field can be used as a filter in list requests.
    &quot;expirationTime&quot;: &quot;A String&quot;, # Time of expiration for this note, null if note does not expire.
    &quot;attestationAuthority&quot;: { # Note kind that represents a logical attestation &quot;role&quot; or &quot;authority&quot;. For example, an organization might have one `AttestationAuthority` for &quot;QA&quot; and one for &quot;build&quot;. This Note is intended to act strictly as a grouping mechanism for the attached Occurrences (Attestations). This grouping mechanism also provides a security boundary, since IAM ACLs gate the ability for a principle to attach an Occurrence to a given Note. It also provides a single point of lookup to find all attached Attestation Occurrences, even if they don&#x27;t all live in the same project. # A note describing an attestation role.
      &quot;hint&quot;: { # This submessage provides human-readable hints about the purpose of the AttestationAuthority. Because the name of a Note acts as its resource reference, it is important to disambiguate the canonical name of the Note (which might be a UUID for security purposes) from &quot;readable&quot; names more suitable for debug output. Note that these hints should NOT be used to look up AttestationAuthorities in security sensitive contexts, such as when looking up Attestations to verify.
        &quot;humanReadableName&quot;: &quot;A String&quot;, # The human readable name of this Attestation Authority, for example &quot;qa&quot;.
      },
    },
    &quot;relatedUrl&quot;: [ # URLs associated with this note
      { # Metadata for any related URL information
        &quot;label&quot;: &quot;A String&quot;, # Label to describe usage of the URL
        &quot;url&quot;: &quot;A String&quot;, # Specific URL to associate with the note
      },
    ],
    &quot;discovery&quot;: { # A note that indicates a type of analysis a provider would perform. This note exists in a provider&#x27;s project. A `Discovery` occurrence is created in a consumer&#x27;s project at the start of analysis. The occurrence&#x27;s operation will indicate the status of the analysis. Absence of an occurrence linked to this note for a resource indicates that analysis hasn&#x27;t started. # A note describing a provider/analysis type.
      &quot;analysisKind&quot;: &quot;A String&quot;, # The kind of analysis that is handled by this discovery.
    },
    &quot;name&quot;: &quot;A String&quot;, # The name of the note in the form &quot;projects/{provider_project_id}/notes/{NOTE_ID}&quot;
    &quot;package&quot;: { # This represents a particular package that is distributed over various channels. e.g. glibc (aka libc6) is distributed by many, at various versions. # A note describing a package hosted by various package managers.
      &quot;distribution&quot;: [ # The various channels by which a package is distributed.
        { # This represents a particular channel of distribution for a given package. e.g. Debian&#x27;s jessie-backports dpkg mirror
          &quot;architecture&quot;: &quot;A String&quot;, # The CPU architecture for which packages in this distribution channel were built
          &quot;url&quot;: &quot;A String&quot;, # The distribution channel-specific homepage for this package.
          &quot;maintainer&quot;: &quot;A String&quot;, # A freeform string denoting the maintainer of this package.
          &quot;description&quot;: &quot;A String&quot;, # The distribution channel-specific description of this package.
          &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format](https://cpe.mitre.org/specification/) denoting the package manager version distributing a package.
          &quot;latestVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The latest available version of this package in this distribution channel.
            &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
            &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
            &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
            &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
          },
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # The name of the package.
    },
    &quot;shortDescription&quot;: &quot;A String&quot;, # A one sentence description of this `Note`.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this note was created. This field can be used as a filter in list requests.
    &quot;deployable&quot;: { # An artifact that can be deployed in some runtime. # A note describing something that can be deployed.
      &quot;resourceUri&quot;: [ # Resource URI for the artifact being deployed.
        &quot;A String&quot;,
      ],
    },
    &quot;vulnerabilityType&quot;: { # VulnerabilityType provides metadata about a security vulnerability. # A package vulnerability type of note.
      &quot;details&quot;: [ # All information about the package to specifically identify this vulnerability. One entry per (version range and cpe_uri) the package vulnerability has manifested in.
        { # Identifies all occurrences of this vulnerability in the package for a specific distro/location For example: glibc in cpe:/o:debian:debian_linux:8 for versions 2.1 - 2.2
          &quot;isObsolete&quot;: True or False, # Whether this Detail is obsolete. Occurrences are expected not to point to obsolete details.
          &quot;fixedLocation&quot;: { # The location of the vulnerability # The fix for this specific package version.
            &quot;version&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The version of the package being described. This field can be used as a filter in list requests.
              &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
              &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
              &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
              &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
            },
            &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) format. Examples include distro or storage location for vulnerable jar. This field can be used as a filter in list requests.
            &quot;package&quot;: &quot;A String&quot;, # The package being described.
          },
          &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) in which the vulnerability manifests. Examples include distro or storage location for vulnerable jar. This field can be used as a filter in list requests.
          &quot;minAffectedVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The min version of the package in which the vulnerability exists.
            &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
            &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
            &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
            &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
          },
          &quot;package&quot;: &quot;A String&quot;, # The name of the package where the vulnerability was found. This field can be used as a filter in list requests.
          &quot;maxAffectedVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The max version of the package in which the vulnerability exists.
            &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
            &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
            &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
            &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
          },
          &quot;packageType&quot;: &quot;A String&quot;, # The type of package; whether native or non native(ruby gems, node.js packages etc)
          &quot;severityName&quot;: &quot;A String&quot;, # The severity (eg: distro assigned severity) for this vulnerability.
          &quot;description&quot;: &quot;A String&quot;, # A vendor-specific description of this note.
        },
      ],
      &quot;severity&quot;: &quot;A String&quot;, # Note provider assigned impact of the vulnerability
      &quot;cvssScore&quot;: 3.14, # The CVSS score for this Vulnerability.
    },
    &quot;longDescription&quot;: &quot;A String&quot;, # A detailed description of this `Note`.
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this note was last updated. This field can be used as a filter in list requests.
    &quot;upgrade&quot;: { # An Upgrade Note represents a potential upgrade of a package to a given version. For each package version combination (i.e. bash 4.0, bash 4.1, bash 4.1.2), there will be a Upgrade Note. # A note describing an upgrade.
      &quot;distributions&quot;: [ # Metadata about the upgrade for each specific operating system.
        { # The Upgrade Distribution represents metadata about the Upgrade for each operating system (CPE). Some distributions have additional metadata around updates, classifying them into various categories and severities.
          &quot;classification&quot;: &quot;A String&quot;, # The operating system classification of this Upgrade, as specified by the upstream operating system upgrade feed.
          &quot;cpeUri&quot;: &quot;A String&quot;, # Required - The specific operating system this metadata applies to. See https://cpe.mitre.org/specification/.
          &quot;severity&quot;: &quot;A String&quot;, # The severity as specified by the upstream operating system.
          &quot;cve&quot;: [ # The cve that would be resolved by this upgrade.
            &quot;A String&quot;,
          ],
        },
      ],
      &quot;package&quot;: &quot;A String&quot;, # Required - The package this Upgrade is for.
      &quot;version&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # Required - The version of the package in machine + human readable form.
        &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
        &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
        &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
        &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
      },
    },
    &quot;buildType&quot;: { # Note holding the version of the provider&#x27;s builder and the signature of the provenance message in linked BuildDetails. # Build provenance type for a verifiable build.
      &quot;builderVersion&quot;: &quot;A String&quot;, # Version of the builder which produced this Note.
      &quot;signature&quot;: { # Message encapsulating the signature of the verified build. # Signature of the build in Occurrences pointing to the Note containing this `BuilderDetails`.
        &quot;publicKey&quot;: &quot;A String&quot;, # Public key of the builder which can be used to verify that the related findings are valid and unchanged. If `key_type` is empty, this defaults to PEM encoded public keys. This field may be empty if `key_id` references an external key. For Cloud Build based signatures, this is a PEM encoded public key. To verify the Cloud Build signature, place the contents of this field into a file (public.pem). The signature field is base64-decoded into its binary representation in signature.bin, and the provenance bytes from `BuildDetails` are base64-decoded into a binary representation in signed.bin. OpenSSL can then verify the signature: `openssl sha256 -verify public.pem -signature signature.bin signed.bin`
        &quot;keyType&quot;: &quot;A String&quot;, # The type of the key, either stored in `public_key` or referenced in `key_id`
        &quot;signature&quot;: &quot;A String&quot;, # Signature of the related `BuildProvenance`, encoded in a base64 string.
        &quot;keyId&quot;: &quot;A String&quot;, # An Id for the key used to sign. This could be either an Id for the key stored in `public_key` (such as the Id or fingerprint for a PGP key, or the CN for a cert), or a reference to an external key (such as a reference to a key in Cloud Key Management Service).
      },
    },
  }

  noteId: string, The ID to use for this note.
  parent: string, This field contains the project Id for example: &quot;projects/{project_id}
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Provides a detailed description of a `Note`.
      &quot;baseImage&quot;: { # Basis describes the base image portion (Note) of the DockerImage relationship. Linked occurrences are derived from this or an equivalent image via: FROM Or an equivalent reference, e.g. a tag of the resource_url. # A note describing a base image.
        &quot;fingerprint&quot;: { # A set of properties that uniquely identify a given Docker image. # The fingerprint of the base image.
          &quot;v2Name&quot;: &quot;A String&quot;, # Output only. The name of the image&#x27;s v2 blobs computed via: [bottom] := v2_blobbottom := sha256(v2_blob[N] + &quot; &quot; + v2_name[N+1]) Only the name of the final blob is kept. This field can be used as a filter in list requests.
          &quot;v1Name&quot;: &quot;A String&quot;, # The layer-id of the final layer in the Docker image&#x27;s v1 representation. This field can be used as a filter in list requests.
          &quot;v2Blob&quot;: [ # The ordered list of v2 blobs that represent a given image.
            &quot;A String&quot;,
          ],
        },
        &quot;resourceUrl&quot;: &quot;A String&quot;, # The resource_url for the resource representing the basis of associated occurrence images.
      },
      &quot;kind&quot;: &quot;A String&quot;, # Output only. This explicitly denotes which kind of note is specified. This field can be used as a filter in list requests.
      &quot;expirationTime&quot;: &quot;A String&quot;, # Time of expiration for this note, null if note does not expire.
      &quot;attestationAuthority&quot;: { # Note kind that represents a logical attestation &quot;role&quot; or &quot;authority&quot;. For example, an organization might have one `AttestationAuthority` for &quot;QA&quot; and one for &quot;build&quot;. This Note is intended to act strictly as a grouping mechanism for the attached Occurrences (Attestations). This grouping mechanism also provides a security boundary, since IAM ACLs gate the ability for a principle to attach an Occurrence to a given Note. It also provides a single point of lookup to find all attached Attestation Occurrences, even if they don&#x27;t all live in the same project. # A note describing an attestation role.
        &quot;hint&quot;: { # This submessage provides human-readable hints about the purpose of the AttestationAuthority. Because the name of a Note acts as its resource reference, it is important to disambiguate the canonical name of the Note (which might be a UUID for security purposes) from &quot;readable&quot; names more suitable for debug output. Note that these hints should NOT be used to look up AttestationAuthorities in security sensitive contexts, such as when looking up Attestations to verify.
          &quot;humanReadableName&quot;: &quot;A String&quot;, # The human readable name of this Attestation Authority, for example &quot;qa&quot;.
        },
      },
      &quot;relatedUrl&quot;: [ # URLs associated with this note
        { # Metadata for any related URL information
          &quot;label&quot;: &quot;A String&quot;, # Label to describe usage of the URL
          &quot;url&quot;: &quot;A String&quot;, # Specific URL to associate with the note
        },
      ],
      &quot;discovery&quot;: { # A note that indicates a type of analysis a provider would perform. This note exists in a provider&#x27;s project. A `Discovery` occurrence is created in a consumer&#x27;s project at the start of analysis. The occurrence&#x27;s operation will indicate the status of the analysis. Absence of an occurrence linked to this note for a resource indicates that analysis hasn&#x27;t started. # A note describing a provider/analysis type.
        &quot;analysisKind&quot;: &quot;A String&quot;, # The kind of analysis that is handled by this discovery.
      },
      &quot;name&quot;: &quot;A String&quot;, # The name of the note in the form &quot;projects/{provider_project_id}/notes/{NOTE_ID}&quot;
      &quot;package&quot;: { # This represents a particular package that is distributed over various channels. e.g. glibc (aka libc6) is distributed by many, at various versions. # A note describing a package hosted by various package managers.
        &quot;distribution&quot;: [ # The various channels by which a package is distributed.
          { # This represents a particular channel of distribution for a given package. e.g. Debian&#x27;s jessie-backports dpkg mirror
            &quot;architecture&quot;: &quot;A String&quot;, # The CPU architecture for which packages in this distribution channel were built
            &quot;url&quot;: &quot;A String&quot;, # The distribution channel-specific homepage for this package.
            &quot;maintainer&quot;: &quot;A String&quot;, # A freeform string denoting the maintainer of this package.
            &quot;description&quot;: &quot;A String&quot;, # The distribution channel-specific description of this package.
            &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format](https://cpe.mitre.org/specification/) denoting the package manager version distributing a package.
            &quot;latestVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The latest available version of this package in this distribution channel.
              &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
              &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
              &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
              &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
            },
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # The name of the package.
      },
      &quot;shortDescription&quot;: &quot;A String&quot;, # A one sentence description of this `Note`.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this note was created. This field can be used as a filter in list requests.
      &quot;deployable&quot;: { # An artifact that can be deployed in some runtime. # A note describing something that can be deployed.
        &quot;resourceUri&quot;: [ # Resource URI for the artifact being deployed.
          &quot;A String&quot;,
        ],
      },
      &quot;vulnerabilityType&quot;: { # VulnerabilityType provides metadata about a security vulnerability. # A package vulnerability type of note.
        &quot;details&quot;: [ # All information about the package to specifically identify this vulnerability. One entry per (version range and cpe_uri) the package vulnerability has manifested in.
          { # Identifies all occurrences of this vulnerability in the package for a specific distro/location For example: glibc in cpe:/o:debian:debian_linux:8 for versions 2.1 - 2.2
            &quot;isObsolete&quot;: True or False, # Whether this Detail is obsolete. Occurrences are expected not to point to obsolete details.
            &quot;fixedLocation&quot;: { # The location of the vulnerability # The fix for this specific package version.
              &quot;version&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The version of the package being described. This field can be used as a filter in list requests.
                &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
                &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
                &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
                &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
              },
              &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) format. Examples include distro or storage location for vulnerable jar. This field can be used as a filter in list requests.
              &quot;package&quot;: &quot;A String&quot;, # The package being described.
            },
            &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) in which the vulnerability manifests. Examples include distro or storage location for vulnerable jar. This field can be used as a filter in list requests.
            &quot;minAffectedVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The min version of the package in which the vulnerability exists.
              &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
              &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
              &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
              &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
            },
            &quot;package&quot;: &quot;A String&quot;, # The name of the package where the vulnerability was found. This field can be used as a filter in list requests.
            &quot;maxAffectedVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The max version of the package in which the vulnerability exists.
              &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
              &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
              &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
              &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
            },
            &quot;packageType&quot;: &quot;A String&quot;, # The type of package; whether native or non native(ruby gems, node.js packages etc)
            &quot;severityName&quot;: &quot;A String&quot;, # The severity (eg: distro assigned severity) for this vulnerability.
            &quot;description&quot;: &quot;A String&quot;, # A vendor-specific description of this note.
          },
        ],
        &quot;severity&quot;: &quot;A String&quot;, # Note provider assigned impact of the vulnerability
        &quot;cvssScore&quot;: 3.14, # The CVSS score for this Vulnerability.
      },
      &quot;longDescription&quot;: &quot;A String&quot;, # A detailed description of this `Note`.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this note was last updated. This field can be used as a filter in list requests.
      &quot;upgrade&quot;: { # An Upgrade Note represents a potential upgrade of a package to a given version. For each package version combination (i.e. bash 4.0, bash 4.1, bash 4.1.2), there will be a Upgrade Note. # A note describing an upgrade.
        &quot;distributions&quot;: [ # Metadata about the upgrade for each specific operating system.
          { # The Upgrade Distribution represents metadata about the Upgrade for each operating system (CPE). Some distributions have additional metadata around updates, classifying them into various categories and severities.
            &quot;classification&quot;: &quot;A String&quot;, # The operating system classification of this Upgrade, as specified by the upstream operating system upgrade feed.
            &quot;cpeUri&quot;: &quot;A String&quot;, # Required - The specific operating system this metadata applies to. See https://cpe.mitre.org/specification/.
            &quot;severity&quot;: &quot;A String&quot;, # The severity as specified by the upstream operating system.
            &quot;cve&quot;: [ # The cve that would be resolved by this upgrade.
              &quot;A String&quot;,
            ],
          },
        ],
        &quot;package&quot;: &quot;A String&quot;, # Required - The package this Upgrade is for.
        &quot;version&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # Required - The version of the package in machine + human readable form.
          &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
          &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
          &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
          &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
        },
      },
      &quot;buildType&quot;: { # Note holding the version of the provider&#x27;s builder and the signature of the provenance message in linked BuildDetails. # Build provenance type for a verifiable build.
        &quot;builderVersion&quot;: &quot;A String&quot;, # Version of the builder which produced this Note.
        &quot;signature&quot;: { # Message encapsulating the signature of the verified build. # Signature of the build in Occurrences pointing to the Note containing this `BuilderDetails`.
          &quot;publicKey&quot;: &quot;A String&quot;, # Public key of the builder which can be used to verify that the related findings are valid and unchanged. If `key_type` is empty, this defaults to PEM encoded public keys. This field may be empty if `key_id` references an external key. For Cloud Build based signatures, this is a PEM encoded public key. To verify the Cloud Build signature, place the contents of this field into a file (public.pem). The signature field is base64-decoded into its binary representation in signature.bin, and the provenance bytes from `BuildDetails` are base64-decoded into a binary representation in signed.bin. OpenSSL can then verify the signature: `openssl sha256 -verify public.pem -signature signature.bin signed.bin`
          &quot;keyType&quot;: &quot;A String&quot;, # The type of the key, either stored in `public_key` or referenced in `key_id`
          &quot;signature&quot;: &quot;A String&quot;, # Signature of the related `BuildProvenance`, encoded in a base64 string.
          &quot;keyId&quot;: &quot;A String&quot;, # An Id for the key used to sign. This could be either an Id for the key stored in `public_key` (such as the Id or fingerprint for a PGP key, or the CN for a cert), or a reference to an external key (such as a reference to a key in Cloud Key Management Service).
        },
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes the given `Note` from the system.

Args:
  name: string, The name of the note in the form of &quot;providers/{provider_id}/notes/{NOTE_ID}&quot; (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Returns the requested `Note`.

Args:
  name: string, The name of the note in the form of &quot;providers/{provider_id}/notes/{NOTE_ID}&quot; (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Provides a detailed description of a `Note`.
      &quot;baseImage&quot;: { # Basis describes the base image portion (Note) of the DockerImage relationship. Linked occurrences are derived from this or an equivalent image via: FROM Or an equivalent reference, e.g. a tag of the resource_url. # A note describing a base image.
        &quot;fingerprint&quot;: { # A set of properties that uniquely identify a given Docker image. # The fingerprint of the base image.
          &quot;v2Name&quot;: &quot;A String&quot;, # Output only. The name of the image&#x27;s v2 blobs computed via: [bottom] := v2_blobbottom := sha256(v2_blob[N] + &quot; &quot; + v2_name[N+1]) Only the name of the final blob is kept. This field can be used as a filter in list requests.
          &quot;v1Name&quot;: &quot;A String&quot;, # The layer-id of the final layer in the Docker image&#x27;s v1 representation. This field can be used as a filter in list requests.
          &quot;v2Blob&quot;: [ # The ordered list of v2 blobs that represent a given image.
            &quot;A String&quot;,
          ],
        },
        &quot;resourceUrl&quot;: &quot;A String&quot;, # The resource_url for the resource representing the basis of associated occurrence images.
      },
      &quot;kind&quot;: &quot;A String&quot;, # Output only. This explicitly denotes which kind of note is specified. This field can be used as a filter in list requests.
      &quot;expirationTime&quot;: &quot;A String&quot;, # Time of expiration for this note, null if note does not expire.
      &quot;attestationAuthority&quot;: { # Note kind that represents a logical attestation &quot;role&quot; or &quot;authority&quot;. For example, an organization might have one `AttestationAuthority` for &quot;QA&quot; and one for &quot;build&quot;. This Note is intended to act strictly as a grouping mechanism for the attached Occurrences (Attestations). This grouping mechanism also provides a security boundary, since IAM ACLs gate the ability for a principle to attach an Occurrence to a given Note. It also provides a single point of lookup to find all attached Attestation Occurrences, even if they don&#x27;t all live in the same project. # A note describing an attestation role.
        &quot;hint&quot;: { # This submessage provides human-readable hints about the purpose of the AttestationAuthority. Because the name of a Note acts as its resource reference, it is important to disambiguate the canonical name of the Note (which might be a UUID for security purposes) from &quot;readable&quot; names more suitable for debug output. Note that these hints should NOT be used to look up AttestationAuthorities in security sensitive contexts, such as when looking up Attestations to verify.
          &quot;humanReadableName&quot;: &quot;A String&quot;, # The human readable name of this Attestation Authority, for example &quot;qa&quot;.
        },
      },
      &quot;relatedUrl&quot;: [ # URLs associated with this note
        { # Metadata for any related URL information
          &quot;label&quot;: &quot;A String&quot;, # Label to describe usage of the URL
          &quot;url&quot;: &quot;A String&quot;, # Specific URL to associate with the note
        },
      ],
      &quot;discovery&quot;: { # A note that indicates a type of analysis a provider would perform. This note exists in a provider&#x27;s project. A `Discovery` occurrence is created in a consumer&#x27;s project at the start of analysis. The occurrence&#x27;s operation will indicate the status of the analysis. Absence of an occurrence linked to this note for a resource indicates that analysis hasn&#x27;t started. # A note describing a provider/analysis type.
        &quot;analysisKind&quot;: &quot;A String&quot;, # The kind of analysis that is handled by this discovery.
      },
      &quot;name&quot;: &quot;A String&quot;, # The name of the note in the form &quot;projects/{provider_project_id}/notes/{NOTE_ID}&quot;
      &quot;package&quot;: { # This represents a particular package that is distributed over various channels. e.g. glibc (aka libc6) is distributed by many, at various versions. # A note describing a package hosted by various package managers.
        &quot;distribution&quot;: [ # The various channels by which a package is distributed.
          { # This represents a particular channel of distribution for a given package. e.g. Debian&#x27;s jessie-backports dpkg mirror
            &quot;architecture&quot;: &quot;A String&quot;, # The CPU architecture for which packages in this distribution channel were built
            &quot;url&quot;: &quot;A String&quot;, # The distribution channel-specific homepage for this package.
            &quot;maintainer&quot;: &quot;A String&quot;, # A freeform string denoting the maintainer of this package.
            &quot;description&quot;: &quot;A String&quot;, # The distribution channel-specific description of this package.
            &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format](https://cpe.mitre.org/specification/) denoting the package manager version distributing a package.
            &quot;latestVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The latest available version of this package in this distribution channel.
              &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
              &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
              &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
              &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
            },
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # The name of the package.
      },
      &quot;shortDescription&quot;: &quot;A String&quot;, # A one sentence description of this `Note`.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this note was created. This field can be used as a filter in list requests.
      &quot;deployable&quot;: { # An artifact that can be deployed in some runtime. # A note describing something that can be deployed.
        &quot;resourceUri&quot;: [ # Resource URI for the artifact being deployed.
          &quot;A String&quot;,
        ],
      },
      &quot;vulnerabilityType&quot;: { # VulnerabilityType provides metadata about a security vulnerability. # A package vulnerability type of note.
        &quot;details&quot;: [ # All information about the package to specifically identify this vulnerability. One entry per (version range and cpe_uri) the package vulnerability has manifested in.
          { # Identifies all occurrences of this vulnerability in the package for a specific distro/location For example: glibc in cpe:/o:debian:debian_linux:8 for versions 2.1 - 2.2
            &quot;isObsolete&quot;: True or False, # Whether this Detail is obsolete. Occurrences are expected not to point to obsolete details.
            &quot;fixedLocation&quot;: { # The location of the vulnerability # The fix for this specific package version.
              &quot;version&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The version of the package being described. This field can be used as a filter in list requests.
                &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
                &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
                &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
                &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
              },
              &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) format. Examples include distro or storage location for vulnerable jar. This field can be used as a filter in list requests.
              &quot;package&quot;: &quot;A String&quot;, # The package being described.
            },
            &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) in which the vulnerability manifests. Examples include distro or storage location for vulnerable jar. This field can be used as a filter in list requests.
            &quot;minAffectedVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The min version of the package in which the vulnerability exists.
              &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
              &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
              &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
              &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
            },
            &quot;package&quot;: &quot;A String&quot;, # The name of the package where the vulnerability was found. This field can be used as a filter in list requests.
            &quot;maxAffectedVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The max version of the package in which the vulnerability exists.
              &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
              &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
              &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
              &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
            },
            &quot;packageType&quot;: &quot;A String&quot;, # The type of package; whether native or non native(ruby gems, node.js packages etc)
            &quot;severityName&quot;: &quot;A String&quot;, # The severity (eg: distro assigned severity) for this vulnerability.
            &quot;description&quot;: &quot;A String&quot;, # A vendor-specific description of this note.
          },
        ],
        &quot;severity&quot;: &quot;A String&quot;, # Note provider assigned impact of the vulnerability
        &quot;cvssScore&quot;: 3.14, # The CVSS score for this Vulnerability.
      },
      &quot;longDescription&quot;: &quot;A String&quot;, # A detailed description of this `Note`.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this note was last updated. This field can be used as a filter in list requests.
      &quot;upgrade&quot;: { # An Upgrade Note represents a potential upgrade of a package to a given version. For each package version combination (i.e. bash 4.0, bash 4.1, bash 4.1.2), there will be a Upgrade Note. # A note describing an upgrade.
        &quot;distributions&quot;: [ # Metadata about the upgrade for each specific operating system.
          { # The Upgrade Distribution represents metadata about the Upgrade for each operating system (CPE). Some distributions have additional metadata around updates, classifying them into various categories and severities.
            &quot;classification&quot;: &quot;A String&quot;, # The operating system classification of this Upgrade, as specified by the upstream operating system upgrade feed.
            &quot;cpeUri&quot;: &quot;A String&quot;, # Required - The specific operating system this metadata applies to. See https://cpe.mitre.org/specification/.
            &quot;severity&quot;: &quot;A String&quot;, # The severity as specified by the upstream operating system.
            &quot;cve&quot;: [ # The cve that would be resolved by this upgrade.
              &quot;A String&quot;,
            ],
          },
        ],
        &quot;package&quot;: &quot;A String&quot;, # Required - The package this Upgrade is for.
        &quot;version&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # Required - The version of the package in machine + human readable form.
          &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
          &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
          &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
          &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
        },
      },
      &quot;buildType&quot;: { # Note holding the version of the provider&#x27;s builder and the signature of the provenance message in linked BuildDetails. # Build provenance type for a verifiable build.
        &quot;builderVersion&quot;: &quot;A String&quot;, # Version of the builder which produced this Note.
        &quot;signature&quot;: { # Message encapsulating the signature of the verified build. # Signature of the build in Occurrences pointing to the Note containing this `BuilderDetails`.
          &quot;publicKey&quot;: &quot;A String&quot;, # Public key of the builder which can be used to verify that the related findings are valid and unchanged. If `key_type` is empty, this defaults to PEM encoded public keys. This field may be empty if `key_id` references an external key. For Cloud Build based signatures, this is a PEM encoded public key. To verify the Cloud Build signature, place the contents of this field into a file (public.pem). The signature field is base64-decoded into its binary representation in signature.bin, and the provenance bytes from `BuildDetails` are base64-decoded into a binary representation in signed.bin. OpenSSL can then verify the signature: `openssl sha256 -verify public.pem -signature signature.bin signed.bin`
          &quot;keyType&quot;: &quot;A String&quot;, # The type of the key, either stored in `public_key` or referenced in `key_id`
          &quot;signature&quot;: &quot;A String&quot;, # Signature of the related `BuildProvenance`, encoded in a base64 string.
          &quot;keyId&quot;: &quot;A String&quot;, # An Id for the key used to sign. This could be either an Id for the key stored in `public_key` (such as the Id or fingerprint for a PGP key, or the CN for a cert), or a reference to an external key (such as a reference to a key in Cloud Key Management Service).
        },
      },
    }</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 note or an `Occurrence` resource. Requires `containeranalysis.notes.setIamPolicy` or `containeranalysis.occurrences.setIamPolicy` permission if the resource is a note or occurrence, respectively. Attempting to call this method on a resource without the required permission will result in a `PERMISSION_DENIED` error. Attempting to call this method on a non-existent resource will result in a `NOT_FOUND` error if the user has list permission on the project, or a `PERMISSION_DENIED` error otherwise. The resource takes the following formats: `projects/{PROJECT_ID}/occurrences/{OCCURRENCE_ID}` for occurrences and projects/{PROJECT_ID}/notes/{NOTE_ID} for notes

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;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).
    &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;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;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;bindingId&quot;: &quot;A String&quot;,
      },
    ],
    &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.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(name, filter=None, parent=None, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists all `Notes` for a given project.

Args:
  name: string, The name field will contain the project Id for example: &quot;providers/{provider_id} @Deprecated (required)
  filter: string, The filter expression.
  parent: string, This field contains the project Id for example: &quot;projects/{PROJECT_ID}&quot;.
  pageToken: string, Token to provide to skip to a particular spot in the list.
  pageSize: integer, Number of notes to return in the list.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response including listed notes.
    &quot;notes&quot;: [ # The occurrences requested
      { # Provides a detailed description of a `Note`.
          &quot;baseImage&quot;: { # Basis describes the base image portion (Note) of the DockerImage relationship. Linked occurrences are derived from this or an equivalent image via: FROM Or an equivalent reference, e.g. a tag of the resource_url. # A note describing a base image.
            &quot;fingerprint&quot;: { # A set of properties that uniquely identify a given Docker image. # The fingerprint of the base image.
              &quot;v2Name&quot;: &quot;A String&quot;, # Output only. The name of the image&#x27;s v2 blobs computed via: [bottom] := v2_blobbottom := sha256(v2_blob[N] + &quot; &quot; + v2_name[N+1]) Only the name of the final blob is kept. This field can be used as a filter in list requests.
              &quot;v1Name&quot;: &quot;A String&quot;, # The layer-id of the final layer in the Docker image&#x27;s v1 representation. This field can be used as a filter in list requests.
              &quot;v2Blob&quot;: [ # The ordered list of v2 blobs that represent a given image.
                &quot;A String&quot;,
              ],
            },
            &quot;resourceUrl&quot;: &quot;A String&quot;, # The resource_url for the resource representing the basis of associated occurrence images.
          },
          &quot;kind&quot;: &quot;A String&quot;, # Output only. This explicitly denotes which kind of note is specified. This field can be used as a filter in list requests.
          &quot;expirationTime&quot;: &quot;A String&quot;, # Time of expiration for this note, null if note does not expire.
          &quot;attestationAuthority&quot;: { # Note kind that represents a logical attestation &quot;role&quot; or &quot;authority&quot;. For example, an organization might have one `AttestationAuthority` for &quot;QA&quot; and one for &quot;build&quot;. This Note is intended to act strictly as a grouping mechanism for the attached Occurrences (Attestations). This grouping mechanism also provides a security boundary, since IAM ACLs gate the ability for a principle to attach an Occurrence to a given Note. It also provides a single point of lookup to find all attached Attestation Occurrences, even if they don&#x27;t all live in the same project. # A note describing an attestation role.
            &quot;hint&quot;: { # This submessage provides human-readable hints about the purpose of the AttestationAuthority. Because the name of a Note acts as its resource reference, it is important to disambiguate the canonical name of the Note (which might be a UUID for security purposes) from &quot;readable&quot; names more suitable for debug output. Note that these hints should NOT be used to look up AttestationAuthorities in security sensitive contexts, such as when looking up Attestations to verify.
              &quot;humanReadableName&quot;: &quot;A String&quot;, # The human readable name of this Attestation Authority, for example &quot;qa&quot;.
            },
          },
          &quot;relatedUrl&quot;: [ # URLs associated with this note
            { # Metadata for any related URL information
              &quot;label&quot;: &quot;A String&quot;, # Label to describe usage of the URL
              &quot;url&quot;: &quot;A String&quot;, # Specific URL to associate with the note
            },
          ],
          &quot;discovery&quot;: { # A note that indicates a type of analysis a provider would perform. This note exists in a provider&#x27;s project. A `Discovery` occurrence is created in a consumer&#x27;s project at the start of analysis. The occurrence&#x27;s operation will indicate the status of the analysis. Absence of an occurrence linked to this note for a resource indicates that analysis hasn&#x27;t started. # A note describing a provider/analysis type.
            &quot;analysisKind&quot;: &quot;A String&quot;, # The kind of analysis that is handled by this discovery.
          },
          &quot;name&quot;: &quot;A String&quot;, # The name of the note in the form &quot;projects/{provider_project_id}/notes/{NOTE_ID}&quot;
          &quot;package&quot;: { # This represents a particular package that is distributed over various channels. e.g. glibc (aka libc6) is distributed by many, at various versions. # A note describing a package hosted by various package managers.
            &quot;distribution&quot;: [ # The various channels by which a package is distributed.
              { # This represents a particular channel of distribution for a given package. e.g. Debian&#x27;s jessie-backports dpkg mirror
                &quot;architecture&quot;: &quot;A String&quot;, # The CPU architecture for which packages in this distribution channel were built
                &quot;url&quot;: &quot;A String&quot;, # The distribution channel-specific homepage for this package.
                &quot;maintainer&quot;: &quot;A String&quot;, # A freeform string denoting the maintainer of this package.
                &quot;description&quot;: &quot;A String&quot;, # The distribution channel-specific description of this package.
                &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format](https://cpe.mitre.org/specification/) denoting the package manager version distributing a package.
                &quot;latestVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The latest available version of this package in this distribution channel.
                  &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
                  &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
                  &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
                  &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
                },
              },
            ],
            &quot;name&quot;: &quot;A String&quot;, # The name of the package.
          },
          &quot;shortDescription&quot;: &quot;A String&quot;, # A one sentence description of this `Note`.
          &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this note was created. This field can be used as a filter in list requests.
          &quot;deployable&quot;: { # An artifact that can be deployed in some runtime. # A note describing something that can be deployed.
            &quot;resourceUri&quot;: [ # Resource URI for the artifact being deployed.
              &quot;A String&quot;,
            ],
          },
          &quot;vulnerabilityType&quot;: { # VulnerabilityType provides metadata about a security vulnerability. # A package vulnerability type of note.
            &quot;details&quot;: [ # All information about the package to specifically identify this vulnerability. One entry per (version range and cpe_uri) the package vulnerability has manifested in.
              { # Identifies all occurrences of this vulnerability in the package for a specific distro/location For example: glibc in cpe:/o:debian:debian_linux:8 for versions 2.1 - 2.2
                &quot;isObsolete&quot;: True or False, # Whether this Detail is obsolete. Occurrences are expected not to point to obsolete details.
                &quot;fixedLocation&quot;: { # The location of the vulnerability # The fix for this specific package version.
                  &quot;version&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The version of the package being described. This field can be used as a filter in list requests.
                    &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
                    &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
                    &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
                    &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
                  },
                  &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) format. Examples include distro or storage location for vulnerable jar. This field can be used as a filter in list requests.
                  &quot;package&quot;: &quot;A String&quot;, # The package being described.
                },
                &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) in which the vulnerability manifests. Examples include distro or storage location for vulnerable jar. This field can be used as a filter in list requests.
                &quot;minAffectedVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The min version of the package in which the vulnerability exists.
                  &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
                  &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
                  &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
                  &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
                },
                &quot;package&quot;: &quot;A String&quot;, # The name of the package where the vulnerability was found. This field can be used as a filter in list requests.
                &quot;maxAffectedVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The max version of the package in which the vulnerability exists.
                  &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
                  &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
                  &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
                  &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
                },
                &quot;packageType&quot;: &quot;A String&quot;, # The type of package; whether native or non native(ruby gems, node.js packages etc)
                &quot;severityName&quot;: &quot;A String&quot;, # The severity (eg: distro assigned severity) for this vulnerability.
                &quot;description&quot;: &quot;A String&quot;, # A vendor-specific description of this note.
              },
            ],
            &quot;severity&quot;: &quot;A String&quot;, # Note provider assigned impact of the vulnerability
            &quot;cvssScore&quot;: 3.14, # The CVSS score for this Vulnerability.
          },
          &quot;longDescription&quot;: &quot;A String&quot;, # A detailed description of this `Note`.
          &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this note was last updated. This field can be used as a filter in list requests.
          &quot;upgrade&quot;: { # An Upgrade Note represents a potential upgrade of a package to a given version. For each package version combination (i.e. bash 4.0, bash 4.1, bash 4.1.2), there will be a Upgrade Note. # A note describing an upgrade.
            &quot;distributions&quot;: [ # Metadata about the upgrade for each specific operating system.
              { # The Upgrade Distribution represents metadata about the Upgrade for each operating system (CPE). Some distributions have additional metadata around updates, classifying them into various categories and severities.
                &quot;classification&quot;: &quot;A String&quot;, # The operating system classification of this Upgrade, as specified by the upstream operating system upgrade feed.
                &quot;cpeUri&quot;: &quot;A String&quot;, # Required - The specific operating system this metadata applies to. See https://cpe.mitre.org/specification/.
                &quot;severity&quot;: &quot;A String&quot;, # The severity as specified by the upstream operating system.
                &quot;cve&quot;: [ # The cve that would be resolved by this upgrade.
                  &quot;A String&quot;,
                ],
              },
            ],
            &quot;package&quot;: &quot;A String&quot;, # Required - The package this Upgrade is for.
            &quot;version&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # Required - The version of the package in machine + human readable form.
              &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
              &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
              &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
              &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
            },
          },
          &quot;buildType&quot;: { # Note holding the version of the provider&#x27;s builder and the signature of the provenance message in linked BuildDetails. # Build provenance type for a verifiable build.
            &quot;builderVersion&quot;: &quot;A String&quot;, # Version of the builder which produced this Note.
            &quot;signature&quot;: { # Message encapsulating the signature of the verified build. # Signature of the build in Occurrences pointing to the Note containing this `BuilderDetails`.
              &quot;publicKey&quot;: &quot;A String&quot;, # Public key of the builder which can be used to verify that the related findings are valid and unchanged. If `key_type` is empty, this defaults to PEM encoded public keys. This field may be empty if `key_id` references an external key. For Cloud Build based signatures, this is a PEM encoded public key. To verify the Cloud Build signature, place the contents of this field into a file (public.pem). The signature field is base64-decoded into its binary representation in signature.bin, and the provenance bytes from `BuildDetails` are base64-decoded into a binary representation in signed.bin. OpenSSL can then verify the signature: `openssl sha256 -verify public.pem -signature signature.bin signed.bin`
              &quot;keyType&quot;: &quot;A String&quot;, # The type of the key, either stored in `public_key` or referenced in `key_id`
              &quot;signature&quot;: &quot;A String&quot;, # Signature of the related `BuildProvenance`, encoded in a base64 string.
              &quot;keyId&quot;: &quot;A String&quot;, # An Id for the key used to sign. This could be either an Id for the key stored in `public_key` (such as the Id or fingerprint for a PGP key, or the CN for a cert), or a reference to an external key (such as a reference to a key in Cloud Key Management Service).
            },
          },
        },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The next pagination token in the list response. It should be used as page_token for the following request. An empty value means no more result.
  }</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 an existing `Note`.

Args:
  name: string, The name of the note. Should be of the form &quot;projects/{provider_id}/notes/{note_id}&quot;. (required)
  body: object, The request body.
    The object takes the form of:

{ # Provides a detailed description of a `Note`.
    &quot;baseImage&quot;: { # Basis describes the base image portion (Note) of the DockerImage relationship. Linked occurrences are derived from this or an equivalent image via: FROM Or an equivalent reference, e.g. a tag of the resource_url. # A note describing a base image.
      &quot;fingerprint&quot;: { # A set of properties that uniquely identify a given Docker image. # The fingerprint of the base image.
        &quot;v2Name&quot;: &quot;A String&quot;, # Output only. The name of the image&#x27;s v2 blobs computed via: [bottom] := v2_blobbottom := sha256(v2_blob[N] + &quot; &quot; + v2_name[N+1]) Only the name of the final blob is kept. This field can be used as a filter in list requests.
        &quot;v1Name&quot;: &quot;A String&quot;, # The layer-id of the final layer in the Docker image&#x27;s v1 representation. This field can be used as a filter in list requests.
        &quot;v2Blob&quot;: [ # The ordered list of v2 blobs that represent a given image.
          &quot;A String&quot;,
        ],
      },
      &quot;resourceUrl&quot;: &quot;A String&quot;, # The resource_url for the resource representing the basis of associated occurrence images.
    },
    &quot;kind&quot;: &quot;A String&quot;, # Output only. This explicitly denotes which kind of note is specified. This field can be used as a filter in list requests.
    &quot;expirationTime&quot;: &quot;A String&quot;, # Time of expiration for this note, null if note does not expire.
    &quot;attestationAuthority&quot;: { # Note kind that represents a logical attestation &quot;role&quot; or &quot;authority&quot;. For example, an organization might have one `AttestationAuthority` for &quot;QA&quot; and one for &quot;build&quot;. This Note is intended to act strictly as a grouping mechanism for the attached Occurrences (Attestations). This grouping mechanism also provides a security boundary, since IAM ACLs gate the ability for a principle to attach an Occurrence to a given Note. It also provides a single point of lookup to find all attached Attestation Occurrences, even if they don&#x27;t all live in the same project. # A note describing an attestation role.
      &quot;hint&quot;: { # This submessage provides human-readable hints about the purpose of the AttestationAuthority. Because the name of a Note acts as its resource reference, it is important to disambiguate the canonical name of the Note (which might be a UUID for security purposes) from &quot;readable&quot; names more suitable for debug output. Note that these hints should NOT be used to look up AttestationAuthorities in security sensitive contexts, such as when looking up Attestations to verify.
        &quot;humanReadableName&quot;: &quot;A String&quot;, # The human readable name of this Attestation Authority, for example &quot;qa&quot;.
      },
    },
    &quot;relatedUrl&quot;: [ # URLs associated with this note
      { # Metadata for any related URL information
        &quot;label&quot;: &quot;A String&quot;, # Label to describe usage of the URL
        &quot;url&quot;: &quot;A String&quot;, # Specific URL to associate with the note
      },
    ],
    &quot;discovery&quot;: { # A note that indicates a type of analysis a provider would perform. This note exists in a provider&#x27;s project. A `Discovery` occurrence is created in a consumer&#x27;s project at the start of analysis. The occurrence&#x27;s operation will indicate the status of the analysis. Absence of an occurrence linked to this note for a resource indicates that analysis hasn&#x27;t started. # A note describing a provider/analysis type.
      &quot;analysisKind&quot;: &quot;A String&quot;, # The kind of analysis that is handled by this discovery.
    },
    &quot;name&quot;: &quot;A String&quot;, # The name of the note in the form &quot;projects/{provider_project_id}/notes/{NOTE_ID}&quot;
    &quot;package&quot;: { # This represents a particular package that is distributed over various channels. e.g. glibc (aka libc6) is distributed by many, at various versions. # A note describing a package hosted by various package managers.
      &quot;distribution&quot;: [ # The various channels by which a package is distributed.
        { # This represents a particular channel of distribution for a given package. e.g. Debian&#x27;s jessie-backports dpkg mirror
          &quot;architecture&quot;: &quot;A String&quot;, # The CPU architecture for which packages in this distribution channel were built
          &quot;url&quot;: &quot;A String&quot;, # The distribution channel-specific homepage for this package.
          &quot;maintainer&quot;: &quot;A String&quot;, # A freeform string denoting the maintainer of this package.
          &quot;description&quot;: &quot;A String&quot;, # The distribution channel-specific description of this package.
          &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format](https://cpe.mitre.org/specification/) denoting the package manager version distributing a package.
          &quot;latestVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The latest available version of this package in this distribution channel.
            &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
            &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
            &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
            &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
          },
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # The name of the package.
    },
    &quot;shortDescription&quot;: &quot;A String&quot;, # A one sentence description of this `Note`.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this note was created. This field can be used as a filter in list requests.
    &quot;deployable&quot;: { # An artifact that can be deployed in some runtime. # A note describing something that can be deployed.
      &quot;resourceUri&quot;: [ # Resource URI for the artifact being deployed.
        &quot;A String&quot;,
      ],
    },
    &quot;vulnerabilityType&quot;: { # VulnerabilityType provides metadata about a security vulnerability. # A package vulnerability type of note.
      &quot;details&quot;: [ # All information about the package to specifically identify this vulnerability. One entry per (version range and cpe_uri) the package vulnerability has manifested in.
        { # Identifies all occurrences of this vulnerability in the package for a specific distro/location For example: glibc in cpe:/o:debian:debian_linux:8 for versions 2.1 - 2.2
          &quot;isObsolete&quot;: True or False, # Whether this Detail is obsolete. Occurrences are expected not to point to obsolete details.
          &quot;fixedLocation&quot;: { # The location of the vulnerability # The fix for this specific package version.
            &quot;version&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The version of the package being described. This field can be used as a filter in list requests.
              &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
              &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
              &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
              &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
            },
            &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) format. Examples include distro or storage location for vulnerable jar. This field can be used as a filter in list requests.
            &quot;package&quot;: &quot;A String&quot;, # The package being described.
          },
          &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) in which the vulnerability manifests. Examples include distro or storage location for vulnerable jar. This field can be used as a filter in list requests.
          &quot;minAffectedVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The min version of the package in which the vulnerability exists.
            &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
            &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
            &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
            &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
          },
          &quot;package&quot;: &quot;A String&quot;, # The name of the package where the vulnerability was found. This field can be used as a filter in list requests.
          &quot;maxAffectedVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The max version of the package in which the vulnerability exists.
            &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
            &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
            &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
            &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
          },
          &quot;packageType&quot;: &quot;A String&quot;, # The type of package; whether native or non native(ruby gems, node.js packages etc)
          &quot;severityName&quot;: &quot;A String&quot;, # The severity (eg: distro assigned severity) for this vulnerability.
          &quot;description&quot;: &quot;A String&quot;, # A vendor-specific description of this note.
        },
      ],
      &quot;severity&quot;: &quot;A String&quot;, # Note provider assigned impact of the vulnerability
      &quot;cvssScore&quot;: 3.14, # The CVSS score for this Vulnerability.
    },
    &quot;longDescription&quot;: &quot;A String&quot;, # A detailed description of this `Note`.
    &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this note was last updated. This field can be used as a filter in list requests.
    &quot;upgrade&quot;: { # An Upgrade Note represents a potential upgrade of a package to a given version. For each package version combination (i.e. bash 4.0, bash 4.1, bash 4.1.2), there will be a Upgrade Note. # A note describing an upgrade.
      &quot;distributions&quot;: [ # Metadata about the upgrade for each specific operating system.
        { # The Upgrade Distribution represents metadata about the Upgrade for each operating system (CPE). Some distributions have additional metadata around updates, classifying them into various categories and severities.
          &quot;classification&quot;: &quot;A String&quot;, # The operating system classification of this Upgrade, as specified by the upstream operating system upgrade feed.
          &quot;cpeUri&quot;: &quot;A String&quot;, # Required - The specific operating system this metadata applies to. See https://cpe.mitre.org/specification/.
          &quot;severity&quot;: &quot;A String&quot;, # The severity as specified by the upstream operating system.
          &quot;cve&quot;: [ # The cve that would be resolved by this upgrade.
            &quot;A String&quot;,
          ],
        },
      ],
      &quot;package&quot;: &quot;A String&quot;, # Required - The package this Upgrade is for.
      &quot;version&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # Required - The version of the package in machine + human readable form.
        &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
        &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
        &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
        &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
      },
    },
    &quot;buildType&quot;: { # Note holding the version of the provider&#x27;s builder and the signature of the provenance message in linked BuildDetails. # Build provenance type for a verifiable build.
      &quot;builderVersion&quot;: &quot;A String&quot;, # Version of the builder which produced this Note.
      &quot;signature&quot;: { # Message encapsulating the signature of the verified build. # Signature of the build in Occurrences pointing to the Note containing this `BuilderDetails`.
        &quot;publicKey&quot;: &quot;A String&quot;, # Public key of the builder which can be used to verify that the related findings are valid and unchanged. If `key_type` is empty, this defaults to PEM encoded public keys. This field may be empty if `key_id` references an external key. For Cloud Build based signatures, this is a PEM encoded public key. To verify the Cloud Build signature, place the contents of this field into a file (public.pem). The signature field is base64-decoded into its binary representation in signature.bin, and the provenance bytes from `BuildDetails` are base64-decoded into a binary representation in signed.bin. OpenSSL can then verify the signature: `openssl sha256 -verify public.pem -signature signature.bin signed.bin`
        &quot;keyType&quot;: &quot;A String&quot;, # The type of the key, either stored in `public_key` or referenced in `key_id`
        &quot;signature&quot;: &quot;A String&quot;, # Signature of the related `BuildProvenance`, encoded in a base64 string.
        &quot;keyId&quot;: &quot;A String&quot;, # An Id for the key used to sign. This could be either an Id for the key stored in `public_key` (such as the Id or fingerprint for a PGP key, or the CN for a cert), or a reference to an external key (such as a reference to a key in Cloud Key Management Service).
      },
    },
  }

  updateMask: string, The fields to update.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Provides a detailed description of a `Note`.
      &quot;baseImage&quot;: { # Basis describes the base image portion (Note) of the DockerImage relationship. Linked occurrences are derived from this or an equivalent image via: FROM Or an equivalent reference, e.g. a tag of the resource_url. # A note describing a base image.
        &quot;fingerprint&quot;: { # A set of properties that uniquely identify a given Docker image. # The fingerprint of the base image.
          &quot;v2Name&quot;: &quot;A String&quot;, # Output only. The name of the image&#x27;s v2 blobs computed via: [bottom] := v2_blobbottom := sha256(v2_blob[N] + &quot; &quot; + v2_name[N+1]) Only the name of the final blob is kept. This field can be used as a filter in list requests.
          &quot;v1Name&quot;: &quot;A String&quot;, # The layer-id of the final layer in the Docker image&#x27;s v1 representation. This field can be used as a filter in list requests.
          &quot;v2Blob&quot;: [ # The ordered list of v2 blobs that represent a given image.
            &quot;A String&quot;,
          ],
        },
        &quot;resourceUrl&quot;: &quot;A String&quot;, # The resource_url for the resource representing the basis of associated occurrence images.
      },
      &quot;kind&quot;: &quot;A String&quot;, # Output only. This explicitly denotes which kind of note is specified. This field can be used as a filter in list requests.
      &quot;expirationTime&quot;: &quot;A String&quot;, # Time of expiration for this note, null if note does not expire.
      &quot;attestationAuthority&quot;: { # Note kind that represents a logical attestation &quot;role&quot; or &quot;authority&quot;. For example, an organization might have one `AttestationAuthority` for &quot;QA&quot; and one for &quot;build&quot;. This Note is intended to act strictly as a grouping mechanism for the attached Occurrences (Attestations). This grouping mechanism also provides a security boundary, since IAM ACLs gate the ability for a principle to attach an Occurrence to a given Note. It also provides a single point of lookup to find all attached Attestation Occurrences, even if they don&#x27;t all live in the same project. # A note describing an attestation role.
        &quot;hint&quot;: { # This submessage provides human-readable hints about the purpose of the AttestationAuthority. Because the name of a Note acts as its resource reference, it is important to disambiguate the canonical name of the Note (which might be a UUID for security purposes) from &quot;readable&quot; names more suitable for debug output. Note that these hints should NOT be used to look up AttestationAuthorities in security sensitive contexts, such as when looking up Attestations to verify.
          &quot;humanReadableName&quot;: &quot;A String&quot;, # The human readable name of this Attestation Authority, for example &quot;qa&quot;.
        },
      },
      &quot;relatedUrl&quot;: [ # URLs associated with this note
        { # Metadata for any related URL information
          &quot;label&quot;: &quot;A String&quot;, # Label to describe usage of the URL
          &quot;url&quot;: &quot;A String&quot;, # Specific URL to associate with the note
        },
      ],
      &quot;discovery&quot;: { # A note that indicates a type of analysis a provider would perform. This note exists in a provider&#x27;s project. A `Discovery` occurrence is created in a consumer&#x27;s project at the start of analysis. The occurrence&#x27;s operation will indicate the status of the analysis. Absence of an occurrence linked to this note for a resource indicates that analysis hasn&#x27;t started. # A note describing a provider/analysis type.
        &quot;analysisKind&quot;: &quot;A String&quot;, # The kind of analysis that is handled by this discovery.
      },
      &quot;name&quot;: &quot;A String&quot;, # The name of the note in the form &quot;projects/{provider_project_id}/notes/{NOTE_ID}&quot;
      &quot;package&quot;: { # This represents a particular package that is distributed over various channels. e.g. glibc (aka libc6) is distributed by many, at various versions. # A note describing a package hosted by various package managers.
        &quot;distribution&quot;: [ # The various channels by which a package is distributed.
          { # This represents a particular channel of distribution for a given package. e.g. Debian&#x27;s jessie-backports dpkg mirror
            &quot;architecture&quot;: &quot;A String&quot;, # The CPU architecture for which packages in this distribution channel were built
            &quot;url&quot;: &quot;A String&quot;, # The distribution channel-specific homepage for this package.
            &quot;maintainer&quot;: &quot;A String&quot;, # A freeform string denoting the maintainer of this package.
            &quot;description&quot;: &quot;A String&quot;, # The distribution channel-specific description of this package.
            &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format](https://cpe.mitre.org/specification/) denoting the package manager version distributing a package.
            &quot;latestVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The latest available version of this package in this distribution channel.
              &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
              &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
              &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
              &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
            },
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # The name of the package.
      },
      &quot;shortDescription&quot;: &quot;A String&quot;, # A one sentence description of this `Note`.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time this note was created. This field can be used as a filter in list requests.
      &quot;deployable&quot;: { # An artifact that can be deployed in some runtime. # A note describing something that can be deployed.
        &quot;resourceUri&quot;: [ # Resource URI for the artifact being deployed.
          &quot;A String&quot;,
        ],
      },
      &quot;vulnerabilityType&quot;: { # VulnerabilityType provides metadata about a security vulnerability. # A package vulnerability type of note.
        &quot;details&quot;: [ # All information about the package to specifically identify this vulnerability. One entry per (version range and cpe_uri) the package vulnerability has manifested in.
          { # Identifies all occurrences of this vulnerability in the package for a specific distro/location For example: glibc in cpe:/o:debian:debian_linux:8 for versions 2.1 - 2.2
            &quot;isObsolete&quot;: True or False, # Whether this Detail is obsolete. Occurrences are expected not to point to obsolete details.
            &quot;fixedLocation&quot;: { # The location of the vulnerability # The fix for this specific package version.
              &quot;version&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The version of the package being described. This field can be used as a filter in list requests.
                &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
                &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
                &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
                &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
              },
              &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) format. Examples include distro or storage location for vulnerable jar. This field can be used as a filter in list requests.
              &quot;package&quot;: &quot;A String&quot;, # The package being described.
            },
            &quot;cpeUri&quot;: &quot;A String&quot;, # The cpe_uri in [cpe format] (https://cpe.mitre.org/specification/) in which the vulnerability manifests. Examples include distro or storage location for vulnerable jar. This field can be used as a filter in list requests.
            &quot;minAffectedVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The min version of the package in which the vulnerability exists.
              &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
              &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
              &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
              &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
            },
            &quot;package&quot;: &quot;A String&quot;, # The name of the package where the vulnerability was found. This field can be used as a filter in list requests.
            &quot;maxAffectedVersion&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # The max version of the package in which the vulnerability exists.
              &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
              &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
              &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
              &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
            },
            &quot;packageType&quot;: &quot;A String&quot;, # The type of package; whether native or non native(ruby gems, node.js packages etc)
            &quot;severityName&quot;: &quot;A String&quot;, # The severity (eg: distro assigned severity) for this vulnerability.
            &quot;description&quot;: &quot;A String&quot;, # A vendor-specific description of this note.
          },
        ],
        &quot;severity&quot;: &quot;A String&quot;, # Note provider assigned impact of the vulnerability
        &quot;cvssScore&quot;: 3.14, # The CVSS score for this Vulnerability.
      },
      &quot;longDescription&quot;: &quot;A String&quot;, # A detailed description of this `Note`.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time this note was last updated. This field can be used as a filter in list requests.
      &quot;upgrade&quot;: { # An Upgrade Note represents a potential upgrade of a package to a given version. For each package version combination (i.e. bash 4.0, bash 4.1, bash 4.1.2), there will be a Upgrade Note. # A note describing an upgrade.
        &quot;distributions&quot;: [ # Metadata about the upgrade for each specific operating system.
          { # The Upgrade Distribution represents metadata about the Upgrade for each operating system (CPE). Some distributions have additional metadata around updates, classifying them into various categories and severities.
            &quot;classification&quot;: &quot;A String&quot;, # The operating system classification of this Upgrade, as specified by the upstream operating system upgrade feed.
            &quot;cpeUri&quot;: &quot;A String&quot;, # Required - The specific operating system this metadata applies to. See https://cpe.mitre.org/specification/.
            &quot;severity&quot;: &quot;A String&quot;, # The severity as specified by the upstream operating system.
            &quot;cve&quot;: [ # The cve that would be resolved by this upgrade.
              &quot;A String&quot;,
            ],
          },
        ],
        &quot;package&quot;: &quot;A String&quot;, # Required - The package this Upgrade is for.
        &quot;version&quot;: { # Version contains structured information about the version of the package. For a discussion of this in Debian/Ubuntu: http://serverfault.com/questions/604541/debian-packages-version-convention For a discussion of this in Redhat/Fedora/Centos: http://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ # Required - The version of the package in machine + human readable form.
          &quot;revision&quot;: &quot;A String&quot;, # The iteration of the package build from the above version.
          &quot;kind&quot;: &quot;A String&quot;, # Distinguish between sentinel MIN/MAX versions and normal versions. If kind is not NORMAL, then the other fields are ignored.
          &quot;name&quot;: &quot;A String&quot;, # The main part of the version name.
          &quot;epoch&quot;: 42, # Used to correct mistakes in the version numbering scheme.
        },
      },
      &quot;buildType&quot;: { # Note holding the version of the provider&#x27;s builder and the signature of the provenance message in linked BuildDetails. # Build provenance type for a verifiable build.
        &quot;builderVersion&quot;: &quot;A String&quot;, # Version of the builder which produced this Note.
        &quot;signature&quot;: { # Message encapsulating the signature of the verified build. # Signature of the build in Occurrences pointing to the Note containing this `BuilderDetails`.
          &quot;publicKey&quot;: &quot;A String&quot;, # Public key of the builder which can be used to verify that the related findings are valid and unchanged. If `key_type` is empty, this defaults to PEM encoded public keys. This field may be empty if `key_id` references an external key. For Cloud Build based signatures, this is a PEM encoded public key. To verify the Cloud Build signature, place the contents of this field into a file (public.pem). The signature field is base64-decoded into its binary representation in signature.bin, and the provenance bytes from `BuildDetails` are base64-decoded into a binary representation in signed.bin. OpenSSL can then verify the signature: `openssl sha256 -verify public.pem -signature signature.bin signed.bin`
          &quot;keyType&quot;: &quot;A String&quot;, # The type of the key, either stored in `public_key` or referenced in `key_id`
          &quot;signature&quot;: &quot;A String&quot;, # Signature of the related `BuildProvenance`, encoded in a base64 string.
          &quot;keyId&quot;: &quot;A String&quot;, # An Id for the key used to sign. This could be either an Id for the key stored in `public_key` (such as the Id or fingerprint for a PGP key, or the CN for a cert), or a reference to an external key (such as a reference to a key in Cloud Key Management Service).
        },
      },
    }</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 `Note` or `Occurrence`. Requires `containeranalysis.notes.setIamPolicy` or `containeranalysis.occurrences.setIamPolicy` permission if the resource is a `Note` or an `Occurrence`, respectively. Attempting to call this method without these permissions will result in a ` `PERMISSION_DENIED` error. Attempting to call this method on a non-existent resource will result in a `NOT_FOUND` error if the user has `containeranalysis.notes.list` permission on a `Note` or `containeranalysis.occurrences.list` on an `Occurrence`, or a `PERMISSION_DENIED` error otherwise. The resource takes the following formats: `projects/{projectid}/occurrences/{occurrenceid}` for occurrences and projects/{projectid}/notes/{noteid} for notes

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;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).
      &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;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;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;bindingId&quot;: &quot;A String&quot;,
        },
      ],
      &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.
    },
  }

  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;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).
    &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;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;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;bindingId&quot;: &quot;A String&quot;,
      },
    ],
    &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.
  }</pre>
</div>

<div class="method">
    <code class="details" id="testIamPermissions">testIamPermissions(resource, body=None, x__xgafv=None)</code>
  <pre>Returns the permissions that a caller has on the specified note or occurrence resource. Requires list permission on the project (for example, &quot;storage.objects.list&quot; on the containing bucket for testing permission of an object). Attempting to call this method on a non-existent resource will result in a `NOT_FOUND` error if the user has list permission on the project, or a `PERMISSION_DENIED` error otherwise. The resource takes the following formats: `projects/{PROJECT_ID}/occurrences/{OCCURRENCE_ID}` for `Occurrences` and `projects/{PROJECT_ID}/notes/{NOTE_ID}` for `Notes`

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>