From d2c9fa40755cf26e45a0d0ce0192f4ac545acd8e Mon Sep 17 00:00:00 2001 From: G Johansson Date: Thu, 5 May 2022 20:55:52 +0200 Subject: [PATCH] Bump pytrafikverket to 0.2.0.1 (#71131) * Bump pytrafikverket to 0.2.0.1 * Use system timezone * Minor review changes * current time * Adjustments timezone --- .../trafikverket_ferry/coordinator.py | 21 ++++++++------ .../trafikverket_ferry/manifest.json | 2 +- .../components/trafikverket_ferry/sensor.py | 15 +++++----- .../trafikverket_train/manifest.json | 2 +- .../components/trafikverket_train/sensor.py | 29 ++++++++----------- .../trafikverket_weatherstation/manifest.json | 2 +- .../trafikverket_weatherstation/sensor.py | 10 +++---- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 9 files changed, 40 insertions(+), 45 deletions(-) diff --git a/homeassistant/components/trafikverket_ferry/coordinator.py b/homeassistant/components/trafikverket_ferry/coordinator.py index 052341cd12e..96a1e58c6c9 100644 --- a/homeassistant/components/trafikverket_ferry/coordinator.py +++ b/homeassistant/components/trafikverket_ferry/coordinator.py @@ -13,7 +13,7 @@ from homeassistant.const import CONF_API_KEY, CONF_WEEKDAY, WEEKDAYS from homeassistant.core import HomeAssistant from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed -from homeassistant.util.dt import UTC, as_utc, parse_time +from homeassistant.util import dt from .const import CONF_FROM, CONF_TIME, CONF_TO, DOMAIN @@ -58,21 +58,23 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator): ) self._from: str = entry.data[CONF_FROM] self._to: str = entry.data[CONF_TO] - self._time: time | None = parse_time(entry.data[CONF_TIME]) + self._time: time | None = dt.parse_time(entry.data[CONF_TIME]) self._weekdays: list[str] = entry.data[CONF_WEEKDAY] async def _async_update_data(self) -> dict[str, Any]: """Fetch data from Trafikverket.""" departure_day = next_departuredate(self._weekdays) - currenttime = datetime.now() + current_time = dt.now() when = ( - datetime.combine(departure_day, self._time) + datetime.combine( + departure_day, self._time, dt.get_time_zone(self.hass.config.time_zone) + ) if self._time - else datetime.now() + else dt.now() ) - if currenttime > when: - when = currenttime + if current_time > when: + when = current_time try: routedata: FerryStop = await self._ferry_api.async_get_next_ferry_stop( @@ -84,10 +86,11 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator): ) from error states = { - "departure_time": routedata.departure_time.replace(tzinfo=UTC), + "departure_time": routedata.departure_time, "departure_from": routedata.from_harbor_name, "departure_to": routedata.to_harbor_name, - "departure_modified": as_utc(routedata.modified_time.replace(tzinfo=UTC)), + "departure_modified": routedata.modified_time, "departure_information": routedata.other_information, } + _LOGGER.debug("States: %s", states) return states diff --git a/homeassistant/components/trafikverket_ferry/manifest.json b/homeassistant/components/trafikverket_ferry/manifest.json index 90864c7e358..d333473f169 100644 --- a/homeassistant/components/trafikverket_ferry/manifest.json +++ b/homeassistant/components/trafikverket_ferry/manifest.json @@ -2,7 +2,7 @@ "domain": "trafikverket_ferry", "name": "Trafikverket Ferry", "documentation": "https://www.home-assistant.io/integrations/trafikverket_ferry", - "requirements": ["pytrafikverket==0.1.6.2"], + "requirements": ["pytrafikverket==0.2.0.1"], "codeowners": ["@gjohansson-ST"], "config_flow": true, "iot_class": "cloud_polling", diff --git a/homeassistant/components/trafikverket_ferry/sensor.py b/homeassistant/components/trafikverket_ferry/sensor.py index 682c2073f76..d93aecd38c1 100644 --- a/homeassistant/components/trafikverket_ferry/sensor.py +++ b/homeassistant/components/trafikverket_ferry/sensor.py @@ -3,8 +3,7 @@ from __future__ import annotations from collections.abc import Callable from dataclasses import dataclass -from datetime import timedelta -import logging +from datetime import datetime, timedelta from typing import Any from homeassistant.components.sensor import ( @@ -20,12 +19,11 @@ from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import StateType from homeassistant.helpers.update_coordinator import CoordinatorEntity +from homeassistant.util.dt import as_utc from .const import ATTRIBUTION, DOMAIN from .coordinator import TVDataUpdateCoordinator -_LOGGER = logging.getLogger(__name__) - ATTR_FROM = "from_harbour" ATTR_TO = "to_harbour" ATTR_MODIFIED_TIME = "modified_time" @@ -39,7 +37,7 @@ SCAN_INTERVAL = timedelta(minutes=5) class TrafikverketRequiredKeysMixin: """Mixin for required keys.""" - value_fn: Callable[[dict[str, Any]], StateType] + value_fn: Callable[[dict[str, Any]], StateType | datetime] info_fn: Callable[[dict[str, Any]], StateType | list] @@ -56,7 +54,7 @@ SENSOR_TYPES: tuple[TrafikverketSensorEntityDescription, ...] = ( name="Departure Time", icon="mdi:clock", device_class=SensorDeviceClass.TIMESTAMP, - value_fn=lambda data: data["departure_time"], + value_fn=lambda data: as_utc(data["departure_time"]), info_fn=lambda data: data["departure_information"], ), TrafikverketSensorEntityDescription( @@ -78,7 +76,7 @@ SENSOR_TYPES: tuple[TrafikverketSensorEntityDescription, ...] = ( name="Departure Modified", icon="mdi:clock", device_class=SensorDeviceClass.TIMESTAMP, - value_fn=lambda data: data["departure_modified"], + value_fn=lambda data: as_utc(data["departure_modified"]), info_fn=lambda data: data["departure_information"], entity_registry_enabled_default=False, ), @@ -122,7 +120,7 @@ class FerrySensor(CoordinatorEntity[TVDataUpdateCoordinator], SensorEntity): entry_type=DeviceEntryType.SERVICE, identifiers={(DOMAIN, entry_id)}, manufacturer="Trafikverket", - model="v1.2", + model="v2.0", name=name, configuration_url="https://api.trafikinfo.trafikverket.se/", ) @@ -133,6 +131,7 @@ class FerrySensor(CoordinatorEntity[TVDataUpdateCoordinator], SensorEntity): self._attr_native_value = self.entity_description.value_fn( self.coordinator.data ) + self._attr_extra_state_attributes = { "other_information": self.entity_description.info_fn(self.coordinator.data), } diff --git a/homeassistant/components/trafikverket_train/manifest.json b/homeassistant/components/trafikverket_train/manifest.json index b3bf23ce5c4..0432670f15c 100644 --- a/homeassistant/components/trafikverket_train/manifest.json +++ b/homeassistant/components/trafikverket_train/manifest.json @@ -2,7 +2,7 @@ "domain": "trafikverket_train", "name": "Trafikverket Train", "documentation": "https://www.home-assistant.io/integrations/trafikverket_train", - "requirements": ["pytrafikverket==0.1.6.2"], + "requirements": ["pytrafikverket==0.2.0.1"], "codeowners": ["@endor-force", "@gjohansson-ST"], "config_flow": true, "iot_class": "cloud_polling", diff --git a/homeassistant/components/trafikverket_train/sensor.py b/homeassistant/components/trafikverket_train/sensor.py index 7bcd796bb16..6ae6af7d363 100644 --- a/homeassistant/components/trafikverket_train/sensor.py +++ b/homeassistant/components/trafikverket_train/sensor.py @@ -24,7 +24,7 @@ from homeassistant.helpers.device_registry import DeviceEntryType from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType -from homeassistant.util.dt import as_utc, get_time_zone, parse_time +from homeassistant.util import dt from .const import CONF_FROM, CONF_TIME, CONF_TO, CONF_TRAINS, DOMAIN from .util import create_unique_id @@ -42,7 +42,6 @@ ATTR_DEVIATIONS = "deviations" ICON = "mdi:train" SCAN_INTERVAL = timedelta(minutes=5) -STOCKHOLM_TIMEZONE = get_time_zone("Europe/Stockholm") PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { @@ -111,7 +110,9 @@ async def async_setup_entry( ) from error train_time = ( - parse_time(entry.data.get(CONF_TIME, "")) if entry.data.get(CONF_TIME) else None + dt.parse_time(entry.data.get(CONF_TIME, "")) + if entry.data.get(CONF_TIME) + else None ) async_add_entities( @@ -153,7 +154,7 @@ def next_departuredate(departure: list[str]) -> date: def _to_iso_format(traintime: datetime) -> str: """Return isoformatted utc time.""" - return as_utc(traintime.replace(tzinfo=STOCKHOLM_TIMEZONE)).isoformat() + return dt.as_utc(traintime).isoformat() class TrainSensor(SensorEntity): @@ -183,7 +184,7 @@ class TrainSensor(SensorEntity): entry_type=DeviceEntryType.SERVICE, identifiers={(DOMAIN, entry_id)}, manufacturer="Trafikverket", - model="v1.2", + model="v2.0", name=name, configuration_url="https://api.trafikinfo.trafikverket.se/", ) @@ -193,12 +194,12 @@ class TrainSensor(SensorEntity): async def async_update(self) -> None: """Retrieve latest state.""" - when = datetime.now() + when = dt.now() _state: TrainStop | None = None if self._time: departure_day = next_departuredate(self._weekday) - when = datetime.combine(departure_day, self._time).replace( - tzinfo=STOCKHOLM_TIMEZONE + when = datetime.combine( + departure_day, self._time, dt.get_time_zone(self.hass.config.time_zone) ) try: if self._time: @@ -222,17 +223,11 @@ class TrainSensor(SensorEntity): self._attr_available = True # The original datetime doesn't provide a timezone so therefore attaching it here. - self._attr_native_value = _state.advertised_time_at_location.replace( - tzinfo=STOCKHOLM_TIMEZONE - ) + self._attr_native_value = dt.as_utc(_state.advertised_time_at_location) if _state.time_at_location: - self._attr_native_value = _state.time_at_location.replace( - tzinfo=STOCKHOLM_TIMEZONE - ) + self._attr_native_value = dt.as_utc(_state.time_at_location) if _state.estimated_time_at_location: - self._attr_native_value = _state.estimated_time_at_location.replace( - tzinfo=STOCKHOLM_TIMEZONE - ) + self._attr_native_value = dt.as_utc(_state.estimated_time_at_location) self._update_attributes(_state) diff --git a/homeassistant/components/trafikverket_weatherstation/manifest.json b/homeassistant/components/trafikverket_weatherstation/manifest.json index 4001856b703..e7efca9b24a 100644 --- a/homeassistant/components/trafikverket_weatherstation/manifest.json +++ b/homeassistant/components/trafikverket_weatherstation/manifest.json @@ -2,7 +2,7 @@ "domain": "trafikverket_weatherstation", "name": "Trafikverket Weather Station", "documentation": "https://www.home-assistant.io/integrations/trafikverket_weatherstation", - "requirements": ["pytrafikverket==0.1.6.2"], + "requirements": ["pytrafikverket==0.2.0.1"], "codeowners": ["@endor-force", "@gjohansson-ST"], "config_flow": true, "iot_class": "cloud_polling", diff --git a/homeassistant/components/trafikverket_weatherstation/sensor.py b/homeassistant/components/trafikverket_weatherstation/sensor.py index e659e42f82b..c54c9f67388 100644 --- a/homeassistant/components/trafikverket_weatherstation/sensor.py +++ b/homeassistant/components/trafikverket_weatherstation/sensor.py @@ -24,13 +24,11 @@ from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import StateType from homeassistant.helpers.update_coordinator import CoordinatorEntity -from homeassistant.util.dt import as_utc, get_time_zone +from homeassistant.util.dt import as_utc from .const import ATTRIBUTION, CONF_STATION, DOMAIN, NONE_IS_ZERO_SENSORS from .coordinator import TVDataUpdateCoordinator -STOCKHOLM_TIMEZONE = get_time_zone("Europe/Stockholm") - @dataclass class TrafikverketRequiredKeysMixin: @@ -156,8 +154,8 @@ async def async_setup_entry( def _to_datetime(measuretime: str) -> datetime: """Return isoformatted utc time.""" - time_obj = datetime.strptime(measuretime, "%Y-%m-%dT%H:%M:%S") - return as_utc(time_obj.replace(tzinfo=STOCKHOLM_TIMEZONE)) + time_obj = datetime.strptime(measuretime, "%Y-%m-%dT%H:%M:%S.%f%z") + return as_utc(time_obj) class TrafikverketWeatherStation( @@ -184,7 +182,7 @@ class TrafikverketWeatherStation( entry_type=DeviceEntryType.SERVICE, identifiers={(DOMAIN, entry_id)}, manufacturer="Trafikverket", - model="v1.2", + model="v2.0", name=sensor_station, configuration_url="https://api.trafikinfo.trafikverket.se/", ) diff --git a/requirements_all.txt b/requirements_all.txt index 777cd79af74..eae4a2c3920 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1978,7 +1978,7 @@ pytradfri[async]==9.0.0 # homeassistant.components.trafikverket_ferry # homeassistant.components.trafikverket_train # homeassistant.components.trafikverket_weatherstation -pytrafikverket==0.1.6.2 +pytrafikverket==0.2.0.1 # homeassistant.components.usb pyudev==0.22.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 205ac163595..0cb0cf2b69f 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1301,7 +1301,7 @@ pytradfri[async]==9.0.0 # homeassistant.components.trafikverket_ferry # homeassistant.components.trafikverket_train # homeassistant.components.trafikverket_weatherstation -pytrafikverket==0.1.6.2 +pytrafikverket==0.2.0.1 # homeassistant.components.usb pyudev==0.22.0