Skip to content
Snippets Groups Projects
Unverified Commit eba431c5 authored by Erik Johnston's avatar Erik Johnston Committed by GitHub
Browse files

Revert "Leave out optional keys from /sync (#9919)" (#9940)

This reverts commit e9eb3549.
parent a8803e2b
No related branches found
No related tags found
No related merge requests found
Omit empty fields from the `/sync` response. Contributed by @deepbluev7.
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
import itertools import itertools
import logging import logging
from collections import defaultdict
from typing import TYPE_CHECKING, Tuple from typing import TYPE_CHECKING, Tuple
from synapse.api.constants import PresenceState from synapse.api.constants import PresenceState
...@@ -230,49 +229,24 @@ class SyncRestServlet(RestServlet): ...@@ -230,49 +229,24 @@ class SyncRestServlet(RestServlet):
) )
logger.debug("building sync response dict") logger.debug("building sync response dict")
return {
response: dict = defaultdict(dict) "account_data": {"events": sync_result.account_data},
response["next_batch"] = await sync_result.next_batch.to_string(self.store) "to_device": {"events": sync_result.to_device},
"device_lists": {
if sync_result.account_data: "changed": list(sync_result.device_lists.changed),
response["account_data"] = {"events": sync_result.account_data} "left": list(sync_result.device_lists.left),
if sync_result.presence: },
response["presence"] = SyncRestServlet.encode_presence( "presence": SyncRestServlet.encode_presence(sync_result.presence, time_now),
sync_result.presence, time_now "rooms": {"join": joined, "invite": invited, "leave": archived},
) "groups": {
"join": sync_result.groups.join,
if sync_result.to_device: "invite": sync_result.groups.invite,
response["to_device"] = {"events": sync_result.to_device} "leave": sync_result.groups.leave,
},
if sync_result.device_lists.changed: "device_one_time_keys_count": sync_result.device_one_time_keys_count,
response["device_lists"]["changed"] = list(sync_result.device_lists.changed) "org.matrix.msc2732.device_unused_fallback_key_types": sync_result.device_unused_fallback_key_types,
if sync_result.device_lists.left: "next_batch": await sync_result.next_batch.to_string(self.store),
response["device_lists"]["left"] = list(sync_result.device_lists.left) }
if sync_result.device_one_time_keys_count:
response[
"device_one_time_keys_count"
] = sync_result.device_one_time_keys_count
if sync_result.device_unused_fallback_key_types:
response[
"org.matrix.msc2732.device_unused_fallback_key_types"
] = sync_result.device_unused_fallback_key_types
if joined:
response["rooms"]["join"] = joined
if invited:
response["rooms"]["invite"] = invited
if archived:
response["rooms"]["leave"] = archived
if sync_result.groups.join:
response["groups"]["join"] = sync_result.groups.join
if sync_result.groups.invite:
response["groups"]["invite"] = sync_result.groups.invite
if sync_result.groups.leave:
response["groups"]["leave"] = sync_result.groups.leave
return response
@staticmethod @staticmethod
def encode_presence(events, time_now): def encode_presence(events, time_now):
......
...@@ -37,7 +37,35 @@ class FilterTestCase(unittest.HomeserverTestCase): ...@@ -37,7 +37,35 @@ class FilterTestCase(unittest.HomeserverTestCase):
channel = self.make_request("GET", "/sync") channel = self.make_request("GET", "/sync")
self.assertEqual(channel.code, 200) self.assertEqual(channel.code, 200)
self.assertIn("next_batch", channel.json_body) self.assertTrue(
{
"next_batch",
"rooms",
"presence",
"account_data",
"to_device",
"device_lists",
}.issubset(set(channel.json_body.keys()))
)
def test_sync_presence_disabled(self):
"""
When presence is disabled, the key does not appear in /sync.
"""
self.hs.config.use_presence = False
channel = self.make_request("GET", "/sync")
self.assertEqual(channel.code, 200)
self.assertTrue(
{
"next_batch",
"rooms",
"account_data",
"to_device",
"device_lists",
}.issubset(set(channel.json_body.keys()))
)
class SyncFilterTestCase(unittest.HomeserverTestCase): class SyncFilterTestCase(unittest.HomeserverTestCase):
......
...@@ -306,9 +306,8 @@ class TestResourceLimitsServerNoticesWithRealRooms(unittest.HomeserverTestCase): ...@@ -306,9 +306,8 @@ class TestResourceLimitsServerNoticesWithRealRooms(unittest.HomeserverTestCase):
channel = self.make_request("GET", "/sync?timeout=0", access_token=tok) channel = self.make_request("GET", "/sync?timeout=0", access_token=tok)
self.assertNotIn( invites = channel.json_body["rooms"]["invite"]
"rooms", channel.json_body, "Got invites without server notice" self.assertEqual(len(invites), 0, invites)
)
def test_invite_with_notice(self): def test_invite_with_notice(self):
"""Tests that, if the MAU limit is hit, the server notices user invites each user """Tests that, if the MAU limit is hit, the server notices user invites each user
...@@ -365,8 +364,7 @@ class TestResourceLimitsServerNoticesWithRealRooms(unittest.HomeserverTestCase): ...@@ -365,8 +364,7 @@ class TestResourceLimitsServerNoticesWithRealRooms(unittest.HomeserverTestCase):
# We could also pick another user and sync with it, which would return an # We could also pick another user and sync with it, which would return an
# invite to a system notices room, but it doesn't matter which user we're # invite to a system notices room, but it doesn't matter which user we're
# using so we use the last one because it saves us an extra sync. # using so we use the last one because it saves us an extra sync.
if "rooms" in channel.json_body: invites = channel.json_body["rooms"]["invite"]
invites = channel.json_body["rooms"]["invite"]
# Make sure we have an invite to process. # Make sure we have an invite to process.
self.assertEqual(len(invites), 1, invites) self.assertEqual(len(invites), 1, invites)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment