Allow inheriting FrozenOrThawed with custom init (#105624)

This commit is contained in:
Erik Montnemery 2023-12-13 10:13:34 +01:00 committed by GitHub
parent c318445a76
commit 22c3847c0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 0 deletions

View File

@ -117,4 +117,5 @@ class FrozenOrThawed(type):
return object.__new__(cls)
return cls._dataclass(*_args, **kwargs)
cls.__init__ = cls._dataclass.__init__ # type: ignore[misc]
cls.__new__ = __new__ # type: ignore[method-assign]

View File

@ -36,6 +36,24 @@
# name: test_extending_entity_description.1
"test_extending_entity_description.<locals>.FrozenEntityDescription(key='blah', device_class=None, entity_category=None, entity_registry_enabled_default=True, entity_registry_visible_default=True, force_update=False, icon=None, has_entity_name=False, name='name', translation_key=None, unit_of_measurement=None, extra='foo')"
# ---
# name: test_extending_entity_description.10
dict({
'device_class': None,
'entity_category': None,
'entity_registry_enabled_default': True,
'entity_registry_visible_default': True,
'force_update': False,
'has_entity_name': False,
'icon': None,
'key': 'blah',
'name': 'name',
'translation_key': None,
'unit_of_measurement': None,
})
# ---
# name: test_extending_entity_description.11
"test_extending_entity_description.<locals>.CustomInitEntityDescription(key='blah', device_class=None, entity_category=None, entity_registry_enabled_default=True, entity_registry_visible_default=True, force_update=False, icon=None, has_entity_name=False, name='name', translation_key=None, unit_of_measurement=None)"
# ---
# name: test_extending_entity_description.2
dict({
'device_class': None,

View File

@ -1749,3 +1749,15 @@ def test_extending_entity_description(snapshot: SnapshotAssertion):
key="blah", extra="foo", mixin="mixin", name="name"
)
assert repr(obj) == snapshot
# Try inheriting with custom init
@dataclasses.dataclass
class CustomInitEntityDescription(entity.EntityDescription):
def __init__(self, extra, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.extra: str = extra
obj = CustomInitEntityDescription(key="blah", extra="foo", name="name")
assert obj == snapshot
assert obj == CustomInitEntityDescription(key="blah", extra="foo", name="name")
assert repr(obj) == snapshot