Store devices as dict instead of list (#16229)

* Store devices as dict instead of list

* Use OrderedDict
pull/16232/head
Robert Svensson 2018-08-28 00:37:04 +02:00 committed by Paulus Schoutsen
parent 45649824ca
commit 8ab31fe139
2 changed files with 11 additions and 7 deletions

View File

@ -2,6 +2,8 @@
import logging
import uuid
from collections import OrderedDict
import attr
from homeassistant.core import callback
@ -45,7 +47,7 @@ class DeviceRegistry:
@callback
def async_get_device(self, identifiers: str, connections: tuple):
"""Check if device is registered."""
for device in self.devices:
for device in self.devices.values():
if any(iden in device.identifiers for iden in identifiers) or \
any(conn in device.connections for conn in connections):
return device
@ -75,7 +77,7 @@ class DeviceRegistry:
name=name,
sw_version=sw_version
)
self.devices.append(device)
self.devices[device.id] = device
self.async_schedule_save()
@ -86,10 +88,10 @@ class DeviceRegistry:
devices = await self._store.async_load()
if devices is None:
self.devices = []
self.devices = OrderedDict()
return
self.devices = [DeviceEntry(
self.devices = {device['id']: DeviceEntry(
config_entries=device['config_entries'],
connections={tuple(conn) for conn in device['connections']},
identifiers={tuple(iden) for iden in device['identifiers']},
@ -98,7 +100,7 @@ class DeviceRegistry:
name=device['name'],
sw_version=device['sw_version'],
id=device['id'],
) for device in devices['devices']]
) for device in devices['devices']}
@callback
def async_schedule_save(self):
@ -120,7 +122,7 @@ class DeviceRegistry:
'name': entry.name,
'sw_version': entry.sw_version,
'id': entry.id,
} for entry in self.devices
} for entry in self.devices.values()
]
return data

View File

@ -1,13 +1,15 @@
"""Tests for the Device Registry."""
import pytest
from collections import OrderedDict
from homeassistant.helpers import device_registry
def mock_registry(hass, mock_entries=None):
"""Mock the Device Registry."""
registry = device_registry.DeviceRegistry(hass)
registry.devices = mock_entries or []
registry.devices = mock_entries or OrderedDict()
async def _get_reg():
return registry