Update some comments
Add a couple of type annotations, docstrings, and other comments, in the interest of keeping track of what types I have. Merged from pull request #370.pull/370/head
parent
fc27ca9006
commit
5dea4d37d1
|
@ -29,6 +29,12 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
|
||||
class BaseHandler(object):
|
||||
"""
|
||||
Common base class for the event handlers.
|
||||
|
||||
:type store: synapse.storage.events.StateStore
|
||||
:type state_handler: synapse.state.StateHandler
|
||||
"""
|
||||
|
||||
def __init__(self, hs):
|
||||
self.store = hs.get_datastore()
|
||||
|
|
|
@ -47,9 +47,9 @@ class TimelineBatch(collections.namedtuple("TimelineBatch", [
|
|||
|
||||
|
||||
class JoinedSyncResult(collections.namedtuple("JoinedSyncResult", [
|
||||
"room_id",
|
||||
"timeline",
|
||||
"state",
|
||||
"room_id", # str
|
||||
"timeline", # TimelineBatch
|
||||
"state", # list[FrozenEvent]
|
||||
"ephemeral",
|
||||
"private_user_data",
|
||||
])):
|
||||
|
@ -68,9 +68,9 @@ class JoinedSyncResult(collections.namedtuple("JoinedSyncResult", [
|
|||
|
||||
|
||||
class ArchivedSyncResult(collections.namedtuple("JoinedSyncResult", [
|
||||
"room_id",
|
||||
"timeline",
|
||||
"state",
|
||||
"room_id", # str
|
||||
"timeline", # TimelineBatch
|
||||
"state", # list[FrozenEvent]
|
||||
"private_user_data",
|
||||
])):
|
||||
__slots__ = []
|
||||
|
@ -87,8 +87,8 @@ class ArchivedSyncResult(collections.namedtuple("JoinedSyncResult", [
|
|||
|
||||
|
||||
class InvitedSyncResult(collections.namedtuple("InvitedSyncResult", [
|
||||
"room_id",
|
||||
"invite",
|
||||
"room_id", # str
|
||||
"invite", # FrozenEvent: the invite event
|
||||
])):
|
||||
__slots__ = []
|
||||
|
||||
|
@ -507,6 +507,9 @@ class SyncHandler(BaseHandler):
|
|||
@defer.inlineCallbacks
|
||||
def load_filtered_recents(self, room_id, sync_config, now_token,
|
||||
since_token=None):
|
||||
"""
|
||||
:returns a Deferred TimelineBatch
|
||||
"""
|
||||
limited = True
|
||||
recents = []
|
||||
filtering_factor = 2
|
||||
|
@ -680,8 +683,13 @@ class SyncHandler(BaseHandler):
|
|||
def compute_state_delta(self, since_token, previous_state, current_state):
|
||||
""" Works out the differnce in state between the current state and the
|
||||
state the client got when it last performed a sync.
|
||||
Returns:
|
||||
A list of events.
|
||||
|
||||
:param str since_token: the point we are comparing against
|
||||
:param list[synapse.events.FrozenEvent] previous_state: the state to
|
||||
compare to
|
||||
:param list[synapse.events.FrozenEvent] current_state: the new state
|
||||
|
||||
:returns: A list of events.
|
||||
"""
|
||||
# TODO(mjark) Check if the state events were received by the server
|
||||
# after the previous sync, since we need to include those state
|
||||
|
@ -696,6 +704,12 @@ class SyncHandler(BaseHandler):
|
|||
|
||||
@defer.inlineCallbacks
|
||||
def check_joined_room(self, sync_config, room_id, state_delta):
|
||||
"""
|
||||
Check if the user has just joined the given room. If so, return the
|
||||
full state for the room, instead of the delta since the last sync.
|
||||
|
||||
:returns A deferred Tuple (state_delta, limited)
|
||||
"""
|
||||
joined = False
|
||||
limited = False
|
||||
for event in state_delta:
|
||||
|
|
|
@ -165,6 +165,20 @@ class SyncRestServlet(RestServlet):
|
|||
return {"events": filter.filter_presence(formatted)}
|
||||
|
||||
def encode_joined(self, rooms, filter, time_now, token_id):
|
||||
"""
|
||||
Encode the joined rooms in a sync result
|
||||
|
||||
:param list[synapse.handlers.sync.JoinedSyncResult] rooms: list of sync
|
||||
results for rooms this user is joined to
|
||||
:param FilterCollection filter: filters to apply to the results
|
||||
:param int time_now: current time - used as a baseline for age
|
||||
calculations
|
||||
:param int token_id: ID of the user's auth token - used for namespacing
|
||||
of transaction IDs
|
||||
|
||||
:return: the joined rooms list, in our response format
|
||||
:rtype: dict[str, dict[str, object]]
|
||||
"""
|
||||
joined = {}
|
||||
for room in rooms:
|
||||
joined[room.room_id] = self.encode_room(
|
||||
|
@ -174,6 +188,20 @@ class SyncRestServlet(RestServlet):
|
|||
return joined
|
||||
|
||||
def encode_invited(self, rooms, filter, time_now, token_id):
|
||||
"""
|
||||
Encode the invited rooms in a sync result
|
||||
|
||||
:param list[synapse.handlers.sync.InvitedSyncResult] rooms: list of
|
||||
sync results for rooms this user is joined to
|
||||
:param FilterCollection filter: filters to apply to the results
|
||||
:param int time_now: current time - used as a baseline for age
|
||||
calculations
|
||||
:param int token_id: ID of the user's auth token - used for namespacing
|
||||
of transaction IDs
|
||||
|
||||
:return: the invited rooms list, in our response format
|
||||
:rtype: dict[str, dict[str, object]]
|
||||
"""
|
||||
invited = {}
|
||||
for room in rooms:
|
||||
invite = serialize_event(
|
||||
|
@ -189,6 +217,20 @@ class SyncRestServlet(RestServlet):
|
|||
return invited
|
||||
|
||||
def encode_archived(self, rooms, filter, time_now, token_id):
|
||||
"""
|
||||
Encode the archived rooms in a sync result
|
||||
|
||||
:param list[synapse.handlers.sync.ArchivedSyncResult] rooms: list of
|
||||
sync results for rooms this user is joined to
|
||||
:param FilterCollection filter: filters to apply to the results
|
||||
:param int time_now: current time - used as a baseline for age
|
||||
calculations
|
||||
:param int token_id: ID of the user's auth token - used for namespacing
|
||||
of transaction IDs
|
||||
|
||||
:return: the invited rooms list, in our response format
|
||||
:rtype: dict[str, dict[str, object]]
|
||||
"""
|
||||
joined = {}
|
||||
for room in rooms:
|
||||
joined[room.room_id] = self.encode_room(
|
||||
|
@ -199,6 +241,20 @@ class SyncRestServlet(RestServlet):
|
|||
|
||||
@staticmethod
|
||||
def encode_room(room, filter, time_now, token_id, joined=True):
|
||||
"""
|
||||
:param JoinedSyncResult|ArchivedSyncResult room: sync result for a
|
||||
single room
|
||||
:param FilterCollection filter: filters to apply to the results
|
||||
:param int time_now: current time - used as a baseline for age
|
||||
calculations
|
||||
:param int token_id: ID of the user's auth token - used for namespacing
|
||||
of transaction IDs
|
||||
:param joined: True if the user is joined to this room - will mean
|
||||
we handle ephemeral events
|
||||
|
||||
:return: the room, encoded in our response format
|
||||
:rtype: dict[str, object]
|
||||
"""
|
||||
event_map = {}
|
||||
state_events = filter.filter_room_state(room.state)
|
||||
state_event_ids = []
|
||||
|
|
|
@ -71,7 +71,7 @@ class StateHandler(object):
|
|||
|
||||
@defer.inlineCallbacks
|
||||
def get_current_state(self, room_id, event_type=None, state_key=""):
|
||||
""" Returns the current state for the room as a list. This is done by
|
||||
""" Retrieves the current state for the room. This is done by
|
||||
calling `get_latest_events_in_room` to get the leading edges of the
|
||||
event graph and then resolving any of the state conflicts.
|
||||
|
||||
|
@ -80,6 +80,8 @@ class StateHandler(object):
|
|||
|
||||
If `event_type` is specified, then the method returns only the one
|
||||
event (or None) with that `event_type` and `state_key`.
|
||||
|
||||
:returns map from (type, state_key) to event
|
||||
"""
|
||||
event_ids = yield self.store.get_latest_event_ids_in_room(room_id)
|
||||
|
||||
|
@ -177,9 +179,10 @@ class StateHandler(object):
|
|||
""" Given a list of event_ids this method fetches the state at each
|
||||
event, resolves conflicts between them and returns them.
|
||||
|
||||
Return format is a tuple: (`state_group`, `state_events`), where the
|
||||
first is the name of a state group if one and only one is involved,
|
||||
otherwise `None`.
|
||||
:returns a Deferred tuple of (`state_group`, `state`, `prev_state`).
|
||||
`state_group` is the name of a state group if one and only one is
|
||||
involved. `state` is a map from (type, state_key) to event, and
|
||||
`prev_state` is a list of event ids.
|
||||
"""
|
||||
logger.debug("resolve_state_groups event_ids %s", event_ids)
|
||||
|
||||
|
@ -255,6 +258,11 @@ class StateHandler(object):
|
|||
return self._resolve_events(state_sets)
|
||||
|
||||
def _resolve_events(self, state_sets, event_type=None, state_key=""):
|
||||
"""
|
||||
:returns a tuple (new_state, prev_states). new_state is a map
|
||||
from (type, state_key) to event. prev_states is a list of event_ids.
|
||||
:rtype: (dict[(str, str), synapse.events.FrozenEvent], list[str])
|
||||
"""
|
||||
state = {}
|
||||
for st in state_sets:
|
||||
for e in st:
|
||||
|
|
Loading…
Reference in New Issue