From 666d0885aa2d1480c805a8c92f6176a14c24a939 Mon Sep 17 00:00:00 2001 From: TimeToBuildBob Date: Wed, 11 Mar 2026 10:05:13 +0000 Subject: [PATCH] feat(client): return created Event(s) from insert_event/insert_events The server already returns the created event(s) with server-assigned IDs in the response body, but the client was discarding this data. This makes it possible for callers to get the event ID immediately after insertion, enabling direct use in delete_event/get_event without a separate lookup. Closes #77 --- aw_client/client.py | 12 ++++++++---- tests/test_client.py | 15 +++++++++++---- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/aw_client/client.py b/aw_client/client.py index ae65074..4fd72a1 100644 --- a/aw_client/client.py +++ b/aw_client/client.py @@ -177,15 +177,19 @@ def get_events( events = self._get(endpoint, params=params).json() return [Event(**event) for event in events] - def insert_event(self, bucket_id: str, event: Event) -> None: + def insert_event(self, bucket_id: str, event: Event) -> Event: endpoint = f"buckets/{bucket_id}/events" data = [event.to_json_dict()] - self._post(endpoint, data) + response = self._post(endpoint, data) + created = response.json() + return Event(**created[0]) if created else event - def insert_events(self, bucket_id: str, events: List[Event]) -> None: + def insert_events(self, bucket_id: str, events: List[Event]) -> List[Event]: endpoint = f"buckets/{bucket_id}/events" data = [event.to_json_dict() for event in events] - self._post(endpoint, data) + response = self._post(endpoint, data) + created = response.json() + return [Event(**e) for e in created] def delete_event(self, bucket_id: str, event_id: int) -> None: endpoint = f"buckets/{bucket_id}/events/{event_id}" diff --git a/tests/test_client.py b/tests/test_client.py index cdc6e6a..61c0c87 100755 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -52,7 +52,11 @@ def test_full(): e2 = create_unique_event() e3 = create_unique_event() events = [e1, e2, e3] - client.insert_events(bucket_name, events) + inserted_events = client.insert_events(bucket_name, events) + + # Check that insert_events returns events with server-assigned IDs + assert len(inserted_events) == len(events) + assert all(e.id is not None for e in inserted_events) # Get events fetched_events = client.get_events(bucket_name, limit=len(events)) @@ -90,15 +94,18 @@ def test_full(): ) # Create and delete an event: check that it no longer exists + # Also verify that insert_event returns the event with a server-assigned ID e_del = create_unique_event() - client.insert_event(bucket_name, e_del) + e_del_inserted = client.insert_event(bucket_name, e_del) + assert e_del_inserted.id is not None + fetched_events = client.get_events(bucket_name) assert (e_del.timestamp, e_del.duration, e_del.data) in [ (e.timestamp, e.duration, e.data) for e in fetched_events ] - e_del_fetched = [e for e in fetched_events if e.data == e_del.data][0] - client.delete_event(bucket_name, e_del_fetched) + # Use the ID returned from insert_event directly (no need to search for it) + client.delete_event(bucket_name, e_del_inserted.id) fetched_events = client.get_events(bucket_name) assert (e_del.timestamp, e_del.duration, e_del.data) not in [ (e.timestamp, e.duration, e.data) for e in fetched_events