From 4db8e8242cf204521d989bd0d435aadfaff3cc3e Mon Sep 17 00:00:00 2001 From: Diorcet Yann Date: Thu, 16 Jan 2025 10:45:14 +0100 Subject: [PATCH] Timezone-aware datetime --- nats/aio/msg.py | 5 +++-- nats/js/kv.py | 2 +- tests/test_js.py | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/nats/aio/msg.py b/nats/aio/msg.py index 37cedadf..4ee51f74 100644 --- a/nats/aio/msg.py +++ b/nats/aio/msg.py @@ -221,7 +221,7 @@ def _from_reply(cls, reply: str) -> Msg.Metadata: tokens = cls._get_metadata_fields(reply) if len(tokens) == _V1_TOKEN_COUNT: t = datetime.datetime.fromtimestamp( - int(tokens[7]) / 1_000_000_000.0 + int(tokens[7]) / 1_000_000_000.0, datetime.timezone.utc ) return cls( sequence=Msg.Metadata.SequencePair( @@ -236,7 +236,8 @@ def _from_reply(cls, reply: str) -> Msg.Metadata: ) else: t = datetime.datetime.fromtimestamp( - int(tokens[Msg.Ack.Timestamp]) / 1_000_000_000.0 + int(tokens[Msg.Ack.Timestamp]) / 1_000_000_000.0, + datetime.timezone.utc ) # Underscore indicate no domain is set. Expose as empty string diff --git a/nats/js/kv.py b/nats/js/kv.py index 071205aa..d9561750 100644 --- a/nats/js/kv.py +++ b/nats/js/kv.py @@ -284,7 +284,7 @@ async def purge_deletes(self, olderthan: int = 30 * 60) -> bool: for entry in delete_markers: keep = 0 subject = f"{self._pre}{entry.key}" - duration = datetime.datetime.now() - entry.created + duration = datetime.datetime.now(datetime.timezone.utc) - entry.created if olderthan > 0 and olderthan > duration.total_seconds(): keep = 1 await self._js.purge_stream( diff --git a/tests/test_js.py b/tests/test_js.py index 85f8f556..425bab05 100644 --- a/tests/test_js.py +++ b/tests/test_js.py @@ -229,7 +229,7 @@ async def test_fetch_one(self): msg = msgs[0] assert msg.metadata.sequence.stream == 1 assert msg.metadata.sequence.consumer == 1 - assert datetime.datetime.now() > msg.metadata.timestamp + assert datetime.datetime.now(datetime.timezone.utc) > msg.metadata.timestamp assert msg.metadata.num_pending == 0 assert msg.metadata.num_delivered == 1 @@ -294,7 +294,7 @@ async def test_fetch_one_wait_forever(self): msg = msgs[0] assert msg.metadata.sequence.stream == 1 assert msg.metadata.sequence.consumer == 1 - assert datetime.datetime.now() > msg.metadata.timestamp + assert datetime.datetime.now(datetime.timezone.utc) > msg.metadata.timestamp assert msg.metadata.num_pending == 0 assert msg.metadata.num_delivered == 1