<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="toolresults_v1beta3.html">Cloud Tool Results API</a> . <a href="toolresults_v1beta3.histories.html">histories</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(projectId, body=None, requestId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a History.</p>
<p class="toc_element">
  <code><a href="#get">get(projectId, historyId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a History.</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, pageToken=None, pageSize=None, filterByName=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists Histories 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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(projectId, body=None, requestId=None, x__xgafv=None)</code>
  <pre>Creates a History.

The returned History will have the id set.

May return any of the following canonical error codes:

- PERMISSION_DENIED - if the user is not authorized to write to project
- INVALID_ARGUMENT - if the request is malformed
- NOT_FOUND - if the containing project does not exist

Args:
  projectId: string, A Project id.

Required. (required)
  body: object, The request body.
    The object takes the form of:

{ # A History represents a sorted list of Executions ordered by the
    # start_timestamp_millis field (descending). It can be used to group all the
    # Executions of a continuous build.
    # 
    # Note that the ordering only operates on one-dimension. If a repository has
    # multiple branches, it means that multiple histories will need to be
    # used in order to order Executions per branch.
  &quot;historyId&quot;: &quot;A String&quot;, # A unique identifier within a project for this History.
      # 
      # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
      # 
      # - In response always set
      # - In create request: never set
  &quot;name&quot;: &quot;A String&quot;, # A name to uniquely identify a history within a project.
      # Maximum of 200 characters.
      # 
      # - In response always set
      # - In create request: always set
  &quot;displayName&quot;: &quot;A String&quot;, # A short human-readable (plain text) name to display in the UI.
      # Maximum of 100 characters.
      # 
      # - In response: present if set during create.
      # - In create request: optional
  &quot;testPlatform&quot;: &quot;A String&quot;, # The platform of the test history.
      # 
      # - In response: always set. Returns the platform of the last execution if
      # unknown.
}

  requestId: string, A unique request ID for server to detect duplicated requests.
For example, a UUID.

Optional, but strongly recommended.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A History represents a sorted list of Executions ordered by the
      # start_timestamp_millis field (descending). It can be used to group all the
      # Executions of a continuous build.
      #
      # Note that the ordering only operates on one-dimension. If a repository has
      # multiple branches, it means that multiple histories will need to be
      # used in order to order Executions per branch.
    &quot;historyId&quot;: &quot;A String&quot;, # A unique identifier within a project for this History.
        #
        # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
        #
        # - In response always set
        # - In create request: never set
    &quot;name&quot;: &quot;A String&quot;, # A name to uniquely identify a history within a project.
        # Maximum of 200 characters.
        #
        # - In response always set
        # - In create request: always set
    &quot;displayName&quot;: &quot;A String&quot;, # A short human-readable (plain text) name to display in the UI.
        # Maximum of 100 characters.
        #
        # - In response: present if set during create.
        # - In create request: optional
    &quot;testPlatform&quot;: &quot;A String&quot;, # The platform of the test history.
        #
        # - In response: always set. Returns the platform of the last execution if
        # unknown.
  }</pre>
</div>

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

May return any of the following canonical error codes:

- PERMISSION_DENIED - if the user is not authorized to read project
- INVALID_ARGUMENT - if the request is malformed
- NOT_FOUND - if the History does not exist

Args:
  projectId: string, A Project id.

Required. (required)
  historyId: string, A History id.

Required. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A History represents a sorted list of Executions ordered by the
      # start_timestamp_millis field (descending). It can be used to group all the
      # Executions of a continuous build.
      #
      # Note that the ordering only operates on one-dimension. If a repository has
      # multiple branches, it means that multiple histories will need to be
      # used in order to order Executions per branch.
    &quot;historyId&quot;: &quot;A String&quot;, # A unique identifier within a project for this History.
        #
        # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
        #
        # - In response always set
        # - In create request: never set
    &quot;name&quot;: &quot;A String&quot;, # A name to uniquely identify a history within a project.
        # Maximum of 200 characters.
        #
        # - In response always set
        # - In create request: always set
    &quot;displayName&quot;: &quot;A String&quot;, # A short human-readable (plain text) name to display in the UI.
        # Maximum of 100 characters.
        #
        # - In response: present if set during create.
        # - In create request: optional
    &quot;testPlatform&quot;: &quot;A String&quot;, # The platform of the test history.
        #
        # - In response: always set. Returns the platform of the last execution if
        # unknown.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, pageToken=None, pageSize=None, filterByName=None, x__xgafv=None)</code>
  <pre>Lists Histories for a given Project.

The histories are sorted by modification time in descending order. The
history_id key will be used to order the history with the same
modification time.

May return any of the following canonical error codes:

- PERMISSION_DENIED - if the user is not authorized to read project
- INVALID_ARGUMENT - if the request is malformed
- NOT_FOUND - if the History does not exist

Args:
  projectId: string, A Project id.

Required. (required)
  pageToken: string, A continuation token to resume the query at the next item.

Optional.
  pageSize: integer, The maximum number of Histories to fetch.

Default value: 20. The server will use this default if the field is not set
or has a value of 0. Any value greater than 100 will be treated as 100.

Optional.
  filterByName: string, If set, only return histories with the given name.

Optional.
  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 HistoryService.List
    &quot;histories&quot;: [ # Histories.
      { # A History represents a sorted list of Executions ordered by the
          # start_timestamp_millis field (descending). It can be used to group all the
          # Executions of a continuous build.
          #
          # Note that the ordering only operates on one-dimension. If a repository has
          # multiple branches, it means that multiple histories will need to be
          # used in order to order Executions per branch.
        &quot;historyId&quot;: &quot;A String&quot;, # A unique identifier within a project for this History.
            #
            # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
            #
            # - In response always set
            # - In create request: never set
        &quot;name&quot;: &quot;A String&quot;, # A name to uniquely identify a history within a project.
            # Maximum of 200 characters.
            #
            # - In response always set
            # - In create request: always set
        &quot;displayName&quot;: &quot;A String&quot;, # A short human-readable (plain text) name to display in the UI.
            # Maximum of 100 characters.
            #
            # - In response: present if set during create.
            # - In create request: optional
        &quot;testPlatform&quot;: &quot;A String&quot;, # The platform of the test history.
            #
            # - In response: always set. Returns the platform of the last execution if
            # unknown.
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A continuation token to resume the query at the next item.
        #
        # Will only be set if there are more histories to fetch.
        #
        # Tokens are valid for up to one hour from the time of the first list
        # request. For instance, if you make a list request at 1PM and use the token
        # from this first request 10 minutes later, the token from this second
        # response will only be valid for 50 minutes.
  }</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>

</body></html>