diff --git a/synapse/events/utils.py b/synapse/events/utils.py index ea1ad036b2..5e658b0764 100644 --- a/synapse/events/utils.py +++ b/synapse/events/utils.py @@ -429,6 +429,17 @@ class ClientEvent: event: "EventBase" membership: str | None + @classmethod + def state(cls, event: "EventBase") -> "ClientEvent": + """Wrap a state event with no per-user membership annotation. + + The event must be a state event (i.e. have a state_key). + """ + assert event.is_state(), ( + f"ClientEvent.state() called with non-state event {event.event_id}" + ) + return cls(event=event, membership=None) + @attr.s(slots=True, frozen=True, auto_attribs=True) class SerializeEventConfig: diff --git a/synapse/handlers/initial_sync.py b/synapse/handlers/initial_sync.py index 9b1eeced16..df78457838 100644 --- a/synapse/handlers/initial_sync.py +++ b/synapse/handlers/initial_sync.py @@ -252,10 +252,7 @@ class InitialSyncHandler: } d["state"] = await self._event_serializer.serialize_events( - [ - ClientEvent(event=e, membership=None) - for e in current_state.values() - ], + [ClientEvent.state(e) for e in current_state.values()], time_now=time_now, config=serializer_options, ) @@ -418,10 +415,7 @@ class InitialSyncHandler: "state": ( # Don't bundle aggregations as this is a deprecated API. await self._event_serializer.serialize_events( - [ - ClientEvent(event=e, membership=None) - for e in room_state.values() - ], + [ClientEvent.state(e) for e in room_state.values()], time_now, config=serialize_options, ) @@ -447,7 +441,7 @@ class InitialSyncHandler: serialize_options = SerializeEventConfig(requester=requester) # Don't bundle aggregations as this is a deprecated API. state = await self._event_serializer.serialize_events( - [ClientEvent(event=e, membership=None) for e in current_state.values()], + [ClientEvent.state(e) for e in current_state.values()], time_now, config=serialize_options, ) diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py index 164aff6bf0..ceb1523eca 100644 --- a/synapse/handlers/message.py +++ b/synapse/handlers/message.py @@ -265,7 +265,7 @@ class MessageHandler: room_state = room_state_events[membership_event_id] events = await self._event_serializer.serialize_events( - [ClientEvent(event=e, membership=None) for e in room_state.values()], + [ClientEvent.state(e) for e in room_state.values()], self.clock.time_msec(), config=SerializeEventConfig(requester=requester), ) diff --git a/synapse/handlers/search.py b/synapse/handlers/search.py index c47736889e..6c6816efbc 100644 --- a/synapse/handlers/search.py +++ b/synapse/handlers/search.py @@ -416,7 +416,7 @@ class SearchHandler: if state_results: rooms_cat_res["state"] = { room_id: await self._event_serializer.serialize_events( - [ClientEvent(event=e, membership=None) for e in state_events], + [ClientEvent.state(e) for e in state_events], time_now, config=serialize_options, ) diff --git a/synapse/rest/admin/rooms.py b/synapse/rest/admin/rooms.py index 6596affefb..4d9cda807a 100644 --- a/synapse/rest/admin/rooms.py +++ b/synapse/rest/admin/rooms.py @@ -531,7 +531,7 @@ class RoomStateRestServlet(RestServlet): events = await self.store.get_events(event_ids.values()) now = self.clock.time_msec() room_state = await self._event_serializer.serialize_events( - [ClientEvent(event=e, membership=None) for e in events.values()], now + [ClientEvent.state(e) for e in events.values()], now ) ret = {"state": room_state} @@ -900,7 +900,7 @@ class RoomEventContextServlet(RestServlet): bundle_aggregations=event_context.aggregations, ), "state": await self._event_serializer.serialize_events( - [ClientEvent(event=e, membership=None) for e in event_context.state], + [ClientEvent.state(e) for e in event_context.state], time_now, ), "start": event_context.start, diff --git a/synapse/rest/client/room.py b/synapse/rest/client/room.py index 1122e39969..87126db8a4 100644 --- a/synapse/rest/client/room.py +++ b/synapse/rest/client/room.py @@ -287,7 +287,7 @@ class RoomStateEventRestServlet(RestServlet): if format == "event": event = await self._event_serializer.serialize_event( - ClientEvent(event=data, membership=None), + ClientEvent.state(data), self.clock.time_msec(), config=SerializeEventConfig( event_format=format_event_for_client_v2, @@ -867,7 +867,7 @@ async def encode_messages_response( serialized_result[ "state" ] = await serialize_deps.event_serializer.serialize_events( - [ClientEvent(event=e, membership=None) for e in get_messages_result.state], + [ClientEvent.state(e) for e in get_messages_result.state], time_now, config=serialize_options, ) @@ -1175,7 +1175,7 @@ class RoomEventContextServlet(RestServlet): config=serializer_options, ), "state": await self._event_serializer.serialize_events( - [ClientEvent(event=e, membership=None) for e in event_context.state], + [ClientEvent.state(e) for e in event_context.state], time_now, config=serializer_options, ), diff --git a/synapse/rest/client/sync.py b/synapse/rest/client/sync.py index 9ad06d9fd3..97f84eb764 100644 --- a/synapse/rest/client/sync.py +++ b/synapse/rest/client/sync.py @@ -600,7 +600,7 @@ class SyncRestServlet(RestServlet): ) serialized_state = await self._event_serializer.serialize_events( - [ClientEvent(event=e, membership=None) for e in state_events], + [ClientEvent.state(e) for e in state_events], time_now, config=serialize_options, ) @@ -990,10 +990,7 @@ class SlidingSyncRestServlet(RestServlet): ): serialized_required_state = ( await self.event_serializer.serialize_events( - [ - ClientEvent(event=e, membership=None) - for e in room_result.required_state - ], + [ClientEvent.state(e) for e in room_result.required_state], time_now, config=serialize_options, )