Skip to content

Commit 6364604

Browse files
SubashPradhansubash pradhan
andauthored
fix: add block user methods (#199)
Co-authored-by: subash pradhan <[email protected]>
1 parent 2c7f2ca commit 6364604

File tree

5 files changed

+105
-0
lines changed

5 files changed

+105
-0
lines changed

stream_chat/async_chat/client.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,22 @@ async def query_banned_users(self, query_conditions: Dict) -> StreamResponse:
223223
"query_banned_users", params={"payload": json.dumps(query_conditions)}
224224
)
225225

226+
async def block_user(
227+
self, blocked_user_id: str, user_id: str, **options: Any
228+
) -> StreamResponse:
229+
data = {"blocked_user_id": blocked_user_id, "user_id": user_id, **options}
230+
return await self.post("users/block", data=data)
231+
232+
async def unblock_user(
233+
self, blocked_user_id: str, user_id: str, **options: Any
234+
) -> StreamResponse:
235+
data = {"blocked_user_id": blocked_user_id, "user_id": user_id, **options}
236+
return await self.post("users/unblock", data=data)
237+
238+
async def get_blocked_users(self, user_id: str, **options: Any) -> StreamResponse:
239+
params = {"user_id": user_id, **options}
240+
return await self.get("users/block", params=params)
241+
226242
async def run_message_action(self, message_id: str, data: Dict) -> StreamResponse:
227243
return await self.post(f"messages/{message_id}/action", data=data)
228244

stream_chat/base/client.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,37 @@ def query_banned_users(
355355
"""
356356
pass
357357

358+
@abc.abstractmethod
359+
def block_user(
360+
self, blocked_user_id: str, user_id: str, **options: Any
361+
) -> Union[StreamResponse, Awaitable[StreamResponse]]:
362+
"""
363+
Blocks a user. When a user is blocked, they will not be able to communicate with the
364+
blocking user in 1-on-1 channels, and will not be able to add the blocking user to channels.
365+
To unblock a user, use `unblock_user` method.
366+
"""
367+
pass
368+
369+
@abc.abstractmethod
370+
def unblock_user(
371+
self, blocked_user_id: str, user_id: str, **options: Any
372+
) -> Union[StreamResponse, Awaitable[StreamResponse]]:
373+
"""
374+
Unblocks a user. This allows the previously blocked user to communicate with the
375+
unblocking user in 1-on-1 channels again, and all previous messages become visible.
376+
To block a user, use `block_user` method.
377+
"""
378+
pass
379+
380+
@abc.abstractmethod
381+
def get_blocked_users(
382+
self, user_id: str, **options: Any
383+
) -> Union[StreamResponse, Awaitable[StreamResponse]]:
384+
"""
385+
Retrieves the list of users that have been blocked by the specified user.
386+
"""
387+
pass
388+
358389
@abc.abstractmethod
359390
def run_message_action(
360391
self, message_id: str, data: Dict

stream_chat/client.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,22 @@ def query_banned_users(self, query_conditions: Dict) -> StreamResponse:
209209
"query_banned_users", params={"payload": json.dumps(query_conditions)}
210210
)
211211

212+
def block_user(
213+
self, blocked_user_id: str, user_id: str, **options: Any
214+
) -> StreamResponse:
215+
data = {"blocked_user_id": blocked_user_id, "user_id": user_id, **options}
216+
return self.post("users/block", data=data)
217+
218+
def unblock_user(
219+
self, blocked_user_id: str, user_id: str, **options: Any
220+
) -> StreamResponse:
221+
data = {"blocked_user_id": blocked_user_id, "user_id": user_id, **options}
222+
return self.post("users/unblock", data=data)
223+
224+
def get_blocked_users(self, user_id: str, **options: Any) -> StreamResponse:
225+
params = {"user_id": user_id, **options}
226+
return self.get("users/block", params=params)
227+
212228
def run_message_action(self, message_id: str, data: Dict) -> StreamResponse:
213229
return self.post(f"messages/{message_id}/action", data=data)
214230

stream_chat/tests/async_chat/test_client.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,29 @@ async def test_query_banned_user(
304304
)
305305
assert len(resp["bans"]) == 1
306306

307+
async def test_block_user(
308+
self, client: StreamChatAsync, random_user, server_user: Dict
309+
):
310+
await client.block_user(random_user["id"], server_user["id"])
311+
response = await client.get_blocked_users(server_user["id"])
312+
assert len(response["blocks"]) > 0
313+
314+
async def test_unblock_user(
315+
self, client: StreamChatAsync, random_user, server_user: Dict
316+
):
317+
await client.block_user(random_user["id"], server_user["id"])
318+
await client.unblock_user(random_user["id"], server_user["id"])
319+
320+
response = await client.get_blocked_users(server_user["id"])
321+
assert len(response["blocks"]) == 0
322+
323+
async def test_get_blocked_users(
324+
self, client: StreamChatAsync, random_user, server_user: Dict
325+
):
326+
await client.block_user(random_user["id"], server_user["id"])
327+
response = await client.get_blocked_users(server_user["id"])
328+
assert len(response["blocks"]) > 0
329+
307330
async def test_flag_user(
308331
self, client: StreamChatAsync, random_user, server_user: Dict
309332
):

stream_chat/tests/test_client.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,25 @@ def test_query_banned_user(
319319
)
320320
assert len(resp["bans"]) == 1
321321

322+
def test_block_user(self, client: StreamChat, random_user, server_user: Dict):
323+
client.block_user(random_user["id"], server_user["id"])
324+
response = client.get_blocked_users(server_user["id"])
325+
assert len(response["blocks"]) > 0
326+
327+
def test_unblock_user(self, client: StreamChat, random_user, server_user: Dict):
328+
client.block_user(random_user["id"], server_user["id"])
329+
client.unblock_user(random_user["id"], server_user["id"])
330+
331+
response = client.get_blocked_users(server_user["id"])
332+
assert len(response["blocks"]) == 0
333+
334+
def test_get_blocked_users(
335+
self, client: StreamChat, random_user, server_user: Dict
336+
):
337+
client.block_user(random_user["id"], server_user["id"])
338+
response = client.get_blocked_users(server_user["id"])
339+
assert len(response["blocks"]) > 0
340+
322341
def test_flag_user(self, client: StreamChat, random_user, server_user: Dict):
323342
client.flag_user(random_user["id"], user_id=server_user["id"])
324343

0 commit comments

Comments
 (0)