diff --git a/pybigquery/_helpers.py b/pybigquery/_helpers.py index 35f7e4ab..fc48144c 100644 --- a/pybigquery/_helpers.py +++ b/pybigquery/_helpers.py @@ -38,13 +38,13 @@ def create_bigquery_client( credentials_path ) credentials = credentials.with_scopes(SCOPES) - default_project = credentials.project + default_project = credentials.project_id elif credentials_info: credentials = service_account.Credentials.from_service_account_info( credentials_info ) credentials = credentials.with_scopes(SCOPES) - default_project = credentials.project + default_project = credentials.project_id else: credentials, default_project = google.auth.default(scopes=SCOPES) diff --git a/tests/system/test_helpers.py b/tests/system/test_helpers.py new file mode 100644 index 00000000..18334631 --- /dev/null +++ b/tests/system/test_helpers.py @@ -0,0 +1,74 @@ +# Copyright 2021 The PyBigQuery Authors +# +# Use of this source code is governed by an MIT-style +# license that can be found in the LICENSE file or at +# https://opensource.org/licenses/MIT. + +import os +import json + +import pytest + + +@pytest.fixture(scope="session") +def module_under_test(): + from pybigquery import _helpers + + return _helpers + + +@pytest.fixture +def credentials_path(): + if "GOOGLE_APPLICATION_CREDENTIALS" not in os.environ: + pytest.skip("GOOGLE_APPLICATION_CREDENTIALS must be set") + return os.environ["GOOGLE_APPLICATION_CREDENTIALS"] + + +@pytest.fixture +def credentials_info(credentials_path): + with open(credentials_path) as credentials_file: + return json.load(credentials_file) + + +def test_create_bigquery_client_with_credentials_path( + module_under_test, credentials_path, credentials_info +): + bqclient = module_under_test.create_bigquery_client( + credentials_path=credentials_path + ) + assert bqclient.project == credentials_info["project_id"] + + +def test_create_bigquery_client_with_credentials_path_respects_project( + module_under_test, credentials_path +): + """Test that project_id is used, even when there is a default project. + + https://github.com/googleapis/python-bigquery-sqlalchemy/issues/48 + """ + bqclient = module_under_test.create_bigquery_client( + credentials_path=credentials_path, project_id="connection-url-project", + ) + assert bqclient.project == "connection-url-project" + + +def test_create_bigquery_client_with_credentials_info( + module_under_test, credentials_info +): + bqclient = module_under_test.create_bigquery_client( + credentials_info=credentials_info + ) + assert bqclient.project == credentials_info["project_id"] + + +def test_create_bigquery_client_with_credentials_info_respects_project( + module_under_test, credentials_info +): + """Test that project_id is used, even when there is a default project. + + https://github.com/googleapis/python-bigquery-sqlalchemy/issues/48 + """ + bqclient = module_under_test.create_bigquery_client( + credentials_info=credentials_info, project_id="connection-url-project", + ) + assert bqclient.project == "connection-url-project" diff --git a/tests/unit/test_helpers.py b/tests/unit/test_helpers.py index 38be0453..1a3acc85 100644 --- a/tests/unit/test_helpers.py +++ b/tests/unit/test_helpers.py @@ -17,7 +17,7 @@ class AnonymousCredentialsWithProject(google.auth.credentials.AnonymousCredentia def __init__(self, project): super().__init__() - self.project = project + self.project_id = project def with_scopes(self, scopes): return self