File size: 1,228 Bytes
d05aa4a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | from typing import TypedDict, List
class DoorSummary(TypedDict):
total_events: int
opened_count: int
closed_count: int
locked_count: int
unlocked_count: int
def summarize_door_events(events: List[dict], door_id: str) -> DoorSummary:
"""Summarize events for a single door_id."""
opened = closed = locked = unlocked = 0
for e in events:
if str(e.get("door_id")) != door_id:
continue
etype = str(e.get("event_type", "")).lower()
if etype == "opened":
opened += 1
elif etype == "closed":
closed += 1
elif etype == "locked":
locked += 1
elif etype == "unlocked":
unlocked += 1
total = opened + closed + locked + unlocked
return {
"total_events": total,
"opened_count": opened,
"closed_count": closed,
"locked_count": locked,
"unlocked_count": unlocked,
}
if __name__ == "__main__":
events = [
{"door_id": "front_door", "event_type": "opened"},
{"door_id": "front_door", "event_type": "closed"},
{"door_id": "front_door", "event_type": "locked"},
]
print(summarize_door_events(events, "front_door"))
|