Skip to content
Permalink
Browse files
fix: use project_id property from service account credentials (#120)
* 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 ab2051de3097adb68503c01a87f9a91092711d2a
Showing with 77 additions and 3 deletions.
  1. +2 −2 pybigquery/_helpers.py
  2. +74 −0 tests/system/test_helpers.py
  3. +1 −1 tests/unit/test_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)

@@ -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"
@@ -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

0 comments on commit ab2051d

Please sign in to comment.