]> git.cworth.org Git - turbot/blobdiff - turbot/sheets.py
Announce to the hunt whenever a puzzle receives a new tag
[turbot] / turbot / sheets.py
index 831998d6f52c581c71b21d3b3daf67c475003d78..76515ca09547c660a94466fd6d223259211b7f44 100644 (file)
@@ -2,7 +2,7 @@ PUZZLE_TEMPLATE_ID = "1drSoyrE4gM3JaGweDkOybwXWdKPIDTfUmB1gQCYS3Uw"
 PUZZLE_TEMPLATE_SHEETS = ["Text", "Square grid", "Hex Grid",
                           "Formula reference: indexing"]
 
-def sheets_create_folder(turb, folder_name):
+def sheets_create_folder(turb, folder_name, parents = None):
     """Create a new folder within Google Drive
 
     Returns the id of the created folder."""
@@ -12,6 +12,9 @@ def sheets_create_folder(turb, folder_name):
         "mimeType": "application/vnd.google-apps.folder"
     }
 
+    if parents:
+        body["parents"] = parents
+
     folder = turb.files.create(body=body, fields='id').execute()
 
     return folder.get('id')
@@ -48,33 +51,7 @@ def sheets_create(turb, name, folder_id):
         'url': url
     }
 
-def create_spreadsheet(turb, name):
-    """
-    Returns the request's dict which has at least the following keys:
-
-        ['spreadsheetId']: ID for this spreadsheet
-        ['spreadsheetUrl']: URL of this spreadsheet
-        ['sheets'][0]['properties']['sheetId']: ID of first sheet inside
-    """
-
-    # Create a new spreadsheet
-    spreadsheet_body = {
-        'properties': {
-            'title': name
-        }
-    }
-
-    spreadsheet = turb.sheets.create(body=spreadsheet_body).execute()
-
-    # Now that we've created a new spreadsheet, we need to also allow
-    # anyone with the link to the sheet to be able to edit it.
-    turb.permissions.create(fileId=spreadsheet["spreadsheetId"],
-                            body={'type': 'anyone', 'role': 'writer'},
-                            fields='id').execute()
-
-    return spreadsheet
-
-def sheets_create_for_puzzle(turb, puzzle):
+def sheets_create_for_puzzle(turb, puzzle, folder_id):
     """Creates a new sheet for a puzzle of the given name
 
     Like sheets_create(), but also copies the puzzle template sheet.
@@ -84,11 +61,16 @@ def sheets_create_for_puzzle(turb, puzzle):
     """
 
     # First create the new spreadsheet
-    spreadsheet = create_spreadsheet(turb, puzzle['name'])
-    spreadsheet_id = spreadsheet['spreadsheetId']
+    spreadsheet = sheets_create(turb, puzzle['name'], folder_id)
+    spreadsheet_id = spreadsheet['id']
+    spreadsheet_url = spreadsheet['url']
 
-    # Then, copy some useful sheets over from the Template spreadsheet
+    # And fetch the individual "sheets" from the spreadsheet
+    spreadsheet = turb.sheets.get(spreadsheetId=spreadsheet_id,
+                                  fields='sheets').execute()
+    first_sheet_id = spreadsheet['sheets'][0]['properties']['sheetId']
 
+    # Then, copy some useful sheets over from the Template spreadsheet
     response = turb.sheets.get(spreadsheetId=PUZZLE_TEMPLATE_ID).execute()
 
     for sheet in response["sheets"]:
@@ -106,37 +88,35 @@ def sheets_create_for_puzzle(turb, puzzle):
                 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']
-    delete_sheet(turb, spreadsheet_id, sheet_id)
+    # Next, delete the blank sheet made at spreadsheet creation time
+    delete_sheet(turb, spreadsheet_id, first_sheet_id)
 
     # Insert some useful links into the sheet where expected
     if 'url' in puzzle:
         url_link = puzzle['url']
         url_text = "Original puzzle link"
-        spreadsheet_insert_data(
+        spreadsheet_update_data(
             turb, spreadsheet_id, "B1:B1",
             '=HYPERLINK("{}","{}")'.format(url_link, url_text))
 
     if 'channel_url' in puzzle:
         url_link = puzzle['channel_url']
         url_text = "Slack channel link"
-        spreadsheet_insert_data(
+        spreadsheet_update_data(
             turb, spreadsheet_id, "B2:B2",
             '=HYPERLINK("{}","{}")'.format(url_link, url_text))
 
     return {
         'id': spreadsheet_id,
-        'url': spreadsheet['spreadsheetUrl']
+        'url': spreadsheet_url
     }
 
-def spreadsheet_insert_data(turb, spreadsheet_id, range, text):
+def spreadsheet_update_data(turb, spreadsheet_id, range, text):
 
-    turb.sheets.values().append(
+    turb.sheets.values().update(
         spreadsheetId=spreadsheet_id,
         range=range,
         valueInputOption='USER_ENTERED',
-        insertDataOption='INSERT_ROWS',
         body={
             'range': range,
             'values': [