31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
from datetime import timedelta
|
|
from typing import Any, List, Mapping, Union
|
|
|
|
from isodate import Duration, parse_duration
|
|
|
|
from ..classes.gis import Gis
|
|
from ..classes.message import Message
|
|
from ..classes.stop import StopTrip
|
|
|
|
|
|
class Leg:
|
|
"""Trip leg object."""
|
|
|
|
def __init__(self, data: Mapping[str, Any]):
|
|
self.origin: StopTrip = StopTrip(data["Origin"])
|
|
self.destination: StopTrip = StopTrip(data["Destination"])
|
|
self.gis = (
|
|
None if "GisRef" not in data else Gis(data["GisRef"]["ref"], data["GisRoute"])
|
|
)
|
|
self.messages: List[Message] = []
|
|
self.index: Union[int, None] = data.get("idx")
|
|
self.name: str = data["name"]
|
|
self.type: Union[str, None] = data.get("type")
|
|
self.direction: Union[str, None] = data.get("direction")
|
|
self.number: Union[str, None] = data.get("number")
|
|
self.duration: Union[Duration, timedelta] = parse_duration(data["duration"])
|
|
self.distance: Union[int, None] = data.get("dist")
|
|
|
|
if "Messages" in data:
|
|
self.messages.extend(Message(message) for message in data["Messages"]["Message"])
|