Skip to content

Commit f3f4c9f

Browse files
feat: new API endpoint query_message_history (#168)
* feat: new API endpoint query_message_history * refactor: added abstract method * pin pytest version * refactor: consistent abstract method --------- Co-authored-by: Guyon Morée <[email protected]>
1 parent 62a5ea0 commit f3f4c9f

File tree

5 files changed

+65
-1
lines changed

5 files changed

+65
-1
lines changed

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"pyjwt>=2.0.0,<3",
99
"typing_extensions; python_version < '3.8'",
1010
]
11-
tests_require = ["pytest", "pytest-asyncio <= 0.21.1"]
11+
tests_require = ["pytest == 8.1.1", "pytest-asyncio <= 0.21.1"]
1212
ci_require = [
1313
"black",
1414
"flake8",

stream_chat/async_chat/client.py

+12
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,18 @@ async def delete_message(self, message_id: str, **options: Any) -> StreamRespons
336336
async def get_message(self, message_id: str, **options: Any) -> StreamResponse:
337337
return await self.get(f"messages/{message_id}", options)
338338

339+
async def query_message_history(
340+
self, filter: Dict = None, sort: List[Dict] = None, **options: Any
341+
) -> StreamResponse:
342+
params = options.copy()
343+
params.update(
344+
{
345+
"filter": filter,
346+
"sort": self.normalize_sort(sort),
347+
}
348+
)
349+
return await self.post("messages/history", data=params)
350+
339351
async def query_users(
340352
self, filter_conditions: Dict, sort: List[Dict] = None, **options: Any
341353
) -> StreamResponse:

stream_chat/base/client.py

+9
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,15 @@ def get_message(
525525
"""
526526
pass
527527

528+
@abc.abstractmethod
529+
def query_message_history(
530+
self, filter: Dict = None, sort: List[Dict] = None, **options: Any
531+
) -> Union[StreamResponse, Awaitable[StreamResponse]]:
532+
"""
533+
Queries message history.
534+
"""
535+
pass
536+
528537
@abc.abstractmethod
529538
def query_users(
530539
self, filter_conditions: Dict, sort: List[Dict] = None, **options: Any

stream_chat/client.py

+7
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,13 @@ def delete_message(self, message_id: str, **options: Any) -> StreamResponse:
325325
def get_message(self, message_id: str, **options: Any) -> StreamResponse:
326326
return self.get(f"messages/{message_id}", options)
327327

328+
def query_message_history(
329+
self, filter: Dict = None, sort: List[Dict] = None, **options: Any
330+
) -> StreamResponse:
331+
params = options.copy()
332+
params.update({"filter": filter, "sort": self.normalize_sort(sort)})
333+
return self.post("messages/history", data=params)
334+
328335
def query_users(
329336
self, filter_conditions: Dict, sort: List[Dict] = None, **options: Any
330337
) -> StreamResponse:

stream_chat/tests/test_client.py

+36
Original file line numberDiff line numberDiff line change
@@ -828,3 +828,39 @@ def test_unread_counts_batch(self, client: StreamChat, channel, random_users: Di
828828
assert (
829829
response["counts_by_user"][user_id]["total_unread_threads_count"] == 1
830830
)
831+
832+
def test_query_message_history(
833+
self, client: StreamChat, channel, random_user: Dict
834+
):
835+
msg_id = str(uuid.uuid4())
836+
channel.send_message({"id": msg_id, "text": "helloworld"}, random_user["id"])
837+
client.update_message(
838+
{"id": msg_id, "text": "helloworld-1", "user_id": random_user["id"]}
839+
)
840+
client.update_message(
841+
{"id": msg_id, "text": "helloworld-2", "user_id": random_user["id"]}
842+
)
843+
client.update_message(
844+
{"id": msg_id, "text": "helloworld-3", "user_id": random_user["id"]}
845+
)
846+
client.update_message(
847+
{"id": msg_id, "text": "helloworld-4", "user_id": random_user["id"]}
848+
)
849+
850+
response = client.query_message_history(
851+
{"message_id": {"$eq": msg_id}},
852+
sort=[{"message_updated_at": -1}],
853+
**{"limit": 1},
854+
)
855+
856+
assert len(response["message_history"]) == 1
857+
assert response["message_history"][0]["text"] == "helloworld-3"
858+
859+
response_next = client.query_message_history(
860+
{"message_id": {"$eq": msg_id}},
861+
sort=[{"message_updated_at": -1}],
862+
**{"limit": 1, "next": response["next"]},
863+
)
864+
865+
assert len(response_next["message_history"]) == 1
866+
assert response_next["message_history"][0]["text"] == "helloworld-2"

0 commit comments

Comments
 (0)