summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2016-06-23 17:26:27 +0100
committerErik Johnston <erik@matrix.org>2016-06-23 17:26:27 +0100
commita7e6ad9f3ecde82894e214a7530fd65a32ad3ecf (patch)
tree9d4f30b8e1d81c3148cb46435645acbd83c627c2
parentMove stuff into separate function (diff)
downloadsynapse-a7e6ad9f3ecde82894e214a7530fd65a32ad3ecf.tar.xz
Use SyncExtras
-rw-r--r--synapse/handlers/sync.py25
-rw-r--r--synapse/rest/client/v2_alpha/sync.py11
2 files changed, 21 insertions, 15 deletions
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index 00a009fdf5..06ffb9040c 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -72,10 +72,12 @@ SYNC_PAGINATION_VALID_ORDERS = (SYNC_PAGINATION_ORDER_TS,)
 
 
 SyncExtras = collections.namedtuple("SyncExtras", [
-    "paginate",
-    "rooms",
+    "paginate",  # dict with "limit" key
+    "peek",  # dict of room_id -> dict
 ])
 
+DEFAULT_SYNC_EXTRAS = SyncExtras(paginate={}, peek={})
+
 
 class TimelineBatch(collections.namedtuple("TimelineBatch", [
     "prev_batch",
@@ -195,7 +197,7 @@ class SyncHandler(object):
         self.response_cache = ResponseCache()
 
     def wait_for_sync_for_user(self, sync_config, batch_token=None, timeout=0,
-                               full_state=False, extras=None):
+                               full_state=False, extras=DEFAULT_SYNC_EXTRAS):
         """Get the sync for a client if we have new data for it now. Otherwise
         wait for new data to arrive on the server. If the timeout expires, then
         return an empty sync result.
@@ -214,7 +216,7 @@ class SyncHandler(object):
 
     @defer.inlineCallbacks
     def _wait_for_sync_for_user(self, sync_config, batch_token, timeout,
-                                full_state, extras=None):
+                                full_state, extras=DEFAULT_SYNC_EXTRAS):
         context = LoggingContext.current_context()
         if context:
             if batch_token is None:
@@ -539,13 +541,14 @@ class SyncHandler(object):
 
     @defer.inlineCallbacks
     def generate_sync_result(self, sync_config, batch_token=None, full_state=False,
-                             extras=None):
+                             extras=DEFAULT_SYNC_EXTRAS):
         """Generates a sync result.
 
         Args:
             sync_config (SyncConfig)
             since_token (StreamToken)
             full_state (bool)
+            extras (SyncExtras)
 
         Returns:
             Deferred(SyncResult)
@@ -790,7 +793,7 @@ class SyncHandler(object):
         Args:
             sync_result_builder (SyncResultBuilder)
             room_entries (list(RoomSyncResultBuilder))
-            extras (dict)
+            extras (SyncExtras)
         """
         user_id = sync_result_builder.sync_config.user.to_string()
         sync_config = sync_result_builder.sync_config
@@ -812,8 +815,6 @@ class SyncHandler(object):
             old_pagination_value = 0
             include_all_tags = False
 
-        include_map = extras.get("peek", {}) if extras else {}
-
         if sync_result_builder.pagination_state:
             missing_state = yield self._get_rooms_that_need_full_state(
                 room_ids=[r.room_id for r in room_entries],
@@ -848,8 +849,8 @@ class SyncHandler(object):
                                 r.always_include = True
                                 continue
 
-                        if r.room_id in include_map:
-                            since = include_map[r.room_id].get("since", None)
+                        if r.room_id in extras.peek:
+                            since = extras.peek[r.room_id].get("since", None)
                             if since:
                                 tok = SyncNextBatchToken.from_string(since)
                                 r.since_token = tok.stream_token
@@ -867,7 +868,7 @@ class SyncHandler(object):
                 if r.room_id in all_tags:
                     r.always_include = True
 
-        for room_id in set(include_map.keys()) - {r.room_id for r in room_entries}:
+        for room_id in set(extras.peek.keys()) - {r.room_id for r in room_entries}:
             sync_result_builder.errors.append(ErrorSyncResult(
                 room_id=room_id,
                 errcode=Codes.CANNOT_PEEK,
@@ -878,7 +879,7 @@ class SyncHandler(object):
             room_ids = [r.room_id for r in room_entries]
             pagination_limit = pagination_config.limit
 
-            extra_limit = extras.get("paginate", {}).get("limit", 0) if extras else 0
+            extra_limit = extras.paginate.get("limit", 0)
 
             room_map = yield self._get_room_timestamps_at_token(
                 room_ids, sync_result_builder.now_token, sync_config,
diff --git a/synapse/rest/client/v2_alpha/sync.py b/synapse/rest/client/v2_alpha/sync.py
index 683bba4cf6..61d013eb57 100644
--- a/synapse/rest/client/v2_alpha/sync.py
+++ b/synapse/rest/client/v2_alpha/sync.py
@@ -20,7 +20,8 @@ from synapse.http.servlet import (
     parse_json_object_from_request,
 )
 from synapse.handlers.sync import (
-    SyncConfig, SyncPaginationConfig, SYNC_PAGINATION_TAGS_IGNORE,
+    SyncConfig, SyncPaginationConfig, SYNC_PAGINATION_TAGS_IGNORE, SyncExtras,
+    DEFAULT_SYNC_EXTRAS,
 )
 from synapse.types import SyncNextBatchToken
 from synapse.events.utils import (
@@ -100,7 +101,11 @@ class SyncRestServlet(RestServlet):
 
         since = body.get("since", None)
 
-        extras = body.get("extras", None)
+        extras = body.get("extras", {})
+        extras = SyncExtras(
+            paginate=extras.get("paginate", {}),
+            peek=extras.get("peek", {}),
+        )
 
         if "from" in body:
             # /events used to use 'from', but /sync uses 'since'.
@@ -245,7 +250,7 @@ class SyncRestServlet(RestServlet):
 
     @defer.inlineCallbacks
     def _handle_sync(self, requester, sync_config, batch_token, set_presence,
-                     full_state, timeout, extras=None):
+                     full_state, timeout, extras=DEFAULT_SYNC_EXTRAS):
         affect_presence = set_presence != PresenceState.OFFLINE
 
         user = sync_config.user