New date and time behavior, improved typing
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from datetime import datetime
|
||||
from typing import Any, Mapping
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Any, List, Mapping, Union
|
||||
|
||||
from isodate import parse_duration
|
||||
from isodate import Duration, parse_duration
|
||||
|
||||
from pyrmv.classes.stop import Stop
|
||||
|
||||
@@ -10,8 +10,8 @@ class Url:
|
||||
"""Traffic message channel url object."""
|
||||
|
||||
def __init__(self, data: Mapping[str, Any]) -> None:
|
||||
self.name = data["name"]
|
||||
self.url = data["url"]
|
||||
self.name: str = data["name"]
|
||||
self.url: str = data["url"]
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"{self.name}: {self.url}"
|
||||
@@ -21,51 +21,84 @@ class Channel:
|
||||
"""Traffic message channel object."""
|
||||
|
||||
def __init__(self, data: Mapping[str, Any]) -> None:
|
||||
self.name = data["name"]
|
||||
self.name: str = data["name"]
|
||||
url = []
|
||||
url.extend(Url(link) for link in url)
|
||||
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")
|
||||
self.url: List[Url] = url
|
||||
self.time_start: Union[datetime, None] = (
|
||||
None
|
||||
if "validFromDate" not in data
|
||||
else datetime.strptime(
|
||||
f"{data['validFromDate']} {data['validFromTime']}", "%Y-%m-%d %H:%M:%S"
|
||||
)
|
||||
)
|
||||
self.time_end: Union[datetime, None] = (
|
||||
None
|
||||
if "validToDate" not in data
|
||||
else datetime.strptime(
|
||||
f"{data['validToDate']} {data['validToTime']}", "%Y-%m-%d %H:%M:%S"
|
||||
)
|
||||
)
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"{self.name}: from {self.time_start} {self.date_start} until {self.time_end} {self.date_end}"
|
||||
return f"{self.name}: from {self.time_start} until {self.time_end}"
|
||||
|
||||
|
||||
class Message:
|
||||
"""Traffic message object."""
|
||||
|
||||
def __init__(self, data: Mapping[str, Any]) -> None:
|
||||
self.affected_stops = []
|
||||
self.valid_from_stop = (
|
||||
self.affected_stops: List[Stop] = []
|
||||
self.valid_from_stop: Union[Stop, None] = (
|
||||
None if "validFromStop" not in data else Stop(data["validFromStop"])
|
||||
)
|
||||
self.valid_to_stop = None if "validToStop" not in data else Stop(data["validToStop"])
|
||||
self.channels = []
|
||||
self.valid_to_stop: Union[Stop, None] = (
|
||||
None if "validToStop" not in data else Stop(data["validToStop"])
|
||||
)
|
||||
self.channels: Union[Channel, None] = []
|
||||
self.channels.extend(Channel(channel) for channel in data["channel"])
|
||||
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 = None if "priority" not in data else 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"])
|
||||
self.base_type = data["baseType"] if "baseType" in data else None
|
||||
self.id: str = data["id"]
|
||||
self.active: bool = data["act"]
|
||||
self.head: str = data["head"]
|
||||
self.lead: str = data["lead"]
|
||||
self.text: str = data["text"]
|
||||
self.company: Union[str, None] = data.get("company")
|
||||
self.category: Union[str, None] = data.get("category")
|
||||
self.priority: Union[int, None] = data.get("priority")
|
||||
self.products: int = data["products"]
|
||||
self.icon: Mapping[str, Any] = data["icon"]
|
||||
self.time_start: Union[datetime, None] = (
|
||||
None
|
||||
if "validFromDate" not in data or "validFromTime" not in data
|
||||
else datetime.strptime(
|
||||
f"{data['validFromDate']} {data['validFromTime']}", "%Y-%m-%d %H:%M:%S"
|
||||
)
|
||||
)
|
||||
self.time_end: Union[datetime, None] = (
|
||||
None
|
||||
if "validToDate" not in data or "validToTime" not in data
|
||||
else datetime.strptime(
|
||||
f"{data['validToDate']} {data['validToTime']}", "%Y-%m-%d %H:%M:%S"
|
||||
)
|
||||
)
|
||||
self.date_start_alt: str = data["altStart"]
|
||||
self.date_end_alt: str = data["altEnd"]
|
||||
self.time_modified: Union[datetime, None] = (
|
||||
None
|
||||
if "modDate" not in data or "modTime" not in data
|
||||
else datetime.strptime(
|
||||
f"{data['modDate']} {data['modTime']}", "%Y-%m-%d %H:%M:%S"
|
||||
)
|
||||
)
|
||||
self.daily_start: Union[datetime, None] = (
|
||||
None
|
||||
if "dailyStartingAt" not in data
|
||||
else datetime.strptime(data["dailyStartingAt"], "%H:%M:%S")
|
||||
)
|
||||
self.daily_duration: Union[Duration, timedelta] = parse_duration(
|
||||
data["dailyDuration"]
|
||||
)
|
||||
self.base_type: Union[str, None] = data.get("baseType")
|
||||
|
||||
if "affectedStops" in data:
|
||||
self.affected_stops.extend(
|
||||
@@ -73,4 +106,4 @@ class Message:
|
||||
)
|
||||
|
||||
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}"
|
||||
return f"{self.base_type} message with priority {self.products} valid from {self.time_start} until {self.time_end}: {self.head} - {self.lead}"
|
||||
|
Reference in New Issue
Block a user