Skip to content

Commit 71d2c29

Browse files
authored
fix: timezone handler (#42)
1 parent ea27efd commit 71d2c29

3 files changed

Lines changed: 23 additions & 9 deletions

File tree

examples/basic_usage.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def main() -> None:
3232
flight_summary = client.flight_summary.get_light(flights=["KL1316"], flight_datetime_from=datetime(2025, 5, 13, 12, 0, 0), flight_datetime_to=datetime(2025, 5, 14, 17, 10, 0))
3333
if flight_summary.data:
3434
print(flight_summary.data[0].fr24_id)
35-
print(client.flight_summary.get_full(operating_as=["FDX"],flight_datetime_from=datetime(2026, 1, 15, 15, 0, 0),flight_datetime_to=datetime(2026, 1, 15, 15, 5, 0),categories=[FlightCategory.CARGO]))
35+
print(client.flight_summary.get_full(operating_as=["FDX"],flight_datetime_from=datetime(2026, 1, 15, 15, 0, 0, tzinfo=timezone.utc),flight_datetime_to=datetime(2026, 1, 15, 15, 5, 0),categories=[FlightCategory.CARGO]))
3636
print(client.live.flight_positions.get_light(flights=["SK2752"]))
3737
print(client.live.flight_positions.get_light(bounds=Boundary(north=55.6, south=55.5, west=12.5, east=12.6)))
3838
print(client.live.flight_positions.get_full(bounds="55.6,55.5,12.5,12.6"))

src/fr24sdk/resources/flight_summary.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import warnings
77
from typing import Optional, Any, Annotated, Union
8-
from datetime import datetime
8+
from datetime import datetime, timezone
99
from pydantic import BaseModel, model_serializer, StringConstraints, Field
1010

1111
from ..transport import HttpTransport
@@ -69,6 +69,10 @@ def _to_query_dict(self) -> dict[str, Any]:
6969
continue
7070
if isinstance(value, list):
7171
query[key] = ",".join(map(str, value))
72+
elif isinstance(value, datetime):
73+
if value.tzinfo is not None and value.utcoffset() is not None:
74+
value = value.astimezone(timezone.utc).replace(tzinfo=None)
75+
query[key] = str(value)
7276
else:
7377
query[key] = str(value)
7478
return query

tests/unit/test_flight_summary.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
# SPDX-License-Identifier: MIT
44
"""Unit tests for the flight_summary module."""
55

6-
import pytest
76
from unittest.mock import Mock, MagicMock
8-
from datetime import datetime, timezone
7+
from datetime import datetime, timedelta, timezone
8+
9+
import pytest
910

1011
from fr24sdk.resources.flight_summary import FlightSummaryResource, _FlightSummaryParams
1112
from fr24sdk.models.flight import (
@@ -40,7 +41,9 @@ class TestFlightSummaryParams:
4041
def test_serialize_params(self):
4142
"""Test parameters are correctly serialized for API requests."""
4243
# Test with various parameter types
43-
test_datetime = datetime(2023, 1, 1, 12, 0, 0, tzinfo=timezone.utc)
44+
test_datetime = datetime(
45+
2023, 1, 1, 12, 0, 0, tzinfo=timezone(timedelta(hours=2))
46+
)
4447
params = _FlightSummaryParams(
4548
flight_datetime_from=test_datetime,
4649
flight_datetime_to=test_datetime,
@@ -52,8 +55,12 @@ def test_serialize_params(self):
5255
serialized = params._to_query_dict()
5356

5457
# Check serialization results
55-
assert serialized["flight_datetime_from"] == str(test_datetime)
56-
assert serialized["flight_datetime_to"] == str(test_datetime)
58+
assert serialized["flight_datetime_from"] == str(
59+
test_datetime.astimezone(timezone.utc).replace(tzinfo=None)
60+
)
61+
assert serialized["flight_datetime_to"] == str(
62+
test_datetime.astimezone(timezone.utc).replace(tzinfo=None)
63+
)
5764
assert serialized["flights"] == "BA1234,LH5678"
5865
assert serialized["callsigns"] == "BAW123"
5966
assert serialized["aircraft"] == "B738,A320"
@@ -145,8 +152,9 @@ def test_get_light_success_with_datetime_range(
145152
mock_transport.request.return_value = mock_response
146153

147154
# Call with datetime parameters
148-
from_dt = datetime(2023, 1, 1, 0, 0, 0, tzinfo=timezone.utc)
149-
to_dt = datetime(2023, 1, 1, 23, 59, 59, tzinfo=timezone.utc)
155+
offset = timezone(timedelta(hours=2))
156+
from_dt = datetime(2023, 1, 1, 0, 0, 0, tzinfo=offset)
157+
to_dt = datetime(2023, 1, 1, 23, 59, 59, tzinfo=offset)
150158

151159
result = flight_summary.get_light(
152160
flight_datetime_from=from_dt, flight_datetime_to=to_dt, airports=["EGLL"]
@@ -159,6 +167,8 @@ def test_get_light_success_with_datetime_range(
159167
args, kwargs = mock_transport.request.call_args
160168
assert "flight_datetime_from" in kwargs["params"]
161169
assert "flight_datetime_to" in kwargs["params"]
170+
assert kwargs["params"]["flight_datetime_from"] == "2022-12-31 22:00:00"
171+
assert kwargs["params"]["flight_datetime_to"] == "2023-01-01 21:59:59"
162172
assert kwargs["params"]["airports"] == "EGLL"
163173

164174
def test_get_full_success(self, flight_summary, mock_transport):

0 commit comments

Comments
 (0)