34 lines
1.2 KiB
Python
34 lines
1.2 KiB
Python
from google.transit import gtfs_realtime_pb2
|
|
from .stop import trip_arrival_in_minutes
|
|
from .route import Route, is_valid_route
|
|
|
|
|
|
class Train(object):
|
|
def __init__(self, train_proto: gtfs_realtime_pb2.FeedEntity):
|
|
self.train_proto: gtfs_realtime_pb2.FeedEntity = train_proto
|
|
|
|
def get_arrival_at(self, stop_id) -> int | None:
|
|
"""
|
|
returns the routes stop time at a given stop ID in minutes
|
|
if not found, returns None
|
|
:param stop_id: stop ID of arrival station
|
|
:return: arrival time in minutes
|
|
"""
|
|
for stop_time_update in self.train_proto.trip_update.stop_time_update:
|
|
if stop_time_update.stop_id == stop_id:
|
|
return trip_arrival_in_minutes(stop_time_update)
|
|
return None
|
|
|
|
def _get_route(self) -> str:
|
|
return self.train_proto.trip_update.trip.route_id
|
|
|
|
def get_route(self) -> Route:
|
|
return Route(self.train_proto.trip_update.trip.route_id)
|
|
|
|
def has_trips(self) -> bool:
|
|
return self.train_proto.trip_update is not None \
|
|
and len(self.train_proto.trip_update.stop_time_update) > 0 and is_valid_route(self._get_route())
|
|
|
|
def __str__(self):
|
|
return f"{self.train_proto}"
|