Compare commits

...
Sign in to create a new pull request.

2 commits

Author SHA1 Message Date
Michael Hansen
79d7907da0
Merge branch 'dev' into synesthesiam-20240606-get-by-name-aliases 2024-06-06 11:34:27 -05:00
Michael Hansen
a106de13c1 Check aliases in get_by_name for areas/floors 2024-06-06 10:38:35 -05:00
4 changed files with 41 additions and 6 deletions

View file

@ -197,8 +197,19 @@ class AreaRegistry(BaseRegistry[AreasRegistryStoreData]):
@callback
def async_get_area_by_name(self, name: str) -> AreaEntry | None:
"""Get area by name."""
return self.areas.get_by_name(name)
"""Get area by name or alias."""
if area := self.areas.get_by_name(name):
return area
# Check aliases
normalized_name = normalize_name(name)
for area in self.async_list_areas():
for alias in area.aliases:
normalized_alias = normalize_name(alias)
if normalized_name == normalized_alias:
return area
return None
@callback
def async_list_areas(self) -> Iterable[AreaEntry]:
@ -404,8 +415,9 @@ class AreaRegistry(BaseRegistry[AreasRegistryStoreData]):
@callback
def _removed_from_registry_filter(
event_data: fr.EventFloorRegistryUpdatedData
| lr.EventLabelRegistryUpdatedData,
event_data: (
fr.EventFloorRegistryUpdatedData | lr.EventLabelRegistryUpdatedData
),
) -> bool:
"""Filter all except for the item removed from registry events."""
return event_data["action"] == "remove"

View file

@ -93,8 +93,19 @@ class FloorRegistry(BaseRegistry[FloorRegistryStoreData]):
@callback
def async_get_floor_by_name(self, name: str) -> FloorEntry | None:
"""Get floor by name."""
return self.floors.get_by_name(name)
"""Get floor by name or alias."""
if floor := self.floors.get_by_name(name):
return floor
# Check aliases
normalized_name = normalize_name(name)
for floor in self.async_list_floors():
for alias in floor.aliases:
normalized_alias = normalize_name(alias)
if normalized_name == normalized_alias:
return floor
return None
@callback
def async_list_floors(self) -> Iterable[FloorEntry]:

View file

@ -260,3 +260,9 @@ async def test_update_area_with_name_already_in_use(
assert msg["error"]["code"] == "invalid_info"
assert msg["error"]["message"] == "The name mock 2 (mock2) is already in use"
assert len(area_registry.areas) == 2
async def test_get_area_by_alias(area_registry: ar.AreaRegistry) -> None:
"""Test async_get_area_by_name also works with aliases."""
area = area_registry.async_create("area 1", aliases={"alias 1"})
assert area_registry.async_get_area_by_name("alias 1") == area

View file

@ -239,3 +239,9 @@ async def test_update_with_name_already_in_use(
== "The name Second floor (secondfloor) is already in use"
)
assert len(floor_registry.floors) == 2
async def test_get_floor_by_alias(floor_registry: fr.FloorRegistry) -> None:
"""Test async_get_floor_by_name also works with aliases."""
floor = floor_registry.async_create("floor 1", aliases={"alias 1"})
assert floor_registry.async_get_floor_by_name("alias 1") == floor