section_block, text_block, button_block, actions_block, divider_block
)
from turbot.hunt import hunt_blocks, find_hunt_for_hunt_id
-from turbot.sheets import sheets_create, sheets_create_for_puzzle
+from turbot.sheets import (
+ sheets_create, sheets_create_for_puzzle, sheets_create_folder
+)
from turbot.slack import slack_send_message, slack_channel_members
from turbot.channel import channel_url
from boto3.dynamodb.conditions import Key
"Welcome to the channel for the {} hunt! ".format(hunt['name'])
+ "Please wait a minute or two while I create some backend resources.")
- # Create a sheet for the hunt
- sheet = sheets_create(turb, hunt['name'])
+ # Create a new folder within Google drive for the hunt
+ hunt['folder_id'] = sheets_create_folder(turb, hunt['hunt_id'])
- # Update the database with the URL of the sheet
+ # Create a sheet for the hunt
+ sheet = sheets_create(turb, hunt['name'], hunt['folder_id'])
hunt['sheet_url'] = sheet['url']
- turb.table.put_item(Item=hunt)
# Message the channel with the URL of the sheet
slack_send_message(turb.slack_client, channel_id,
"Sheet created for this hunt: {}".format(sheet['url']))
- # Mark the hunt as active in the database
+ # Mark the hunt as active now
hunt['active'] = True
+
+ # Update the database with all the changes we have made to the hunt
turb.table.put_item(Item=hunt)
# Message the hunt channel that the database is ready
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):
'v3',
credentials=gsheets_creds,
cache_discovery=False)
+files = service.files()
permissions = service.permissions()
db = boto3.resource('dynamodb')
turb.db = db
turb.table = db.Table("turbot")
turb.sheets = sheets
+turb.files = files
turb.permissions = permissions
def error(message):