Make the async_setup_recorder_instance fixture a context manager (#121086)
This commit is contained in:
parent
61f1c8d963
commit
5029da6919
14 changed files with 51 additions and 22 deletions
|
@ -100,7 +100,7 @@ _TEST_FIXTURES: dict[str, list[str] | str] = {
|
|||
"aiohttp_client": "ClientSessionGenerator",
|
||||
"aiohttp_server": "Callable[[], TestServer]",
|
||||
"area_registry": "AreaRegistry",
|
||||
"async_setup_recorder_instance": "RecorderInstanceGenerator",
|
||||
"async_test_recorder": "RecorderInstanceGenerator",
|
||||
"caplog": "pytest.LogCaptureFixture",
|
||||
"capsys": "pytest.CaptureFixture[str]",
|
||||
"current_request_with_host": "None",
|
||||
|
|
|
@ -13,7 +13,7 @@ from tests.typing import RecorderInstanceGenerator
|
|||
|
||||
@pytest.fixture
|
||||
async def mock_recorder_before_hass(
|
||||
async_setup_recorder_instance: RecorderInstanceGenerator,
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
) -> None:
|
||||
"""Set up recorder."""
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ from tests.typing import RecorderInstanceGenerator
|
|||
|
||||
@pytest.fixture
|
||||
async def mock_recorder_before_hass(
|
||||
async_setup_recorder_instance: RecorderInstanceGenerator,
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
) -> None:
|
||||
"""Set up recorder."""
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ def _count_entity_id_in_states_meta(
|
|||
|
||||
@pytest.fixture
|
||||
async def mock_recorder_before_hass(
|
||||
async_setup_recorder_instance: RecorderInstanceGenerator,
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
) -> None:
|
||||
"""Set up recorder."""
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ from tests.typing import RecorderInstanceGenerator
|
|||
|
||||
@pytest.fixture
|
||||
async def mock_recorder_before_hass(
|
||||
async_setup_recorder_instance: RecorderInstanceGenerator,
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
) -> None:
|
||||
"""Set up recorder."""
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ from tests.typing import RecorderInstanceGenerator
|
|||
|
||||
@pytest.fixture
|
||||
async def mock_recorder_before_hass(
|
||||
async_setup_recorder_instance: RecorderInstanceGenerator,
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
) -> None:
|
||||
"""Set up recorder."""
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ from tests.typing import RecorderInstanceGenerator
|
|||
|
||||
@pytest.fixture
|
||||
async def mock_recorder_before_hass(
|
||||
async_setup_recorder_instance: RecorderInstanceGenerator,
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
) -> None:
|
||||
"""Set up recorder."""
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ from tests.typing import RecorderInstanceGenerator
|
|||
|
||||
@pytest.fixture
|
||||
async def mock_recorder_before_hass(
|
||||
async_setup_recorder_instance: RecorderInstanceGenerator,
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
) -> None:
|
||||
"""Set up recorder."""
|
||||
|
||||
|
|
|
@ -104,7 +104,7 @@ from tests.typing import RecorderInstanceGenerator
|
|||
|
||||
@pytest.fixture
|
||||
async def mock_recorder_before_hass(
|
||||
async_setup_recorder_instance: RecorderInstanceGenerator,
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
) -> None:
|
||||
"""Set up recorder."""
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ from tests.typing import RecorderInstanceGenerator
|
|||
|
||||
@pytest.fixture
|
||||
async def mock_recorder_before_hass(
|
||||
async_setup_recorder_instance: RecorderInstanceGenerator,
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
) -> None:
|
||||
"""Set up recorder."""
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ from tests.typing import RecorderInstanceGenerator, WebSocketGenerator
|
|||
|
||||
@pytest.fixture
|
||||
async def mock_recorder_before_hass(
|
||||
async_setup_recorder_instance: RecorderInstanceGenerator,
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
) -> None:
|
||||
"""Set up recorder."""
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ from tests.typing import RecorderInstanceGenerator
|
|||
|
||||
@pytest.fixture
|
||||
async def mock_recorder_before_hass(
|
||||
async_setup_recorder_instance: RecorderInstanceGenerator,
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
) -> None:
|
||||
"""Set up recorder."""
|
||||
|
||||
|
|
|
@ -95,7 +95,7 @@ KW_SENSOR_ATTRIBUTES = {
|
|||
|
||||
@pytest.fixture
|
||||
async def mock_recorder_before_hass(
|
||||
async_setup_recorder_instance: RecorderInstanceGenerator,
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
) -> None:
|
||||
"""Set up recorder patches."""
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ from __future__ import annotations
|
|||
|
||||
import asyncio
|
||||
from collections.abc import AsyncGenerator, Callable, Coroutine, Generator
|
||||
from contextlib import asynccontextmanager, contextmanager
|
||||
from contextlib import AsyncExitStack, asynccontextmanager, contextmanager
|
||||
import datetime
|
||||
import functools
|
||||
import gc
|
||||
|
@ -1385,7 +1385,7 @@ async def _async_init_recorder_component(
|
|||
|
||||
|
||||
@pytest.fixture
|
||||
async def async_setup_recorder_instance(
|
||||
async def async_test_recorder(
|
||||
recorder_db_url: str,
|
||||
enable_nightly_purge: bool,
|
||||
enable_statistics: bool,
|
||||
|
@ -1394,7 +1394,7 @@ async def async_setup_recorder_instance(
|
|||
enable_migrate_event_type_ids: bool,
|
||||
enable_migrate_entity_ids: bool,
|
||||
) -> AsyncGenerator[RecorderInstanceGenerator]:
|
||||
"""Yield callable to setup recorder instance."""
|
||||
"""Yield context manager to setup recorder instance."""
|
||||
# pylint: disable-next=import-outside-toplevel
|
||||
from homeassistant.components import recorder
|
||||
|
||||
|
@ -1477,12 +1477,13 @@ async def async_setup_recorder_instance(
|
|||
),
|
||||
):
|
||||
|
||||
async def async_setup_recorder(
|
||||
@asynccontextmanager
|
||||
async def async_test_recorder(
|
||||
hass: HomeAssistant,
|
||||
config: ConfigType | None = None,
|
||||
*,
|
||||
wait_recorder: bool = True,
|
||||
) -> recorder.Recorder:
|
||||
) -> AsyncGenerator[recorder.Recorder]:
|
||||
"""Setup and return recorder instance.""" # noqa: D401
|
||||
await _async_init_recorder_component(hass, config, recorder_db_url)
|
||||
await hass.async_block_till_done()
|
||||
|
@ -1490,7 +1491,34 @@ async def async_setup_recorder_instance(
|
|||
# The recorder's worker is not started until Home Assistant is running
|
||||
if hass.state is CoreState.running and wait_recorder:
|
||||
await async_recorder_block_till_done(hass)
|
||||
return instance
|
||||
try:
|
||||
yield instance
|
||||
finally:
|
||||
if instance.is_alive():
|
||||
await instance._async_shutdown(None)
|
||||
|
||||
yield async_test_recorder
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def async_setup_recorder_instance(
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
) -> AsyncGenerator[RecorderInstanceGenerator]:
|
||||
"""Yield callable to setup recorder instance."""
|
||||
|
||||
async with AsyncExitStack() as stack:
|
||||
|
||||
async def async_setup_recorder(
|
||||
hass: HomeAssistant,
|
||||
config: ConfigType | None = None,
|
||||
*,
|
||||
wait_recorder: bool = True,
|
||||
) -> AsyncGenerator[recorder.Recorder]:
|
||||
"""Set up and return recorder instance."""
|
||||
|
||||
return await stack.enter_async_context(
|
||||
async_test_recorder(hass, config, wait_recorder=wait_recorder)
|
||||
)
|
||||
|
||||
yield async_setup_recorder
|
||||
|
||||
|
@ -1498,11 +1526,12 @@ async def async_setup_recorder_instance(
|
|||
@pytest.fixture
|
||||
async def recorder_mock(
|
||||
recorder_config: dict[str, Any] | None,
|
||||
async_setup_recorder_instance: RecorderInstanceGenerator,
|
||||
async_test_recorder: RecorderInstanceGenerator,
|
||||
hass: HomeAssistant,
|
||||
) -> recorder.Recorder:
|
||||
) -> AsyncGenerator[recorder.Recorder]:
|
||||
"""Fixture with in-memory recorder."""
|
||||
return await async_setup_recorder_instance(hass, recorder_config)
|
||||
async with async_test_recorder(hass, recorder_config) as instance:
|
||||
yield instance
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue