Bump pytrafikverket to 1.0.0 (#121210)

* Update all related files and tests to new version

* Fix missed modal

* Bump requirements
This commit is contained in:
G Johansson 2024-07-04 21:09:19 +02:00 committed by GitHub
parent 10d3c3d341
commit ebe7a4747d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
28 changed files with 158 additions and 134 deletions

View File

@ -6,7 +6,8 @@ from collections.abc import Mapping
from typing import Any from typing import Any
from pytrafikverket.exceptions import InvalidAuthentication, NoCameraFound, UnknownError from pytrafikverket.exceptions import InvalidAuthentication, NoCameraFound, UnknownError
from pytrafikverket.trafikverket_camera import CameraInfo, TrafikverketCamera from pytrafikverket.models import CameraInfoModel
from pytrafikverket.trafikverket_camera import TrafikverketCamera
import voluptuous as vol import voluptuous as vol
from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult
@ -29,15 +30,15 @@ class TVCameraConfigFlow(ConfigFlow, domain=DOMAIN):
VERSION = 3 VERSION = 3
entry: ConfigEntry | None entry: ConfigEntry | None
cameras: list[CameraInfo] cameras: list[CameraInfoModel]
api_key: str api_key: str
async def validate_input( async def validate_input(
self, sensor_api: str, location: str self, sensor_api: str, location: str
) -> tuple[dict[str, str], list[CameraInfo] | None]: ) -> tuple[dict[str, str], list[CameraInfoModel] | None]:
"""Validate input from user input.""" """Validate input from user input."""
errors: dict[str, str] = {} errors: dict[str, str] = {}
cameras: list[CameraInfo] | None = None cameras: list[CameraInfoModel] | None = None
web_session = async_get_clientsession(self.hass) web_session = async_get_clientsession(self.hass)
camera_api = TrafikverketCamera(web_session, sensor_api) camera_api = TrafikverketCamera(web_session, sensor_api)

View File

@ -14,7 +14,8 @@ from pytrafikverket.exceptions import (
NoCameraFound, NoCameraFound,
UnknownError, UnknownError,
) )
from pytrafikverket.trafikverket_camera import CameraInfo, TrafikverketCamera from pytrafikverket.models import CameraInfoModel
from pytrafikverket.trafikverket_camera import TrafikverketCamera
from homeassistant.const import CONF_API_KEY, CONF_ID from homeassistant.const import CONF_API_KEY, CONF_ID
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
@ -35,7 +36,7 @@ TIME_BETWEEN_UPDATES = timedelta(minutes=5)
class CameraData: class CameraData:
"""Dataclass for Camera data.""" """Dataclass for Camera data."""
data: CameraInfo data: CameraInfoModel
image: bytes | None image: bytes | None
@ -60,7 +61,7 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator[CameraData]):
async def _async_update_data(self) -> CameraData: async def _async_update_data(self) -> CameraData:
"""Fetch data from Trafikverket.""" """Fetch data from Trafikverket."""
camera_data: CameraInfo camera_data: CameraInfoModel
image: bytes | None = None image: bytes | None = None
try: try:
camera_data = await self._camera_api.async_get_camera(self._id) camera_data = await self._camera_api.async_get_camera(self._id)

View File

@ -6,5 +6,5 @@
"documentation": "https://www.home-assistant.io/integrations/trafikverket_camera", "documentation": "https://www.home-assistant.io/integrations/trafikverket_camera",
"iot_class": "cloud_polling", "iot_class": "cloud_polling",
"loggers": ["pytrafikverket"], "loggers": ["pytrafikverket"],
"requirements": ["pytrafikverket==0.3.10"] "requirements": ["pytrafikverket==1.0.0"]
} }

View File

@ -8,7 +8,7 @@ from typing import TYPE_CHECKING, Any
from pytrafikverket import TrafikverketFerry from pytrafikverket import TrafikverketFerry
from pytrafikverket.exceptions import InvalidAuthentication, NoFerryFound from pytrafikverket.exceptions import InvalidAuthentication, NoFerryFound
from pytrafikverket.trafikverket_ferry import FerryStop from pytrafikverket.models import FerryStopModel
from homeassistant.const import CONF_API_KEY, CONF_WEEKDAY, WEEKDAYS from homeassistant.const import CONF_API_KEY, CONF_WEEKDAY, WEEKDAYS
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
@ -86,7 +86,7 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator):
try: try:
routedata: list[ routedata: list[
FerryStop FerryStopModel
] = await self._ferry_api.async_get_next_ferry_stops( ] = await self._ferry_api.async_get_next_ferry_stops(
self._from, self._to, when, 3 self._from, self._to, when, 3
) )

View File

@ -6,5 +6,5 @@
"documentation": "https://www.home-assistant.io/integrations/trafikverket_ferry", "documentation": "https://www.home-assistant.io/integrations/trafikverket_ferry",
"iot_class": "cloud_polling", "iot_class": "cloud_polling",
"loggers": ["pytrafikverket"], "loggers": ["pytrafikverket"],
"requirements": ["pytrafikverket==0.3.10"] "requirements": ["pytrafikverket==1.0.0"]
} }

View File

