Refer to "spaces" instead of "rooms"
This commit is contained in:
@@ -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.
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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(
|
||||
@@ -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 = [
|
||||
Reference in New Issue
Block a user