summary refs log tree commit diff
path: root/synapse/types.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2016-05-24 15:02:05 +0100
committerErik Johnston <erik@matrix.org>2016-05-24 16:28:51 +0100
commit4902770e3222c80828a3d8027324687ffd631fb5 (patch)
treef6db4365b4a32a195e579c013a34bd013e7799da /synapse/types.py
parentAdd POST /sync API endpoint (diff)
parentChange short circuit path (diff)
downloadsynapse-4902770e3222c80828a3d8027324687ffd631fb5.tar.xz
Merge branch 'erikj/sync_refactor' of github.com:matrix-org/synapse into erikj/paginate_sync
Diffstat (limited to 'synapse/types.py')
-rw-r--r--synapse/types.py33
1 files changed, 31 insertions, 2 deletions
diff --git a/synapse/types.py b/synapse/types.py

index 160bd45fe4..0c9efdfd00 100644 --- a/synapse/types.py +++ b/synapse/types.py
@@ -125,20 +125,49 @@ class SyncNextBatchToken( def from_string(cls, string): try: d = json.loads(decode_base64(string)) - return cls(StreamToken.from_string(d["t"]), d.get("pa", {})) + pa = d.get("pa", None) + if pa: + pa = SyncPaginationConfig.from_dict(pa) + return cls( + stream_token=StreamToken.from_string(d["t"]), + pagination_config=pa, + ) except: raise SynapseError(400, "Invalid Token") def to_string(self): return encode_base64(json.dumps({ "t": self.stream_token.to_string(), - "pa": self.pagination_config, + "pa": self.pagination_config.to_dict() if self.pagination_config else None, })) def replace(self, **kwargs): return self._replace(**kwargs) +class SyncPaginationConfig( + namedtuple("SyncPaginationConfig", ( + "order", + "value", + )) +): + @classmethod + def from_dict(cls, d): + try: + return cls(d["o"], d["v"]) + except: + raise SynapseError(400, "Invalid Token") + + def to_dict(self): + return { + "o": self.order, + "v": self.value, + } + + def replace(self, **kwargs): + return self._replace(**kwargs) + + class StreamToken( namedtuple("Token", ( "room_key",