Correctly handle case of rejected events in state res

This commit is contained in:
Erik Johnston 2017-01-17 14:18:53 +00:00
parent 633f97151c
commit ce59a2faad

View File

@ -507,21 +507,27 @@ def _create_auth_events_from_maps(unconflicted_state, conflicted_state, state_ma
auth_events = {} auth_events = {}
for event_ids in conflicted_state.itervalues(): for event_ids in conflicted_state.itervalues():
for event_id in event_ids: for event_id in event_ids:
keys = event_auth.auth_types_for_event(state_map[event_id]) if event_id in state_map:
for key in keys: keys = event_auth.auth_types_for_event(state_map[event_id])
if key not in auth_events: for key in keys:
event_id = unconflicted_state.get(key, None) if key not in auth_events:
if event_id: event_id = unconflicted_state.get(key, None)
auth_events[key] = event_id if event_id:
auth_events[key] = event_id
return auth_events return auth_events
def _resolve_with_state(unconflicted_state, conflicted_state, auth_events, def _resolve_with_state(unconflicted_state, conflicted_state, auth_events,
state_map): state_map):
conflicted_state = { new_conflicted_state = {}
key: [state_map[ev_id] for ev_id in event_ids if ev_id in state_map] for key, event_ids in conflicted_state.iteritems():
for key, event_ids in conflicted_state.items() events = [state_map[ev_id] for ev_id in event_ids if ev_id in state_map]
} if len(events) > 1:
new_conflicted_state[key] = events
elif len(events) == 1:
unconflicted_state[key] = events[0].event_id
conflicted_state = new_conflicted_state
auth_events = { auth_events = {
key: state_map[ev_id] key: state_map[ev_id]