Files
bonobo/bonobo/contrib/google/__init__.py
2019-05-16 11:53:50 +02:00

57 lines
2.3 KiB
Python

import os
import httplib2
from apiclient import discovery
from oauth2client import client, tools
from oauth2client.file import Storage
from oauth2client.tools import argparser
# https://developers.google.com/api-client-library/python/guide/aaa_oauth
# pip install google-api-python-client (1.6.4)
HOME_DIR = os.path.expanduser("~")
GOOGLE_SECRETS = os.path.join(HOME_DIR, ".cache/secrets/client_secrets.json")
def get_credentials(*, scopes):
"""Gets valid user credentials from storage.
If nothing has been stored, or if the stored credentials are invalid,
the OAuth2 flow is completed to obtain the new credentials.
Returns:
Credentials, the obtained credential.
"""
credential_dir = os.path.join(HOME_DIR, ".cache", __package__, "credentials")
if not os.path.exists(credential_dir):
os.makedirs(credential_dir)
credential_path = os.path.join(credential_dir, "googleapis.json")
store = Storage(credential_path)
credentials = store.get()
# see https://developers.google.com/api-client-library/python/auth/web-app
# kw: "incremental scopes"
if not credentials or credentials.invalid or not credentials.has_scopes(scopes):
flow = client.flow_from_clientsecrets(GOOGLE_SECRETS, scopes)
flow.user_agent = "Bonobo ETL (https://www.bonobo-project.org/)"
flags = argparser.parse_args(["--noauth_local_webserver"])
credentials = tools.run_flow(flow, store, flags)
print("Storing credentials to " + credential_path)
return credentials
def get_google_spreadsheets_api_client(scopes=("https://www.googleapis.com/auth/spreadsheets",)):
credentials = get_credentials(scopes=scopes)
http = credentials.authorize(httplib2.Http())
discoveryUrl = "https://sheets.googleapis.com/$discovery/rest?version=v4"
return discovery.build("sheets", "v4", http=http, discoveryServiceUrl=discoveryUrl, cache_discovery=False)
def get_google_people_api_client(scopes=("https://www.googleapis.com/auth/contacts",)):
credentials = get_credentials(scopes=scopes)
http = credentials.authorize(httplib2.Http())
discoveryUrl = "https://people.googleapis.com/$discovery/rest?version=v1"
return discovery.build("people", "v1", http=http, discoveryServiceUrl=discoveryUrl, cache_discovery=False)