-from flask import current_app
-import pickle
-import os.path
-import os
+PUZZLE_TEMPLATE_ID = "1drSoyrE4gM3JaGweDkOybwXWdKPIDTfUmB1gQCYS3Uw"
+PUZZLE_TEMPLATE_SHEETS = ["Text", "Grid"]
-from googleapiclient.discovery import build
-
-# If modifying these scopes, delete the file token.pickle.
-SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
-
-turbot_deploy_dir = os.environ.get('TURBOT_DEPLOY_DIR', '.')
-TOKEN_FILE = "{}/.gsheets-token.pickle".format(turbot_deploy_dir)
-
-creds = None
-
-def sheets_create(name):
+def sheets_create(turb, name):
"""Create a new sheet with the given name.
- Returns the URL for the spreadsheet.
+ Returns the dict with 'id' and 'url'of the spreadsheet.
"""
- global creds
- # The file token.pickle stores token from last login/refresh
- if not creds:
- if os.path.exists(TOKEN_FILE):
- with open(TOKEN_FILE, 'rb') as token:
- creds = pickle.load(token)
-
- # If there are no (valid) credentials available, give up
- if not creds or not creds.valid:
- current_app.logger.error("No token found in {}".format(TOKEN_FILE))
- current_app.logger.error("Try running ./gsheets-authenticate.py")
- return None
-
- service = build('sheets', 'v4', credentials=creds)
-
- # Create a new sheet
+ # Create a new spreadsheet
spreadsheet_body = {
'properties': {
'title': name
}
}
- request = service.spreadsheets().create(body=spreadsheet_body)
- response = request.execute()
+ new_sheet = turb.sheets.create(body=spreadsheet_body).execute()
+
+ # Now that we've created a new sheet, we need to also allow anyone
+ # with the link to the sheet to be able to edit it.
+ turb.permissions.create(fileId=new_sheet["spreadsheetId"],
+ body={'type': 'anyone', 'role': 'writer'},
+ fields='id').execute()
+
+ return {
+ 'id': new_sheet["spreadsheetId"],
+ 'url': new_sheet["spreadsheetUrl"]
+ }
+
+def sheets_create_for_puzzle(turb, name):
+ """Creates a new sheet for a puzzle of the given name
+
+ Like sheets_create(), but also copies the puzzle template sheet."""
+
+ # First create the new sheet
+ new_sheet = sheets_create(turb, name)
+
+ # Copy some sheets from the Template spreadsheet
+
+ response = turb.sheets.get(spreadsheetId=PUZZLE_TEMPLATE_ID).execute()
+
+ for sheet in response["sheets"]:
+ if sheet["properties"]["title"] in PUZZLE_TEMPLATE_SHEETS:
+ turb.sheets.sheets().copyTo(spreadsheetId=PUZZLE_TEMPLATE_ID,
+ sheetId=sheet["properties"]["sheetId"],
+ body={
+ "destinationSpreadsheetId":
+ new_sheet['id']
+ }).execute()
- return response["spreadsheetUrl"]
+ return new_sheet