Split out /batch_send meta events to their own fields (MSC2716) (#10777)

This commit is contained in:
Eric Eastwood 2021-09-15 03:30:58 -05:00 committed by GitHub
parent 8eb7cb2e0d
commit 1c555527b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 11 deletions

1
changelog.d/10777.misc Normal file
View File

@ -0,0 +1 @@
Split out [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) meta events to their own fields in the `/batch_send` response.

View File

@ -14,6 +14,7 @@
import logging import logging
import re import re
from http import HTTPStatus
from typing import TYPE_CHECKING, Awaitable, List, Tuple from typing import TYPE_CHECKING, Awaitable, List, Tuple
from twisted.web.server import Request from twisted.web.server import Request
@ -179,7 +180,7 @@ class RoomBatchSendEventRestServlet(RestServlet):
if not requester.app_service: if not requester.app_service:
raise AuthError( raise AuthError(
403, HTTPStatus.FORBIDDEN,
"Only application services can use the /batchsend endpoint", "Only application services can use the /batchsend endpoint",
) )
@ -192,7 +193,7 @@ class RoomBatchSendEventRestServlet(RestServlet):
if prev_events_from_query is None: if prev_events_from_query is None:
raise SynapseError( raise SynapseError(
400, HTTPStatus.BAD_REQUEST,
"prev_event query parameter is required when inserting historical messages back in time", "prev_event query parameter is required when inserting historical messages back in time",
errcode=Codes.MISSING_PARAM, errcode=Codes.MISSING_PARAM,
) )
@ -213,7 +214,7 @@ class RoomBatchSendEventRestServlet(RestServlet):
prev_state_ids = list(prev_state_map.values()) prev_state_ids = list(prev_state_map.values())
auth_event_ids = prev_state_ids auth_event_ids = prev_state_ids
state_events_at_start = [] state_event_ids_at_start = []
for state_event in body["state_events_at_start"]: for state_event in body["state_events_at_start"]:
assert_params_in_dict( assert_params_in_dict(
state_event, ["type", "origin_server_ts", "content", "sender"] state_event, ["type", "origin_server_ts", "content", "sender"]
@ -279,7 +280,7 @@ class RoomBatchSendEventRestServlet(RestServlet):
) )
event_id = event.event_id event_id = event.event_id
state_events_at_start.append(event_id) state_event_ids_at_start.append(event_id)
auth_event_ids.append(event_id) auth_event_ids.append(event_id)
events_to_create = body["events"] events_to_create = body["events"]
@ -424,20 +425,26 @@ class RoomBatchSendEventRestServlet(RestServlet):
context=context, context=context,
) )
# Add the base_insertion_event to the bottom of the list we return insertion_event_id = event_ids[0]
if base_insertion_event is not None: chunk_event_id = event_ids[-1]
event_ids.append(base_insertion_event.event_id) historical_event_ids = event_ids[1:-1]
return 200, { response_dict = {
"state_events": state_events_at_start, "state_event_ids": state_event_ids_at_start,
"events": event_ids, "event_ids": historical_event_ids,
"next_chunk_id": insertion_event["content"][ "next_chunk_id": insertion_event["content"][
EventContentFields.MSC2716_NEXT_CHUNK_ID EventContentFields.MSC2716_NEXT_CHUNK_ID
], ],
"insertion_event_id": insertion_event_id,
"chunk_event_id": chunk_event_id,
} }
if base_insertion_event is not None:
response_dict["base_insertion_event_id"] = base_insertion_event.event_id
return HTTPStatus.OK, response_dict
def on_GET(self, request: Request, room_id: str) -> Tuple[int, str]: def on_GET(self, request: Request, room_id: str) -> Tuple[int, str]:
return 501, "Not implemented" return HTTPStatus.NOT_IMPLEMENTED, "Not implemented"
def on_PUT( def on_PUT(
self, request: SynapseRequest, room_id: str self, request: SynapseRequest, room_id: str