17
17
import datetime
18
18
from typing import List , Optional
19
19
20
- import pytz
21
-
22
20
from .. import convert , utils
23
21
from ..client_base import DEFAULT
24
22
from ..client_default import Client
@@ -99,7 +97,6 @@ def directions(
99
97
profile : Optional [str ] = "WALK,TRANSIT" ,
100
98
date : Optional [datetime .date ] = datetime .datetime .now ().date (),
101
99
time : Optional [datetime .time ] = datetime .datetime .now ().time (),
102
- timezone : Optional [str ] = "UTC" ,
103
100
arrive_by : Optional [bool ] = False ,
104
101
num_itineraries : Optional [int ] = 3 ,
105
102
dry_run : Optional [bool ] = None ,
@@ -121,10 +118,6 @@ def directions(
121
118
:param time: Time of departure or arrival. Default value: current time.
122
119
:type time: datetime.time
123
120
124
- :param timezone: Timezone used to transform output departure and arrival timestamps to naive
125
- datetimes. Default value: UTC.
126
- :type time: str
127
-
128
121
:arrive_by: Whether the itinerary should depart at the specified time (False), or arrive to
129
122
the destination at the specified time (True). Default value: False.
130
123
:type arrive_by: bool
@@ -172,22 +165,21 @@ def directions(
172
165
response = self .client ._request (
173
166
"/otp/routers/default/index/graphql" , post_params = params , dry_run = dry_run
174
167
)
175
- return self ._parse_directions_response (response , num_itineraries , timezone )
168
+ return self ._parse_directions_response (response , num_itineraries )
176
169
177
- def _timestamp_to_naive_datetime (self , timestamp , timezone ):
170
+ def _timestamp_to_utc_datetime (self , timestamp ):
178
171
dt = datetime .datetime .fromtimestamp (timestamp / 1000 )
179
- aware_dt = dt .astimezone (pytz .timezone (timezone ))
180
- return aware_dt .replace (tzinfo = None )
172
+ return dt .astimezone (datetime .timezone .utc )
181
173
182
- def _parse_directions_response (self , response , num_itineraries , timezone ):
174
+ def _parse_directions_response (self , response , num_itineraries ):
183
175
if response is None : # pragma: no cover
184
176
return Directions () if num_itineraries > 1 else Direction ()
185
177
186
178
directions = []
187
179
for itinerary in response ["data" ]["plan" ]["itineraries" ]:
188
180
distance , geometry = self ._parse_legs (itinerary ["legs" ])
189
- departure_datetime = self ._timestamp_to_naive_datetime (itinerary ["startTime" ], timezone )
190
- arrival_datetime = self ._timestamp_to_naive_datetime (itinerary ["endTime" ], timezone )
181
+ departure_datetime = self ._timestamp_to_utc_datetime (itinerary ["startTime" ])
182
+ arrival_datetime = self ._timestamp_to_utc_datetime (itinerary ["endTime" ])
191
183
directions .append (
192
184
Direction (
193
185
geometry = geometry ,
@@ -210,7 +202,7 @@ def _parse_legs(self, legs):
210
202
geometry = []
211
203
for leg in legs :
212
204
points = utils .decode_polyline5 (leg ["legGeometry" ]["points" ])
213
- geometry .extend (points )
205
+ geometry .extend (list ( reversed ( points )) )
214
206
distance += int (leg ["distance" ])
215
207
216
208
return distance , geometry
@@ -233,7 +225,7 @@ def isochrones(
233
225
use. Default: "WALK,TRANSIT"
234
226
:type profile: str
235
227
236
- :time: Departure date and time (timezone aware). The default value is now (UTC).
228
+ :time: Departure datetime (timezone aware). The default value is now (UTC).
237
229
:type time: datetime.datetime
238
230
239
231
:cutoff: The maximum travel duration in seconds. The default value is one hour.
@@ -298,7 +290,7 @@ def raster(
298
290
use. Default: "WALK,TRANSIT"
299
291
:type profile: str
300
292
301
- :time: Departure date and time (timezone aware). The default value is now (UTC).
293
+ :time: Departure datetime (timezone aware). The default value is now (UTC).
302
294
:type time: datetime.datetime
303
295
304
296
:cutoff: The maximum travel duration in seconds. The default value is one hour.
0 commit comments