<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 requesting user. Some data sources doesn'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.</p>
<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="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves a supported data source and returns its settings, which can be used for UI rendering.</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, which can be used for UI rendering.</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="close">close()</code>
  <pre>Close httplib2 connections.</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;name&quot;: &quot;A String&quot;, # Output only. Data source resource name.
    &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;dataSourceId&quot;: &quot;A String&quot;, # Data source id.
    &quot;defaultDataRefreshWindowDays&quot;: 42, # Default data refresh window on days. Only meaningful when `data_refresh_type` = `SLIDING_WINDOW`.
    &quot;supportsMultipleTransfers&quot;: True or False, # Deprecated. This field has no effect.
    &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;displayName&quot;: &quot;A String&quot;, # User friendly data source name.
    &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;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;clientId&quot;: &quot;A String&quot;, # Data source client id which should be used to receive refresh token.
    &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;validationRegex&quot;: &quot;A String&quot;, # Regular expression which can be used for parameter validation.
        &quot;repeated&quot;: True or False, # Deprecated. This field has no effect.
        &quot;paramId&quot;: &quot;A String&quot;, # Parameter identifier.
        &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;type&quot;: &quot;A String&quot;, # Parameter type.
        &quot;description&quot;: &quot;A String&quot;, # Parameter description.
        &quot;fields&quot;: [ # Deprecated. This field has no effect.
          # Object with schema name: DataSourceParameter
        ],
        &quot;immutable&quot;: True or False, # Cannot be changed after initial creation.
        &quot;displayName&quot;: &quot;A String&quot;, # Parameter display name in the user interface.
        &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;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;maxValue&quot;: 3.14, # For integer and double values specifies maxminum allowed value.
        &quot;allowedValues&quot;: [ # All possible values for the parameter.
          &quot;A String&quot;,
        ],
        &quot;required&quot;: True or False, # Is parameter required.
        &quot;recurse&quot;: True or False, # Deprecated. This field has no effect.
      },
    ],
    &quot;authorizationType&quot;: &quot;A String&quot;, # Indicates the type of authorization.
    &quot;minimumScheduleInterval&quot;: &quot;A String&quot;, # The minimum interval for scheduler to schedule runs.
    &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;helpUrl&quot;: &quot;A String&quot;, # Url for the help document for this data source.
    &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;description&quot;: &quot;A String&quot;, # User friendly data source description string.
  }</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;name&quot;: &quot;A String&quot;, # Output only. Data source resource name.
        &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;dataSourceId&quot;: &quot;A String&quot;, # Data source id.
        &quot;defaultDataRefreshWindowDays&quot;: 42, # Default data refresh window on days. Only meaningful when `data_refresh_type` = `SLIDING_WINDOW`.
        &quot;supportsMultipleTransfers&quot;: True or False, # Deprecated. This field has no effect.
        &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;displayName&quot;: &quot;A String&quot;, # User friendly data source name.
        &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;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;clientId&quot;: &quot;A String&quot;, # Data source client id which should be used to receive refresh token.
        &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;validationRegex&quot;: &quot;A String&quot;, # Regular expression which can be used for parameter validation.
            &quot;repeated&quot;: True or False, # Deprecated. This field has no effect.
            &quot;paramId&quot;: &quot;A String&quot;, # Parameter identifier.
            &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;type&quot;: &quot;A String&quot;, # Parameter type.
            &quot;description&quot;: &quot;A String&quot;, # Parameter description.
            &quot;fields&quot;: [ # Deprecated. This field has no effect.
              # Object with schema name: DataSourceParameter
            ],
            &quot;immutable&quot;: True or False, # Cannot be changed after initial creation.
            &quot;displayName&quot;: &quot;A String&quot;, # Parameter display name in the user interface.
            &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;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;maxValue&quot;: 3.14, # For integer and double values specifies maxminum allowed value.
            &quot;allowedValues&quot;: [ # All possible values for the parameter.
              &quot;A String&quot;,
            ],
            &quot;required&quot;: True or False, # Is parameter required.
            &quot;recurse&quot;: True or False, # Deprecated. This field has no effect.
          },
        ],
        &quot;authorizationType&quot;: &quot;A String&quot;, # Indicates the type of authorization.
        &quot;minimumScheduleInterval&quot;: &quot;A String&quot;, # The minimum interval for scheduler to schedule runs.
        &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;helpUrl&quot;: &quot;A String&quot;, # Url for the help document for this data source.
        &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;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>