-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathgoogle_api.py
66 lines (60 loc) · 2.75 KB
/
google_api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import os
# Google Libraries
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
import logging
import json
import pathlib
logger = logging.getLogger(__name__)
def connect(api,version):
CLIENT_FILE_NAME = "credentials.json"
CLIENT_FILE = os.path.join(pathlib.Path(__file__).parent.resolve(),CLIENT_FILE_NAME)
SCOPES = ["https://www.googleapis.com/auth/books","https://www.googleapis.com/auth/documents","https://www.googleapis.com/auth/drive"]
creds = None
if "API_TOKEN" in os.environ:
token_data = {
"token":os.getenv('API_TOKEN'),
"refresh_token":os.getenv('REFRESH_TOKEN'),
"token_uri":os.getenv('TOKEN_URI'),
"client_id":os.getenv('CLIENT_ID'),
"client_secret":os.getenv('CLIENT_SECRET'),
"scopes":SCOPES,
"expiry":os.getenv('EXPIRY')
}
logger.info("Found Google API token")
creds = Credentials.from_authorized_user_info(token_data,SCOPES)
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
creds_json = json.loads(creds.to_json())
os.environ['API_TOKEN']= str(creds_json['token'])
os.environ['REFRESH_TOKEN']= str(creds_json['refresh_token'])
os.environ['EXPIRY']= str(creds_json['expiry'])
else:
logger.info("Couldn't found API token, starting browser authentication")
flow = InstalledAppFlow.from_client_secrets_file(CLIENT_FILE,SCOPES)
creds = flow.run_local_server(port=2048)
creds_json = json.loads(creds.to_json())
with open(".env", "a") as f:
f.write(f"API_TOKEN={creds_json['token']}\n")
f.write(f"REFRESH_TOKEN={creds_json['refresh_token']}\n")
f.write(f"TOKEN_URI={creds_json['token_uri']}\n")
f.write(f"CLIENT_ID={creds_json['client_id']}\n")
f.write(f"CLIENT_SECRET={creds_json['client_secret']}\n")
f.write(f"EXPIRY={creds_json['expiry']}\n")
f.write("NOTION_KEY=\n")
f.write("NOTION_DATABASE_ID=\n")
f.write("DRIVE_FOLDER_ID=\n")
f.write("IMAGE_HOST_KEY=\n")
f.write("TIME_OFFSET=")
logger.info("API token credentials written to '.env' file")
os.remove(CLIENT_FILE)
quit()
try:
service = build(api,version,credentials=creds)
return service
except HttpError as err:
logger.error(err)