core/homeassistant/helpers/instance_id.py

50 lines
1.1 KiB
Python

"""Helper to create a unique instance ID."""
from __future__ import annotations
import logging
import uuid
from homeassistant.core import HomeAssistant
from . import singleton, storage
DATA_KEY = "core.uuid"
DATA_VERSION = 1
LEGACY_UUID_FILE = ".uuid"
_LOGGER = logging.getLogger(__name__)
@singleton.singleton(DATA_KEY)
async def async_get(hass: HomeAssistant) -> str:
"""Get unique ID for the hass instance."""
store = storage.Store[dict[str, str]](hass, DATA_VERSION, DATA_KEY, True)
data: dict[str, str] | None = None
try:
data = await storage.async_migrator(
hass,
hass.config.path(LEGACY_UUID_FILE),
store,
)
except Exception:
_LOGGER.exception(
(
"Could not read hass instance ID from '%s' or '%s', a new instance ID "
"will be generated"
),
DATA_KEY,
LEGACY_UUID_FILE,
)
if data is not None:
return data["uuid"]
data = {"uuid": uuid.uuid4().hex}
await store.async_save(data)
return data["uuid"]