From f1714dd541c863a0a42844582ba00e80b2ed40fb Mon Sep 17 00:00:00 2001
From: Erik Montnemery <erik@montnemery.com>
Date: Fri, 12 Feb 2021 17:00:35 +0100
Subject: [PATCH] Make some Area and EntityRegistry member functions callbacks
 (#46433)

---
 homeassistant/components/config/area_registry.py |  2 +-
 homeassistant/helpers/area_registry.py           | 11 +++++------
 homeassistant/helpers/entity_registry.py         |  6 ++++--
 tests/helpers/test_area_registry.py              |  2 +-
 4 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/homeassistant/components/config/area_registry.py b/homeassistant/components/config/area_registry.py
index 81daf35339e..f40ed7834e3 100644
--- a/homeassistant/components/config/area_registry.py
+++ b/homeassistant/components/config/area_registry.py
@@ -90,7 +90,7 @@ async def websocket_delete_area(hass, connection, msg):
     registry = await async_get_registry(hass)
 
     try:
-        await registry.async_delete(msg["area_id"])
+        registry.async_delete(msg["area_id"])
     except KeyError:
         connection.send_message(
             websocket_api.error_message(
diff --git a/homeassistant/helpers/area_registry.py b/homeassistant/helpers/area_registry.py
index a41e748d1ad..562e832cc19 100644
--- a/homeassistant/helpers/area_registry.py
+++ b/homeassistant/helpers/area_registry.py
@@ -1,11 +1,11 @@
 """Provide a way to connect devices to one physical location."""
-from asyncio import gather
 from collections import OrderedDict
 from typing import Container, Dict, Iterable, List, MutableMapping, Optional, cast
 
 import attr
 
 from homeassistant.core import callback
+from homeassistant.helpers import device_registry as dr, entity_registry as er
 from homeassistant.loader import bind_hass
 from homeassistant.util import slugify
 
@@ -72,12 +72,11 @@ class AreaRegistry:
         )
         return area
 
-    async def async_delete(self, area_id: str) -> None:
+    @callback
+    def async_delete(self, area_id: str) -> None:
         """Delete area."""
-        device_registry, entity_registry = await gather(
-            self.hass.helpers.device_registry.async_get_registry(),
-            self.hass.helpers.entity_registry.async_get_registry(),
-        )
+        device_registry = dr.async_get(self.hass)
+        entity_registry = er.async_get(self.hass)
         device_registry.async_clear_area_id(area_id)
         entity_registry.async_clear_area_id(area_id)
 
diff --git a/homeassistant/helpers/entity_registry.py b/homeassistant/helpers/entity_registry.py
index 51985f7bae4..418c3f90304 100644
--- a/homeassistant/helpers/entity_registry.py
+++ b/homeassistant/helpers/entity_registry.py
@@ -35,6 +35,7 @@ from homeassistant.const import (
     STATE_UNAVAILABLE,
 )
 from homeassistant.core import Event, callback, split_entity_id, valid_entity_id
+from homeassistant.helpers import device_registry as dr
 from homeassistant.helpers.device_registry import EVENT_DEVICE_REGISTRY_UPDATED
 from homeassistant.loader import bind_hass
 from homeassistant.util import slugify
@@ -313,7 +314,8 @@ class EntityRegistry:
         )
         self.async_schedule_save()
 
-    async def async_device_modified(self, event: Event) -> None:
+    @callback
+    def async_device_modified(self, event: Event) -> None:
         """Handle the removal or update of a device.
 
         Remove entities from the registry that are associated to a device when
@@ -333,7 +335,7 @@ class EntityRegistry:
         if event.data["action"] != "update":
             return
 
-        device_registry = await self.hass.helpers.device_registry.async_get_registry()
+        device_registry = dr.async_get(self.hass)
         device = device_registry.async_get(event.data["device_id"])
 
         # The device may be deleted already if the event handling is late
diff --git a/tests/helpers/test_area_registry.py b/tests/helpers/test_area_registry.py
index 2b06202c862..0bfa5e597d2 100644
--- a/tests/helpers/test_area_registry.py
+++ b/tests/helpers/test_area_registry.py
@@ -81,7 +81,7 @@ async def test_delete_area(hass, registry, update_events):
     """Make sure that we can delete an area."""
     area = registry.async_create("mock")
 
-    await registry.async_delete(area.id)
+    registry.async_delete(area.id)
 
     assert not registry.areas
 
-- 
GitLab