diff --git a/homeassistant/components/assist_pipeline/pipeline.py b/homeassistant/components/assist_pipeline/pipeline.py index 71e93371257..fa7d2115769 100644 --- a/homeassistant/components/assist_pipeline/pipeline.py +++ b/homeassistant/components/assist_pipeline/pipeline.py @@ -320,7 +320,7 @@ class Pipeline: wake_word_entity: str | None wake_word_id: str | None - id: str = field(default_factory=ulid_util.ulid) + id: str = field(default_factory=ulid_util.ulid_now) @classmethod def from_json(cls, data: dict[str, Any]) -> Pipeline: @@ -482,7 +482,7 @@ class PipelineRun: wake_word_settings: WakeWordSettings | None = None audio_settings: AudioSettings = field(default_factory=AudioSettings) - id: str = field(default_factory=ulid_util.ulid) + id: str = field(default_factory=ulid_util.ulid_now) stt_provider: stt.SpeechToTextEntity | stt.Provider = field(init=False, repr=False) tts_engine: str = field(init=False, repr=False) tts_options: dict | None = field(init=False, default=None) @@ -1476,7 +1476,7 @@ class PipelineStorageCollection( @callback def _get_suggested_id(self, info: dict) -> str: """Suggest an ID based on the config.""" - return ulid_util.ulid() + return ulid_util.ulid_now() async def _update_data(self, item: Pipeline, update_data: dict) -> Pipeline: """Return a new updated item.""" @@ -1664,7 +1664,7 @@ class DeviceAudioQueue: queue: asyncio.Queue[bytes | None] """Queue of audio chunks (None = stop signal)""" - id: str = field(default_factory=ulid_util.ulid) + id: str = field(default_factory=ulid_util.ulid_now) """Unique id to ensure the correct audio queue is cleaned up in websocket API.""" overflow: bool = False diff --git a/homeassistant/components/google_generative_ai_conversation/__init__.py b/homeassistant/components/google_generative_ai_conversation/__init__.py index 1154c7132d2..c507e0c046d 100644 --- a/homeassistant/components/google_generative_ai_conversation/__init__.py +++ b/homeassistant/components/google_generative_ai_conversation/__init__.py @@ -88,7 +88,7 @@ class GoogleGenerativeAIAgent(conversation.AbstractConversationAgent): conversation_id = user_input.conversation_id messages = self.history[conversation_id] else: - conversation_id = ulid.ulid() + conversation_id = ulid.ulid_now() messages = [] try: diff --git a/homeassistant/components/openai_conversation/__init__.py b/homeassistant/components/openai_conversation/__init__.py index 9f4c30d91ba..0279580e56b 100644 --- a/homeassistant/components/openai_conversation/__init__.py +++ b/homeassistant/components/openai_conversation/__init__.py @@ -141,7 +141,7 @@ class OpenAIAgent(conversation.AbstractConversationAgent): conversation_id = user_input.conversation_id messages = self.history[conversation_id] else: - conversation_id = ulid.ulid() + conversation_id = ulid.ulid_now() try: prompt = self._async_generate_prompt(raw_prompt) except TemplateError as err: diff --git a/homeassistant/components/thread/dataset_store.py b/homeassistant/components/thread/dataset_store.py index f814fbffbd0..9c5d79cc0e0 100644 --- a/homeassistant/components/thread/dataset_store.py +++ b/homeassistant/components/thread/dataset_store.py @@ -38,7 +38,7 @@ class DatasetEntry: tlv: str created: datetime = dataclasses.field(default_factory=dt_util.utcnow) - id: str = dataclasses.field(default_factory=ulid_util.ulid) + id: str = dataclasses.field(default_factory=ulid_util.ulid_now) @property def channel(self) -> int | None: diff --git a/homeassistant/components/voip/voip.py b/homeassistant/components/voip/voip.py index 6ea97268684..14e1211639e 100644 --- a/homeassistant/components/voip/voip.py +++ b/homeassistant/components/voip/voip.py @@ -37,7 +37,7 @@ from homeassistant.components.assist_pipeline.vad import ( ) from homeassistant.const import __version__ from homeassistant.core import Context, HomeAssistant -from homeassistant.util.ulid import ulid +from homeassistant.util.ulid import ulid_now from .const import CHANNELS, DOMAIN, RATE, RTP_AUDIO_SETTINGS, WIDTH @@ -219,7 +219,7 @@ class PipelineRtpDatagramProtocol(RtpDatagramProtocol): ) -> None: """Forward audio to pipeline STT and handle TTS.""" if self._session_id is None: - self._session_id = ulid() + self._session_id = ulid_now() # Play listening tone at the start of each cycle if self.listening_tone_enabled: diff --git a/homeassistant/core.py b/homeassistant/core.py index d174786d968..a552b53c9c4 100644 --- a/homeassistant/core.py +++ b/homeassistant/core.py @@ -91,7 +91,7 @@ from .util.async_ import ( from .util.json import JsonObjectType from .util.read_only_dict import ReadOnlyDict from .util.timeout import TimeoutManager -from .util.ulid import ulid, ulid_at_time +from .util.ulid import ulid_at_time, ulid_now from .util.unit_system import ( _CONF_UNIT_SYSTEM_IMPERIAL, _CONF_UNIT_SYSTEM_US_CUSTOMARY, @@ -930,7 +930,7 @@ class Context: id: str | None = None, # pylint: disable=redefined-builtin ) -> None: """Init the context.""" - self.id = id or ulid() + self.id = id or ulid_now() self.user_id = user_id self.parent_id = parent_id self.origin_event: Event | None = None diff --git a/homeassistant/util/ulid.py b/homeassistant/util/ulid.py index 643286cedb9..818b8015549 100644 --- a/homeassistant/util/ulid.py +++ b/homeassistant/util/ulid.py @@ -1,11 +1,22 @@ """Helpers to generate ulids.""" from __future__ import annotations -import time +from ulid_transform import ( + bytes_to_ulid, + ulid_at_time, + ulid_hex, + ulid_now, + ulid_to_bytes, +) -from ulid_transform import bytes_to_ulid, ulid_at_time, ulid_hex, ulid_to_bytes - -__all__ = ["ulid", "ulid_hex", "ulid_at_time", "ulid_to_bytes", "bytes_to_ulid"] +__all__ = [ + "ulid", + "ulid_hex", + "ulid_at_time", + "ulid_to_bytes", + "bytes_to_ulid", + "ulid_now", +] def ulid(timestamp: float | None = None) -> str: @@ -25,4 +36,4 @@ def ulid(timestamp: float | None = None) -> str: import ulid ulid.parse(ulid_util.ulid()) """ - return ulid_at_time(timestamp or time.time()) + return ulid_now() if timestamp is None else ulid_at_time(timestamp)