From 403cd2d8ef70ff9eed0ed16bf0787e4622cbf52a Mon Sep 17 00:00:00 2001 From: Artur Pragacz <49985303+arturpragacz@users.noreply.github.com> Date: Wed, 24 Sep 2025 10:24:42 +0200 Subject: [PATCH] Filter out custom integrations in extended analytics (#152820) --- .../components/analytics/analytics.py | 35 +++++++++---------- tests/components/analytics/test_analytics.py | 22 ------------ 2 files changed, 17 insertions(+), 40 deletions(-) diff --git a/homeassistant/components/analytics/analytics.py b/homeassistant/components/analytics/analytics.py index 3a8f2265044..b527c8ab937 100644 --- a/homeassistant/components/analytics/analytics.py +++ b/homeassistant/components/analytics/analytics.py @@ -506,7 +506,7 @@ DEFAULT_DEVICE_ANALYTICS_CONFIG = DeviceAnalyticsModifications() DEFAULT_ENTITY_ANALYTICS_CONFIG = EntityAnalyticsModifications() -async def async_devices_payload(hass: HomeAssistant) -> dict: # noqa: C901 +async def async_devices_payload(hass: HomeAssistant) -> dict: """Return detailed information about entities and devices.""" dev_reg = dr.async_get(hass) ent_reg = er.async_get(hass) @@ -538,6 +538,22 @@ async def async_devices_payload(hass: HomeAssistant) -> dict: # noqa: C901 integration_input = integration_inputs.setdefault(integration_domain, ([], [])) integration_input[1].append(entity_entry.entity_id) + integrations = { + domain: integration + for domain, integration in ( + await async_get_integrations(hass, integration_inputs.keys()) + ).items() + if isinstance(integration, Integration) + } + + # Filter out custom integrations + integration_inputs = { + domain: integration_info + for domain, integration_info in integration_inputs.items() + if (integration := integrations.get(domain)) is not None + and integration.is_built_in + } + # Call integrations that implement the analytics platform for integration_domain, integration_input in integration_inputs.items(): if ( @@ -688,23 +704,6 @@ async def async_devices_payload(hass: HomeAssistant) -> dict: # noqa: C901 else: entities_info.append(entity_info) - integrations = { - domain: integration - for domain, integration in ( - await async_get_integrations(hass, integrations_info.keys()) - ).items() - if isinstance(integration, Integration) - } - - for domain, integration_info in integrations_info.items(): - if integration := integrations.get(domain): - integration_info["is_custom_integration"] = not integration.is_built_in - # Include version for custom integrations - if not integration.is_built_in and integration.version: - integration_info["custom_integration_version"] = str( - integration.version - ) - return { "version": "home-assistant:1", "home_assistant": HA_VERSION, diff --git a/tests/components/analytics/test_analytics.py b/tests/components/analytics/test_analytics.py index a0bde29979e..9a63f4b29cb 100644 --- a/tests/components/analytics/test_analytics.py +++ b/tests/components/analytics/test_analytics.py @@ -1121,25 +1121,6 @@ async def test_devices_payload_no_entities( }, ], "entities": [], - "is_custom_integration": False, - }, - "test": { - "devices": [ - { - "entities": [], - "entry_type": None, - "has_configuration_url": False, - "hw_version": None, - "manufacturer": "test-manufacturer7", - "model": None, - "model_id": "test-model-id7", - "sw_version": None, - "via_device": None, - }, - ], - "entities": [], - "is_custom_integration": True, - "custom_integration_version": "1.2.3", }, }, } @@ -1299,7 +1280,6 @@ async def test_devices_payload_with_entities( "unit_of_measurement": "°C", }, ], - "is_custom_integration": False, }, "template": { "devices": [], @@ -1315,7 +1295,6 @@ async def test_devices_payload_with_entities( "unit_of_measurement": None, }, ], - "is_custom_integration": False, }, }, } @@ -1429,7 +1408,6 @@ async def test_analytics_platforms( "unit_of_measurement": None, }, ], - "is_custom_integration": False, }, }, }