Skip to content

Commit

Permalink
empty rooms list filter options and API
Browse files Browse the repository at this point in the history
Closes: #147
  • Loading branch information
JacksonChen666 committed Jan 22, 2025
1 parent 41206f4 commit 4c22fc3
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 9 deletions.
29 changes: 23 additions & 6 deletions synadm/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -763,18 +763,28 @@ def room_join(self, room_id_or_alias, user_id):
return self.query("post", "v1/join/{room_id_or_alias}", data=data,
room_id_or_alias=room_id_or_alias)

def room_list(self, _from, limit, name, order_by, reverse):
def room_list(self, _from, limit, name, order_by, reverse,
empty_rooms=None):
""" List and search rooms
args:
empty_rooms: Whether to get empty rooms. Default is None, which
gets both empty and non-empty rooms. Returns empty rooms if
True, and non-empty rooms if False.
"""
return self.query("get", "v1/rooms", params={
params = {
"from": _from,
"limit": limit,
"search_term": name,
"order_by": order_by,
"dir": "b" if reverse else None
})
}
if empty_rooms is not None:
params["empty_rooms"] = str(empty_rooms).lower()
return self.query("get", "v1/rooms", params=params)

def room_list_paginate(self, limit, name, order_by, reverse, _from=0):
def room_list_paginate(self, limit, name, order_by, reverse, _from=0,
empty_rooms=None):
""" Yields API responses for room listing.
Args:
Expand All @@ -785,19 +795,26 @@ def room_list_paginate(self, limit, name, order_by, reverse, _from=0):
order_by (string): Synapse Room list API specific argument.
reverse (bool): Whether the results should be
_from (int): Initial offset in pagination.
empty_rooms: Whether to get empty rooms. Default is None, which
gets both empty and non-empty rooms. Returns empty rooms if
True, and non-empty rooms if False.
Yields:
dict: The Admin API response for listing accounts.
https://element-hq.github.io/synapse/latest/admin_api/rooms.html#list-room-api
"""
while _from is not None:
response = self.query("get", "v1/rooms", params={
params = {
"from": _from,
"limit": limit,
"search_term": name,
"order_by": order_by,
"dir": "b" if reverse else None
})
}
if empty_rooms is not None:
params["empty_rooms"] = str(empty_rooms).lower()
response = self.query("get", "v1/rooms",
params=params)
yield response
_from = response.get("next_batch", None)
self.log.debug(f"room_list_paginate: next from value = {_from}")
Expand Down
25 changes: 22 additions & 3 deletions synadm/cli/room.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
"""

import click
from click_option_group import RequiredMutuallyExclusiveOptionGroup, optgroup
from click_option_group import MutuallyExclusiveOptionGroup, optgroup
from click_option_group import RequiredMutuallyExclusiveOptionGroup

from synadm import cli

Expand Down Expand Up @@ -96,10 +97,28 @@ def resolve(helper, room_id_or_alias, reverse):
"--reverse", "-r", is_flag=True, default=False,
help="""Direction of room order. If set it will reverse the sort order of
--order-by method.""")
def list_room_cmd(helper, from_, limit, name, sort, reverse):
@optgroup.group(
"Query type", cls=MutuallyExclusiveOptionGroup,
help="Query for empty or non-empty rooms"
)
@optgroup.option(
"--empty", "-e", is_flag=True,
help="""Queries for empty rooms only.""")
@optgroup.option(
"--not-empty", "-E", is_flag=True,
help="""Queries for rooms which are not empty only.""")
def list_room_cmd(helper, from_, limit, name, sort, reverse, empty,
not_empty):
""" List and search for rooms.
"""
rooms = helper.api.room_list(from_, limit, name, sort, reverse)
empty_rooms = None
if empty:
empty_rooms = True
elif not_empty:
empty_rooms = False

rooms = helper.api.room_list(from_, limit, name, sort, reverse,
empty_rooms)
if rooms is None:
click.echo("Rooms could not be fetched.")
raise SystemExit(1)
Expand Down

0 comments on commit 4c22fc3

Please sign in to comment.