]> git.cworth.org Git - turbot/blob - turbot/sheets.py
Copy template sheets to newly-created spreadsheets
[turbot] / turbot / sheets.py
1 from flask import current_app
2 import pickle
3 import os.path
4 import os
5
6 from googleapiclient.discovery import build
7
8 TEMPLATE_SHEET_ID = "1drSoyrE4gM3JaGweDkOybwXWdKPIDTfUmB1gQCYS3Uw"
9 TEMPLATE_SHEET_SHEETS = ["Text", "Grid"]
10
11 turbot_deploy_dir = os.environ.get('TURBOT_DEPLOY_DIR', '.')
12 TOKEN_FILE = "{}/.gsheets-token.pickle".format(turbot_deploy_dir)
13
14 creds = None
15
16 def sheets_create(name):
17     """Create a new sheet with the given name.
18
19     Returns the URL for the spreadsheet.
20     """
21     global creds
22
23     # The file token.pickle stores token from last login/refresh
24     if not creds:
25         if os.path.exists(TOKEN_FILE):
26             with open(TOKEN_FILE, 'rb') as token:
27                 creds = pickle.load(token)
28
29     # If there are no (valid) credentials available, give up
30     if not creds or not creds.valid:
31         current_app.logger.error("No token found in {}".format(TOKEN_FILE))
32         current_app.logger.error("Try running ./gsheets-authenticate.py")
33         return None
34
35     service = build('sheets', 'v4', credentials=creds)
36     sheets = service.spreadsheets()
37
38     # Create a new spreadsheet
39     spreadsheet_body = {
40         'properties': {
41             'title': name
42         }
43     }
44
45     new_sheet = sheets.create(body=spreadsheet_body).execute()
46     spreadsheet_url = new_sheet["spreadsheetUrl"]
47     spreadsheet_id = new_sheet["spreadsheetId"]
48
49     # Copy some sheets from the Template spreadsheet
50
51     response = sheets.get(spreadsheetId=TEMPLATE_SHEET_ID).execute()
52
53     for sheet in response["sheets"]:
54         if sheet["properties"]["title"] in TEMPLATE_SHEET_SHEETS:
55             sheets.sheets().copyTo(spreadsheetId=TEMPLATE_SHEET_ID,
56                                    sheetId=sheet["properties"]["sheetId"],
57                                    body={
58                                        "destinationSpreadsheetId":
59                                        spreadsheet_id
60                                    }).execute()
61
62     return spreadsheet_url