Bot & Automation
Activity Reminder Bot
/root/hermes-projects/Activity Reminder Bot
scripts/cleanup_sheet_rows.py
text
from activity_reminder_bot.services.sheets import get_reminder_repository
def main() -> None:
repo = get_reminder_repository()
repo.ensure_layout()
service = repo._build_sheets_service()
spreadsheet = service.spreadsheets().get(
spreadsheetId=repo.spreadsheet_id,
fields="sheets.properties",
).execute()
sheet_id = None
for sheet in spreadsheet.get("sheets", []):
properties = sheet.get("properties", {})
if properties.get("title") == repo.worksheet_name:
sheet_id = int(properties["sheetId"])
break
if sheet_id is None:
raise RuntimeError(f"Worksheet not found: {repo.worksheet_name}")
rows = service.spreadsheets().values().get(
spreadsheetId=repo.spreadsheet_id,
range=f"'{repo.worksheet_name}'!A:N",
).execute().get("values", [])
row_numbers_to_delete = []
for row_number, row in enumerate(rows[1:], start=2):
if not row:
continue
first_cell = str(row[0]).strip().lower()
if first_cell in {"", "id", "public id", "reminder id"}:
row_numbers_to_delete.append(row_number)
for row_number in reversed(row_numbers_to_delete):
service.spreadsheets().batchUpdate(
spreadsheetId=repo.spreadsheet_id,
body={
"requests": [
{
"deleteDimension": {
"range": {
"sheetId": sheet_id,
"dimension": "ROWS",
"startIndex": row_number - 1,
"endIndex": row_number,
}
}
}
]
},
).execute()
print(f"cleanup-ok deleted={len(row_numbers_to_delete)}")
if __name__ == "__main__":
main()