Unverified Commit dd675699 authored by Tao Feng's avatar Tao Feng Committed by GitHub

Allow credential pass from conf variable for BQ extractor (#154)

parent 020bb6f3
import json
import logging import logging
from collections import namedtuple from collections import namedtuple
...@@ -32,6 +33,8 @@ class BigQueryMetadataExtractor(Extractor): ...@@ -32,6 +33,8 @@ class BigQueryMetadataExtractor(Extractor):
PROJECT_ID_KEY = 'project_id' PROJECT_ID_KEY = 'project_id'
KEY_PATH_KEY = 'key_path' KEY_PATH_KEY = 'key_path'
# sometimes we don't have a key path, but only have an variable
CRED_KEY = 'project_cred'
PAGE_SIZE_KEY = 'page_size' PAGE_SIZE_KEY = 'page_size'
FILTER_KEY = 'filter' FILTER_KEY = 'filter'
_DEFAULT_SCOPES = ['https://www.googleapis.com/auth/bigquery.readonly', ] _DEFAULT_SCOPES = ['https://www.googleapis.com/auth/bigquery.readonly', ]
...@@ -41,7 +44,9 @@ class BigQueryMetadataExtractor(Extractor): ...@@ -41,7 +44,9 @@ class BigQueryMetadataExtractor(Extractor):
def init(self, conf): def init(self, conf):
# type: (ConfigTree) -> None # type: (ConfigTree) -> None
# should use key_path, or cred_key if the former doesn't exist
self.key_path = conf.get_string(BigQueryMetadataExtractor.KEY_PATH_KEY, None) self.key_path = conf.get_string(BigQueryMetadataExtractor.KEY_PATH_KEY, None)
self.cred_key = conf.get_string(BigQueryMetadataExtractor.CRED_KEY, None)
self.project_id = conf.get_string(BigQueryMetadataExtractor.PROJECT_ID_KEY) self.project_id = conf.get_string(BigQueryMetadataExtractor.PROJECT_ID_KEY)
self.pagesize = conf.get_int( self.pagesize = conf.get_int(
BigQueryMetadataExtractor.PAGE_SIZE_KEY, BigQueryMetadataExtractor.PAGE_SIZE_KEY,
...@@ -53,7 +58,13 @@ class BigQueryMetadataExtractor(Extractor): ...@@ -53,7 +58,13 @@ class BigQueryMetadataExtractor(Extractor):
google.oauth2.service_account.Credentials.from_service_account_file( google.oauth2.service_account.Credentials.from_service_account_file(
self.key_path, scopes=BigQueryMetadataExtractor._DEFAULT_SCOPES)) self.key_path, scopes=BigQueryMetadataExtractor._DEFAULT_SCOPES))
else: else:
credentials, _ = google.auth.default(scopes=BigQueryMetadataExtractor._DEFAULT_SCOPES) if self.cred_key:
service_account_info = json.loads(self.cred_key)
credentials = (
google.oauth2.service_account.Credentials.from_service_account_info(
service_account_info, scopes=BigQueryMetadataExtractor._DEFAULT_SCOPES))
else:
credentials, _ = google.auth.default(scopes=BigQueryMetadataExtractor._DEFAULT_SCOPES)
http = httplib2.Http() http = httplib2.Http()
authed_http = google_auth_httplib2.AuthorizedHttp(credentials, http=http) authed_http = google_auth_httplib2.AuthorizedHttp(credentials, http=http)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment