<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="cloudsupport_v2.html">Google Cloud Support API</a> . <a href="cloudsupport_v2.cases.html">cases</a> . <a href="cloudsupport_v2.cases.attachments.html">attachments</a></h1>
<h2>Instance Methods</h2>
<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="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List all the attachments associated with a support case. EXAMPLES: cURL: ```shell case="projects/some-project/cases/23598314" curl \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://cloudsupport.googleapis.com/v2/$case/attachments" ``` Python: ```python import googleapiclient.discovery api_version = "v2" supportApiService = googleapiclient.discovery.build( serviceName="cloudsupport", version=api_version, discoveryServiceUrl=f"https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}", ) request = ( supportApiService.cases() .attachments() .list(parent="projects/some-project/cases/43595344") ) print(request.execute()) ```</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</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="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>List all the attachments associated with a support case. EXAMPLES: cURL: ```shell case=&quot;projects/some-project/cases/23598314&quot; curl \ --header &quot;Authorization: Bearer $(gcloud auth print-access-token)&quot; \ &quot;https://cloudsupport.googleapis.com/v2/$case/attachments&quot; ``` Python: ```python import googleapiclient.discovery api_version = &quot;v2&quot; supportApiService = googleapiclient.discovery.build( serviceName=&quot;cloudsupport&quot;, version=api_version, discoveryServiceUrl=f&quot;https://cloudsupport.googleapis.com/$discovery/rest?version={api_version}&quot;, ) request = ( supportApiService.cases() .attachments() .list(parent=&quot;projects/some-project/cases/43595344&quot;) ) print(request.execute()) ```

Args:
  parent: string, Required. The name of the case for which attachments should be listed. (required)
  pageSize: integer, The maximum number of attachments fetched with each request. If not provided, the default is 10. The maximum page size that will be returned is 100.
  pageToken: string, A token identifying the page of results to return. If unspecified, the first page is retrieved.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for the ListAttachments endpoint.
  &quot;attachments&quot;: [ # The list of attachments associated with a case.
    { # Represents a file attached to a support case.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the attachment was created.
      &quot;creator&quot;: { # An object containing information about the effective user and authenticated principal responsible for an action. # Output only. The user who uploaded the attachment. Note, the name and email will be obfuscated if the attachment was uploaded by Google support.
        &quot;displayName&quot;: &quot;A String&quot;, # The name to display for the actor. If not provided, it is inferred from credentials supplied during case creation. When an email is provided, a display name must also be provided. This will be obfuscated if the user is a Google Support agent.
        &quot;email&quot;: &quot;A String&quot;, # The email address of the actor. If not provided, it is inferred from credentials supplied during case creation. If the authenticated principal does not have an email address, one must be provided. When a name is provided, an email must also be provided. This will be obfuscated if the user is a Google Support agent.
        &quot;googleSupport&quot;: True or False, # Output only. Whether the actor is a Google support actor.
      },
      &quot;filename&quot;: &quot;A String&quot;, # The filename of the attachment (e.g. `&quot;graph.jpg&quot;`).
      &quot;mimeType&quot;: &quot;A String&quot;, # Output only. The MIME type of the attachment (e.g. text/plain).
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the attachment.
      &quot;sizeBytes&quot;: &quot;A String&quot;, # Output only. The size of the attachment in bytes.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results. Set this in the `page_token` field of subsequent `cases.attachments.list` requests. If unspecified, there are no more results to retrieve.
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next()</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>

</body></html>