<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="bigquerydatatransfer_v1.html">BigQuery Data Transfer API</a> . <a href="bigquerydatatransfer_v1.projects.html">projects</a> . <a href="bigquerydatatransfer_v1.projects.dataSources.html">dataSources</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#checkValidCreds">checkValidCreds(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns true if valid credentials exist for the given data source and</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves a supported data source and returns its settings,</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists supported data sources and returns their settings,</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="checkValidCreds">checkValidCreds(name, body=None, x__xgafv=None)</code>
  <pre>Returns true if valid credentials exist for the given data source and
requesting user.
Some data sources doesn&#x27;t support service account, so we need to talk to
them on behalf of the end user. This API just checks whether we have OAuth
token for the particular user, which is a pre-requisite before user can
create a transfer config.

Args:
  name: string, Required. The data source in the form:
`projects/{project_id}/dataSources/{data_source_id}` or
`projects/{project_id}/locations/{location_id}/dataSources/{data_source_id}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A request to determine whether the user has valid credentials. This method
      # is used to limit the number of OAuth popups in the user interface. The
      # user id is inferred from the API call context.
      # If the data source has the Google+ authorization type, this method
      # returns false, as it cannot be determined whether the credentials are
      # already valid merely based on the user id.
  }

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

Returns:
  An object of the form:

    { # A response indicating whether the credentials exist and are valid.
    &quot;hasValidCreds&quot;: True or False, # If set to `true`, the credentials exist and are valid.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Retrieves a supported data source and returns its settings,
which can be used for UI rendering.

Args:
  name: string, Required. The field will contain name of the resource requested, for example:
`projects/{project_id}/dataSources/{data_source_id}` or
`projects/{project_id}/locations/{location_id}/dataSources/{data_source_id}` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents data source metadata. Metadata is sufficient to
      # render UI and request proper OAuth tokens.
    &quot;dataSourceId&quot;: &quot;A String&quot;, # Data source id.
    &quot;scopes&quot;: [ # Api auth scopes for which refresh token needs to be obtained. These are
        # scopes needed by a data source to prepare data and ingest them into
        # BigQuery, e.g., https://www.googleapis.com/auth/bigquery
      &quot;A String&quot;,
    ],
    &quot;name&quot;: &quot;A String&quot;, # Output only. Data source resource name.
    &quot;minimumScheduleInterval&quot;: &quot;A String&quot;, # The minimum interval for scheduler to schedule runs.
    &quot;clientId&quot;: &quot;A String&quot;, # Data source client id which should be used to receive refresh token.
    &quot;authorizationType&quot;: &quot;A String&quot;, # Indicates the type of authorization.
    &quot;supportsCustomSchedule&quot;: True or False, # Specifies whether the data source supports a user defined schedule, or
        # operates on the default schedule.
        # When set to `true`, user can override default schedule.
    &quot;displayName&quot;: &quot;A String&quot;, # User friendly data source name.
    &quot;updateDeadlineSeconds&quot;: 42, # The number of seconds to wait for an update from the data source
        # before the Data Transfer Service marks the transfer as FAILED.
    &quot;dataRefreshType&quot;: &quot;A String&quot;, # Specifies whether the data source supports automatic data refresh for the
        # past few days, and how it&#x27;s supported.
        # For some data sources, data might not be complete until a few days later,
        # so it&#x27;s useful to refresh data automatically.
    &quot;parameters&quot;: [ # Data source parameters.
      { # Represents a data source parameter with validation rules, so that
          # parameters can be rendered in the UI. These parameters are given to us by
          # supported data sources, and include all needed information for rendering
          # and validation.
          # Thus, whoever uses this api can decide to generate either generic ui,
          # or custom data source specific forms.
        &quot;repeated&quot;: True or False, # Deprecated. This field has no effect.
        &quot;displayName&quot;: &quot;A String&quot;, # Parameter display name in the user interface.
        &quot;immutable&quot;: True or False, # Cannot be changed after initial creation.
        &quot;validationDescription&quot;: &quot;A String&quot;, # Description of the requirements for this field, in case the user input does
            # not fulfill the regex pattern or min/max values.
        &quot;deprecated&quot;: True or False, # If true, it should not be used in new transfers, and it should not be
            # visible to users.
        &quot;fields&quot;: [ # Deprecated. This field has no effect.
          # Object with schema name: DataSourceParameter
        ],
        &quot;maxValue&quot;: 3.14, # For integer and double values specifies maxminum allowed value.
        &quot;type&quot;: &quot;A String&quot;, # Parameter type.
        &quot;recurse&quot;: True or False, # Deprecated. This field has no effect.
        &quot;description&quot;: &quot;A String&quot;, # Parameter description.
        &quot;allowedValues&quot;: [ # All possible values for the parameter.
          &quot;A String&quot;,
        ],
        &quot;minValue&quot;: 3.14, # For integer and double values specifies minimum allowed value.
        &quot;validationHelpUrl&quot;: &quot;A String&quot;, # URL to a help document to further explain the naming requirements.
        &quot;validationRegex&quot;: &quot;A String&quot;, # Regular expression which can be used for parameter validation.
        &quot;paramId&quot;: &quot;A String&quot;, # Parameter identifier.
        &quot;required&quot;: True or False, # Is parameter required.
      },
    ],
    &quot;helpUrl&quot;: &quot;A String&quot;, # Url for the help document for this data source.
    &quot;defaultSchedule&quot;: &quot;A String&quot;, # Default data transfer schedule.
        # Examples of valid schedules include:
        # `1st,3rd monday of month 15:30`,
        # `every wed,fri of jan,jun 13:15`, and
        # `first sunday of quarter 00:00`.
    &quot;supportsMultipleTransfers&quot;: True or False, # Deprecated. This field has no effect.
    &quot;defaultDataRefreshWindowDays&quot;: 42, # Default data refresh window on days.
        # Only meaningful when `data_refresh_type` = `SLIDING_WINDOW`.
    &quot;manualRunsDisabled&quot;: True or False, # Disables backfilling and manual run scheduling
        # for the data source.
    &quot;transferType&quot;: &quot;A String&quot;, # Deprecated. This field has no effect.
    &quot;description&quot;: &quot;A String&quot;, # User friendly data source description string.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists supported data sources and returns their settings,
which can be used for UI rendering.

Args:
  parent: string, Required. The BigQuery project id for which data sources should be returned.
Must be in the form: `projects/{project_id}` or
`projects/{project_id}/locations/{location_id} (required)
  pageToken: string, Pagination token, which can be used to request a specific page
