<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 Service 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, 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, x__xgafv=None, pageSize=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, x__xgafv=None)</code>
  <pre>Returns true if valid credentials exist for the given data source and
requesting user.

Args:
  name: string, The data source in the form:
`projects/{project_id}/dataSources/{data_source_id}` (required)
  body: object, The request body. (required)
    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.
    "hasValidCreds": 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, The field will contain name of the resource requested, for example:
`projects/{project_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.
    "scopes": [ # Api auth scopes for which refresh token needs to be obtained. Only valid
        # when `client_id` is specified. Ignored otherwise. These are scopes needed
        # by a data source to prepare data and ingest them into BigQuery,
        # e.g., https://www.googleapis.com/auth/bigquery
      "A String",
    ],
    "helpUrl": "A String", # Url for the help document for this data source.
    "displayName": "A String", # User friendly data source name.
    "name": "A String", # Data source resource name.
    "dataRefreshType": "A String", # Specifies whether the data source supports automatic data refresh for the
        # past few days, and how it's supported.
        # For some data sources, data might not be complete until a few days later,
        # so it's useful to refresh data automatically.
    "authorizationType": "A String", # Indicates the type of authorization.
    "description": "A String", # User friendly data source description string.
    "clientId": "A String", # Data source client id which should be used to receive refresh token.
        # When not supplied, no offline credentials are populated for data transfer.
    "statusUpdateDeadlineSeconds": 42, # The number of seconds to wait for a status update from the data source
        # before BigQuery marks the transfer as failed.
    "manualRunsDisabled": True or False, # Disables backfilling and manual run scheduling
        # for the data source.
    "defaultSchedule": "A String", # 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`.
    "dataSourceId": "A String", # Data source id.
    "defaultDataRefreshWindowDays": 42, # Default data refresh window on days.
        # Only meaningful when `data_refresh_type` = `SLIDING_WINDOW`.
    "supportsMultipleTransfers": True or False, # Indicates whether the data source supports multiple transfers
        # to different BigQuery targets.
    "supportsCustomSchedule": 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.
    "parameters": [ # 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.
        "displayName": "A String", # Parameter display name in the user interface.
        "description": "A String", # Parameter description.
        "validationDescription": "A String", # Description of the requirements for this field, in case the user input does
            # not fulfill the regex pattern or min/max values.
        "fields": [ # When parameter is a record, describes child fields.
          # Object with schema name: DataSourceParameter
        ],
        "required": True or False, # Is parameter required.
        "allowedValues": [ # All possible values for the parameter.
          "A String",
        ],
        "maxValue": 3.14, # For integer and double values specifies maxminum allowed value.
        "minValue": 3.14, # For integer and double values specifies minimum allowed value.
        "repeated": True or False, # Can parameter have multiple values.
        "recurse": True or False, # If set to true, schema should be taken from the parent with the same
            # parameter_id. Only applicable when parameter type is RECORD.
        "validationRegex": "A String", # Regular expression which can be used for parameter validation.
        "validationHelpUrl": "A String", # URL to a help document to further explain the naming requirements.
        "paramId": "A String", # Parameter identifier.
        "type": "A String", # Parameter type.
        "immutable": True or False, # Cannot be changed after initial creation.
      },
    ],
    "transferType": "A String", # Transfer type. Currently supports only batch transfers,
        # which are transfers that use the BigQuery batch APIs (load or
        # query) to ingest the data.
  }</pre>
</div>

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

Args:
  parent: string, The BigQuery project id for which data sources should be returned.
Must be in the form: `projects/{project_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.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  pageSize: integer, Page size. The default page size is the maximum value of 1000 results.

Returns:
  An object of the form:

    { # Returns list of supported data sources and their metadata.
    "nextPageToken": "A String", # 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.
        # @OutputOnly
    "dataSources": [ # List of supported data sources and their transfer settings.
      { # Represents data source metadata. Metadata is sufficient to
          # render UI and request proper OAuth tokens.
        "scopes": [ # Api auth scopes for which refresh token needs to be obtained. Only valid
            # when `client_id` is specified. Ignored otherwise. These are scopes needed
            # by a data source to prepare data and ingest them into BigQuery,
            # e.g., https://www.googleapis.com/auth/bigquery
          "A String",
        ],
        "helpUrl": "A String", # Url for the help document for this data source.
        "displayName": "A String", # User friendly data source name.
        "name": "A String", # Data source resource name.
        "dataRefreshType": "A String", # Specifies whether the data source supports automatic data refresh for the
            # past few days, and how it's supported.
            # For some data sources, data might not be complete until a few days later,
            # so it's useful to refresh data automatically.
        "authorizationType": "A String", # Indicates the type of authorization.
        "description": "A String", # User friendly data source description string.
        "clientId": "A String", # Data source client id which should be used to receive refresh token.
            # When not supplied, no offline credentials are populated for data transfer.
        "statusUpdateDeadlineSeconds": 42, # The number of seconds to wait for a status update from the data source
            # before BigQuery marks the transfer as failed.
        "manualRunsDisabled": True or False, # Disables backfilling and manual run scheduling
            # for the data source.
        "defaultSchedule": "A String", # 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`.
        "dataSourceId": "A String", # Data source id.
        "defaultDataRefreshWindowDays": 42, # Default data refresh window on days.
            # Only meaningful when `data_refresh_type` = `SLIDING_WINDOW`.
        "supportsMultipleTransfers": True or False, # Indicates whether the data source supports multiple transfers
            # to different BigQuery targets.
        "supportsCustomSchedule": 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.
        "parameters": [ # 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.
            "displayName": "A String", # Parameter display name in the user interface.
            "description": "A String", # Parameter description.
            "validationDescription": "A String", # Description of the requirements for this field, in case the user input does
                # not fulfill the regex pattern or min/max values.
            "fields": [ # When parameter is a record, describes child fields.
              # Object with schema name: DataSourceParameter
            ],
            "required": True or False, # Is parameter required.
            "allowedValues": [ # All possible values for the parameter.
              "A String",
            ],
            "maxValue": 3.14, # For integer and double values specifies maxminum allowed value.
            "minValue": 3.14, # For integer and double values specifies minimum allowed value.
            "repeated": True or False, # Can parameter have multiple values.
            "recurse": True or False, # If set to true, schema should be taken from the parent with the same
                # parameter_id. Only applicable when parameter type is RECORD.
            "validationRegex": "A String", # Regular expression which can be used for parameter validation.
            "validationHelpUrl": "A String", # URL to a help document to further explain the naming requirements.
            "paramId": "A String", # Parameter identifier.
            "type": "A String", # Parameter type.
            "immutable": True or False, # Cannot be changed after initial creation.
          },
        ],
        "transferType": "A String", # Transfer type. Currently supports only batch transfers,
            # which are transfers that use the BigQuery batch APIs (load or
            # query) to ingest the data.
      },
    ],
  }</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 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>