From 16380d38960b1e1e8da79bdc02e556abaf2344ba Mon Sep 17 00:00:00 2001 From: Tim Swast Date: Mon, 1 May 2017 15:44:01 -0700 Subject: [PATCH] BigQuery: add auth samples for service accounts. --- bigquery/cloud-client/.gitignore | 2 + bigquery/cloud-client/auth_snippets.py | 62 +++++++++++++++++++++ bigquery/cloud-client/auth_snippets_test.py | 33 +++++++++++ 3 files changed, 97 insertions(+) create mode 100644 bigquery/cloud-client/.gitignore create mode 100644 bigquery/cloud-client/auth_snippets.py create mode 100644 bigquery/cloud-client/auth_snippets_test.py diff --git a/bigquery/cloud-client/.gitignore b/bigquery/cloud-client/.gitignore new file mode 100644 index 00000000000..0dc05ffadec --- /dev/null +++ b/bigquery/cloud-client/.gitignore @@ -0,0 +1,2 @@ +client_secrets.json +service_account.json diff --git a/bigquery/cloud-client/auth_snippets.py b/bigquery/cloud-client/auth_snippets.py new file mode 100644 index 00000000000..9a0c490d9c3 --- /dev/null +++ b/bigquery/cloud-client/auth_snippets.py @@ -0,0 +1,62 @@ +# Copyright 2017 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Demonstrates how to authenticate to Google BigQuery using the Google Cloud +Client Libraries.""" + +import argparse + + +def implicit(): + from google.cloud import bigquery + + # If you don't specify credentials when constructing the client, the + # client library will look for credentials in the environment. + bigquery_client = bigquery.Client() + + # Make an authenticated API request + datasets = list(bigquery_client.list_datasets()) + print(datasets) + + +def explicit(): + from google.cloud import bigquery + + # Explicitly use service account credentials by specifying the private key + # file. All clients in google-cloud-python have this helper, see + # https://google-cloud-python.readthedocs.io/en/latest/core/modules.html + # #google.cloud.client.Client.from_service_account_json + bigquery_client = bigquery.Client.from_service_account_json( + 'service_account.json') + + # Make an authenticated API request + buckets = list(bigquery_client.list_datasets()) + print(buckets) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + + subparsers = parser.add_subparsers(dest='command') + subparsers.add_parser('implicit', help=implicit.__doc__) + subparsers.add_parser('explicit', help=explicit.__doc__) + + args = parser.parse_args() + + if args.command == 'implicit': + implicit() + elif args.command == 'explicit': + explicit() diff --git a/bigquery/cloud-client/auth_snippets_test.py b/bigquery/cloud-client/auth_snippets_test.py new file mode 100644 index 00000000000..5b5f2cac00c --- /dev/null +++ b/bigquery/cloud-client/auth_snippets_test.py @@ -0,0 +1,33 @@ +# Copyright 2017 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +import mock + +import auth_snippets + + +def test_implicit(): + auth_snippets.implicit() + + +def test_explicit(): + with open(os.environ['GOOGLE_APPLICATION_CREDENTIALS']) as creds_file: + creds_file_data = creds_file.read() + + open_mock = mock.mock_open(read_data=creds_file_data) + + with mock.patch('io.open', open_mock): + auth_snippets.explicit()