Skip to content

Commit

Permalink
fix: use project_id property from service account credentials (#120)
Browse files Browse the repository at this point in the history
* fix: use `project_id` property from service account credentials

* fix typo in test

* more test typos
  • Loading branch information
tswast committed Apr 12, 2021
1 parent 29c7fb0 commit ab2051d
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 3 deletions.
4 changes: 2 additions & 2 deletions pybigquery/_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
74 changes: 74 additions & 0 deletions tests/system/test_helpers.py
Original file line number Diff line number Diff line change
@@ -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"
2 changes: 1 addition & 1 deletion tests/unit/test_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit ab2051d

Please sign in to comment.