<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.projects.html">projects</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="toolresults_v1beta3.projects.histories.html">histories()</a></code>
</p>
<p class="firstline">Returns the histories Resource.</p>

<p class="toc_element">
  <code><a href="#getSettings">getSettings(projectId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the Tool Results settings for a project.</p>
<p class="toc_element">
  <code><a href="#initializeSettings">initializeSettings(projectId, x__xgafv=None)</a></code></p>
<p class="firstline">Creates resources for settings which have not yet been set.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="getSettings">getSettings(projectId, x__xgafv=None)</code>
  <pre>Gets the Tool Results settings for a project.

May return any of the following canonical error codes:

- PERMISSION_DENIED - if the user is not authorized to read from project

Args:
  projectId: string, A Project 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:

    { # Per-project settings for the Tool Results service.
    &quot;defaultBucket&quot;: &quot;A String&quot;, # The name of the Google Cloud Storage bucket to which results are written.
        #
        # By default, this is unset.
        #
        # In update request: optional
        # In response: optional
    &quot;name&quot;: &quot;A String&quot;, # The name of the project&#x27;s settings.
        #
        # Always of the form:
        # projects/{project-id}/settings
        #
        # In update request: never set
        # In response: always set
  }</pre>
</div>

<div class="method">
    <code class="details" id="initializeSettings">initializeSettings(projectId, x__xgafv=None)</code>
  <pre>Creates resources for settings which have not yet been set.

Currently, this creates a single resource: a Google Cloud Storage bucket,
to be used as the default bucket for this project. The bucket is created
in an FTL-own storage project. Except for in rare cases, calling this
method in parallel from multiple clients will only create a single bucket.
In order to avoid unnecessary storage charges, the bucket is configured to
automatically delete objects older than 90 days.

The bucket is created with the following permissions:
- Owner access for owners of central storage project (FTL-owned)
- Writer access for owners/editors of customer project
- Reader access for viewers of customer project
The default ACL on objects created in the bucket is:
- Owner access for owners of central storage project
- Reader access for owners/editors/viewers of customer project
See Google Cloud Storage documentation for more details.

If there is already a default bucket set and the project can access the
bucket, this call does nothing. However, if the project doesn&#x27;t have the
permission to access the bucket or the bucket is deleted, a new bucket
will be created.

May return any canonical error codes, including the following:

- PERMISSION_DENIED - if the user is not authorized to write to project
- Any error code raised by Google Cloud Storage

Args:
  projectId: string, A Project 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:

    { # Per-project settings for the Tool Results service.
    &quot;defaultBucket&quot;: &quot;A String&quot;, # The name of the Google Cloud Storage bucket to which results are written.
        #
        # By default, this is unset.
        #
        # In update request: optional
        # In response: optional
    &quot;name&quot;: &quot;A String&quot;, # The name of the project&#x27;s settings.
        #
        # Always of the form:
        # projects/{project-id}/settings
        #
        # In update request: never set
        # In response: always set
  }</pre>
</div>

</body></html>