diff --git a/synapse/rest/client/sync.py b/synapse/rest/client/sync.py index cc1edb2ca3..cfb662c9a2 100644 --- a/synapse/rest/client/sync.py +++ b/synapse/rest/client/sync.py @@ -1142,10 +1142,9 @@ def _serialise_threads( if threads.updates: out["updates"] = { room_id: { - thread_root_id: { - "thread_root": update.thread_root, - "prev_batch": update.prev_batch, - } + thread_root_id: attr.asdict( + update, filter=lambda _attr, v: v is not None + ) for thread_root_id, update in thread_updates.items() } for room_id, thread_updates in threads.updates.items() diff --git a/synapse/types/handlers/sliding_sync.py b/synapse/types/handlers/sliding_sync.py index c9d0f32b1f..01679f4fb0 100644 --- a/synapse/types/handlers/sliding_sync.py +++ b/synapse/types/handlers/sliding_sync.py @@ -412,6 +412,9 @@ class SlidingSyncResult: # TODO: comment prev_batch: Optional[StreamToken] + def __bool__(self) -> bool: + return bool(self.thread_root) or bool(self.prev_batch) + updates: Optional[Mapping[str, Mapping[str, ThreadUpdate]]] prev_batch: Optional[int] diff --git a/tests/rest/client/sliding_sync/test_extension_threads.py b/tests/rest/client/sliding_sync/test_extension_threads.py index ffe47f68d4..4e350ceac5 100644 --- a/tests/rest/client/sliding_sync/test_extension_threads.py +++ b/tests/rest/client/sliding_sync/test_extension_threads.py @@ -153,16 +153,7 @@ class SlidingSyncThreadsExtensionTestCase(SlidingSyncBase): # Assert self.assertEqual( response_body["extensions"][EXT_NAME], - { - "updates": { - room_id: { - thread_root_id: { - "thread_root": None, - "prev_batch": None, - } - } - } - }, + {"updates": {room_id: {thread_root_id: {}}}}, ) def test_threads_incremental_sync(self) -> None: @@ -214,14 +205,5 @@ class SlidingSyncThreadsExtensionTestCase(SlidingSyncBase): # Assert self.assertEqual( response_body["extensions"][EXT_NAME], - { - "updates": { - room_id: { - thread_root_id: { - "thread_root": None, - "prev_batch": None, - } - } - } - }, + {"updates": {room_id: {thread_root_id: {}}}}, )