| #!/usr/bin/env python3 |
| |
| import csv |
| import os |
| import os.path |
| import pickle |
| import pprint |
| import re |
| import sys |
| |
| from IPython import embed |
| |
| from googleapiclient.discovery import build |
| from google_auth_oauthlib.flow import InstalledAppFlow,Flow |
| from google.auth.transport.requests import Request |
| |
| |
| SCOPES = ['https://www.googleapis.com/auth/spreadsheets'] |
| |
| gsheetId = '1oXS-a_XD7AzWOEnbJB9VvEISLW_5DydZQeVtdOuHFVE' |
| |
| |
| def pformat(*args, **kw): |
| return pprint.pformat(*args, width=200, **kw) |
| |
| |
| def get_service(): |
| creds = None |
| # The file token.pickle stores the user's access and refresh tokens, and is |
| # created automatically when the authorization flow completes for the first |
| # time. |
| if os.path.exists('token.pickle'): |
| with open('token.pickle', 'rb') as token: |
| creds = pickle.load(token) |
| # If there are no (valid) credentials available, let the user log in. |
| if not creds or not creds.valid: |
| if creds and creds.expired and creds.refresh_token: |
| creds.refresh(Request()) |
| else: |
| flow = InstalledAppFlow.from_client_secrets_file( |
| 'client_secrets.json', SCOPES) |
| creds = flow.run_local_server(port=0) |
| # Save the credentials for the next run |
| with open('token.pickle', 'wb') as token: |
| pickle.dump(creds, token) |
| |
| return build('sheets', 'v4', credentials=creds) |
| |
| |
| |
| def main(argv): |
| |
| service = get_service() |
| |
| # Upload the names2files-b.csv to the sheet |
| SHEET_NAME = "Imported from Audit - New names" |
| |
| sheet_metadata = service.spreadsheets().get(spreadsheetId=gsheetId).execute() |
| sheets = sheet_metadata.get('sheets', '') |
| title2sheetid = {} |
| for s in sheets: |
| title = s.get("properties", {}).get("title", "Sheet1") |
| sheet_id = s.get("properties", {}).get("sheetId", 0) |
| title2sheetid[title] = sheet_id |
| |
| assert SHEET_NAME in title2sheetid, SHEET_NAME+'\n'+pformat(title2sheetid) |
| SHEET_ID = title2sheetid[SHEET_NAME] |
| |
| rows = [] |
| requests = [{ |
| "updateCells": { |
| "range": { |
| "sheetId": SHEET_ID, |
| }, |
| "fields": "userEnteredFormat", |
| } |
| }] |
| |
| DIR_NAME_IDX = 3 |
| with open('names2files-b.csv', newline='') as f: |
| for i, r in enumerate(csv.reader(f)): |
| if i > 0: |
| r[2] = int(r[2]) |
| |
| rows.append(r) |
| |
| if i == 0: |
| continue |
| if r[DIR_NAME_IDX] == rows[-2][DIR_NAME_IDX]: |
| continue |
| |
| requests.append({ |
| "updateBorders": { |
| "range": { |
| "sheetId": SHEET_ID, |
| "startRowIndex": i-1, |
| "endRowIndex": i, |
| "startColumnIndex": 0, |
| }, |
| "bottom": { |
| "style": "DASHED", |
| "width": 1, |
| "color": { |
| "blue": 1.0 |
| }, |
| }, |
| } |
| }) |
| |
| result = service.spreadsheets().values().clear( |
| spreadsheetId=gsheetId, |
| range="Imported from Audit - New names", |
| ).execute() |
| |
| result = service.spreadsheets().values().update( |
| spreadsheetId=gsheetId, |
| valueInputOption='RAW', |
| range="Imported from Audit - New names", |
| body=dict( |
| majorDimension='ROWS', |
| values=rows) |
| ).execute() |
| print("Imported values for 'New names'") |
| |
| result = service.spreadsheets().batchUpdate( |
| spreadsheetId=gsheetId, |
| body={'requests':requests}, |
| ).execute() |
| print("Updating formatting for 'New names'") |
| |
| |
| if __name__ == "__main__": |
| sys.exit(main(sys.argv)) |