mirror of
https://github.com/home-assistant/core.git
synced 2025-07-29 08:07:45 +00:00
Add typing to wsdot (#143117)
* increase wsdot typing * remove Final types * help out mypy * simplify wsdot types * minor wsdot type changes * type wsdot state
This commit is contained in:
parent
c121631fef
commit
2db60340c2
@ -65,7 +65,7 @@ def setup_platform(
|
||||
name = travel_time.get(CONF_NAME) or travel_time.get(CONF_ID)
|
||||
sensors.append(
|
||||
WashingtonStateTravelTimeSensor(
|
||||
name, config.get(CONF_API_KEY), travel_time.get(CONF_ID)
|
||||
name, config[CONF_API_KEY], travel_time.get(CONF_ID)
|
||||
)
|
||||
)
|
||||
|
||||
@ -82,20 +82,20 @@ class WashingtonStateTransportSensor(SensorEntity):
|
||||
|
||||
_attr_icon = ICON
|
||||
|
||||
def __init__(self, name, access_code):
|
||||
def __init__(self, name: str, access_code: str) -> None:
|
||||
"""Initialize the sensor."""
|
||||
self._data = {}
|
||||
self._data: dict[str, str | int | None] = {}
|
||||
self._access_code = access_code
|
||||
self._name = name
|
||||
self._state = None
|
||||
self._state: int | None = None
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
def name(self) -> str:
|
||||
"""Return the name of the sensor."""
|
||||
return self._name
|
||||
|
||||
@property
|
||||
def native_value(self):
|
||||
def native_value(self) -> int | None:
|
||||
"""Return the state of the sensor."""
|
||||
return self._state
|
||||
|
||||
@ -106,7 +106,7 @@ class WashingtonStateTravelTimeSensor(WashingtonStateTransportSensor):
|
||||
_attr_attribution = ATTRIBUTION
|
||||
_attr_native_unit_of_measurement = UnitOfTime.MINUTES
|
||||
|
||||
def __init__(self, name, access_code, travel_time_id):
|
||||
def __init__(self, name: str, access_code: str, travel_time_id: str) -> None:
|
||||
"""Construct a travel time sensor."""
|
||||
self._travel_time_id = travel_time_id
|
||||
WashingtonStateTransportSensor.__init__(self, name, access_code)
|
||||
@ -123,13 +123,17 @@ class WashingtonStateTravelTimeSensor(WashingtonStateTransportSensor):
|
||||
_LOGGER.warning("Invalid response from WSDOT API")
|
||||
else:
|
||||
self._data = response.json()
|
||||
self._state = self._data.get(ATTR_CURRENT_TIME)
|
||||
_state = self._data.get(ATTR_CURRENT_TIME)
|
||||
if not isinstance(_state, int):
|
||||
self._state = None
|
||||
else:
|
||||
self._state = _state
|
||||
|
||||
@property
|
||||
def extra_state_attributes(self) -> dict[str, Any] | None:
|
||||
"""Return other details about the sensor state."""
|
||||
if self._data is not None:
|
||||
attrs = {}
|
||||
attrs: dict[str, str | int | None | datetime] = {}
|
||||
for key in (
|
||||
ATTR_AVG_TIME,
|
||||
ATTR_NAME,
|
||||
@ -144,12 +148,15 @@ class WashingtonStateTravelTimeSensor(WashingtonStateTransportSensor):
|
||||
return None
|
||||
|
||||
|
||||
def _parse_wsdot_timestamp(timestamp):
|
||||
def _parse_wsdot_timestamp(timestamp: Any) -> datetime | None:
|
||||
"""Convert WSDOT timestamp to datetime."""
|
||||
if not timestamp:
|
||||
if not isinstance(timestamp, str):
|
||||
return None
|
||||
# ex: Date(1485040200000-0800)
|
||||
milliseconds, tzone = re.search(r"Date\((\d+)([+-]\d\d)\d\d\)", timestamp).groups()
|
||||
timestamp_parts = re.search(r"Date\((\d+)([+-]\d\d)\d\d\)", timestamp)
|
||||
if timestamp_parts is None:
|
||||
return None
|
||||
milliseconds, tzone = timestamp_parts.groups()
|
||||
return datetime.fromtimestamp(
|
||||
int(milliseconds) / 1000, tz=timezone(timedelta(hours=int(tzone)))
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user