Source code for aequilibrae.transit.transit_elements.fare
from sqlite3 import Connection
from aequilibrae.transit.constants import Constants, AGENCY_MULTIPLIER
[docs]
class Fare:
"""Transit Fare
* fare_id (:obj:`int`): ID of the fare as in the network model
* fare (:obj:`str`): ID of the fare as in GTFS
* agency (:obj:`str`): Corresponding agency as inputed during import
* agency_id (:obj:`int`): ID of the corresponding agency as in the network model
* price (:obj:`int`): As in GTFS
* currency (:obj:`str`): As in GTFS
* payment_method (:obj:`int`): As in GTFS
* transfer (:obj:`int`): As in GTFS
* transfer_duration (:obj:`int`): As in GTFS"""
def __init__(self, agency_id: int):
self.fare = ""
self.fare_id = -1
self.agency = ""
self.agency_id = agency_id
self.price = -1
self.currency = ""
self.payment_method = 0
self.transfer = 0
self.transfer_duration = 0
self.__get_fare_id()
[docs]
def populate(self, record: tuple, headers: list) -> None:
"""Adds fare information."""
for key, value in zip(headers, record):
if key not in self.__dict__.keys():
raise KeyError(f"{key} field in Routes.txt is unknown field for that file on GTFS")
# We convert route_id into route, as the the GTFS header for it is not maintained in our database
v = None if value in [0, ""] else value
key = "fare" if key == "fare_id" else key
key = "agency" if key == "agency_id" else key
if key in ["payment_method", "transfer", "transfer_duration"]:
v = v or self.__dict__[key]
self.__dict__[key] = v
[docs]
def save_to_database(self, conn: Connection) -> None:
"""Saves Fare attributes to the database"""
data = [
self.fare_id,
self.fare,
self.agency_id,
self.price,
self.currency,
self.payment_method,
self.transfer,
self.transfer_duration,
]
sql = """insert into fare_attributes (fare_id, fare, agency_id, price, currency, payment_method,
transfer, transfer_duration) VALUES (?, ?, ?, ?, ?, ?, ?, ?);"""
conn.execute(sql, data)
conn.commit()
def __get_fare_id(self):
c = Constants()
self.fare_id = 1 + c.fares.get(self.agency_id, AGENCY_MULTIPLIER * self.agency_id)
c.fares[self.agency_id] = self.fare_id