Skip to content

Commit 406a8e3

Browse files
committed
feat(web): expose public ts property on ChatStream for fallback recovery
1 parent ff33cef commit 406a8e3

3 files changed

Lines changed: 34 additions & 0 deletions

File tree

slack_sdk/web/async_chat_stream.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,15 @@ def __init__(
8686
self._stream_ts: Optional[str] = None
8787
self._buffer_size = buffer_size
8888

89+
@property
90+
def ts(self) -> Optional[str]:
91+
"""The message timestamp of the stream.
92+
93+
Returns None until the first flush (when chat.startStream is called).
94+
Can be used with chat.update as a fallback if the stream expires server-side.
95+
"""
96+
return self._stream_ts
97+
8998
async def append(
9099
self,
91100
*,

slack_sdk/web/chat_stream.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,15 @@ def __init__(
7676
self._stream_ts: Optional[str] = None
7777
self._buffer_size = buffer_size
7878

79+
@property
80+
def ts(self) -> Optional[str]:
81+
"""The message timestamp of the stream.
82+
83+
Returns None until the first flush (when chat.startStream is called).
84+
Can be used with chat.update as a fallback if the stream expires server-side.
85+
"""
86+
return self._stream_ts
87+
7988
def append(
8089
self,
8190
*,

tests/slack_sdk/web/test_chat_stream.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,22 @@ def test_streams_with_authorship_args(self):
262262
self.assertEqual(start_request.get("icon_emoji"), "abacus")
263263
self.assertNotIn("icon_url", start_request)
264264

265+
def test_ts_property_is_none_before_flush_and_set_after(self):
266+
streamer = self.client.chat_stream(
267+
buffer_size=5,
268+
channel="C0123456789",
269+
thread_ts="123.000",
270+
recipient_team_id="T0123456789",
271+
recipient_user_id="U0123456789",
272+
)
273+
self.assertIsNone(streamer.ts)
274+
275+
streamer.append(markdown_text="hello!")
276+
self.assertEqual(streamer.ts, "123.123")
277+
278+
streamer.stop()
279+
self.assertEqual(streamer.ts, "123.123")
280+
265281
def test_streams_errors_when_appending_to_an_unstarted_stream(self):
266282
streamer = self.client.chat_stream(
267283
channel="C0123456789",

0 commit comments

Comments
 (0)