Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 2d06a39

Browse files
committed
reduce duplicated code
1 parent 172b651 commit 2d06a39

File tree

2 files changed

+33
-105
lines changed

2 files changed

+33
-105
lines changed

synapse/handlers/message.py

Lines changed: 29 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -554,98 +554,6 @@ def __init__(self, hs: "HomeServer"):
554554
expiry_ms=30 * 60 * 1000,
555555
)
556556

557-
async def create_event_for_batch(
558-
self,
559-
requester: Requester,
560-
event_dict: dict,
561-
prev_event_ids: List[str],
562-
txn_id: Optional[str] = None,
563-
auth_event_ids: Optional[List[str]] = None,
564-
require_consent: bool = True,
565-
outlier: bool = False,
566-
historical: bool = False,
567-
depth: Optional[int] = None,
568-
) -> EventBase:
569-
"""
570-
Create an event for batch persisting. Notably skips computing event context.
571-
"""
572-
await self.auth_blocking.check_auth_blocking(requester=requester)
573-
574-
if event_dict["type"] == EventTypes.Create and event_dict["state_key"] == "":
575-
room_version_id = event_dict["content"]["room_version"]
576-
maybe_room_version_obj = KNOWN_ROOM_VERSIONS.get(room_version_id)
577-
if not maybe_room_version_obj:
578-
# this can happen if support is withdrawn for a room version
579-
raise UnsupportedRoomVersionError(room_version_id)
580-
room_version_obj = maybe_room_version_obj
581-
else:
582-
try:
583-
room_version_obj = await self.store.get_room_version(
584-
event_dict["room_id"]
585-
)
586-
except NotFoundError:
587-
raise AuthError(403, "Unknown room")
588-
589-
builder = self.event_builder_factory.for_room_version(
590-
room_version_obj, event_dict
591-
)
592-
593-
self.validator.validate_builder(builder)
594-
595-
if builder.type == EventTypes.Member:
596-
membership = builder.content.get("membership", None)
597-
target = UserID.from_string(builder.state_key)
598-
599-
if membership in self.membership_types_to_include_profile_data_in:
600-
# If event doesn't include a display name, add one.
601-
profile = self.profile_handler
602-
content = builder.content
603-
604-
try:
605-
if "displayname" not in content:
606-
displayname = await profile.get_displayname(target)
607-
if displayname is not None:
608-
content["displayname"] = displayname
609-
if "avatar_url" not in content:
610-
avatar_url = await profile.get_avatar_url(target)
611-
if avatar_url is not None:
612-
content["avatar_url"] = avatar_url
613-
except Exception as e:
614-
logger.info(
615-
"Failed to get profile information for %r: %s", target, e
616-
)
617-
618-
is_exempt = await self._is_exempt_from_privacy_policy(builder, requester)
619-
if require_consent and not is_exempt:
620-
await self.assert_accepted_privacy_policy(requester)
621-
622-
if requester.access_token_id is not None:
623-
builder.internal_metadata.token_id = requester.access_token_id
624-
625-
if txn_id is not None:
626-
builder.internal_metadata.txn_id = txn_id
627-
628-
builder.internal_metadata.outlier = outlier
629-
630-
builder.internal_metadata.historical = historical
631-
632-
event = await builder.build(
633-
prev_event_ids=prev_event_ids,
634-
auth_event_ids=auth_event_ids,
635-
depth=depth,
636-
)
637-
638-
# Pass on the outlier property from the builder to the event
639-
# after it is created
640-
if builder.internal_metadata.outlier:
641-
event.internal_metadata.outlier = True
642-
643-
self.validator.validate_new(event, self.config)
644-
await self._validate_event_relation(event)
645-
logger.debug("Created event %s", event.event_id)
646-
647-
return event
648-
649557
async def create_event(
650558
self,
651559
requester: Requester,
@@ -659,6 +567,7 @@ async def create_event(
659567
outlier: bool = False,
660568
historical: bool = False,
661569
depth: Optional[int] = None,
570+
for_batch: bool = False,
662571
) -> Tuple[EventBase, EventContext]:
663572
"""
664573
Given a dict from a client, create a new event.
@@ -710,6 +619,8 @@ async def create_event(
710619
depth: Override the depth used to order the event in the DAG.
711620
Should normally be set to None, which will cause the depth to be calculated
712621
based on the prev_events.
622+
for_batch: Whether this event is being created for batch sending. Notably events
623+
created for batch sending do not have their event context computed
713624
714625
Raises:
715626
ResourceLimitError if server is blocked to some resource being
@@ -777,15 +688,27 @@ async def create_event(
777688

778689
builder.internal_metadata.historical = historical
779690

780-
event, context = await self.create_new_client_event(
781-
builder=builder,
782-
requester=requester,
783-
allow_no_prev_events=allow_no_prev_events,
784-
prev_event_ids=prev_event_ids,
785-
auth_event_ids=auth_event_ids,
786-
state_event_ids=state_event_ids,
787-
depth=depth,
788-
)
691+
if for_batch:
692+
event = await builder.build(
693+
prev_event_ids=prev_event_ids,
694+
auth_event_ids=auth_event_ids,
695+
depth=depth,
696+
)
697+
# Pass on the outlier property from the builder to the event
698+
# after it is created
699+
if builder.internal_metadata.outlier:
700+
event.internal_metadata.outlier = True
701+
702+
else:
703+
event, context = await self.create_new_client_event(
704+
builder=builder,
705+
requester=requester,
706+
allow_no_prev_events=allow_no_prev_events,
707+
prev_event_ids=prev_event_ids,
708+
auth_event_ids=auth_event_ids,
709+
state_event_ids=state_event_ids,
710+
depth=depth,
711+
)
789712

790713
# In an ideal world we wouldn't need the second part of this condition. However,
791714
# this behaviour isn't spec'd yet, meaning we should be able to deactivate this
@@ -824,7 +747,11 @@ async def create_event(
824747
)
825748

826749
self.validator.validate_new(event, self.config)
827-
return event, context
750+
751+
if for_batch:
752+
return event
753+
else:
754+
return event, context
828755

829756
async def _is_exempt_from_privacy_policy(
830757
self, builder: EventBuilder, requester: Requester

synapse/handlers/room.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,12 +1067,13 @@ async def create_event(
10671067

10681068
event_dict = create_event_dict(etype, content, **kwargs)
10691069

1070-
event = await self.event_creation_handler.create_event_for_batch(
1070+
event = await self.event_creation_handler.create_event(
10711071
creator,
10721072
event_dict,
1073-
prev_event,
1074-
depth=depth,
1073+
prev_event_ids=prev_event,
10751074
auth_event_ids=auth_event_ids,
1075+
depth=depth,
1076+
for_batch=True,
10761077
)
10771078
depth += 1
10781079
prev_event = [event.event_id]

0 commit comments

Comments
 (0)