From f03dc5bb363ae219c83f74da4660fbc040092d60 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 3 Jun 2025 09:23:58 +0200 Subject: [PATCH] Deprecate verify_domain_control service helper --- ...5-06-03-deprecate-verify-domain-control.md | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 blog/2025-06-03-deprecate-verify-domain-control.md diff --git a/blog/2025-06-03-deprecate-verify-domain-control.md b/blog/2025-06-03-deprecate-verify-domain-control.md new file mode 100644 index 00000000..1ea9c0d7 --- /dev/null +++ b/blog/2025-06-03-deprecate-verify-domain-control.md @@ -0,0 +1,64 @@ +--- +author: epenet +authorURL: https://github.com/epenet +title: "Deprecate verify_domain_control service helper" +--- + +### Summary of changes + +The `homeassistant.helpers.service.verify_domain_control` helper function is deprecated, +and has been replaced with `verify_domain_entity_control`. + +Since release `2025.1` (via core PR https://github.com/home-assistant/core/pull/133062), +a reference to `HomeAssistant` is available as a property of the `ServiceCall` object, +and it became redundant to pass `hass` object to `verify_domain_control`. + +To update your integration: +1. Replace the decorator as shown in the first example below +2. (Optional) Move the nested functions to be module-level as shown in the second example below +3. Test the changes + +The old `verify_domain_control` function will be removed in Home Assistant 2026.7. + + +### Examples + +Minimum change is to simply adjust the decorator + +```python +# Old +# def register_services(hass: HomeAssistant) -> None: +# @verify_domain_control(hass, DOMAIN) +# async def do_action(hass: HomeAssistant, call: ServiceCall) -> None: +# ... +# hass.services.async_register(...) + +# New +def register_services(hass: HomeAssistant) -> None: + @verify_domain_entity_control(DOMAIN) + async def do_action(call: ServiceCall) -> None: + ... + + hass.services.async_register(...) +``` + +To reduce code complexity, it is now recommended to move the service functions to be module-level functions + +```python +# Old +# def register_services(hass: HomeAssistant) -> None: +# @verify_domain_control(hass, DOMAIN) +# async def do_action(call: ServiceCall) -> None: +# entries = hass.config_entries.async_entries(DOMAIN) +# ... +# hass.services.async_register(...) + +# New +@verify_domain_entity_control(DOMAIN) +async def do_action(call: ServiceCall) -> None: + entries = call.hass.config_entries.async_entries(DOMAIN) + ... + +def register_services(hass: HomeAssistant) -> None: + hass.services.async_register(...) +```