From 4333d9a7d1064f0fe19b49660175220888cf171e Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 28 Aug 2022 22:18:35 -0500 Subject: [PATCH] Fix recorder being imported before deps are installed (#77460) --- homeassistant/components/recorder/models.py | 10 --------- homeassistant/helpers/recorder.py | 23 ++++++++++++++------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/homeassistant/components/recorder/models.py b/homeassistant/components/recorder/models.py index 98c9fc7c9b2..ff53d9be3d1 100644 --- a/homeassistant/components/recorder/models.py +++ b/homeassistant/components/recorder/models.py @@ -1,8 +1,6 @@ """Models for Recorder.""" from __future__ import annotations -import asyncio -from dataclasses import dataclass, field from datetime import datetime import logging from typing import Any, TypedDict, overload @@ -32,14 +30,6 @@ class UnsupportedDialect(Exception): """The dialect or its version is not supported.""" -@dataclass -class RecorderData: - """Recorder data stored in hass.data.""" - - recorder_platforms: dict[str, Any] = field(default_factory=dict) - db_connected: asyncio.Future = field(default_factory=asyncio.Future) - - class StatisticResult(TypedDict): """Statistic result data class. diff --git a/homeassistant/helpers/recorder.py b/homeassistant/helpers/recorder.py index 2049300e460..32e08874a63 100644 --- a/homeassistant/helpers/recorder.py +++ b/homeassistant/helpers/recorder.py @@ -1,9 +1,21 @@ """Helpers to check recorder.""" import asyncio +from dataclasses import dataclass, field +from typing import Any from homeassistant.core import HomeAssistant, callback +DOMAIN = "recorder" + + +@dataclass +class RecorderData: + """Recorder data stored in hass.data.""" + + recorder_platforms: dict[str, Any] = field(default_factory=dict) + db_connected: asyncio.Future = field(default_factory=asyncio.Future) + def async_migration_in_progress(hass: HomeAssistant) -> bool: """Check to see if a recorder migration is in progress.""" @@ -18,10 +30,7 @@ def async_migration_in_progress(hass: HomeAssistant) -> bool: @callback def async_initialize_recorder(hass: HomeAssistant) -> None: """Initialize recorder data.""" - # pylint: disable-next=import-outside-toplevel - from homeassistant.components.recorder import const, models - - hass.data[const.DOMAIN] = models.RecorderData() + hass.data[DOMAIN] = RecorderData() async def async_wait_recorder(hass: HomeAssistant) -> bool: @@ -30,9 +39,7 @@ async def async_wait_recorder(hass: HomeAssistant) -> bool: Returns False immediately if the recorder is not enabled. """ # pylint: disable-next=import-outside-toplevel - from homeassistant.components.recorder import const - - if const.DOMAIN not in hass.data: + if DOMAIN not in hass.data: return False - db_connected: asyncio.Future[bool] = hass.data[const.DOMAIN].db_connected + db_connected: asyncio.Future[bool] = hass.data[DOMAIN].db_connected return await db_connected