diff --git a/synapse/rest/client/notifications.py b/synapse/rest/client/notifications.py
index 20377a9ac6..ff040de6b8 100644
--- a/synapse/rest/client/notifications.py
+++ b/synapse/rest/client/notifications.py
@@ -16,7 +16,10 @@ import logging
from typing import TYPE_CHECKING, Tuple
from synapse.api.constants import ReceiptTypes
-from synapse.events.utils import format_event_for_client_v2_without_room_id
+from synapse.events.utils import (
+ SerializeEventConfig,
+ format_event_for_client_v2_without_room_id,
+)
from synapse.http.server import HttpServer
from synapse.http.servlet import RestServlet, parse_integer, parse_string
from synapse.http.site import SynapseRequest
@@ -75,7 +78,9 @@ class NotificationsServlet(RestServlet):
self._event_serializer.serialize_event(
notif_events[pa.event_id],
self.clock.time_msec(),
- event_format=format_event_for_client_v2_without_room_id,
+ config=SerializeEventConfig(
+ event_format=format_event_for_client_v2_without_room_id
+ ),
)
),
}
diff --git a/synapse/rest/client/sync.py b/synapse/rest/client/sync.py
index f3018ff690..53c385a86c 100644
--- a/synapse/rest/client/sync.py
+++ b/synapse/rest/client/sync.py
@@ -14,24 +14,14 @@
import itertools
import logging
from collections import defaultdict
-from typing import (
- TYPE_CHECKING,
- Any,
- Callable,
- Dict,
- Iterable,
- List,
- Optional,
- Tuple,
- Union,
-)
+from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
from synapse.api.constants import Membership, PresenceState
from synapse.api.errors import Codes, StoreError, SynapseError
from synapse.api.filtering import FilterCollection
from synapse.api.presence import UserPresenceState
-from synapse.events import EventBase
from synapse.events.utils import (
+ SerializeEventConfig,
format_event_for_client_v2_without_room_id,
format_event_raw,
)
@@ -48,7 +38,6 @@ from synapse.http.server import HttpServer
from synapse.http.servlet import RestServlet, parse_boolean, parse_integer, parse_string
from synapse.http.site import SynapseRequest
from synapse.logging.opentracing import trace
-from synapse.storage.databases.main.relations import BundledAggregations
from synapse.types import JsonDict, StreamToken
from synapse.util import json_decoder
@@ -239,28 +228,31 @@ class SyncRestServlet(RestServlet):
else:
raise Exception("Unknown event format %s" % (filter.event_format,))
+ serialize_options = SerializeEventConfig(
+ event_format=event_formatter,
+ token_id=access_token_id,
+ only_event_fields=filter.event_fields,
+ )
+ stripped_serialize_options = SerializeEventConfig(
+ event_format=event_formatter,
+ token_id=access_token_id,
+ include_stripped_room_state=True,
+ )
+
joined = await self.encode_joined(
- sync_result.joined,
- time_now,
- access_token_id,
- filter.event_fields,
- event_formatter,
+ sync_result.joined, time_now, serialize_options
)
invited = await self.encode_invited(
- sync_result.invited, time_now, access_token_id, event_formatter
+ sync_result.invited, time_now, stripped_serialize_options
)
knocked = await self.encode_knocked(
- sync_result.knocked, time_now, access_token_id, event_formatter
+ sync_result.knocked, time_now, stripped_serialize_options
)
archived = await self.encode_archived(
- sync_result.archived,
- time_now,
- access_token_id,
- filter.event_fields,
- event_formatter,
+ sync_result.archived, time_now, serialize_options
)
logger.debug("building sync response dict")
@@ -339,9 +331,7 @@ class SyncRestServlet(RestServlet):
self,
rooms: List[JoinedSyncResult],
time_now: int,
- token_id: Optional[int],
- event_fields: List[str],
- event_formatter: Callable[[JsonDict], JsonDict],
+ serialize_options: SerializeEventConfig,
) -> JsonDict:
"""
Encode the joined rooms in a sync result
@@ -349,24 +339,14 @@ class SyncRestServlet(RestServlet):
Args:
rooms: list of sync results for rooms this user is joined to
time_now: current time - used as a baseline for age calculations
- token_id: ID of the user's auth token - used for namespacing
- of transaction IDs
- event_fields: List of event fields to include. If empty,
- all fields will be returned.
- event_formatter: function to convert from federation format
- to client format
+ serialize_options: Event serializer options
Returns:
The joined rooms list, in our response format
"""
joined = {}
for room in rooms:
joined[room.room_id] = await self.encode_room(
- room,
- time_now,
- token_id,
- joined=True,
- only_fields=event_fields,
- event_formatter=event_formatter,
+ room, time_now, joined=True, serialize_options=serialize_options
)
return joined
@@ -376,8 +356,7 @@ class SyncRestServlet(RestServlet):
self,
rooms: List[InvitedSyncResult],
time_now: int,
- token_id: Optional[int],
- event_formatter: Callable[[JsonDict], JsonDict],
+ serialize_options: SerializeEventConfig,
) -> JsonDict:
"""
Encode the invited rooms in a sync result
@@ -385,10 +364,7 @@ class SyncRestServlet(RestServlet):
Args:
rooms: list of sync results for rooms this user is invited to
time_now: current time - used as a baseline for age calculations
- token_id: ID of the user's auth token - used for namespacing
- of transaction IDs
- event_formatter: function to convert from federation format
- to client format
+ serialize_options: Event serializer options
Returns:
The invited rooms list, in our response format
@@ -396,11 +372,7 @@ class SyncRestServlet(RestServlet):
invited = {}
for room in rooms:
invite = self._event_serializer.serialize_event(
- room.invite,
- time_now,
- token_id=token_id,
- event_format=event_formatter,
- include_stripped_room_state=True,
+ room.invite, time_now, config=serialize_options
)
unsigned = dict(invite.get("unsigned", {}))
invite["unsigned"] = unsigned
@@ -415,8 +387,7 @@ class SyncRestServlet(RestServlet):
self,
rooms: List[KnockedSyncResult],
time_now: int,
- token_id: Optional[int],
- event_formatter: Callable[[Dict], Dict],
+ serialize_options: SerializeEventConfig,
) -> Dict[str, Dict[str, Any]]:
"""
Encode the rooms we've knocked on in a sync result.
@@ -424,8 +395,7 @@ class SyncRestServlet(RestServlet):
Args:
rooms: list of sync results for rooms this user is knocking on
time_now: current time - used as a baseline for age calculations
- token_id: ID of the user's auth token - used for namespacing of transaction IDs
- event_formatter: function to convert from federation format to client format
+ serialize_options: Event serializer options
Returns:
The list of rooms the user has knocked on, in our response format.
@@ -433,11 +403,7 @@ class SyncRestServlet(RestServlet):
knocked = {}
for room in rooms:
knock = self._event_serializer.serialize_event(
- room.knock,
- time_now,
- token_id=token_id,
- event_format=event_formatter,
- include_stripped_room_state=True,
+ room.knock, time_now, config=serialize_options
)
# Extract the `unsigned` key from the knock event.
@@ -470,9 +436,7 @@ class SyncRestServlet(RestServlet):
self,
rooms: List[ArchivedSyncResult],
time_now: int,
- token_id: Optional[int],
- event_fields: List[str],
- event_formatter: Callable[[JsonDict], JsonDict],
+ serialize_options: SerializeEventConfig,
) -> JsonDict:
"""
Encode the archived rooms in a sync result
@@ -480,23 +444,14 @@ class SyncRestServlet(RestServlet):
Args:
rooms: list of sync results for rooms this user is joined to
time_now: current time - used as a baseline for age calculations
- token_id: ID of the user's auth token - used for namespacing
- of transaction IDs
- event_fields: List of event fields to include. If empty,
- all fields will be returned.
- event_formatter: function to convert from federation format to client format
+ serialize_options: Event serializer options
Returns:
The archived rooms list, in our response format
"""
joined = {}
for room in rooms:
joined[room.room_id] = await self.encode_room(
- room,
- time_now,
- token_id,
- joined=False,
- only_fields=event_fields,
- event_formatter=event_formatter,
+ room, time_now, joined=False, serialize_options=serialize_options
)
return joined
@@ -505,10 +460,8 @@ class SyncRestServlet(RestServlet):
self,
room: Union[JoinedSyncResult, ArchivedSyncResult],
time_now: int,
- token_id: Optional[int],
joined: bool,
- only_fields: Optional[List[str]],
- event_formatter: Callable[[JsonDict], JsonDict],
+ serialize_options: SerializeEventConfig,
) -> JsonDict:
"""
Args:
@@ -524,20 +477,6 @@ class SyncRestServlet(RestServlet):
Returns:
The room, encoded in our response format
"""
-
- def serialize(
- events: Iterable[EventBase],
- aggregations: Optional[Dict[str, BundledAggregations]] = None,
- ) -> List[JsonDict]:
- return self._event_serializer.serialize_events(
- events,
- time_now=time_now,
- bundle_aggregations=aggregations,
- token_id=token_id,
- event_format=event_formatter,
- only_event_fields=only_fields,
- )
-
state_dict = room.state
timeline_events = room.timeline.events
@@ -554,9 +493,14 @@ class SyncRestServlet(RestServlet):
event.room_id,
)
- serialized_state = serialize(state_events)
- serialized_timeline = serialize(
- timeline_events, room.timeline.bundled_aggregations
+ serialized_state = self._event_serializer.serialize_events(
+ state_events, time_now, config=serialize_options
+ )
+ serialized_timeline = self._event_serializer.serialize_events(
+ timeline_events,
+ time_now,
+ config=serialize_options,
+ bundle_aggregations=room.timeline.bundled_aggregations,
)
account_data = room.account_data
|