Add a fast path for async_get_platform (#113917)

This commit is contained in:
J. Nick Koston 2024-03-20 22:34:33 -10:00 committed by GitHub
parent f662e7e3cf
commit 3b66328591
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 7 additions and 3 deletions

View file

@ -515,7 +515,7 @@ class ConfigEntry:
if domain_is_integration:
try:
await integration.async_get_platforms(("config_flow",))
await integration.async_get_platform("config_flow")
except ImportError as err:
_LOGGER.error(
(
@ -2567,7 +2567,7 @@ async def _load_integration(
# Make sure requirements and dependencies of component are resolved
await async_process_deps_reqs(hass, hass_config, integration)
try:
await integration.async_get_platforms(("config_flow",))
await integration.async_get_platform("config_flow")
except ImportError as err:
_LOGGER.error(
"Error occurred loading flow for integration %s: %s",

View file

@ -1065,7 +1065,11 @@ class Integration:
async def async_get_platform(self, platform_name: str) -> ModuleType:
"""Return a platform for an integration."""
platforms = await self.async_get_platforms([platform_name])
# Fast path for a single platform when its already
# cached. This is the common case.
if platform := self._cache.get(f"{self.domain}.{platform_name}"):
return platform # type: ignore[return-value]
platforms = await self.async_get_platforms((platform_name,))
return platforms[platform_name]
async def async_get_platforms(