<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, pageSize=None, pageToken=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;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;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;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;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;immutable&quot;: True or False, # Cannot be changed after initial creation.
        &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;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;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.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=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)
  pageSize: integer, Page size. The default page size is the maximum value of 1000 results.
  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.
  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;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;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;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;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;immutable&quot;: True or False, # Cannot be changed after initial creation.
            &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;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;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;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>