Skip to content

Commit cd99131

Browse files
committed
Add stream created datetime to StreamInfo
The field is already exposed by NATS "$JS.API.STREAM.INFO.{name}" API: https://nats-io.github.io/nats.js/jetstream/types/StreamInfo.html Since it's official part of protocol, let's expose it to the user. Golang implementation already do so: https://github.com/nats-io/nats.go/blob/4ec2f446e4cd829a7be3bf9aa16c43a7fddeaed9/jetstream/stream_config.go#L32 Example API response: ```json { "type": "io.nats.jetstream.api.v1.stream_info_response", "total": 0, "offset": 0, "limit": 0, "created": "2025-11-02T15:34:21.730004852Z", "config": { "name": "stream", "subjects": [ "test.>" ], "retention": "limits", "max_consumers": -1, "max_msgs": -1, "max_bytes": 2147483648, "max_age": 86400000000000, "max_msgs_per_subject": -1, "max_msg_size": -1, "discard": "old", "storage": "file", "num_replicas": 1, "duplicate_window": 120000000000, "compression": "s2", "allow_direct": false, "mirror_direct": false, "sealed": false, "deny_delete": false, "deny_purge": false, "allow_rollup_hdrs": false, "consumer_limits": {} }, "state": { "messages": 1249954, "bytes": 1036040689, "first_seq": 3326784, "first_ts": "2025-11-03T08:38:40.571255423Z", "last_seq": 4576737, "last_ts": "2025-11-03T13:34:30.52654449Z", "num_subjects": 2, "consumer_count": 1 }, "cluster": { "leader": "nats-0" }, "ts": "2025-11-03T13:34:30.530396449Z" } ```
1 parent 1517e53 commit cd99131

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

nats/src/nats/js/api.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,7 @@ class StreamInfo(Base):
410410
sources: Optional[List[StreamSourceInfo]] = None
411411
cluster: Optional[ClusterInfo] = None
412412
did_create: Optional[bool] = None
413+
created: Optional[datetime.datetime] = None
413414

414415
@classmethod
415416
def from_response(cls, resp: Dict[str, Any]):
@@ -418,6 +419,10 @@ def from_response(cls, resp: Dict[str, Any]):
418419
cls._convert(resp, "mirror", StreamSourceInfo)
419420
cls._convert(resp, "sources", StreamSourceInfo)
420421
cls._convert(resp, "cluster", ClusterInfo)
422+
423+
if "created" in resp and resp["created"]:
424+
resp["created"] = datetime.datetime.fromisoformat(resp["created"]).astimezone(datetime.timezone.utc)
425+
421426
return super().from_response(resp)
422427

423428

nats/tests/test_js.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,6 +1215,7 @@ async def test_stream_management(self):
12151215
assert isinstance(current.config, nats.js.api.StreamConfig)
12161216
assert current.config.name == "hello"
12171217
assert isinstance(current.state, nats.js.api.StreamState)
1218+
assert isinstance(current.created, datetime.datetime)
12181219

12191220
# Send messages
12201221
producer = nc.jetstream()

0 commit comments

Comments
 (0)