blob: dc937c5a61e3b6a96b86cf23b58fe5f117f78968 [file] [log] [blame]
#!/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))