33 lines
1.3 KiB
Python
33 lines
1.3 KiB
Python
from datetime import timedelta
|
|
from typing import List, Union
|
|
|
|
from isodate import Duration, parse_duration
|
|
|
|
from ..classes.leg import Leg
|
|
from ..classes.stop import StopTrip
|
|
|
|
|
|
class Trip:
|
|
"""Trip object."""
|
|
|
|
def __init__(self, data: dict):
|
|
self.origin: StopTrip = StopTrip(data["Origin"])
|
|
self.destination: StopTrip = StopTrip(data["Destination"])
|
|
self.legs: List[Leg] = []
|
|
self.legs.extend(Leg(leg) for leg in data["LegList"]["Leg"])
|
|
self.calculation: str = data["calculation"]
|
|
self.index: int = data["idx"]
|
|
self.id: str = data["tripId"]
|
|
self.ctx_recon: str = data["ctxRecon"]
|
|
self.duration: Union[Duration, timedelta, None] = (
|
|
None if "duration" not in data else parse_duration(data["duration"])
|
|
)
|
|
self.real_time_duration: Union[Duration, timedelta, None] = (
|
|
None if "rtDuration" not in data else parse_duration(data["rtDuration"])
|
|
)
|
|
self.checksum: str = data["checksum"]
|
|
self.transfer_count: int = data.get("transferCount", 0)
|
|
|
|
def __str__(self) -> str:
|
|
return f"Trip from {self.origin.name} to {self.destination.name} lasting {self.duration} ({self.real_time_duration}) with {len(self.legs)} legs and {self.transfer_count} transfers"
|