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

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 maxminum 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 maxminum 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(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>