Improve HA snapshot serializer typing (#122218)

This commit is contained in:
Marc Mueller
2024-07-20 11:12:02 +02:00
committed by GitHub
parent f0b9a806d1
commit 24b12bc509

View File

@@ -12,13 +12,7 @@ import attr
import attrs
from syrupy.extensions.amber import AmberDataSerializer, AmberSnapshotExtension
from syrupy.location import PyTestLocation
from syrupy.types import (
PropertyFilter,
PropertyMatcher,
PropertyPath,
SerializableData,
SerializedData,
)
from syrupy.types import PropertyFilter, PropertyMatcher, PropertyPath, SerializableData
import voluptuous as vol
import voluptuous_serialize
@@ -90,7 +84,7 @@ class HomeAssistantSnapshotSerializer(AmberDataSerializer):
matcher: PropertyMatcher | None = None,
path: PropertyPath = (),
visited: set[Any] | None = None,
) -> SerializedData:
) -> str:
"""Pre-process data before serializing.
This allows us to handle specific cases for Home Assistant data structures.
@@ -111,7 +105,7 @@ class HomeAssistantSnapshotSerializer(AmberDataSerializer):
serializable_data = voluptuous_serialize.convert(data)
elif isinstance(data, ConfigEntry):
serializable_data = cls._serializable_config_entry(data)
elif dataclasses.is_dataclass(data):
elif dataclasses.is_dataclass(type(data)):
serializable_data = dataclasses.asdict(data)
elif isinstance(data, IntFlag):
# The repr of an enum.IntFlag has changed between Python 3.10 and 3.11
@@ -120,7 +114,7 @@ class HomeAssistantSnapshotSerializer(AmberDataSerializer):
else:
serializable_data = data
with suppress(TypeError):
if attr.has(data):
if attr.has(type(data)):
serializable_data = attrs.asdict(data)
return super()._serialize(
@@ -136,7 +130,7 @@ class HomeAssistantSnapshotSerializer(AmberDataSerializer):
@classmethod
def _serializable_area_registry_entry(cls, data: ar.AreaEntry) -> SerializableData:
"""Prepare a Home Assistant area registry entry for serialization."""
serialized = AreaRegistryEntrySnapshot(attrs.asdict(data) | {"id": ANY})
serialized = AreaRegistryEntrySnapshot(dataclasses.asdict(data) | {"id": ANY})
serialized.pop("_json_repr")
return serialized