From ef1f028eb54668beed4ecffdb42cfedb84ace59a Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 26 Mar 2026 10:34:13 -1000 Subject: [PATCH] Refactor automation building to iterate tuples --- esphome/components/binary_sensor/__init__.py | 25 ++++++----------- esphome/components/sensor/__init__.py | 16 +++++------ esphome/components/switch/__init__.py | 29 ++++++-------------- esphome/components/text_sensor/__init__.py | 17 ++++++------ 4 files changed, 33 insertions(+), 54 deletions(-) diff --git a/esphome/components/binary_sensor/__init__.py b/esphome/components/binary_sensor/__init__.py index 42fc8e7c21..4705f1675d 100644 --- a/esphome/components/binary_sensor/__init__.py +++ b/esphome/components/binary_sensor/__init__.py @@ -529,23 +529,14 @@ def binary_sensor_schema( @coroutine_with_priority(CoroPriority.AUTOMATION) async def _build_binary_sensor_automations(var, config): - for conf in config.get(CONF_ON_PRESS, []): - await automation.build_callback_automation( - var, - "add_on_state_callback", - [], - conf, - forwarder=automation.TriggerOnTrueForwarder, - ) - - for conf in config.get(CONF_ON_RELEASE, []): - await automation.build_callback_automation( - var, - "add_on_state_callback", - [], - conf, - forwarder=automation.TriggerOnFalseForwarder, - ) + for conf_key, forwarder in ( + (CONF_ON_PRESS, automation.TriggerOnTrueForwarder), + (CONF_ON_RELEASE, automation.TriggerOnFalseForwarder), + ): + for conf in config.get(conf_key, []): + await automation.build_callback_automation( + var, "add_on_state_callback", [], conf, forwarder=forwarder + ) for conf in config.get(CONF_ON_CLICK, []): trigger = cg.new_Pvariable( diff --git a/esphome/components/sensor/__init__.py b/esphome/components/sensor/__init__.py index 393905465e..19d03a0afc 100644 --- a/esphome/components/sensor/__init__.py +++ b/esphome/components/sensor/__init__.py @@ -881,14 +881,14 @@ async def build_filters(config): @coroutine_with_priority(CoroPriority.AUTOMATION) async def _build_sensor_automations(var, config): - for conf in config.get(CONF_ON_VALUE, []): - await automation.build_callback_automation( - var, "add_on_state_callback", [(float, "x")], conf - ) - for conf in config.get(CONF_ON_RAW_VALUE, []): - await automation.build_callback_automation( - var, "add_on_raw_state_callback", [(float, "x")], conf - ) + for conf_key, callback in ( + (CONF_ON_VALUE, "add_on_state_callback"), + (CONF_ON_RAW_VALUE, "add_on_raw_state_callback"), + ): + for conf in config.get(conf_key, []): + await automation.build_callback_automation( + var, callback, [(float, "x")], conf + ) for conf in config.get(CONF_ON_VALUE_RANGE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await cg.register_component(trigger, conf) diff --git a/esphome/components/switch/__init__.py b/esphome/components/switch/__init__.py index 65ce81c7ec..c4dd4856e3 100644 --- a/esphome/components/switch/__init__.py +++ b/esphome/components/switch/__init__.py @@ -123,26 +123,15 @@ def switch_schema( @coroutine_with_priority(CoroPriority.AUTOMATION) async def _build_switch_automations(var, config): - for conf in config.get(CONF_ON_STATE, []): - await automation.build_callback_automation( - var, "add_on_state_callback", [(bool, "x")], conf - ) - for conf in config.get(CONF_ON_TURN_ON, []): - await automation.build_callback_automation( - var, - "add_on_state_callback", - [], - conf, - forwarder=automation.TriggerOnTrueForwarder, - ) - for conf in config.get(CONF_ON_TURN_OFF, []): - await automation.build_callback_automation( - var, - "add_on_state_callback", - [], - conf, - forwarder=automation.TriggerOnFalseForwarder, - ) + for conf_key, args, forwarder in ( + (CONF_ON_STATE, [(bool, "x")], None), + (CONF_ON_TURN_ON, [], automation.TriggerOnTrueForwarder), + (CONF_ON_TURN_OFF, [], automation.TriggerOnFalseForwarder), + ): + for conf in config.get(conf_key, []): + await automation.build_callback_automation( + var, "add_on_state_callback", args, conf, forwarder=forwarder + ) @setup_entity("switch") diff --git a/esphome/components/text_sensor/__init__.py b/esphome/components/text_sensor/__init__.py index ae1b6ed20b..51eedf9a95 100644 --- a/esphome/components/text_sensor/__init__.py +++ b/esphome/components/text_sensor/__init__.py @@ -184,15 +184,14 @@ async def build_filters(config): @coroutine_with_priority(CoroPriority.AUTOMATION) async def _build_text_sensor_automations(var, config): - for conf in config.get(CONF_ON_VALUE, []): - await automation.build_callback_automation( - var, "add_on_state_callback", [(cg.std_string, "x")], conf - ) - - for conf in config.get(CONF_ON_RAW_VALUE, []): - await automation.build_callback_automation( - var, "add_on_raw_state_callback", [(cg.std_string, "x")], conf - ) + for conf_key, callback in ( + (CONF_ON_VALUE, "add_on_state_callback"), + (CONF_ON_RAW_VALUE, "add_on_raw_state_callback"), + ): + for conf in config.get(conf_key, []): + await automation.build_callback_automation( + var, callback, [(cg.std_string, "x")], conf + ) @setup_entity("text_sensor")