@ -13,7 +13,7 @@ from pytrafikverket.exceptions import (
NoTrainAnnouncementFound, NoTrainAnnouncementFound,
UnknownError, UnknownError,
) )
from pytrafikverket.trafikverket_train import StationInfo, TrainStop from pytrafikverket.models import StationInfoModel, TrainStopModel
from homeassistant.const import CONF_API_KEY, CONF_WEEKDAY from homeassistant.const import CONF_API_KEY, CONF_WEEKDAY
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
@ -35,7 +35,7 @@ class TrainData:
departure_time: datetime | None departure_time: datetime | None
departure_state: str departure_state: str
cancelled: bool cancelled: bool | None
delayed_time: int | None delayed_time: int | None
planned_time: datetime | None planned_time: datetime | None
estimated_time: datetime | None estimated_time: datetime | None
@ -73,8 +73,8 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator[TrainData]):
def __init__( def __init__(
self, self,
hass: HomeAssistant, hass: HomeAssistant,
to_station: StationInfo, to_station: StationInfoModel,
from_station: StationInfo, from_station: StationInfoModel,
) -> None: ) -> None:
"""Initialize the Trafikverket coordinator.""" """Initialize the Trafikverket coordinator."""
super().__init__( super().__init__(
@ -86,8 +86,8 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator[TrainData]):
self._train_api = TrafikverketTrain( self._train_api = TrafikverketTrain(
async_get_clientsession(hass), self.config_entry.data[CONF_API_KEY] async_get_clientsession(hass), self.config_entry.data[CONF_API_KEY]
) )
self.from_station: StationInfo = from_station self.from_station: StationInfoModel = from_station
self.to_station: StationInfo = to_station self.to_station: StationInfoModel = to_station
self._time: time | None = dt_util.parse_time(self.config_entry.data[CONF_TIME]) self._time: time | None = dt_util.parse_time(self.config_entry.data[CONF_TIME])
self._weekdays: list[str] = self.config_entry.data[CONF_WEEKDAY] self._weekdays: list[str] = self.config_entry.data[CONF_WEEKDAY]
self._filter_product: str | None = self.config_entry.options.get( self._filter_product: str | None = self.config_entry.options.get(
@ -98,8 +98,8 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator[TrainData]):
"""Fetch data from Trafikverket.""" """Fetch data from Trafikverket."""
when = dt_util.now() when = dt_util.now()
state: TrainStop | None = None state: TrainStopModel | None = None
states: list[TrainStop] | None = None states: list[TrainStopModel] | None = None
if self._time: if self._time:
departure_day = next_departuredate(self._weekdays) departure_day = next_departuredate(self._weekdays)
when = datetime.combine( when = datetime.combine(

View File

@ -6,5 +6,5 @@
"documentation": "https://www.home-assistant.io/integrations/trafikverket_train", "documentation": "https://www.home-assistant.io/integrations/trafikverket_train",
"iot_class": "cloud_polling", "iot_class": "cloud_polling",
"loggers": ["pytrafikverket"], "loggers": ["pytrafikverket"],
"requirements": ["pytrafikverket==0.3.10"] "requirements": ["pytrafikverket==1.0.0"]
} }

View File

@ -11,7 +11,8 @@ from pytrafikverket.exceptions import (
MultipleWeatherStationsFound, MultipleWeatherStationsFound,
NoWeatherStationFound, NoWeatherStationFound,
) )
from pytrafikverket.trafikverket_weather import TrafikverketWeather, WeatherStationInfo from pytrafikverket.models import WeatherStationInfoModel
from pytrafikverket.trafikverket_weather import TrafikverketWeather
from homeassistant.const import CONF_API_KEY from homeassistant.const import CONF_API_KEY
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
@ -28,7 +29,7 @@ _LOGGER = logging.getLogger(__name__)
TIME_BETWEEN_UPDATES = timedelta(minutes=10) TIME_BETWEEN_UPDATES = timedelta(minutes=10)
class TVDataUpdateCoordinator(DataUpdateCoordinator[WeatherStationInfo]): class TVDataUpdateCoordinator(DataUpdateCoordinator[WeatherStationInfoModel]):
"""A Sensibo Data Update Coordinator.""" """A Sensibo Data Update Coordinator."""
config_entry: TVWeatherConfigEntry config_entry: TVWeatherConfigEntry
@ -46,7 +47,7 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator[WeatherStationInfo]):
) )
self._station = self.config_entry.data[CONF_STATION] self._station = self.config_entry.data[CONF_STATION]
async def _async_update_data(self) -> WeatherStationInfo: async def _async_update_data(self) -> WeatherStationInfoModel:
"""Fetch data from Trafikverket.""" """Fetch data from Trafikverket."""
try: try:
weatherdata = await self._weather_api.async_get_weather(self._station) weatherdata = await self._weather_api.async_get_weather(self._station)

View File

@ -6,5 +6,5 @@
"documentation": "https://www.home-assistant.io/integrations/trafikverket_weatherstation", "documentation": "https://www.home-assistant.io/integrations/trafikverket_weatherstation",
"iot_class": "cloud_polling", "iot_class": "cloud_polling",
"loggers": ["pytrafikverket"], "loggers": ["pytrafikverket"],
"requirements": ["pytrafikverket==0.3.10"] "requirements": ["pytrafikverket==1.0.0"]
} }

View File

