1 from flask import current_app
6 from google.auth.transport.requests import Request
7 from googleapiclient.discovery import build
9 TEMPLATE_SHEET_ID = "1drSoyrE4gM3JaGweDkOybwXWdKPIDTfUmB1gQCYS3Uw"
10 TEMPLATE_SHEET_SHEETS = ["Text", "Grid"]
12 turbot_deploy_dir = os.environ.get('TURBOT_DEPLOY_DIR', '.')
13 TOKEN_FILE = "{}/.gsheets-token.pickle".format(turbot_deploy_dir)
17 def sheets_create(name):
18 """Create a new sheet with the given name.
20 Returns the URL for the spreadsheet.
24 # The token file stores token from last login/refresh
26 if os.path.exists(TOKEN_FILE):
27 with open(TOKEN_FILE, 'rb') as token:
28 creds = pickle.load(token)
30 # Refresh credentials if necessary
31 if creds and not creds.valid:
32 creds.refresh(Request())
34 # If there are no (valid) credentials available, give up
35 if not creds or not creds.valid:
36 current_app.logger.error("No token found in {}".format(TOKEN_FILE))
37 current_app.logger.error("Try running ./gsheets-authenticate.py")
40 service = build('sheets', 'v4', credentials=creds)
41 sheets = service.spreadsheets()
43 # Create a new spreadsheet
50 new_sheet = sheets.create(body=spreadsheet_body).execute()
51 spreadsheet_url = new_sheet["spreadsheetUrl"]
52 spreadsheet_id = new_sheet["spreadsheetId"]
54 # Copy some sheets from the Template spreadsheet
56 response = sheets.get(spreadsheetId=TEMPLATE_SHEET_ID).execute()
58 for sheet in response["sheets"]:
59 if sheet["properties"]["title"] in TEMPLATE_SHEET_SHEETS:
60 sheets.sheets().copyTo(spreadsheetId=TEMPLATE_SHEET_ID,
61 sheetId=sheet["properties"]["sheetId"],
63 "destinationSpreadsheetId":
67 return spreadsheet_url