of `ListDataSourcesRequest` list results. For multiple-page
results, `ListDataSourcesResponse` outputs
a `next_page` token, which can be used as the
`page_token` value to request the next page of list results.
  pageSize: integer, Page size. The default page size is the maximum value of 1000 results.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Returns list of supported data sources and their metadata.
    &quot;dataSources&quot;: [ # List of supported data sources and their transfer settings.
      { # Represents data source metadata. Metadata is sufficient to
          # render UI and request proper OAuth tokens.
        &quot;dataSourceId&quot;: &quot;A String&quot;, # Data source id.
        &quot;scopes&quot;: [ # Api auth scopes for which refresh token needs to be obtained. These are
            # scopes needed by a data source to prepare data and ingest them into
            # BigQuery, e.g., https://www.googleapis.com/auth/bigquery
          &quot;A String&quot;,
        ],
        &quot;name&quot;: &quot;A String&quot;, # Output only. Data source resource name.
        &quot;minimumScheduleInterval&quot;: &quot;A String&quot;, # The minimum interval for scheduler to schedule runs.
        &quot;clientId&quot;: &quot;A String&quot;, # Data source client id which should be used to receive refresh token.
        &quot;authorizationType&quot;: &quot;A String&quot;, # Indicates the type of authorization.
        &quot;supportsCustomSchedule&quot;: True or False, # Specifies whether the data source supports a user defined schedule, or
            # operates on the default schedule.
            # When set to `true`, user can override default schedule.
        &quot;displayName&quot;: &quot;A String&quot;, # User friendly data source name.
        &quot;updateDeadlineSeconds&quot;: 42, # The number of seconds to wait for an update from the data source
            # before the Data Transfer Service marks the transfer as FAILED.
        &quot;dataRefreshType&quot;: &quot;A String&quot;, # Specifies whether the data source supports automatic data refresh for the
            # past few days, and how it&#x27;s supported.
            # For some data sources, data might not be complete until a few days later,
            # so it&#x27;s useful to refresh data automatically.
        &quot;parameters&quot;: [ # Data source parameters.
          { # Represents a data source parameter with validation rules, so that
              # parameters can be rendered in the UI. These parameters are given to us by
              # supported data sources, and include all needed information for rendering
              # and validation.
              # Thus, whoever uses this api can decide to generate either generic ui,
              # or custom data source specific forms.
            &quot;repeated&quot;: True or False, # Deprecated. This field has no effect.
            &quot;displayName&quot;: &quot;A String&quot;, # Parameter display name in the user interface.
            &quot;immutable&quot;: True or False, # Cannot be changed after initial creation.
            &quot;validationDescription&quot;: &quot;A String&quot;, # Description of the requirements for this field, in case the user input does
                # not fulfill the regex pattern or min/max values.
            &quot;deprecated&quot;: True or False, # If true, it should not be used in new transfers, and it should not be
                # visible to users.
            &quot;fields&quot;: [ # Deprecated. This field has no effect.
              # Object with schema name: DataSourceParameter
            ],
            &quot;maxValue&quot;: 3.14, # For integer and double values specifies maxminum allowed value.
            &quot;type&quot;: &quot;A String&quot;, # Parameter type.
            &quot;recurse&quot;: True or False, # Deprecated. This field has no effect.
            &quot;description&quot;: &quot;A String&quot;, # Parameter description.
            &quot;allowedValues&quot;: [ # All possible values for the parameter.
              &quot;A String&quot;,
            ],
            &quot;minValue&quot;: 3.14, # For integer and double values specifies minimum allowed value.
            &quot;validationHelpUrl&quot;: &quot;A String&quot;, # URL to a help document to further explain the naming requirements.
            &quot;validationRegex&quot;: &quot;A String&quot;, # Regular expression which can be used for parameter validation.
            &quot;paramId&quot;: &quot;A String&quot;, # Parameter identifier.
            &quot;required&quot;: True or False, # Is parameter required.
          },
        ],
        &quot;helpUrl&quot;: &quot;A String&quot;, # Url for the help document for this data source.
        &quot;defaultSchedule&quot;: &quot;A String&quot;, # Default data transfer schedule.
            # Examples of valid schedules include:
            # `1st,3rd monday of month 15:30`,
            # `every wed,fri of jan,jun 13:15`, and
            # `first sunday of quarter 00:00`.
        &quot;supportsMultipleTransfers&quot;: True or False, # Deprecated. This field has no effect.
        &quot;defaultDataRefreshWindowDays&quot;: 42, # Default data refresh window on days.
            # Only meaningful when `data_refresh_type` = `SLIDING_WINDOW`.
        &quot;manualRunsDisabled&quot;: True or False, # Disables backfilling and manual run scheduling
            # for the data source.
        &quot;transferType&quot;: &quot;A String&quot;, # Deprecated. This field has no effect.
        &quot;description&quot;: &quot;A String&quot;, # User friendly data source description string.
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Output only. The next-pagination token. For multiple-page list results,
        # this token can be used as the
        # `ListDataSourcesRequest.page_token`
        # to request the next page of list results.
  }</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>