Browse Source

fix patch_reservation_codes: use get_backend() and EventRecord API

Calendar() required explicit credentials and returned dicts; get_backend()
reads config and returns EventRecord objects compatible with filter_events.
ZiB 4 months ago
parent
commit
534c7b9778
1 changed files with 12 additions and 10 deletions
  1. 12 10
      scripts/patch_reservation_codes.py

+ 12 - 10
scripts/patch_reservation_codes.py

@@ -10,9 +10,9 @@ import argparse
 import asyncio
 import json
 import sys
-from datetime import date
+from datetime import date, datetime, timedelta
 
-from room_cal.store import Calendar, DEFAULT_CALENDAR_NAME
+from room_cal.store import DEFAULT_CALENDAR_NAME, get_backend
 from room_cal._utils import safe_json_loads, filter_events, service_name
 
 _PREFIX = 'Guest: '
@@ -31,21 +31,23 @@ def _build_description(xd: dict, wk: str, ws: str | None, dc: str) -> str:
 
 
 async def patch(target: date, new_wifi: str | None, new_ssid: str | None, new_door: str | None, calendar_name: str) -> None:
-  cal = Calendar(calendar_name)
-  events = await cal.fetch_date_range(target, target)
-  reservations = filter_events(events, _PREFIX, all_day=False)
+  backend = get_backend(calendar_name)
+  start = datetime(target.year, target.month, target.day)
+  end = start + timedelta(days=1)
+  records = await backend.fetch_range(start, end)
+  reservations = filter_events(records, _PREFIX, all_day=False)
 
   if not reservations:
     print(f"No reservation found overlapping {target}", file=sys.stderr)
     sys.exit(1)
 
   if len(reservations) > 1:
-    reservations.sort(key=lambda e: e['start'])
+    reservations.sort(key=lambda e: e.start)
     event = reservations[-1]
-    print(f"Multiple reservations overlap {target}, using the later one ({event['start'].date()} – {event['end'].date()})")
+    print(f"Multiple reservations overlap {target}, using the later one ({event.start.date()} – {event.end.date()})")
   else:
     event = reservations[0]
-  xd = safe_json_loads(event['x_data']) or {}
+  xd = safe_json_loads(event.x_data) or {}
 
   old_wifi = xd.get('wifi_key', '(none)')
   old_ssid = xd.get('wifi_ssid')
@@ -55,7 +57,7 @@ async def patch(target: date, new_wifi: str | None, new_ssid: str | None, new_do
   ws = new_ssid if new_ssid is not None else old_ssid
   dc = new_door if new_door is not None else old_door
 
-  print(f"Reservation: {event['title']}  ({event['start'].date()} – {event['end'].date()})")
+  print(f"Reservation: {event.title}  ({event.start.date()} – {event.end.date()})")
   if new_wifi is not None:
     print(f"  wifi_key:  {old_wifi!r}  →  {wk!r}")
   if new_ssid is not None:
@@ -74,7 +76,7 @@ async def patch(target: date, new_wifi: str | None, new_ssid: str | None, new_do
   new_x_data = json.dumps(xd)
   new_description = _build_description(xd, wk, ws, dc)
 
-  await cal.update_event(event, description=new_description, x_data=new_x_data)
+  await backend.update(event.uid, description=new_description, x_data=new_x_data)
   print("Updated.")