2525 Sequence ,
2626 Set ,
2727 Union ,
28+ cast ,
2829 overload ,
2930)
3031
4142from synapse .state import v1 , v2
4243from synapse .storage .databases .main .events_worker import EventRedactBehaviour
4344from synapse .storage .roommember import ProfileInfo
44- from synapse .types import Collection , StateMap
45+ from synapse .types import Collection , MutableStateMap , StateMap
4546from synapse .util import Clock
4647from synapse .util .async_helpers import Linearizer
4748from synapse .util .caches .expiringcache import ExpiringCache
@@ -205,7 +206,7 @@ async def get_current_state_ids(
205206
206207 logger .debug ("calling resolve_state_groups from get_current_state_ids" )
207208 ret = await self .resolve_state_groups_for_events (room_id , latest_event_ids )
208- return dict ( ret .state )
209+ return ret .state
209210
210211 async def get_current_users_in_room (
211212 self , room_id : str , latest_event_ids : Optional [List [str ]] = None
@@ -302,7 +303,7 @@ async def compute_event_context(
302303 # if we're given the state before the event, then we use that
303304 state_ids_before_event = {
304305 (s .type , s .state_key ): s .event_id for s in old_state
305- }
306+ } # type: StateMap[str]
306307 state_group_before_event = None
307308 state_group_before_event_prev_group = None
308309 deltas_to_state_group_before_event = None
@@ -315,7 +316,7 @@ async def compute_event_context(
315316 event .room_id , event .prev_event_ids ()
316317 )
317318
318- state_ids_before_event = dict ( entry .state )
319+ state_ids_before_event = entry .state
319320 state_group_before_event = entry .state_group
320321 state_group_before_event_prev_group = entry .prev_group
321322 deltas_to_state_group_before_event = entry .delta_ids
@@ -540,7 +541,7 @@ async def resolve_state_groups(
540541 #
541542 # XXX: is this actually worthwhile, or should we just let
542543 # resolve_events_with_store do it?
543- new_state = {}
544+ new_state = {} # type: MutableStateMap[str]
544545 conflicted_state = False
545546 for st in state_groups_ids .values ():
546547 for key , e_id in st .items ():
@@ -554,13 +555,20 @@ async def resolve_state_groups(
554555 if conflicted_state :
555556 logger .info ("Resolving conflicted state for %r" , room_id )
556557 with Measure (self .clock , "state._resolve_events" ):
557- new_state = await resolve_events_with_store (
558- self .clock ,
559- room_id ,
560- room_version ,
561- list (state_groups_ids .values ()),
562- event_map = event_map ,
563- state_res_store = state_res_store ,
558+ # resolve_events_with_store returns a StateMap, but we can
559+ # treat it as a MutableStateMap as it is above. It isn't
560+ # actually mutated anymore (and is frozen in
561+ # _make_state_cache_entry below).
562+ new_state = cast (
563+ MutableStateMap ,
564+ await resolve_events_with_store (
565+ self .clock ,
566+ room_id ,
567+ room_version ,
568+ list (state_groups_ids .values ()),
569+ event_map = event_map ,
570+ state_res_store = state_res_store ,
571+ ),
564572 )
565573
566574 # if the new state matches any of the input state groups, we can
0 commit comments