Source code for aequilibrae.transit.transit_elements.service
from typing import List
from aequilibrae.transit.date_tools import create_days_between, day_of_week
[docs]
class Service:
"""Transit service built with data from calendar.txt and calendar_dates.txt from GTFS
* service_id (:obj:`str`):
* monday (:obj:`int`): Flag if the route runs on mondays (1 for **True**, 0 for **False**)
* tuesday (:obj:`int`): Flag if the route runs on tuesdays (1 for **True**, 0 for **False**)
* wednesday (:obj:`int`): Flag if the route runs on wednesdays (1 for **True**, 0 for **False**)
* thursday (:obj:`int`): Flag if the route runs on thursdays (1 for **True**, 0 for **False**)
* friday (:obj:`int`): Flag if the route runs on fridays (1 for **True**, 0 for **False**)
* saturday (:obj:`int`): Flag if the route runs on saturdays (1 for **True**, 0 for **False**)
* sunday (:obj:`int`): Flag if the route runs on sundays (1 for **True**, 0 for **False**)
* start_date (:obj:`str`): Start date for this service
* end_date (:obj:`str`): End date for this service
* dates (:obj:`List[str]`): List of all dates for which this service is active between its start and end dates
"""
def __init__(self) -> None:
self.service_id = ""
self.monday = 0
self.tuesday = 0
self.wednesday = 0
self.thursday = 0
self.friday = 0
self.saturday = 0
self.sunday = 0
self.start_date = ""
self.end_date = ""
# Not part of GTFS
self.dates = [] # type: List[str]
def _populate(self, record: tuple, headers: list) -> None:
for key, value in zip(headers, record):
if key not in self.__dict__.keys():
raise KeyError(f"{key} field in calendar.txt is unknown field for that file on GTFS")
self.__dict__[key] = value
if self.end_date < self.start_date:
raise ValueError(f"Service {self.service_id} has start date after end date")
days = [self.monday, self.tuesday, self.wednesday, self.thursday, self.friday, self.saturday, self.sunday]
dates = create_days_between(self.start_date, self.end_date)
for date in dates:
if days[day_of_week(date)]:
self.dates.append(date)