<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.</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.</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()</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.

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.

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:

    { # Defines the properties and custom parameters for a data source.
  &quot;authorizationType&quot;: &quot;A String&quot;, # Indicates the type of authorization.
  &quot;clientId&quot;: &quot;A String&quot;, # Data source client id which should be used to receive refresh token.
  &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;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;description&quot;: &quot;A String&quot;, # User friendly data source description string.
  &quot;displayName&quot;: &quot;A String&quot;, # User friendly data source name.
  &quot;helpUrl&quot;: &quot;A String&quot;, # Url for the help document for this data source.
  &quot;manualRunsDisabled&quot;: True or False, # Disables backfilling and manual run scheduling for the data source.
  &quot;minimumScheduleInterval&quot;: &quot;A String&quot;, # The minimum interval for scheduler to schedule runs.
  &quot;name&quot;: &quot;A String&quot;, # Output only. Data source resource name.
  &quot;parameters&quot;: [ # Data source parameters.
    { # A parameter used to define custom fields in a data source definition.
      &quot;allowedValues&quot;: [ # All possible values for the parameter.
        &quot;A String&quot;,
      ],
      &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;description&quot;: &quot;A String&quot;, # Parameter description.
      &quot;displayName&quot;: &quot;A String&quot;, # Parameter display name in the user interface.
      &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;maxValue&quot;: 3.14, # For integer and double values specifies maximum allowed value.
      &quot;minValue&quot;: 3.14, # For integer and double values specifies minimum allowed value.
      &quot;paramId&quot;: &quot;A String&quot;, # Parameter identifier.
      &quot;recurse&quot;: True or False, # Deprecated. This field has no effect.
      &quot;repeated&quot;: True or False, # Deprecated. This field has no effect.
      &quot;required&quot;: True or False, # Is parameter required.
      &quot;type&quot;: &quot;A String&quot;, # Parameter type.
      &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;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;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;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;supportsMultipleTransfers&quot;: True or False, # Deprecated. This field has no effect.
  &quot;transferType&quot;: &quot;A String&quot;, # Deprecated. This field has no effect.
  &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.

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.
    { # Defines the properties and custom parameters for a data source.
      &quot;authorizationType&quot;: &quot;A String&quot;, # Indicates the type of authorization.
      &quot;clientId&quot;: &quot;A String&quot;, # Data source client id which should be used to receive refresh token.
      &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;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;description&quot;: &quot;A String&quot;, # User friendly data source description string.
      &quot;displayName&quot;: &quot;A String&quot;, # User friendly data source name.
      &quot;helpUrl&quot;: &quot;A String&quot;, # Url for the help document for this data source.
      &quot;manualRunsDisabled&quot;: True or False, # Disables backfilling and manual run scheduling for the data source.
      &quot;minimumScheduleInterval&quot;: &quot;A String&quot;, # The minimum interval for scheduler to schedule runs.
      &quot;name&quot;: &quot;A String&quot;, # Output only. Data source resource name.
      &quot;parameters&quot;: [ # Data source parameters.
        { # A parameter used to define custom fields in a data source definition.
          &quot;allowedValues&quot;: [ # All possible values for the parameter.
            &quot;A String&quot;,
          ],
          &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;description&quot;: &quot;A String&quot;, # Parameter description.
          &quot;displayName&quot;: &quot;A String&quot;, # Parameter display name in the user interface.
          &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;maxValue&quot;: 3.14, # For integer and double values specifies maximum allowed value.
          &quot;minValue&quot;: 3.14, # For integer and double values specifies minimum allowed value.
          &quot;paramId&quot;: &quot;A String&quot;, # Parameter identifier.
          &quot;recurse&quot;: True or False, # Deprecated. This field has no effect.
          &quot;repeated&quot;: True or False, # Deprecated. This field has no effect.
          &quot;required&quot;: True or False, # Is parameter required.
          &quot;type&quot;: &quot;A String&quot;, # Parameter type.
          &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;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;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;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;supportsMultipleTransfers&quot;: True or False, # Deprecated. This field has no effect.
      &quot;transferType&quot;: &quot;A String&quot;, # Deprecated. This field has no effect.
      &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()</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>