@@ -554,98 +554,6 @@ def __init__(self, hs: "HomeServer"):
554
554
expiry_ms = 30 * 60 * 1000 ,
555
555
)
556
556
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
-
649
557
async def create_event (
650
558
self ,
651
559
requester : Requester ,
@@ -659,6 +567,7 @@ async def create_event(
659
567
outlier : bool = False ,
660
568
historical : bool = False ,
661
569
depth : Optional [int ] = None ,
570
+ for_batch : bool = False ,
662
571
) -> Tuple [EventBase , EventContext ]:
663
572
"""
664
573
Given a dict from a client, create a new event.
@@ -710,6 +619,8 @@ async def create_event(
710
619
depth: Override the depth used to order the event in the DAG.
711
620
Should normally be set to None, which will cause the depth to be calculated
712
621
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
713
624
714
625
Raises:
715
626
ResourceLimitError if server is blocked to some resource being
@@ -777,15 +688,27 @@ async def create_event(
777
688
778
689
builder .internal_metadata .historical = historical
779
690
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
+ )
789
712
790
713
# In an ideal world we wouldn't need the second part of this condition. However,
791
714
# this behaviour isn't spec'd yet, meaning we should be able to deactivate this
@@ -824,7 +747,11 @@ async def create_event(
824
747
)
825
748
826
749
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
828
755
829
756
async def _is_exempt_from_privacy_policy (
830
757
self , builder : EventBuilder , requester : Requester
0 commit comments