Skip to content

Commit d37da63

Browse files
committed
Naive version
1 parent 227c5d3 commit d37da63

File tree

5 files changed

+30
-21
lines changed

5 files changed

+30
-21
lines changed

routingpy/direction.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,10 @@ def __init__(
8787
:param distance: The distance of the direction in meters.
8888
:type distance: int
8989
90-
:param departure_datetime: The departure timezone aware date and time of the direction.
90+
:param departure_datetime: The departure date and time of the direction.
9191
:type departure_datetime: datetime.datetime
9292
93-
:param arrival_datetime: The arrival timezone aware date and time of the direction.
93+
:param arrival_datetime: The arrival date and time of the direction.
9494
:type arrival_datetime: datetime.datetime
9595
9696
:param raw: The raw response of an individual direction (for multiple alternative routes) or the whole direction
@@ -134,7 +134,7 @@ def distance(self) -> int:
134134
@property
135135
def departure_datetime(self) -> Optional[datetime.datetime]:
136136
"""
137-
The departure timezone aware date and time of the direction.
137+
The departure date and time of the direction.
138138
139139
:rtype: datetime.datetime or None
140140
"""
@@ -143,7 +143,7 @@ def departure_datetime(self) -> Optional[datetime.datetime]:
143143
@property
144144
def arrival_datetime(self) -> Optional[datetime.datetime]:
145145
"""
146-
The arrival timezone aware date and time of the direction.
146+
The arrival date and time of the direction.
147147
148148
:rtype: datetime.datetime or None
149149
"""

routingpy/routers/google.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -326,11 +326,12 @@ def directions( # noqa: C901
326326
self.client._request("/directions/json", get_params=params, dry_run=dry_run), alternatives
327327
)
328328

329-
def _time_object_to_aware_datetime(self, time_object):
329+
def _time_object_to_naive_datetime(self, time_object):
330330
timestamp = time_object["value"]
331331
dt = datetime.datetime.fromtimestamp(timestamp)
332332
timezone = pytz.timezone(time_object["time_zone"])
333-
return dt.astimezone(timezone)
333+
aware_dt = dt.astimezone(timezone)
334+
return aware_dt.replace(tzinfo=None)
334335

335336
def _parse_legs(self, legs):
336337
duration = 0
@@ -343,12 +344,12 @@ def _parse_legs(self, legs):
343344
departure_time = leg.get("departure_time")
344345
if departure_time:
345346
assert len(legs) == 1, "departure_time is only supported for single leg routes"
346-
departure_datetime = self._time_object_to_aware_datetime(departure_time)
347+
departure_datetime = self._time_object_to_naive_datetime(departure_time)
347348

348349
arrival_time = leg.get("arrival_time")
349350
if arrival_time:
350351
assert len(legs) == 1, "arrival_time is only supported for single leg routes"
351-
arrival_datetime = self._time_object_to_aware_datetime(arrival_time)
352+
arrival_datetime = self._time_object_to_naive_datetime(arrival_time)
352353

353354
duration += leg["duration"]["value"]
354355
distance += leg["distance"]["value"]

routingpy/routers/opentripplanner_v2.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import datetime
1818
from typing import List, Optional
1919

20+
import pytz
21+
2022
from .. import convert, utils
2123
from ..client_base import DEFAULT
2224
from ..client_default import Client
@@ -97,6 +99,7 @@ def directions(
9799
profile: Optional[str] = "WALK,TRANSIT",
98100
date: Optional[datetime.date] = datetime.datetime.now().date(),
99101
time: Optional[datetime.time] = datetime.datetime.now().time(),
102+
timezone: Optional[str] = "UTC",
100103
arrive_by: Optional[bool] = False,
101104
num_itineraries: Optional[int] = 3,
102105
dry_run: Optional[bool] = None,
@@ -118,6 +121,10 @@ def directions(
118121
:param time: Time of departure or arrival. Default value: current time.
119122
:type time: datetime.time
120123
124+
:param timezone: Timezone used to transform output departure and arrival timestamps to naive
125+
datetimes. Default value: UTC.
126+
:type time: str
127+
121128
:arrive_by: Whether the itinerary should depart at the specified time (False), or arrive to
122129
the destination at the specified time (True). Default value: False.
123130
:type arrive_by: bool
@@ -165,21 +172,22 @@ def directions(
165172
response = self.client._request(
166173
"/otp/routers/default/index/graphql", post_params=params, dry_run=dry_run
167174
)
168-
return self._parse_directions_response(response, num_itineraries)
175+
return self._parse_directions_response(response, num_itineraries, timezone)
169176

170-
def _timestamp_to_utc_datetime(self, timestamp):
177+
def _timestamp_to_naive_datetime(self, timestamp, timezone):
171178
dt = datetime.datetime.fromtimestamp(timestamp / 1000)
172-
return dt.astimezone(datetime.timezone.utc)
179+
aware_dt = dt.astimezone(pytz.timezone(timezone))
180+
return aware_dt.replace(tzinfo=None)
173181

174-
def _parse_directions_response(self, response, num_itineraries):
182+
def _parse_directions_response(self, response, num_itineraries, timezone):
175183
if response is None: # pragma: no cover
176184
return Directions() if num_itineraries > 1 else Direction()
177185

178186
directions = []
179187
for itinerary in response["data"]["plan"]["itineraries"]:
180188
distance, geometry = self._parse_legs(itinerary["legs"])
181-
departure_datetime = self._timestamp_to_utc_datetime(itinerary["startTime"])
182-
arrival_datetime = self._timestamp_to_utc_datetime(itinerary["endTime"])
189+
departure_datetime = self._timestamp_to_naive_datetime(itinerary["startTime"], timezone)
190+
arrival_datetime = self._timestamp_to_naive_datetime(itinerary["endTime"], timezone)
183191
directions.append(
184192
Direction(
185193
geometry=geometry,
@@ -202,7 +210,7 @@ def _parse_legs(self, legs):
202210
geometry = []
203211
for leg in legs:
204212
points = utils.decode_polyline5(leg["legGeometry"]["points"])
205-
geometry.extend(list(reversed(points)))
213+
geometry.extend(points)
206214
distance += int(leg["distance"])
207215

208216
return distance, geometry

tests/test_google.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ def test_directions_transit(self):
9191
self.assertIsInstance(direction.distance, int)
9292
self.assertIsInstance(direction.duration, int)
9393
self.assertIsInstance(direction.departure_datetime, datetime.datetime)
94-
self.assertEqual(direction.departure_datetime.tzinfo.zone, "Europe/Berlin")
94+
self.assertEqual(direction.departure_datetime.tzinfo, None)
9595
self.assertIsInstance(direction.arrival_datetime, datetime.datetime)
96-
self.assertEqual(direction.arrival_datetime.tzinfo.zone, "Europe/Berlin")
96+
self.assertEqual(direction.arrival_datetime.tzinfo, None)
9797
self.assertIsInstance(direction.raw, dict)
9898

9999
@responses.activate

tests/test_opentripplanner_v2.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ def test_directions(self):
5656
self.assertIsInstance(direction.duration, int)
5757
self.assertIsInstance(direction.geometry, list)
5858
self.assertIsInstance(direction.departure_datetime, datetime.datetime)
59-
self.assertEqual(direction.departure_datetime.tzinfo, datetime.timezone.utc)
59+
self.assertEqual(direction.departure_datetime.tzinfo, None)
6060
self.assertIsInstance(direction.arrival_datetime, datetime.datetime)
61-
self.assertEqual(direction.arrival_datetime.tzinfo, datetime.timezone.utc)
61+
self.assertEqual(direction.arrival_datetime.tzinfo, None)
6262

6363
@responses.activate
6464
def test_directions_alternative(self):
@@ -85,9 +85,9 @@ def test_directions_alternative(self):
8585
self.assertIsInstance(direction.geometry, list)
8686
self.assertIsInstance(direction.raw, dict)
8787
self.assertIsInstance(direction.departure_datetime, datetime.datetime)
88-
self.assertEqual(direction.departure_datetime.tzinfo, datetime.timezone.utc)
88+
self.assertEqual(direction.departure_datetime.tzinfo, None)
8989
self.assertIsInstance(direction.arrival_datetime, datetime.datetime)
90-
self.assertEqual(direction.arrival_datetime.tzinfo, datetime.timezone.utc)
90+
self.assertEqual(direction.arrival_datetime.tzinfo, None)
9191

9292
@responses.activate
9393
def test_isochrones(self):

0 commit comments

Comments
 (0)