perfmetrics/scripts/gsheet/gsheet.py (29 lines of code) (raw):

# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from google.oauth2 import service_account from googleapiclient.discovery import build SCOPES = ['https://www.googleapis.com/auth/spreadsheets'] SPREADSHEET_ID = '1kvHv1OBCzr9GnFxRu9RTJC7jjQjc9M4rAiDnhyak2Sg' CREDENTIALS_PATH = ('./gsheet/creds.json') def _get_sheets_service_client(): creds = service_account.Credentials.from_service_account_file( CREDENTIALS_PATH, scopes=SCOPES) service = build('sheets', 'v4', credentials=creds) return service def write_to_google_sheet(worksheet: str, data, spreadsheet_id=SPREADSHEET_ID) -> None: """Calls the API to update the values of a sheet. Args: worksheet: string, name of the worksheet to be edited appended by a "!" data: list of tuples/lists, data to be added to the worksheet Raises: HttpError: For any Google Sheets API call related errors """ sheets_client = _get_sheets_service_client() # Getting the index of the last occupied row in the sheet spreadsheet_response = sheets_client.spreadsheets().values().get( spreadsheetId=spreadsheet_id, range='{}!A1:A'.format(worksheet)).execute() entries = len(spreadsheet_response['values']) # Clearing the occupied rows request = sheets_client.spreadsheets().values().clear( spreadsheetId=spreadsheet_id, range='{}!A2:{}'.format(worksheet, entries + 1), body={}).execute() # Appending new rows sheets_client.spreadsheets().values().update( spreadsheetId=spreadsheet_id, valueInputOption='USER_ENTERED', body={ 'majorDimension': 'ROWS', 'values': data }, range='{}!A2'.format(worksheet)).execute()