mirror of
https://github.com/home-assistant/core.git
synced 2025-07-15 09:17:10 +00:00
Add friendly name to devices in the device registry (#21318)
* add friendly name to devices in the device registry * switch to name_by_user * review comments
This commit is contained in:
parent
a34524febe
commit
c4400be62a
@ -19,6 +19,7 @@ SCHEMA_WS_UPDATE = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend({
|
|||||||
vol.Required('type'): WS_TYPE_UPDATE,
|
vol.Required('type'): WS_TYPE_UPDATE,
|
||||||
vol.Required('device_id'): str,
|
vol.Required('device_id'): str,
|
||||||
vol.Optional('area_id'): vol.Any(str, None),
|
vol.Optional('area_id'): vol.Any(str, None),
|
||||||
|
vol.Optional('name_by_user'): vol.Any(str, None),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@ -49,11 +50,13 @@ async def websocket_update_device(hass, connection, msg):
|
|||||||
"""Handle update area websocket command."""
|
"""Handle update area websocket command."""
|
||||||
registry = await async_get_registry(hass)
|
registry = await async_get_registry(hass)
|
||||||
|
|
||||||
entry = registry.async_update_device(
|
msg.pop('type')
|
||||||
msg['device_id'], area_id=msg['area_id'])
|
msg_id = msg.pop('id')
|
||||||
|
|
||||||
|
entry = registry.async_update_device(**msg)
|
||||||
|
|
||||||
connection.send_message(websocket_api.result_message(
|
connection.send_message(websocket_api.result_message(
|
||||||
msg['id'], _entry_dict(entry)
|
msg_id, _entry_dict(entry)
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
||||||
@ -70,4 +73,5 @@ def _entry_dict(entry):
|
|||||||
'id': entry.id,
|
'id': entry.id,
|
||||||
'hub_device_id': entry.hub_device_id,
|
'hub_device_id': entry.hub_device_id,
|
||||||
'area_id': entry.area_id,
|
'area_id': entry.area_id,
|
||||||
|
'name_by_user': entry.name_by_user,
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,7 @@ class DeviceEntry:
|
|||||||
sw_version = attr.ib(type=str, default=None)
|
sw_version = attr.ib(type=str, default=None)
|
||||||
hub_device_id = attr.ib(type=str, default=None)
|
hub_device_id = attr.ib(type=str, default=None)
|
||||||
area_id = attr.ib(type=str, default=None)
|
area_id = attr.ib(type=str, default=None)
|
||||||
|
name_by_user = attr.ib(type=str, default=None)
|
||||||
id = attr.ib(type=str, default=attr.Factory(lambda: uuid.uuid4().hex))
|
id = attr.ib(type=str, default=attr.Factory(lambda: uuid.uuid4().hex))
|
||||||
|
|
||||||
|
|
||||||
@ -124,9 +125,11 @@ class DeviceRegistry:
|
|||||||
)
|
)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_update_device(self, device_id, *, area_id=_UNDEF):
|
def async_update_device(
|
||||||
|
self, device_id, *, area_id=_UNDEF, name_by_user=_UNDEF):
|
||||||
"""Update properties of a device."""
|
"""Update properties of a device."""
|
||||||
return self._async_update_device(device_id, area_id=area_id)
|
return self._async_update_device(
|
||||||
|
device_id, area_id=area_id, name_by_user=name_by_user)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _async_update_device(self, device_id, *, add_config_entry_id=_UNDEF,
|
def _async_update_device(self, device_id, *, add_config_entry_id=_UNDEF,
|
||||||
@ -138,7 +141,8 @@ class DeviceRegistry:
|
|||||||
name=_UNDEF,
|
name=_UNDEF,
|
||||||
sw_version=_UNDEF,
|
sw_version=_UNDEF,
|
||||||
hub_device_id=_UNDEF,
|
hub_device_id=_UNDEF,
|
||||||
area_id=_UNDEF):
|
area_id=_UNDEF,
|
||||||
|
name_by_user=_UNDEF):
|
||||||
"""Update device attributes."""
|
"""Update device attributes."""
|
||||||
old = self.devices[device_id]
|
old = self.devices[device_id]
|
||||||
|
|
||||||
@ -179,6 +183,10 @@ class DeviceRegistry:
|
|||||||
if (area_id is not _UNDEF and area_id != old.area_id):
|
if (area_id is not _UNDEF and area_id != old.area_id):
|
||||||
changes['area_id'] = area_id
|
changes['area_id'] = area_id
|
||||||
|
|
||||||
|
if (name_by_user is not _UNDEF and
|
||||||
|
name_by_user != old.name_by_user):
|
||||||
|
changes['name_by_user'] = name_by_user
|
||||||
|
|
||||||
if not changes:
|
if not changes:
|
||||||
return old
|
return old
|
||||||
|
|
||||||
@ -208,7 +216,8 @@ class DeviceRegistry:
|
|||||||
# Introduced in 0.79
|
# Introduced in 0.79
|
||||||
hub_device_id=device.get('hub_device_id'),
|
hub_device_id=device.get('hub_device_id'),
|
||||||
# Introduced in 0.87
|
# Introduced in 0.87
|
||||||
area_id=device.get('area_id')
|
area_id=device.get('area_id'),
|
||||||
|
name_by_user=device.get('name_by_user')
|
||||||
)
|
)
|
||||||
|
|
||||||
self.devices = devices
|
self.devices = devices
|
||||||
@ -234,7 +243,8 @@ class DeviceRegistry:
|
|||||||
'sw_version': entry.sw_version,
|
'sw_version': entry.sw_version,
|
||||||
'id': entry.id,
|
'id': entry.id,
|
||||||
'hub_device_id': entry.hub_device_id,
|
'hub_device_id': entry.hub_device_id,
|
||||||
'area_id': entry.area_id
|
'area_id': entry.area_id,
|
||||||
|
'name_by_user': entry.name_by_user
|
||||||
} for entry in self.devices.values()
|
} for entry in self.devices.values()
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -49,6 +49,7 @@ async def test_list_devices(hass, client, registry):
|
|||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
'hub_device_id': None,
|
'hub_device_id': None,
|
||||||
'area_id': None,
|
'area_id': None,
|
||||||
|
'name_by_user': None,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'config_entries': ['1234'],
|
'config_entries': ['1234'],
|
||||||
@ -59,6 +60,7 @@ async def test_list_devices(hass, client, registry):
|
|||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
'hub_device_id': dev1,
|
'hub_device_id': dev1,
|
||||||
'area_id': None,
|
'area_id': None,
|
||||||
|
'name_by_user': None,
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -72,11 +74,13 @@ async def test_update_device(hass, client, registry):
|
|||||||
manufacturer='manufacturer', model='model')
|
manufacturer='manufacturer', model='model')
|
||||||
|
|
||||||
assert not device.area_id
|
assert not device.area_id
|
||||||
|
assert not device.name_by_user
|
||||||
|
|
||||||
await client.send_json({
|
await client.send_json({
|
||||||
'id': 1,
|
'id': 1,
|
||||||
'device_id': device.id,
|
'device_id': device.id,
|
||||||
'area_id': '12345A',
|
'area_id': '12345A',
|
||||||
|
'name_by_user': 'Test Friendly Name',
|
||||||
'type': 'config/device_registry/update',
|
'type': 'config/device_registry/update',
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -84,4 +88,5 @@ async def test_update_device(hass, client, registry):
|
|||||||
|
|
||||||
assert msg['result']['id'] == device.id
|
assert msg['result']['id'] == device.id
|
||||||
assert msg['result']['area_id'] == '12345A'
|
assert msg['result']['area_id'] == '12345A'
|
||||||
|
assert msg['result']['name_by_user'] == 'Test Friendly Name'
|
||||||
assert len(registry.devices) == 1
|
assert len(registry.devices) == 1
|
||||||
|
@ -133,7 +133,8 @@ async def test_loading_from_storage(hass, hass_storage):
|
|||||||
'model': 'model',
|
'model': 'model',
|
||||||
'name': 'name',
|
'name': 'name',
|
||||||
'sw_version': 'version',
|
'sw_version': 'version',
|
||||||
'area_id': '12345A'
|
'area_id': '12345A',
|
||||||
|
'name_by_user': 'Test Friendly Name'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -148,6 +149,7 @@ async def test_loading_from_storage(hass, hass_storage):
|
|||||||
manufacturer='manufacturer', model='model')
|
manufacturer='manufacturer', model='model')
|
||||||
assert entry.id == 'abcdefghijklm'
|
assert entry.id == 'abcdefghijklm'
|
||||||
assert entry.area_id == '12345A'
|
assert entry.area_id == '12345A'
|
||||||
|
assert entry.name_by_user == 'Test Friendly Name'
|
||||||
assert isinstance(entry.config_entries, set)
|
assert isinstance(entry.config_entries, set)
|
||||||
|
|
||||||
|
|
||||||
@ -360,8 +362,11 @@ async def test_update(registry):
|
|||||||
})
|
})
|
||||||
|
|
||||||
assert not entry.area_id
|
assert not entry.area_id
|
||||||
|
assert not entry.name_by_user
|
||||||
|
|
||||||
updated_entry = registry.async_update_device(entry.id, area_id='12345A')
|
updated_entry = registry.async_update_device(
|
||||||
|
entry.id, area_id='12345A', name_by_user='Test Friendly Name')
|
||||||
|
|
||||||
assert updated_entry != entry
|
assert updated_entry != entry
|
||||||
assert updated_entry.area_id == '12345A'
|
assert updated_entry.area_id == '12345A'
|
||||||
|
assert updated_entry.name_by_user == 'Test Friendly Name'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user