Skip to content

Commit 9bb98eb

Browse files
authored
feat: BI-6610 add serialize_datetime to dl_httpx (#1264)
1 parent 9a3b851 commit 9bb98eb

File tree

4 files changed

+45
-0
lines changed

4 files changed

+45
-0
lines changed

lib/dl_httpx/dl_httpx/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
TypedSchemaDictAnnotation,
1818
TypedSchemaListAnnotation,
1919
)
20+
from .serializers import serialize_datetime
2021
from .testing import TestingHttpxClient
2122

2223

@@ -37,4 +38,5 @@
3738
"RequestHttpxClientException",
3839
"NoRetriesHttpxClientException",
3940
"TestingHttpxClient",
41+
"serialize_datetime",
4042
]
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import datetime
2+
3+
4+
def serialize_datetime(value: datetime.datetime) -> str:
5+
if value.tzinfo is None:
6+
value = value.replace(tzinfo=datetime.timezone.utc)
7+
8+
if value.tzinfo is not datetime.timezone.utc:
9+
value = value.astimezone(datetime.timezone.utc)
10+
11+
return value.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
12+
13+
14+
__all__ = [
15+
"serialize_datetime",
16+
]

lib/dl_httpx/dl_httpx_tests/unit/serializers/__init__.py

Whitespace-only changes.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import datetime
2+
3+
import dl_httpx
4+
5+
6+
def test_no_timezone_sets_to_utc() -> None:
7+
dt = datetime.datetime(2025, 1, 2, 3, 4, 5)
8+
serialized_datetime = dl_httpx.serialize_datetime(dt)
9+
assert serialized_datetime == "2025-01-02T03:04:05.000000Z"
10+
11+
12+
def test_with_microseconds() -> None:
13+
dt = datetime.datetime(2025, 1, 2, 3, 4, 5, 6)
14+
serialized_datetime = dl_httpx.serialize_datetime(dt)
15+
assert serialized_datetime == "2025-01-02T03:04:05.000006Z"
16+
17+
18+
def test_with_timezone_utc() -> None:
19+
dt = datetime.datetime(2025, 1, 2, 3, 4, 5, 6, datetime.timezone.utc)
20+
serialized_datetime = dl_httpx.serialize_datetime(dt)
21+
assert serialized_datetime == "2025-01-02T03:04:05.000006Z"
22+
23+
24+
def test_with_timezone_offset_3() -> None:
25+
dt = datetime.datetime(2025, 1, 2, 3, 4, 5, 6, datetime.timezone(datetime.timedelta(hours=3)))
26+
serialized_datetime = dl_httpx.serialize_datetime(dt)
27+
assert serialized_datetime == "2025-01-02T00:04:05.000006Z"

0 commit comments

Comments
 (0)