@ -6,7 +6,7 @@ from collections.abc import Callable
from dataclasses import dataclass from dataclasses import dataclass
from datetime import datetime from datetime import datetime
from pytrafikverket.trafikverket_weather import WeatherStationInfo from pytrafikverket.models import WeatherStationInfoModel
from homeassistant.components.sensor import ( from homeassistant.components.sensor import (
SensorDeviceClass, SensorDeviceClass,
@ -47,7 +47,7 @@ PRECIPITATION_TYPE = [
class TrafikverketSensorEntityDescription(SensorEntityDescription): class TrafikverketSensorEntityDescription(SensorEntityDescription):
"""Describes Trafikverket sensor entity.""" """Describes Trafikverket sensor entity."""
value_fn: Callable[[WeatherStationInfo], StateType | datetime] value_fn: Callable[[WeatherStationInfoModel], StateType | datetime]
def add_utc_timezone(date_time: datetime | None) -> datetime | None: def add_utc_timezone(date_time: datetime | None) -> datetime | None:

View File

@ -2358,7 +2358,7 @@ pytradfri[async]==9.0.1
# homeassistant.components.trafikverket_ferry # homeassistant.components.trafikverket_ferry
# homeassistant.components.trafikverket_train # homeassistant.components.trafikverket_train
# homeassistant.components.trafikverket_weatherstation # homeassistant.components.trafikverket_weatherstation
pytrafikverket==0.3.10 pytrafikverket==1.0.0
# homeassistant.components.v2c # homeassistant.components.v2c
pytrydan==0.7.0 pytrydan==0.7.0

View File

@ -1843,7 +1843,7 @@ pytradfri[async]==9.0.1
# homeassistant.components.trafikverket_ferry # homeassistant.components.trafikverket_ferry
# homeassistant.components.trafikverket_train # homeassistant.components.trafikverket_train
# homeassistant.components.trafikverket_weatherstation # homeassistant.components.trafikverket_weatherstation
pytrafikverket==0.3.10 pytrafikverket==1.0.0
# homeassistant.components.v2c # homeassistant.components.v2c
pytrydan==0.7.0 pytrydan==0.7.0

View File

@ -6,7 +6,7 @@ from datetime import datetime
from unittest.mock import patch from unittest.mock import patch
import pytest import pytest
from pytrafikverket.trafikverket_camera import CameraInfo from pytrafikverket.models import CameraInfoModel
from homeassistant.components.trafikverket_camera.const import DOMAIN from homeassistant.components.trafikverket_camera.const import DOMAIN
from homeassistant.config_entries import SOURCE_USER from homeassistant.config_entries import SOURCE_USER
@ -21,7 +21,9 @@ from tests.test_util.aiohttp import AiohttpClientMocker
@pytest.fixture(name="load_int") @pytest.fixture(name="load_int")
async def load_integration_from_entry( async def load_integration_from_entry(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, get_camera: CameraInfo hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker,
get_camera: CameraInfoModel,
) -> MockConfigEntry: ) -> MockConfigEntry:
"""Set up the Trafikverket Camera integration in Home Assistant.""" """Set up the Trafikverket Camera integration in Home Assistant."""
aioclient_mock.get( aioclient_mock.get(
@ -51,10 +53,10 @@ async def load_integration_from_entry(
@pytest.fixture(name="get_camera") @pytest.fixture(name="get_camera")
def fixture_get_camera() -> CameraInfo: def fixture_get_camera() -> CameraInfoModel:
"""Construct Camera Mock.""" """Construct Camera Mock."""
return CameraInfo( return CameraInfoModel(
camera_name="Test Camera", camera_name="Test Camera",
camera_id="1234", camera_id="1234",
active=True, active=True,
@ -72,10 +74,10 @@ def fixture_get_camera() -> CameraInfo:
@pytest.fixture(name="get_camera2") @pytest.fixture(name="get_camera2")
def fixture_get_camera2() -> CameraInfo: def fixture_get_camera2() -> CameraInfoModel:
"""Construct Camera Mock 2.""" """Construct Camera Mock 2."""
return CameraInfo( return CameraInfoModel(
camera_name="Test Camera2", camera_name="Test Camera2",
camera_id="5678", camera_id="5678",
active=True, active=True,
@ -93,11 +95,11 @@ def fixture_get_camera2() -> CameraInfo:
@pytest.fixture(name="get_cameras") @pytest.fixture(name="get_cameras")
def fixture_get_cameras() -> CameraInfo: def fixture_get_cameras() -> CameraInfoModel:
"""Construct Camera Mock with multiple cameras.""" """Construct Camera Mock with multiple cameras."""
return [ return [
CameraInfo( CameraInfoModel(
camera_name="Test Camera", camera_name="Test Camera",
camera_id="1234", camera_id="1234",
active=True, active=True,
@ -112,7 +114,7 @@ def fixture_get_cameras() -> CameraInfo:
status="Running", status="Running",
camera_type="Road", camera_type="Road",
), ),
CameraInfo( CameraInfoModel(
camera_name="Test Camera2", camera_name="Test Camera2",
camera_id="5678", camera_id="5678",
active=True, active=True,
@ -131,10 +133,10 @@ def fixture_get_cameras() -> CameraInfo:
@pytest.fixture(name="get_camera_no_location") @pytest.fixture(name="get_camera_no_location")
def fixture_get_camera_no_location() -> CameraInfo: def fixture_get_camera_no_location() -> CameraInfoModel:
"""Construct Camera Mock.""" """Construct Camera Mock."""
return CameraInfo( return CameraInfoModel(
camera_name="Test Camera", camera_name="Test Camera",
camera_id="1234", camera_id="1234",
active=True, active=True,

View File

@ -3,7 +3,7 @@
from __future__ import annotations from __future__ import annotations
import pytest import pytest
from pytrafikverket.trafikverket_camera import CameraInfo from pytrafikverket.models import CameraInfoModel
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import STATE_ON from homeassistant.const import STATE_ON
@ -14,7 +14,7 @@ from homeassistant.core import HomeAssistant
async def test_sensor( async def test_sensor(
hass: HomeAssistant, hass: HomeAssistant,
load_int: ConfigEntry, load_int: ConfigEntry,
get_camera: CameraInfo, get_camera: CameraInfoModel,
) -> None: ) -> None:
"""Test the Trafikverket Camera binary sensor.""" """Test the Trafikverket Camera binary sensor."""

View File

@ -7,7 +7,7 @@ from unittest.mock import patch
from freezegun.api import FrozenDateTimeFactory from freezegun.api import FrozenDateTimeFactory
import pytest import pytest
from pytrafikverket.trafikverket_camera import CameraInfo from pytrafikverket.models import CameraInfoModel
from homeassistant.components.camera import async_get_image from homeassistant.components.camera import async_get_image
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
@ -24,7 +24,7 @@ async def test_camera(
freezer: FrozenDateTimeFactory, freezer: FrozenDateTimeFactory,
monkeypatch: pytest.MonkeyPatch, monkeypatch: pytest.MonkeyPatch,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
get_camera: CameraInfo, get_camera: CameraInfoModel,
) -> None: ) -> None:
"""Test the Trafikverket Camera sensor.""" """Test the Trafikverket Camera sensor."""
state1 = hass.states.get("camera.test_camera") state1 = hass.states.get("camera.test_camera")

View File

@ -6,7 +6,7 @@ from unittest.mock import patch
import pytest import pytest
from pytrafikverket.exceptions import InvalidAuthentication, NoCameraFound, UnknownError from pytrafikverket.exceptions import InvalidAuthentication, NoCameraFound, UnknownError
from pytrafikverket.trafikverket_camera import CameraInfo from pytrafikverket.models import CameraInfoModel
from homeassistant import config_entries from homeassistant import config_entries
from homeassistant.components.trafikverket_camera.const import DOMAIN from homeassistant.components.trafikverket_camera.const import DOMAIN
@ -17,7 +17,7 @@ from homeassistant.data_entry_flow import FlowResultType
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_form(hass: HomeAssistant, get_camera: CameraInfo) -> None: async def test_form(hass: HomeAssistant, get_camera: CameraInfoModel) -> None:
"""Test we get the form.""" """Test we get the form."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
@ -56,7 +56,9 @@ async def test_form(hass: HomeAssistant, get_camera: CameraInfo) -> None:
async def test_form_multiple_cameras( async def test_form_multiple_cameras(
hass: HomeAssistant, get_cameras: list[CameraInfo], get_camera2: CameraInfo hass: HomeAssistant,
get_cameras: list[CameraInfoModel],
get_camera2: CameraInfoModel,
) -> None: ) -> None:
"""Test we get the form with multiple cameras.""" """Test we get the form with multiple cameras."""
@ -108,7 +110,7 @@ async def test_form_multiple_cameras(
async def test_form_no_location_data( async def test_form_no_location_data(
hass: HomeAssistant, get_camera_no_location: CameraInfo hass: HomeAssistant, get_camera_no_location: CameraInfoModel
) -> None: ) -> None:
"""Test we get the form.""" """Test we get the form."""

View File

@ -11,9 +11,9 @@ from pytrafikverket.exceptions import (
NoCameraFound, NoCameraFound,
UnknownError, UnknownError,
) )
from pytrafikverket.models import CameraInfoModel
from homeassistant.components.trafikverket_camera.const import DOMAIN from homeassistant.components.trafikverket_camera.const import DOMAIN
from homeassistant.components.trafikverket_camera.coordinator import CameraData
from homeassistant.config_entries import SOURCE_USER, ConfigEntryState from homeassistant.config_entries import SOURCE_USER, ConfigEntryState
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed from homeassistant.exceptions import ConfigEntryAuthFailed
@ -28,7 +28,7 @@ from tests.test_util.aiohttp import AiohttpClientMocker
async def test_coordinator( async def test_coordinator(
hass: HomeAssistant, hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
get_camera: CameraData, get_camera: CameraInfoModel,
) -> None: ) -> None:
"""Test the Trafikverket Camera coordinator.""" """Test the Trafikverket Camera coordinator."""
aioclient_mock.get( aioclient_mock.get(
@ -86,7 +86,7 @@ async def test_coordinator(
async def test_coordinator_failed_update( async def test_coordinator_failed_update(
hass: HomeAssistant, hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
get_camera: CameraData, get_camera: CameraInfoModel,
sideeffect: str, sideeffect: str,
p_error: Exception, p_error: Exception,
entry_state: str, entry_state: str,
@ -123,7 +123,7 @@ async def test_coordinator_failed_update(
async def test_coordinator_failed_get_image( async def test_coordinator_failed_get_image(
hass: HomeAssistant, hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
get_camera: CameraData, get_camera: CameraInfoModel,
) -> None: ) -> None:
"""Test the Trafikverket Camera coordinator.""" """Test the Trafikverket Camera coordinator."""
aioclient_mock.get( aioclient_mock.get(

View File

@ -7,7 +7,7 @@ from unittest.mock import patch
import pytest import pytest
from pytrafikverket.exceptions import UnknownError from pytrafikverket.exceptions import UnknownError
from pytrafikverket.trafikverket_camera import CameraInfo from pytrafikverket.models import CameraInfoModel
from homeassistant.components.trafikverket_camera import async_migrate_entry from homeassistant.components.trafikverket_camera import async_migrate_entry
from homeassistant.components.trafikverket_camera.const import DOMAIN from homeassistant.components.trafikverket_camera.const import DOMAIN
@ -23,7 +23,7 @@ from tests.test_util.aiohttp import AiohttpClientMocker
async def test_setup_entry( async def test_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
get_camera: CameraInfo, get_camera: CameraInfoModel,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
) -> None: ) -> None:
"""Test setup entry.""" """Test setup entry."""
@ -55,7 +55,7 @@ async def test_setup_entry(
async def test_unload_entry( async def test_unload_entry(
hass: HomeAssistant, hass: HomeAssistant,
get_camera: CameraInfo, get_camera: CameraInfoModel,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
) -> None: ) -> None:
"""Test unload an entry.""" """Test unload an entry."""
@ -89,7 +89,7 @@ async def test_unload_entry(
async def test_migrate_entry( async def test_migrate_entry(
hass: HomeAssistant, hass: HomeAssistant,
get_camera: CameraInfo, get_camera: CameraInfoModel,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
) -> None: ) -> None:
"""Test migrate entry to version 2.""" """Test migrate entry to version 2."""
@ -136,7 +136,7 @@ async def test_migrate_entry(
) )
async def test_migrate_entry_fails_with_error( async def test_migrate_entry_fails_with_error(
hass: HomeAssistant, hass: HomeAssistant,
get_camera: CameraInfo, get_camera: CameraInfoModel,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
version: int, version: int,
unique_id: str, unique_id: str,
@ -205,7 +205,7 @@ async def test_migrate_entry_fails_no_id(
) )
entry.add_to_hass(hass) entry.add_to_hass(hass)
_camera = CameraInfo( _camera = CameraInfoModel(
camera_name="Test_camera", camera_name="Test_camera",
camera_id=None, camera_id=None,
active=True, active=True,
@ -236,7 +236,7 @@ async def test_migrate_entry_fails_no_id(
async def test_no_migration_needed( async def test_no_migration_needed(
hass: HomeAssistant, hass: HomeAssistant,
get_camera: CameraInfo, get_camera: CameraInfoModel,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
) -> None: ) -> None:
"""Test migrate entry fails, camera returns no id.""" """Test migrate entry fails, camera returns no id."""

View File

@ -3,7 +3,7 @@
from __future__ import annotations from __future__ import annotations
import pytest import pytest
from pytrafikverket.trafikverket_camera import CameraInfo from pytrafikverket.models import CameraInfoModel
from homeassistant.components.recorder import Recorder from homeassistant.components.recorder import Recorder
from homeassistant.components.recorder.history import get_significant_states from homeassistant.components.recorder.history import get_significant_states
@ -22,7 +22,7 @@ async def test_exclude_attributes(
load_int: ConfigEntry, load_int: ConfigEntry,
monkeypatch: pytest.MonkeyPatch, monkeypatch: pytest.MonkeyPatch,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
get_camera: CameraInfo, get_camera: CameraInfoModel,
) -> None: ) -> None:
"""Test camera has description and location excluded from recording.""" """Test camera has description and location excluded from recording."""
state1 = hass.states.get("camera.test_camera") state1 = hass.states.get("camera.test_camera")

View File

@ -3,7 +3,7 @@
from __future__ import annotations from __future__ import annotations
import pytest import pytest
from pytrafikverket.trafikverket_camera import CameraInfo from pytrafikverket.models import CameraInfoModel
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
@ -13,7 +13,7 @@ from homeassistant.core import HomeAssistant
async def test_sensor( async def test_sensor(
hass: HomeAssistant, hass: HomeAssistant,
load_int: ConfigEntry, load_int: ConfigEntry,
get_camera: CameraInfo, get_camera: CameraInfoModel,
) -> None: ) -> None:
"""Test the Trafikverket Camera sensor.""" """Test the Trafikverket Camera sensor."""

View File

@ -6,7 +6,7 @@ from datetime import datetime, timedelta
from unittest.mock import patch from unittest.mock import patch
import pytest import pytest
from pytrafikverket.trafikverket_ferry import FerryStop from pytrafikverket.models import FerryStopModel
from homeassistant.components.trafikverket_ferry.const import DOMAIN from homeassistant.components.trafikverket_ferry.const import DOMAIN
from homeassistant.config_entries import SOURCE_USER from homeassistant.config_entries import SOURCE_USER
@ -20,7 +20,7 @@ from tests.common import MockConfigEntry
@pytest.fixture(name="load_int") @pytest.fixture(name="load_int")
async def load_integration_from_entry( async def load_integration_from_entry(
hass: HomeAssistant, get_ferries: list[FerryStop] hass: HomeAssistant, get_ferries: list[FerryStopModel]
) -> MockConfigEntry: ) -> MockConfigEntry:
"""Set up the Trafikverket Ferry integration in Home Assistant.""" """Set up the Trafikverket Ferry integration in Home Assistant."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
@ -44,40 +44,51 @@ async def load_integration_from_entry(
@pytest.fixture(name="get_ferries") @pytest.fixture(name="get_ferries")
def fixture_get_ferries() -> list[FerryStop]: def fixture_get_ferries() -> list[FerryStopModel]:
"""Construct FerryStop Mock.""" """Construct FerryStop Mock."""
depart1 = FerryStop( depart1 = FerryStopModel(
"13", ferry_stop_id="13",
False, ferry_stop_name="Harbor1lane",
datetime(dt_util.now().year + 1, 5, 1, 12, 0, tzinfo=dt_util.UTC), short_name="Harle",
[""], deleted=False,
"0", departure_time=datetime(
datetime(dt_util.now().year, 5, 1, 12, 0, tzinfo=dt_util.UTC), dt_util.now().year + 1, 5, 1, 12, 0, tzinfo=dt_util.UTC
"Harbor 1", ),
"Harbor 2", other_information=[""],
deviation_id="0",
modified_time=datetime(dt_util.now().year, 5, 1, 12, 0, tzinfo=dt_util.UTC),
from_harbor_name="Harbor 1",
to_harbor_name="Harbor 2",
type_name="Turnaround",
) )
depart2 = FerryStop( depart2 = FerryStopModel(
"14", ferry_stop_id="14",
False, ferry_stop_name="Harbor1lane",
datetime(dt_util.now().year + 1, 5, 1, 12, 0, tzinfo=dt_util.UTC) short_name="Harle",
deleted=False,
departure_time=datetime(dt_util.now().year + 1, 5, 1, 12, 0, tzinfo=dt_util.UTC)
+ timedelta(minutes=15), + timedelta(minutes=15),
[""], other_information=[""],
"0", deviation_id="0",
datetime(dt_util.now().year, 5, 1, 12, 0, tzinfo=dt_util.UTC), modified_time=datetime(dt_util.now().year, 5, 1, 12, 0, tzinfo=dt_util.UTC),
"Harbor 1", from_harbor_name="Harbor 1",
"Harbor 2", to_harbor_name="Harbor 2",
type_name="Turnaround",
) )
depart3 = FerryStop( depart3 = FerryStopModel(
"15", ferry_stop_id="15",
False, ferry_stop_name="Harbor1lane",
datetime(dt_util.now().year + 1, 5, 1, 12, 0, tzinfo=dt_util.UTC) short_name="Harle",
deleted=False,
departure_time=datetime(dt_util.now().year + 1, 5, 1, 12, 0, tzinfo=dt_util.UTC)
+ timedelta(minutes=30), + timedelta(minutes=30),
[""], other_information=[""],
"0", deviation_id="0",
datetime(dt_util.now().year, 5, 1, 12, 0, tzinfo=dt_util.UTC), modified_time=datetime(dt_util.now().year, 5, 1, 12, 0, tzinfo=dt_util.UTC),
"Harbor 1", from_harbor_name="Harbor 1",
"Harbor 2", to_harbor_name="Harbor 2",
type_name="Turnaround",
) )
return [depart1, depart2, depart3] return [depart1, depart2, depart3]

View File

@ -8,7 +8,7 @@ from unittest.mock import patch
from freezegun.api import FrozenDateTimeFactory from freezegun.api import FrozenDateTimeFactory
import pytest import pytest
from pytrafikverket.exceptions import InvalidAuthentication, NoFerryFound from pytrafikverket.exceptions import InvalidAuthentication, NoFerryFound
from pytrafikverket.trafikverket_ferry import FerryStop from pytrafikverket.models import FerryStopModel
from homeassistant.components.trafikverket_ferry.const import DOMAIN from homeassistant.components.trafikverket_ferry.const import DOMAIN
from homeassistant.components.trafikverket_ferry.coordinator import next_departuredate from homeassistant.components.trafikverket_ferry.coordinator import next_departuredate
@ -27,7 +27,7 @@ async def test_coordinator(
hass: HomeAssistant, hass: HomeAssistant,
freezer: FrozenDateTimeFactory, freezer: FrozenDateTimeFactory,
monkeypatch: pytest.MonkeyPatch, monkeypatch: pytest.MonkeyPatch,
get_ferries: list[FerryStop], get_ferries: list[FerryStopModel],
) -> None: ) -> None:
"""Test the Trafikverket Ferry coordinator.""" """Test the Trafikverket Ferry coordinator."""
entry = MockConfigEntry( entry = MockConfigEntry(

View File

@ -4,7 +4,7 @@ from __future__ import annotations
from unittest.mock import patch from unittest.mock import patch
from pytrafikverket.trafikverket_ferry import FerryStop from pytrafikverket.models import FerryStopModel
from homeassistant.components.trafikverket_ferry.const import DOMAIN from homeassistant.components.trafikverket_ferry.const import DOMAIN
from homeassistant.config_entries import SOURCE_USER, ConfigEntryState from homeassistant.config_entries import SOURCE_USER, ConfigEntryState
@ -15,7 +15,9 @@ from . import ENTRY_CONFIG
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_setup_entry(hass: HomeAssistant, get_ferries: list[FerryStop]) -> None: async def test_setup_entry(
hass: HomeAssistant, get_ferries: list[FerryStopModel]
) -> None:
"""Test setup entry.""" """Test setup entry."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -37,7 +39,9 @@ async def test_setup_entry(hass: HomeAssistant, get_ferries: list[FerryStop]) ->
assert len(mock_tvt_ferry.mock_calls) == 1 assert len(mock_tvt_ferry.mock_calls) == 1
async def test_unload_entry(hass: HomeAssistant, get_ferries: list[FerryStop]) -> None: async def test_unload_entry(
hass: HomeAssistant, get_ferries: list[FerryStopModel]
) -> None:
"""Test unload an entry.""" """Test unload an entry."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,

View File

@ -6,7 +6,7 @@ from datetime import timedelta
from unittest.mock import patch from unittest.mock import patch
import pytest import pytest
from pytrafikverket.trafikverket_ferry import FerryStop from pytrafikverket.models import FerryStopModel
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
@ -19,7 +19,7 @@ async def test_sensor(
hass: HomeAssistant, hass: HomeAssistant,
load_int: ConfigEntry, load_int: ConfigEntry,
monkeypatch: pytest.MonkeyPatch, monkeypatch: pytest.MonkeyPatch,
get_ferries: list[FerryStop], get_ferries: list[FerryStopModel],
) -> None: ) -> None:
"""Test the Trafikverket Ferry sensor.""" """Test the Trafikverket Ferry sensor."""
state1 = hass.states.get("sensor.harbor1_departure_from") state1 = hass.states.get("sensor.harbor1_departure_from")

View File

@ -6,7 +6,7 @@ from datetime import datetime, timedelta
from unittest.mock import patch from unittest.mock import patch
import pytest import pytest
from pytrafikverket.trafikverket_train import TrainStop from pytrafikverket.models import TrainStopModel
from homeassistant.components.trafikverket_train.const import DOMAIN from homeassistant.components.trafikverket_train.const import DOMAIN
from homeassistant.config_entries import SOURCE_USER from homeassistant.config_entries import SOURCE_USER
@ -21,8 +21,8 @@ from tests.common import MockConfigEntry
@pytest.fixture(name="load_int") @pytest.fixture(name="load_int")
async def load_integration_from_entry( async def load_integration_from_entry(
hass: HomeAssistant, hass: HomeAssistant,
get_trains: list[TrainStop], get_trains: list[TrainStopModel],
get_train_stop: TrainStop, get_train_stop: TrainStopModel,
) -> MockConfigEntry: ) -> MockConfigEntry:
"""Set up the Trafikverket Train integration in Home Assistant.""" """Set up the Trafikverket Train integration in Home Assistant."""
@ -69,11 +69,11 @@ async def load_integration_from_entry(
@pytest.fixture(name="get_trains") @pytest.fixture(name="get_trains")
def fixture_get_trains() -> list[TrainStop]: def fixture_get_trains() -> list[TrainStopModel]:
"""Construct TrainStop Mock.""" """Construct TrainStop Mock."""
depart1 = TrainStop( depart1 = TrainStopModel(
id=13, train_stop_id=13,
canceled=False, canceled=False,
advertised_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC), advertised_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
estimated_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC), estimated_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
@ -83,8 +83,8 @@ def fixture_get_trains() -> list[TrainStop]:
modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC), modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
product_description=["Regionaltåg"], product_description=["Regionaltåg"],
) )
depart2 = TrainStop( depart2 = TrainStopModel(
id=14, train_stop_id=14,
canceled=False, canceled=False,
advertised_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC) advertised_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC)
+ timedelta(minutes=15), + timedelta(minutes=15),
@ -95,8 +95,8 @@ def fixture_get_trains() -> list[TrainStop]:
modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC), modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
product_description=["Regionaltåg"], product_description=["Regionaltåg"],
) )
depart3 = TrainStop( depart3 = TrainStopModel(
id=15, train_stop_id=15,
canceled=False, canceled=False,
advertised_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC) advertised_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC)
+ timedelta(minutes=30), + timedelta(minutes=30),
@ -112,11 +112,11 @@ def fixture_get_trains() -> list[TrainStop]:
@pytest.fixture(name="get_trains_next") @pytest.fixture(name="get_trains_next")
def fixture_get_trains_next() -> list[TrainStop]: def fixture_get_trains_next() -> list[TrainStopModel]:
"""Construct TrainStop Mock.""" """Construct TrainStop Mock."""
depart1 = TrainStop( depart1 = TrainStopModel(
id=13, train_stop_id=13,
canceled=False, canceled=False,
advertised_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC), advertised_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC),
estimated_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC), estimated_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC),
@ -126,8 +126,8 @@ def fixture_get_trains_next() -> list[TrainStop]:
modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC), modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
product_description=["Regionaltåg"], product_description=["Regionaltåg"],
) )
depart2 = TrainStop( depart2 = TrainStopModel(
id=14, train_stop_id=14,
canceled=False, canceled=False,
advertised_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC) advertised_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC)
+ timedelta(minutes=15), + timedelta(minutes=15),
@ -138,8 +138,8 @@ def fixture_get_trains_next() -> list[TrainStop]:
modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC), modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
product_description=["Regionaltåg"], product_description=["Regionaltåg"],
) )
depart3 = TrainStop( depart3 = TrainStopModel(
id=15, train_stop_id=15,
canceled=False, canceled=False,
advertised_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC) advertised_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC)
+ timedelta(minutes=30), + timedelta(minutes=30),
@ -155,11 +155,11 @@ def fixture_get_trains_next() -> list[TrainStop]:
@pytest.fixture(name="get_train_stop") @pytest.fixture(name="get_train_stop")
def fixture_get_train_stop() -> TrainStop: def fixture_get_train_stop() -> TrainStopModel:
"""Construct TrainStop Mock.""" """Construct TrainStop Mock."""
return TrainStop( return TrainStopModel(
id=13, train_stop_id=13,
canceled=False, canceled=False,
advertised_time_at_location=datetime(2023, 5, 1, 11, 0, tzinfo=dt_util.UTC), advertised_time_at_location=datetime(2023, 5, 1, 11, 0, tzinfo=dt_util.UTC),
estimated_time_at_location=None, estimated_time_at_location=None,

View File

@ -12,7 +12,7 @@ from pytrafikverket.exceptions import (
NoTrainStationFound, NoTrainStationFound,
UnknownError, UnknownError,
) )
from pytrafikverket.trafikverket_train import TrainStop from pytrafikverket.models import TrainStopModel
from homeassistant import config_entries from homeassistant import config_entries
from homeassistant.components.trafikverket_train.const import ( from homeassistant.components.trafikverket_train.const import (
@ -479,8 +479,8 @@ async def test_reauth_flow_error_departures(
async def test_options_flow( async def test_options_flow(
hass: HomeAssistant, hass: HomeAssistant,
get_trains: list[TrainStop], get_trains: list[TrainStopModel],
get_train_stop: TrainStop, get_train_stop: TrainStopModel,
) -> None: ) -> None:
"""Test a reauthentication flow.""" """Test a reauthentication flow."""
entry = MockConfigEntry( entry = MockConfigEntry(

View File

@ -5,7 +5,7 @@ from __future__ import annotations
from unittest.mock import patch from unittest.mock import patch
from pytrafikverket.exceptions import InvalidAuthentication, NoTrainStationFound from pytrafikverket.exceptions import InvalidAuthentication, NoTrainStationFound
from pytrafikverket.trafikverket_train import TrainStop from pytrafikverket.models import TrainStopModel
from syrupy.assertion import SnapshotAssertion from syrupy.assertion import SnapshotAssertion
from homeassistant.components.trafikverket_train.const import DOMAIN from homeassistant.components.trafikverket_train.const import DOMAIN
@ -18,7 +18,9 @@ from . import ENTRY_CONFIG, OPTIONS_CONFIG
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_unload_entry(hass: HomeAssistant, get_trains: list[TrainStop]) -> None: async def test_unload_entry(
hass: HomeAssistant, get_trains: list[TrainStopModel]
) -> None:
"""Test unload an entry.""" """Test unload an entry."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -52,7 +54,7 @@ async def test_unload_entry(hass: HomeAssistant, get_trains: list[TrainStop]) ->
async def test_auth_failed( async def test_auth_failed(
hass: HomeAssistant, hass: HomeAssistant,
get_trains: list[TrainStop], get_trains: list[TrainStopModel],
snapshot: SnapshotAssertion, snapshot: SnapshotAssertion,
) -> None: ) -> None:
"""Test authentication failed.""" """Test authentication failed."""
@ -82,7 +84,7 @@ async def test_auth_failed(
async def test_no_stations( async def test_no_stations(
hass: HomeAssistant, hass: HomeAssistant,
get_trains: list[TrainStop], get_trains: list[TrainStopModel],
snapshot: SnapshotAssertion, snapshot: SnapshotAssertion,
) -> None: ) -> None:
"""Test stations are missing.""" """Test stations are missing."""
@ -108,7 +110,7 @@ async def test_no_stations(
async def test_migrate_entity_unique_id( async def test_migrate_entity_unique_id(
hass: HomeAssistant, hass: HomeAssistant,
get_trains: list[TrainStop], get_trains: list[TrainStopModel],
snapshot: SnapshotAssertion, snapshot: SnapshotAssertion,
entity_registry: EntityRegistry, entity_registry: EntityRegistry,
) -> None: ) -> None:

View File

@ -8,7 +8,7 @@ from unittest.mock import patch
from freezegun.api import FrozenDateTimeFactory from freezegun.api import FrozenDateTimeFactory
import pytest import pytest
from pytrafikverket.exceptions import InvalidAuthentication, NoTrainAnnouncementFound from pytrafikverket.exceptions import InvalidAuthentication, NoTrainAnnouncementFound
from pytrafikverket.trafikverket_train import TrainStop from pytrafikverket.models import TrainStopModel
from syrupy.assertion import SnapshotAssertion from syrupy.assertion import SnapshotAssertion
from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntry from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntry
@ -23,8 +23,8 @@ async def test_sensor_next(
hass: HomeAssistant, hass: HomeAssistant,
freezer: FrozenDateTimeFactory, freezer: FrozenDateTimeFactory,
load_int: ConfigEntry, load_int: ConfigEntry,
get_trains_next: list[TrainStop], get_trains_next: list[TrainStopModel],
get_train_stop: TrainStop, get_train_stop: TrainStopModel,
snapshot: SnapshotAssertion, snapshot: SnapshotAssertion,
) -> None: ) -> None:
"""Test the Trafikverket Train sensor.""" """Test the Trafikverket Train sensor."""
@ -70,7 +70,7 @@ async def test_sensor_single_stop(
hass: HomeAssistant, hass: HomeAssistant,
freezer: FrozenDateTimeFactory, freezer: FrozenDateTimeFactory,
load_int: ConfigEntry, load_int: ConfigEntry,
get_trains_next: list[TrainStop], get_trains_next: list[TrainStopModel],
snapshot: SnapshotAssertion, snapshot: SnapshotAssertion,
) -> None: ) -> None:
"""Test the Trafikverket Train sensor.""" """Test the Trafikverket Train sensor."""
@ -86,7 +86,7 @@ async def test_sensor_update_auth_failure(
hass: HomeAssistant, hass: HomeAssistant,
freezer: FrozenDateTimeFactory, freezer: FrozenDateTimeFactory,
load_int: ConfigEntry, load_int: ConfigEntry,
get_trains_next: list[TrainStop], get_trains_next: list[TrainStopModel],
snapshot: SnapshotAssertion, snapshot: SnapshotAssertion,
) -> None: ) -> None:
"""Test the Trafikverket Train sensor with authentication update failure.""" """Test the Trafikverket Train sensor with authentication update failure."""
@ -119,7 +119,7 @@ async def test_sensor_update_failure(
hass: HomeAssistant, hass: HomeAssistant,
freezer: FrozenDateTimeFactory, freezer: FrozenDateTimeFactory,
load_int: ConfigEntry, load_int: ConfigEntry,
get_trains_next: list[TrainStop], get_trains_next: list[TrainStopModel],
snapshot: SnapshotAssertion, snapshot: SnapshotAssertion,
) -> None: ) -> None:
"""Test the Trafikverket Train sensor with update failure.""" """Test the Trafikverket Train sensor with update failure."""
@ -149,7 +149,7 @@ async def test_sensor_update_failure_no_state(
hass: HomeAssistant, hass: HomeAssistant,
freezer: FrozenDateTimeFactory, freezer: FrozenDateTimeFactory,
load_int: ConfigEntry, load_int: ConfigEntry,
get_trains_next: list[TrainStop], get_trains_next: list[TrainStopModel],
snapshot: SnapshotAssertion, snapshot: SnapshotAssertion,
) -> None: ) -> None:
"""Test the Trafikverket Train sensor with update failure from empty state.""" """Test the Trafikverket Train sensor with update failure from empty state."""