From 660c9644f9d9deb4d865543bd2ad5a12fcaae92b Mon Sep 17 00:00:00 2001 From: Profitroll <47523801+profitrollgame@users.noreply.github.com> Date: Sat, 24 Sep 2022 11:40:38 +0200 Subject: [PATCH] Major classes changes --- pyrmv/classes/Leg.py | 23 ++++++++++++ pyrmv/classes/Message.py | 75 ++++++++++++++++++++++++++++++++++++++++ pyrmv/classes/Stop.py | 21 +++++++++-- 3 files changed, 116 insertions(+), 3 deletions(-) create mode 100644 pyrmv/classes/Message.py diff --git a/pyrmv/classes/Leg.py b/pyrmv/classes/Leg.py index cc768a4..ae6ed56 100644 --- a/pyrmv/classes/Leg.py +++ b/pyrmv/classes/Leg.py @@ -1,9 +1,12 @@ from pyrmv.classes.Gis import Gis +from pyrmv.classes.Message import Message from pyrmv.classes.Stop import StopTrip from isodate import parse_duration class Leg(): + def __init__(self, data: dict): + self.origin = StopTrip(data["Origin"]) self.destination = StopTrip(data["Destination"]) if "GisRef" in data: @@ -13,7 +16,27 @@ class Leg(): self.index = data["idx"] self.name = data["name"] self.type = data["type"] + + if "direction" in data: + self.direction = data["direction"] + else: + self.direction = None + + if "Messages" in data: + messages = [] + for message in data["Messages"]["Message"]: + messages.append(Message(message)) + self.messages = messages + else: + self.messages = None + + if "number" in data: + self.number = data["number"] + else: + self.number = None + self.duration = parse_duration(data["duration"]) + if "dist" in data: self.distance = data["dist"] else: diff --git a/pyrmv/classes/Message.py b/pyrmv/classes/Message.py new file mode 100644 index 0000000..c6729a3 --- /dev/null +++ b/pyrmv/classes/Message.py @@ -0,0 +1,75 @@ +from pyrmv.classes.Stop import Stop +from datetime import datetime +from isodate import parse_duration + +class Url(): + + def __init__(self, data: dict) -> None: + self.name = data["name"] + self.url = data["url"] + + def __str__(self) -> str: + return f"{self.name}: {self.url}" + +class Channel(): + + def __init__(self, data: dict) -> None: + self.name = data["name"] + url = [] + for link in url: + url.append(Url(link)) + self.url = url + self.time_start = datetime.strptime(data["validFromTime"], "%H:%M:%S") + self.date_start = datetime.strptime(data["validFromDate"], "%Y-%m-%d") + self.time_end = datetime.strptime(data["validToTime"], "%H:%M:%S") + self.date_end = datetime.strptime(data["validToDate"], "%Y-%m-%d") + + def __str__(self) -> str: + return f"{self.name}: from {self.time_start} {self.date_start} until {self.time_end} {self.date_end}" + + +class Message(): + + def __init__(self, data: dict) -> None: + + affected_stops = [] + for stop in data["affectedStops"]["StopLocation"]: + affected_stops.append(Stop(stop)) + self.affected_stops = affected_stops + + self.valid_from_stop = Stop(data["validFromStop"]) + self.valid_to_stop = Stop(data["validToStop"]) + + channels = [] + for channel in data["channel"]: + channels.append(Channel(channel)) + self.channels = channels + + self.id = data["id"] + self.active = data["act"] + self.head = data["head"] + self.lead = data["lead"] + self.text = data["text"] + self.company = data["company"] + self.category = data["category"] + self.priority = data["priority"] + self.products = data["products"] + self.icon = data["icon"] + self.time_start = datetime.strptime(data["sTime"], "%H:%M:%S") + self.date_start = datetime.strptime(data["sDate"], "%Y-%m-%d") + self.time_end = datetime.strptime(data["eTime"], "%H:%M:%S") + self.date_end = datetime.strptime(data["eDate"], "%Y-%m-%d") + self.date_start_alt = data["altStart"] + self.date_end_alt = data["altEnd"] + self.time_modified = datetime.strptime(data["modTime"], "%H:%M:%S") + self.date_modified = datetime.strptime(data["modDate"], "%Y-%m-%d") + self.daily_start = datetime.strptime(data["dailyStartingAt"], "%H:%M:%S") + self.daily_duration = parse_duration(data["dailyDuration"]) + + if "baseType" in data: + self.base_type = data["baseType"] + else: + self.base_type = None + + def __str__(self) -> str: + return f"{self.base_type} message with priority {self.products} valid from {self.time_start.time()} {self.date_start.date()} until {self.time_end.time()} {self.date_end.date()}: {self.head} - {self.lead}" \ No newline at end of file diff --git a/pyrmv/classes/Stop.py b/pyrmv/classes/Stop.py index a7cb75b..858a85c 100644 --- a/pyrmv/classes/Stop.py +++ b/pyrmv/classes/Stop.py @@ -1,7 +1,8 @@ -from time import strptime +from datetime import datetime class Stop(): + def __init__(self, data: dict): self.name = data["name"] self.id = data["id"] @@ -12,15 +13,29 @@ class Stop(): self.lon = data["lon"] self.lat = data["lat"] + def get_id(self) -> str: + if self.id != None: + return self.id + elif self.ext_id != None: + return self.ext_id + elif self.name != None: + return self.name + else: + return f"{self.lon}, {self.lat}" + def __str__(self) -> str: return f"Stop {self.name} at {self.lon}, {self.lat}" class StopTrip(Stop): + def __init__(self, data: dict): self.type = data["type"] - self.date = strptime(data["date"], "%Y-%m-%d") - self.time = strptime(data["time"], "%H:%M:%S") + self.date = datetime.strptime(data["date"], "%Y-%m-%d") + self.time = datetime.strptime(data["time"], "%H:%M:%S") super().__init__(data) + def get_id(self) -> str: + return super().get_id() + def __str__(self) -> str: return f"Stop {self.name} at {self.lon}, {self.lat} at {self.time} {self.date}" \ No newline at end of file