Improve UserDict in device and entity registries (#100307)

This commit is contained in:
Erik Montnemery 2023-09-13 18:09:34 +02:00 committed by GitHub
parent ee65aa91e8
commit c3d1cdd0e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 7 deletions

View File

@ -392,14 +392,14 @@ class DeviceRegistryItems(UserDict[str, _EntryTypeT]):
def __setitem__(self, key: str, entry: _EntryTypeT) -> None:
"""Add an item."""
if key in self:
old_entry = self[key]
data = self.data
if key in data:
old_entry = data[key]
for connection in old_entry.connections:
del self._connections[connection]
for identifier in old_entry.identifiers:
del self._identifiers[identifier]
# type ignore linked to mypy issue: https://github.com/python/mypy/issues/13596
super().__setitem__(key, entry) # type: ignore[assignment]
data[key] = entry
for connection in entry.connections:
self._connections[connection] = entry
for identifier in entry.identifiers:

View File

@ -450,11 +450,12 @@ class EntityRegistryItems(UserDict[str, RegistryEntry]):
def __setitem__(self, key: str, entry: RegistryEntry) -> None:
"""Add an item."""
if key in self:
old_entry = self[key]
data = self.data
if key in data:
old_entry = data[key]
del self._entry_ids[old_entry.id]
del self._index[(old_entry.domain, old_entry.platform, old_entry.unique_id)]
super().__setitem__(key, entry)
data[key] = entry
self._entry_ids[entry.id] = entry
self._index[(entry.domain, entry.platform, entry.unique_id)] = entry.entity_id