Do not return unspecced original_event field when using the stable /relations endpoint. (#14025)
Keep the old behavior (of including the original_event field) for any requests to the /unstable version of the endpoint, but do not include the field when the /v1 version is used. This should avoid new clients from depending on this field, but will not help with current dependencies.pull/13980/head
parent
d42541733d
commit
b706111b78
|
@ -0,0 +1 @@
|
||||||
|
Do not return an unspecified `original_event` field when using the stable `/relations` endpoint. Introduced in Synapse v1.57.0.
|
|
@ -78,6 +78,7 @@ class RelationsHandler:
|
||||||
direction: str = "b",
|
direction: str = "b",
|
||||||
from_token: Optional[StreamToken] = None,
|
from_token: Optional[StreamToken] = None,
|
||||||
to_token: Optional[StreamToken] = None,
|
to_token: Optional[StreamToken] = None,
|
||||||
|
include_original_event: bool = False,
|
||||||
) -> JsonDict:
|
) -> JsonDict:
|
||||||
"""Get related events of a event, ordered by topological ordering.
|
"""Get related events of a event, ordered by topological ordering.
|
||||||
|
|
||||||
|
@ -94,6 +95,7 @@ class RelationsHandler:
|
||||||
oldest first (`"f"`).
|
oldest first (`"f"`).
|
||||||
from_token: Fetch rows from the given token, or from the start if None.
|
from_token: Fetch rows from the given token, or from the start if None.
|
||||||
to_token: Fetch rows up to the given token, or up to the end if None.
|
to_token: Fetch rows up to the given token, or up to the end if None.
|
||||||
|
include_original_event: Whether to include the parent event.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
The pagination chunk.
|
The pagination chunk.
|
||||||
|
@ -138,25 +140,24 @@ class RelationsHandler:
|
||||||
is_peeking=(member_event_id is None),
|
is_peeking=(member_event_id is None),
|
||||||
)
|
)
|
||||||
|
|
||||||
now = self._clock.time_msec()
|
|
||||||
# Do not bundle aggregations when retrieving the original event because
|
|
||||||
# we want the content before relations are applied to it.
|
|
||||||
original_event = self._event_serializer.serialize_event(
|
|
||||||
event, now, bundle_aggregations=None
|
|
||||||
)
|
|
||||||
# The relations returned for the requested event do include their
|
# The relations returned for the requested event do include their
|
||||||
# bundled aggregations.
|
# bundled aggregations.
|
||||||
aggregations = await self.get_bundled_aggregations(
|
aggregations = await self.get_bundled_aggregations(
|
||||||
events, requester.user.to_string()
|
events, requester.user.to_string()
|
||||||
)
|
)
|
||||||
serialized_events = self._event_serializer.serialize_events(
|
|
||||||
events, now, bundle_aggregations=aggregations
|
|
||||||
)
|
|
||||||
|
|
||||||
return_value = {
|
now = self._clock.time_msec()
|
||||||
"chunk": serialized_events,
|
return_value: JsonDict = {
|
||||||
"original_event": original_event,
|
"chunk": self._event_serializer.serialize_events(
|
||||||
|
events, now, bundle_aggregations=aggregations
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
if include_original_event:
|
||||||
|
# Do not bundle aggregations when retrieving the original event because
|
||||||
|
# we want the content before relations are applied to it.
|
||||||
|
return_value["original_event"] = self._event_serializer.serialize_event(
|
||||||
|
event, now, bundle_aggregations=None
|
||||||
|
)
|
||||||
|
|
||||||
if next_token:
|
if next_token:
|
||||||
return_value["next_batch"] = await next_token.to_string(self._main_store)
|
return_value["next_batch"] = await next_token.to_string(self._main_store)
|
||||||
|
|
|
@ -82,6 +82,11 @@ class RelationPaginationServlet(RestServlet):
|
||||||
if to_token_str:
|
if to_token_str:
|
||||||
to_token = await StreamToken.from_string(self.store, to_token_str)
|
to_token = await StreamToken.from_string(self.store, to_token_str)
|
||||||
|
|
||||||
|
# The unstable version of this API returns an extra field for client
|
||||||
|
# compatibility, see https://github.com/matrix-org/synapse/issues/12930.
|
||||||
|
assert request.path is not None
|
||||||
|
include_original_event = request.path.startswith(b"/_matrix/client/unstable/")
|
||||||
|
|
||||||
result = await self._relations_handler.get_relations(
|
result = await self._relations_handler.get_relations(
|
||||||
requester=requester,
|
requester=requester,
|
||||||
event_id=parent_id,
|
event_id=parent_id,
|
||||||
|
@ -92,6 +97,7 @@ class RelationPaginationServlet(RestServlet):
|
||||||
direction=direction,
|
direction=direction,
|
||||||
from_token=from_token,
|
from_token=from_token,
|
||||||
to_token=to_token,
|
to_token=to_token,
|
||||||
|
include_original_event=include_original_event,
|
||||||
)
|
)
|
||||||
|
|
||||||
return 200, result
|
return 200, result
|
||||||
|
|
|
@ -654,6 +654,14 @@ class RelationsTestCase(BaseRelationsTestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
# We also expect to get the original event (the id of which is self.parent_id)
|
# We also expect to get the original event (the id of which is self.parent_id)
|
||||||
|
# when requesting the unstable endpoint.
|
||||||
|
self.assertNotIn("original_event", channel.json_body)
|
||||||
|
channel = self.make_request(
|
||||||
|
"GET",
|
||||||
|
f"/_matrix/client/unstable/rooms/{self.room}/relations/{self.parent_id}?limit=1",
|
||||||
|
access_token=self.user_token,
|
||||||
|
)
|
||||||
|
self.assertEqual(200, channel.code, channel.json_body)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
channel.json_body["original_event"]["event_id"], self.parent_id
|
channel.json_body["original_event"]["event_id"], self.parent_id
|
||||||
)
|
)
|
||||||
|
@ -755,11 +763,6 @@ class RelationPaginationTestCase(BaseRelationsTestCase):
|
||||||
channel.json_body["chunk"][0],
|
channel.json_body["chunk"][0],
|
||||||
)
|
)
|
||||||
|
|
||||||
# We also expect to get the original event (the id of which is self.parent_id)
|
|
||||||
self.assertEqual(
|
|
||||||
channel.json_body["original_event"]["event_id"], self.parent_id
|
|
||||||
)
|
|
||||||
|
|
||||||
# Make sure next_batch has something in it that looks like it could be a
|
# Make sure next_batch has something in it that looks like it could be a
|
||||||
# valid token.
|
# valid token.
|
||||||
self.assertIsInstance(
|
self.assertIsInstance(
|
||||||
|
|
Loading…
Reference in New Issue