PUZZLE_TEMPLATE_SHEETS = ["Text", "Square grid", "Hex Grid",
"Formula reference: indexing"]
-def sheets_create(turb, name):
+def sheets_create_folder(turb, folder_name):
+ """Create a new folder within Google Drive
+
+ Returns the id of the created folder."""
+
+ body = {
+ "name": folder_name,
+ "mimeType": "application/vnd.google-apps.folder"
+ }
+
+ folder = turb.files.create(body=body, fields='id').execute()
+
+ return folder.get('id')
+
+def sheets_create(turb, name, folder_id):
"""Create a new spreadsheet with the given name.
Returns a dict with 'id' and 'url' of the spreadsheet
"""
- spreadsheet = create_spreadsheet(turb, name)
+ body = {
+ "name": name,
+ "parents": [folder_id],
+ "mimeType": "application/vnd.google-apps.spreadsheet"
+ }
+
+ spreadsheet = turb.files.create(body=body, fields='id').execute()
+ id = spreadsheet['id']
+
+ # The files.create call gives us the ID for our new sheet, but we
+ # need the URL for it as well. So we get that with the sheets API.
+ spreadsheet = turb.sheets.get(spreadsheetId=id,
+ fields='spreadsheetUrl').execute()
+ url = spreadsheet['spreadsheetUrl']
+
+ # Finally, we want to also allow anyone with the link to the sheet
+ # to be able to edit it.
+ turb.permissions.create(fileId=id,
+ body={'type': 'anyone', 'role': 'writer'},
+ fields='').execute()
return {
- 'id': spreadsheet['spreadsheetId'],
- 'url': spreadsheet['spreadsheetUrl']
+ 'id': id,
+ 'url': url
}
def create_spreadsheet(turb, name):
body={
"destinationSpreadsheetId": spreadsheet_id
}).execute()
- # Rename each copied sheet to match original name
- rename_sheet(turb, spreadsheet_id, res['sheetId'],
- sheet["properties"]["title"])
+ # Rename each copied sheet to match the name from the template
+ sheet_name = sheet["properties"]["title"]
+ # Except for "Text" which we rename to the puzzle name
+ if sheet_name == "Text":
+ sheet_name = puzzle['name']
+ rename_sheet(turb, spreadsheet_id, res['sheetId'], sheet_name)
# Next, delete the blank sheet that's was created before the template
sheet_id = spreadsheet['sheets'][0]['properties']['sheetId']
# Insert some useful links into the sheet where expected
if 'url' in puzzle:
url_link = puzzle['url']
- url_text = "Original puzzle is at: {}".format(url_link)
+ url_text = "Original puzzle link"
spreadsheet_insert_data(
turb, spreadsheet_id, "B1:B1",
'=HYPERLINK("{}","{}")'.format(url_link, url_text))
if 'channel_url' in puzzle:
url_link = puzzle['channel_url']
- url_text = "Discussion for this puzzle is at: {}".format(url_link)
+ url_text = "Slack channel link"
spreadsheet_insert_data(
turb, spreadsheet_id, "B2:B2",
'=HYPERLINK("{}","{}")'.format(url_link, url_text))