mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
Fix removing nulls when encoding events for PostgreSQL (#127053)
This commit is contained in:
parent
e9bbf773d6
commit
e87542e091
@ -375,9 +375,8 @@ class EventData(Base):
|
|||||||
event: Event, dialect: SupportedDialect | None
|
event: Event, dialect: SupportedDialect | None
|
||||||
) -> bytes:
|
) -> bytes:
|
||||||
"""Create shared_data from an event."""
|
"""Create shared_data from an event."""
|
||||||
if dialect == SupportedDialect.POSTGRESQL:
|
encoder = json_bytes_strip_null if dialect == PSQL_DIALECT else json_bytes
|
||||||
bytes_result = json_bytes_strip_null(event.data)
|
bytes_result = encoder(event.data)
|
||||||
bytes_result = json_bytes(event.data)
|
|
||||||
if len(bytes_result) > MAX_EVENT_DATA_BYTES:
|
if len(bytes_result) > MAX_EVENT_DATA_BYTES:
|
||||||
_LOGGER.warning(
|
_LOGGER.warning(
|
||||||
"Event data for %s exceed maximum size of %s bytes. "
|
"Event data for %s exceed maximum size of %s bytes. "
|
||||||
|
@ -21,6 +21,7 @@ from homeassistant.const import EVENT_STATE_CHANGED
|
|||||||
import homeassistant.core as ha
|
import homeassistant.core as ha
|
||||||
from homeassistant.exceptions import InvalidEntityFormatError
|
from homeassistant.exceptions import InvalidEntityFormatError
|
||||||
from homeassistant.util import dt as dt_util
|
from homeassistant.util import dt as dt_util
|
||||||
|
from homeassistant.util.json import json_loads
|
||||||
|
|
||||||
|
|
||||||
def test_from_event_to_db_event() -> None:
|
def test_from_event_to_db_event() -> None:
|
||||||
@ -41,6 +42,18 @@ def test_from_event_to_db_event() -> None:
|
|||||||
assert event.as_dict() == db_event.to_native().as_dict()
|
assert event.as_dict() == db_event.to_native().as_dict()
|
||||||
|
|
||||||
|
|
||||||
|
def test_from_event_to_db_event_with_null() -> None:
|
||||||
|
"""Test converting event to EventData with a null with PostgreSQL."""
|
||||||
|
event = ha.Event(
|
||||||
|
"test_event",
|
||||||
|
{"some_data": "withnull\0terminator"},
|
||||||
|
)
|
||||||
|
dialect = SupportedDialect.POSTGRESQL
|
||||||
|
event_data = EventData.shared_data_bytes_from_event(event, dialect)
|
||||||
|
decoded = json_loads(event_data)
|
||||||
|
assert decoded["some_data"] == "withnull"
|
||||||
|
|
||||||
|
|
||||||
def test_from_event_to_db_state() -> None:
|
def test_from_event_to_db_state() -> None:
|
||||||
"""Test converting event to db state."""
|
"""Test converting event to db state."""
|
||||||
state = ha.State(
|
state = ha.State(
|
||||||
@ -78,6 +91,21 @@ def test_from_event_to_db_state_attributes() -> None:
|
|||||||
assert db_attrs.to_native() == attrs
|
assert db_attrs.to_native() == attrs
|
||||||
|
|
||||||
|
|
||||||
|
def test_from_event_to_db_state_attributes_with_null() -> None:
|
||||||
|
"""Test converting a state to StateAttributes with a null with PostgreSQL."""
|
||||||
|
attrs = {"this_attr": "withnull\0terminator"}
|
||||||
|
state = ha.State("sensor.temperature", "18", attrs)
|
||||||
|
event = ha.Event(
|
||||||
|
EVENT_STATE_CHANGED,
|
||||||
|
{"entity_id": "sensor.temperature", "old_state": None, "new_state": state},
|
||||||
|
context=state.context,
|
||||||
|
)
|
||||||
|
dialect = SupportedDialect.POSTGRESQL
|
||||||
|
shared_attrs = StateAttributes.shared_attrs_bytes_from_event(event, dialect)
|
||||||
|
decoded = json_loads(shared_attrs)
|
||||||
|
assert decoded["this_attr"] == "withnull"
|
||||||
|
|
||||||
|
|
||||||
def test_repr() -> None:
|
def test_repr() -> None:
|
||||||
"""Test converting event to db state repr."""
|
"""Test converting event to db state repr."""
|
||||||
attrs = {"this_attr": True}
|
attrs = {"this_attr": True}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user