diff --git a/homeassistant/components/sensor/gtfs.py b/homeassistant/components/sensor/gtfs.py index cc1137e23fdea6..081361aa32ed16 100644 --- a/homeassistant/components/sensor/gtfs.py +++ b/homeassistant/components/sensor/gtfs.py @@ -65,22 +65,20 @@ def get_next_departure(sched, start_station_id, end_station_id, offset): sql_query = text(""" SELECT trip.trip_id, trip.route_id, - time(origin_stop_time.departure_time), - time(destination_stop_time.arrival_time), - time(origin_stop_time.arrival_time), - time(origin_stop_time.departure_time), - origin_stop_time.drop_off_type, - origin_stop_time.pickup_type, - origin_stop_time.shape_dist_traveled, - origin_stop_time.stop_headsign, - origin_stop_time.stop_sequence, - time(destination_stop_time.arrival_time), - time(destination_stop_time.departure_time), - destination_stop_time.drop_off_type, - destination_stop_time.pickup_type, - destination_stop_time.shape_dist_traveled, - destination_stop_time.stop_headsign, - destination_stop_time.stop_sequence + time(origin_stop_time.arrival_time) AS origin_arrival_time, + time(origin_stop_time.departure_time) AS origin_depart_time, + origin_stop_time.drop_off_type AS origin_drop_off_type, + origin_stop_time.pickup_type AS origin_pickup_type, + origin_stop_time.shape_dist_traveled AS origin_shape_dist_traveled, + origin_stop_time.stop_headsign AS origin_stop_headsign, + origin_stop_time.stop_sequence AS origin_stop_sequence, + time(destination_stop_time.arrival_time) AS dest_arrival_time, + time(destination_stop_time.departure_time) AS dest_depart_time, + destination_stop_time.drop_off_type AS dest_drop_off_type, + destination_stop_time.pickup_type AS dest_pickup_type, + destination_stop_time.shape_dist_traveled AS dest_dist_traveled, + destination_stop_time.stop_headsign AS dest_stop_headsign, + destination_stop_time.stop_sequence AS dest_stop_sequence FROM trips trip INNER JOIN calendar calendar ON trip.service_id = calendar.service_id @@ -93,13 +91,14 @@ def get_next_departure(sched, start_station_id, end_station_id, offset): INNER JOIN stops end_station ON destination_stop_time.stop_id = end_station.stop_id WHERE calendar.{day_name} = 1 - AND time(origin_stop_time.departure_time) > time(:now_str) + AND origin_depart_time > time(:now_str) AND start_station.stop_id = :origin_station_id AND end_station.stop_id = :end_station_id - AND origin_stop_time.stop_sequence < destination_stop_time.stop_sequence + AND origin_stop_sequence < dest_stop_sequence AND calendar.start_date <= :today AND calendar.end_date >= :today - ORDER BY origin_stop_time.departure_time LIMIT 1; + ORDER BY origin_stop_time.departure_time + LIMIT 1 """.format(day_name=day_name)) result = sched.engine.execute(sql_query, now_str=now_str, origin_station_id=origin_station.id, @@ -112,46 +111,46 @@ def get_next_departure(sched, start_station_id, end_station_id, offset): if item == {}: return None - departure_time_string = '{} {}'.format(today, item[2]) - arrival_time_string = '{} {}'.format(today, item[3]) - departure_time = datetime.datetime.strptime(departure_time_string, - TIME_FORMAT) - arrival_time = datetime.datetime.strptime(arrival_time_string, - TIME_FORMAT) + origin_arrival_time = '{} {}'.format(today, item['origin_arrival_time']) + origin_depart_time = '{} {}'.format(today, item['origin_depart_time']) + dest_arrival_time = '{} {}'.format(today, item['dest_arrival_time']) + dest_depart_time = '{} {}'.format(today, item['dest_depart_time']) - seconds_until = (departure_time-datetime.datetime.now()).total_seconds() - minutes_until = int(seconds_until / 60) + depart_time = datetime.datetime.strptime(origin_depart_time, TIME_FORMAT) + arrival_time = datetime.datetime.strptime(dest_arrival_time, TIME_FORMAT) - route = sched.routes_by_id(item[1])[0] + seconds_until = (depart_time - datetime.datetime.now()).total_seconds() + minutes_until = int(seconds_until / 60) - origin_stoptime_arrival_time = '{} {}'.format(today, item[4]) - origin_stoptime_departure_time = '{} {}'.format(today, item[5]) - dest_stoptime_arrival_time = '{} {}'.format(today, item[11]) - dest_stoptime_depart_time = '{} {}'.format(today, item[12]) + route = sched.routes_by_id(item['route_id'])[0] origin_stop_time_dict = { - 'Arrival Time': origin_stoptime_arrival_time, - 'Departure Time': origin_stoptime_departure_time, - 'Drop Off Type': item[6], 'Pickup Type': item[7], - 'Shape Dist Traveled': item[8], 'Headsign': item[9], - 'Sequence': item[10] + 'Arrival Time': origin_arrival_time, + 'Departure Time': origin_depart_time, + 'Drop Off Type': item['origin_drop_off_type'], + 'Pickup Type': item['origin_pickup_type'], + 'Shape Dist Traveled': item['origin_shape_dist_traveled'], + 'Headsign': item['origin_stop_headsign'], + 'Sequence': item['origin_stop_sequence'] } destination_stop_time_dict = { - 'Arrival Time': dest_stoptime_arrival_time, - 'Departure Time': dest_stoptime_depart_time, - 'Drop Off Type': item[13], 'Pickup Type': item[14], - 'Shape Dist Traveled': item[15], 'Headsign': item[16], - 'Sequence': item[17] + 'Arrival Time': dest_arrival_time, + 'Departure Time': dest_depart_time, + 'Drop Off Type': item['dest_drop_off_type'], + 'Pickup Type': item['dest_pickup_type'], + 'Shape Dist Traveled': item['dest_dist_traveled'], + 'Headsign': item['dest_stop_headsign'], + 'Sequence': item['dest_stop_sequence'] } return { - 'trip_id': item[0], - 'trip': sched.trips_by_id(item[0])[0], + 'trip_id': item['trip_id'], + 'trip': sched.trips_by_id(item['trip_id'])[0], 'route': route, 'agency': sched.agencies_by_id(route.agency_id)[0], 'origin_station': origin_station, - 'departure_time': departure_time, + 'departure_time': depart_time, 'destination_station': destination_station, 'arrival_time': arrival_time, 'seconds_until_departure': seconds_until,