mirror of
https://github.com/home-assistant/core.git
synced 2025-07-20 03:37:07 +00:00
[recorder] Protect against running in the event loop (#5812)
This commit is contained in:
parent
628b169393
commit
415500de23
@ -89,6 +89,8 @@ def execute(qry: QueryType) -> List[Any]:
|
|||||||
|
|
||||||
This method also retries a few times in the case of stale connections.
|
This method also retries a few times in the case of stale connections.
|
||||||
"""
|
"""
|
||||||
|
_verify_instance()
|
||||||
|
|
||||||
import sqlalchemy.exc
|
import sqlalchemy.exc
|
||||||
with session_scope() as session:
|
with session_scope() as session:
|
||||||
for _ in range(0, RETRIES):
|
for _ in range(0, RETRIES):
|
||||||
@ -152,6 +154,7 @@ def setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||||||
def query(model_name: Union[str, Any], *args) -> QueryType:
|
def query(model_name: Union[str, Any], *args) -> QueryType:
|
||||||
"""Helper to return a query handle."""
|
"""Helper to return a query handle."""
|
||||||
_verify_instance()
|
_verify_instance()
|
||||||
|
|
||||||
if isinstance(model_name, str):
|
if isinstance(model_name, str):
|
||||||
return _SESSION().query(get_model(model_name), *args)
|
return _SESSION().query(get_model(model_name), *args)
|
||||||
return _SESSION().query(model_name, *args)
|
return _SESSION().query(model_name, *args)
|
||||||
@ -481,4 +484,9 @@ def _verify_instance() -> None:
|
|||||||
"""Throw error if recorder not initialized."""
|
"""Throw error if recorder not initialized."""
|
||||||
if _INSTANCE is None:
|
if _INSTANCE is None:
|
||||||
raise RuntimeError("Recorder not initialized.")
|
raise RuntimeError("Recorder not initialized.")
|
||||||
|
|
||||||
|
ident = _INSTANCE.hass.loop.__dict__.get("_thread_ident")
|
||||||
|
if ident is not None and ident == threading.get_ident():
|
||||||
|
raise RuntimeError('Cannot be called from within the event loop')
|
||||||
|
|
||||||
_INSTANCE.block_till_db_ready()
|
_INSTANCE.block_till_db_ready()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user