1
0

Refer to "spaces" instead of "rooms"

This commit is contained in:
Sean Quah
2021-11-18 15:40:29 +00:00
parent b43d085472
commit 8627a456e3
6 changed files with 29 additions and 26 deletions

View File

@@ -37,7 +37,7 @@ if TYPE_CHECKING:
logger = logging.getLogger(__name__)
class RoomHierarchyHandler:
class SpaceHierarchyHandler:
"""Provides methods for walking over space hierarchies.
Also see `RoomSummaryHandler`, which has similar functionality.
@@ -49,7 +49,7 @@ class RoomHierarchyHandler:
self._server_name = hs.hostname
async def get_room_descendants(
async def get_space_descendants(
self, space_id: str, via: Optional[Iterable[str]] = None
) -> Tuple[Sequence[Tuple[str, Iterable[str]]], Sequence[str]]:
"""Gets the children of a space, recursively.
@@ -75,6 +75,7 @@ class RoomHierarchyHandler:
todo: List[Tuple[str, Iterable[str], Mapping[str, Optional[JsonDict]]]] = [
(space_id, via, {})
]
# [(room ID, via)]
descendants: List[Tuple[str, Iterable[str]]] = []
seen = {space_id}
@@ -89,7 +90,9 @@ class RoomHierarchyHandler:
is_in_room,
children,
federation_room_chunks,
) = await self._get_room_children(space_id, via, federation_room_chunks)
) = await self._get_space_children(
space_id, via, federation_room_chunks
)
except SynapseError:
# Could not list children over federation
inaccessible_room_ids.append(space_id)
@@ -103,7 +106,7 @@ class RoomHierarchyHandler:
# Queue up the child for processing.
# The child may not actually be a space, but that's checked by
# `_get_room_children`.
# `_get_space_children`.
todo.append((child_room_id, child_via, federation_room_chunks))
# Children were retrieved over federation, which is not guaranteed to be
@@ -113,7 +116,7 @@ class RoomHierarchyHandler:
return descendants, inaccessible_room_ids
async def _get_room_children(
async def _get_space_children(
self,
space_id: str,
via: Optional[Iterable[str]] = None,
@@ -127,7 +130,7 @@ class RoomHierarchyHandler:
space_id: The room ID of the space.
via: A list of servers which may know about the space.
federation_room_chunks: A cache of room chunks previously returned by
`_get_room_children` that may be used to skip federation requests for
`_get_space_children` that may be used to skip federation requests for
inaccessible or non-space rooms.
Returns:
@@ -156,7 +159,7 @@ class RoomHierarchyHandler:
is_in_room = await self._store.is_host_joined(space_id, self._server_name)
if is_in_room:
children = await self._get_room_children_local(space_id)
children = await self._get_space_children_local(space_id)
return True, children, {}
else:
# Check the room chunks previously returned over federation to see if we
@@ -175,10 +178,10 @@ class RoomHierarchyHandler:
# `space_id` is not a space according to federation.
return False, [], {}
children, room_chunks = await self._get_room_children_remote(space_id, via)
children, room_chunks = await self._get_space_children_remote(space_id, via)
return False, children, room_chunks
async def _get_room_children_local(
async def _get_space_children_local(
self, space_id: str
) -> Sequence[Tuple[str, Iterable[str]]]:
"""Gets the direct children of a space that the local homeserver is in.
@@ -225,7 +228,7 @@ class RoomHierarchyHandler:
child_events.sort(key=child_events_comparison_key)
return [(event.state_key, event.content["via"]) for event in child_events]
async def _get_room_children_remote(
async def _get_space_children_remote(
self, space_id: str, via: Iterable[str]
) -> Tuple[Sequence[Tuple[str, Iterable[str]]], Mapping[str, Optional[JsonDict]]]:
"""Gets the direct children of a space over federation.

View File

@@ -45,7 +45,6 @@ from synapse.rest.admin.registration_tokens import (
NewRegistrationTokenRestServlet,
RegistrationTokenRestServlet,
)
from synapse.rest.admin.room_hierarchy import RemoveHierarchyMemberRestServlet
from synapse.rest.admin.rooms import (
DeleteRoomStatusByDeleteIdRestServlet,
DeleteRoomStatusByRoomIdRestServlet,
@@ -60,6 +59,7 @@ from synapse.rest.admin.rooms import (
RoomStateRestServlet,
)
from synapse.rest.admin.server_notice_servlet import SendServerNoticeServlet
from synapse.rest.admin.space import RemoveSpaceMemberRestServlet
from synapse.rest.admin.statistics import UserMediaStatisticsRestServlet
from synapse.rest.admin.username_available import UsernameAvailableRestServlet
from synapse.rest.admin.users import (
@@ -254,7 +254,7 @@ def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
ListRegistrationTokensRestServlet(hs).register(http_server)
NewRegistrationTokenRestServlet(hs).register(http_server)
RegistrationTokenRestServlet(hs).register(http_server)
RemoveHierarchyMemberRestServlet(hs).register(http_server)
RemoveSpaceMemberRestServlet(hs).register(http_server)
# Some servlets only get registered for the main process.
if hs.config.worker.worker_app is None:

View File

@@ -28,7 +28,7 @@ if TYPE_CHECKING:
logger = logging.getLogger(__name__)
class RemoveHierarchyMemberRestServlet(ResolveRoomIdMixin, RestServlet):
class RemoveSpaceMemberRestServlet(ResolveRoomIdMixin, RestServlet):
"""
Puppets a local user to remove them from all rooms in a space.
"""
@@ -43,7 +43,7 @@ class RemoveHierarchyMemberRestServlet(ResolveRoomIdMixin, RestServlet):
self._auth = hs.get_auth()
self._store = hs.get_datastore()
self._room_member_handler = hs.get_room_member_handler()
self._room_hierarchy_handler = hs.get_room_hierarchy_handler()
self._space_hierarchy_handler = hs.get_space_hierarchy_handler()
async def on_DELETE(
self, request: SynapseRequest, space_id: str, user_id: str
@@ -87,7 +87,7 @@ class RemoveHierarchyMemberRestServlet(ResolveRoomIdMixin, RestServlet):
(
descendants,
inaccessible_room_ids,
) = await self._room_hierarchy_handler.get_room_descendants(space_id)
) = await self._space_hierarchy_handler.get_space_descendants(space_id)
space_room_ids = {space_id}
space_room_ids.update(room_id for room_id, _ in descendants)

View File

@@ -99,7 +99,6 @@ from synapse.handlers.room import (
RoomShutdownHandler,
)
from synapse.handlers.room_batch import RoomBatchHandler
from synapse.handlers.room_hierarchy import RoomHierarchyHandler
from synapse.handlers.room_list import RoomListHandler
from synapse.handlers.room_member import RoomMemberHandler, RoomMemberMasterHandler
from synapse.handlers.room_member_worker import RoomMemberWorkerHandler
@@ -107,6 +106,7 @@ from synapse.handlers.room_summary import RoomSummaryHandler
from synapse.handlers.search import SearchHandler
from synapse.handlers.send_email import SendEmailHandler
from synapse.handlers.set_password import SetPasswordHandler
from synapse.handlers.space_hierarchy import SpaceHierarchyHandler
from synapse.handlers.sso import SsoHandler
from synapse.handlers.stats import StatsHandler
from synapse.handlers.sync import SyncHandler
@@ -792,8 +792,8 @@ class HomeServer(metaclass=abc.ABCMeta):
return AccountDataHandler(self)
@cache_in_self
def get_room_hierarchy_handler(self) -> RoomHierarchyHandler:
return RoomHierarchyHandler(self)
def get_space_hierarchy_handler(self) -> SpaceHierarchyHandler:
return SpaceHierarchyHandler(self)
@cache_in_self
def get_room_summary_handler(self) -> RoomSummaryHandler:

View File

@@ -23,7 +23,7 @@ from synapse.types import JsonDict
from tests import unittest
class RoomDescendantsTestCase(unittest.HomeserverTestCase):
class SpaceDescendantsTestCase(unittest.HomeserverTestCase):
"""Tests iteration over the descendants of a space."""
servlets = [
@@ -34,7 +34,7 @@ class RoomDescendantsTestCase(unittest.HomeserverTestCase):
def prepare(self, reactor, clock, hs: HomeServer):
self.hs = hs
self.handler = self.hs.get_room_hierarchy_handler()
self.handler = self.hs.get_space_hierarchy_handler()
# Create a user.
self.user = self.register_user("user", "pass")
@@ -87,7 +87,7 @@ class RoomDescendantsTestCase(unittest.HomeserverTestCase):
space_id = self._create_space()
descendants, inaccessible_room_ids = self.get_success(
self.handler.get_room_descendants(space_id)
self.handler.get_space_descendants(space_id)
)
self.assertEqual(descendants, [(space_id, [])])
@@ -98,7 +98,7 @@ class RoomDescendantsTestCase(unittest.HomeserverTestCase):
space_id = f"!invalid:{self.hs.hostname}"
descendants, inaccessible_room_ids = self.get_success(
self.handler.get_room_descendants(space_id)
self.handler.get_space_descendants(space_id)
)
self.assertEqual(descendants, [(space_id, [])])
@@ -111,7 +111,7 @@ class RoomDescendantsTestCase(unittest.HomeserverTestCase):
self._add_child(space_id, room_id)
descendants, inaccessible_room_ids = self.get_success(
self.handler.get_room_descendants(space_id)
self.handler.get_space_descendants(space_id)
)
self.assertEqual(descendants, [(space_id, []), (room_id, [self.hs.hostname])])
@@ -128,7 +128,7 @@ class RoomDescendantsTestCase(unittest.HomeserverTestCase):
self._add_child(subspace_id, space_id)
descendants, inaccessible_room_ids = self.get_success(
self.handler.get_room_descendants(space_id)
self.handler.get_space_descendants(space_id)
)
self.assertEqual(
@@ -158,7 +158,7 @@ class RoomDescendantsTestCase(unittest.HomeserverTestCase):
self._add_child(subspace_id, room_id, order="3")
descendants, inaccessible_room_ids = self.get_success(
self.handler.get_room_descendants(space_id)
self.handler.get_space_descendants(space_id)
)
self.assertEqual(

View File

@@ -32,7 +32,7 @@ from synapse.types import JsonDict
from tests import unittest
class RemoveHierarchyMemberTestCase(unittest.HomeserverTestCase):
class RemoveSpaceMemberTestCase(unittest.HomeserverTestCase):
"""Tests removal of a user from a space."""
servlets = [