Unconditionally call DomainBlueprints.populate (#80336)

pull/80348/head
Erik Montnemery 2022-10-14 18:03:43 +02:00 committed by GitHub
parent e01572bc44
commit 4ebf9df901
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 22 deletions

View File

@ -242,11 +242,14 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
# we will create entities before firing EVENT_COMPONENT_LOADED # we will create entities before firing EVENT_COMPONENT_LOADED
await async_process_integration_platform_for_component(hass, DOMAIN) await async_process_integration_platform_for_component(hass, DOMAIN)
# To register the automation blueprints # Register automation as valid domain for Blueprint
async_get_blueprints(hass) async_get_blueprints(hass)
if not await _async_process_config(hass, config, component): await _async_process_config(hass, config, component)
await async_get_blueprints(hass).async_populate()
# Add some default blueprints to blueprints/automation, does nothing
# if blueprints/automation already exists
await async_get_blueprints(hass).async_populate()
async def trigger_service_handler( async def trigger_service_handler(
entity: AutomationEntity, service_call: ServiceCall entity: AutomationEntity, service_call: ServiceCall
@ -676,10 +679,9 @@ class AutomationEntityConfig:
async def _prepare_automation_config( async def _prepare_automation_config(
hass: HomeAssistant, hass: HomeAssistant,
config: ConfigType, config: ConfigType,
) -> tuple[bool, list[AutomationEntityConfig]]: ) -> list[AutomationEntityConfig]:
"""Parse configuration and prepare automation entity configuration.""" """Parse configuration and prepare automation entity configuration."""
automation_configs: list[AutomationEntityConfig] = [] automation_configs: list[AutomationEntityConfig] = []
blueprints_used = False
for config_key in extract_domain_configs(config, DOMAIN): for config_key in extract_domain_configs(config, DOMAIN):
conf: list[ConfigType | blueprint.BlueprintInputs] = config[config_key] conf: list[ConfigType | blueprint.BlueprintInputs] = config[config_key]
@ -688,7 +690,6 @@ async def _prepare_automation_config(
raw_blueprint_inputs = None raw_blueprint_inputs = None
raw_config = None raw_config = None
if isinstance(config_block, blueprint.BlueprintInputs): if isinstance(config_block, blueprint.BlueprintInputs):
blueprints_used = True
blueprint_inputs = config_block blueprint_inputs = config_block
raw_blueprint_inputs = blueprint_inputs.config_with_inputs raw_blueprint_inputs = blueprint_inputs.config_with_inputs
@ -715,7 +716,7 @@ async def _prepare_automation_config(
) )
) )
return (blueprints_used, automation_configs) return automation_configs
def _automation_name(automation_config: AutomationEntityConfig) -> str: def _automation_name(automation_config: AutomationEntityConfig) -> str:
@ -797,11 +798,8 @@ async def _async_process_config(
hass: HomeAssistant, hass: HomeAssistant,
config: dict[str, Any], config: dict[str, Any],
component: EntityComponent[AutomationEntity], component: EntityComponent[AutomationEntity],
) -> bool: ) -> None:
"""Process config and add automations. """Process config and add automations."""
Returns if blueprints were used.
"""
def automation_matches_config( def automation_matches_config(
automation: AutomationEntity, config: AutomationEntityConfig automation: AutomationEntity, config: AutomationEntityConfig
@ -836,7 +834,7 @@ async def _async_process_config(
return automation_matches, config_matches return automation_matches, config_matches
blueprints_used, automation_configs = await _prepare_automation_config(hass, config) automation_configs = await _prepare_automation_config(hass, config)
automations: list[AutomationEntity] = list(component.entities) automations: list[AutomationEntity] = list(component.entities)
# Find automations and configurations which have matches # Find automations and configurations which have matches
@ -860,7 +858,7 @@ async def _async_process_config(
if entities: if entities:
await component.async_add_entities(entities) await component.async_add_entities(entities)
return blueprints_used return
async def _async_process_if( async def _async_process_if(

View File

@ -339,6 +339,10 @@ class DomainBlueprints:
async def async_populate(self) -> None: async def async_populate(self) -> None:
"""Create folder if it doesn't exist and populate with examples.""" """Create folder if it doesn't exist and populate with examples."""
if self._blueprints:
# If we have already loaded some blueprint the blueprint folder must exist
return
integration = await loader.async_get_integration(self.hass, self.domain) integration = await loader.async_get_integration(self.hass, self.domain)
def populate(): def populate():

View File

@ -168,11 +168,14 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
# we will create entities before firing EVENT_COMPONENT_LOADED # we will create entities before firing EVENT_COMPONENT_LOADED
await async_process_integration_platform_for_component(hass, DOMAIN) await async_process_integration_platform_for_component(hass, DOMAIN)
# To register scripts as valid domain for Blueprint # Register script as valid domain for Blueprint
async_get_blueprints(hass) async_get_blueprints(hass)
if not await _async_process_config(hass, config, component): await _async_process_config(hass, config, component)
await async_get_blueprints(hass).async_populate()
# Add some default blueprints to blueprints/script, does nothing
# if blueprints/script already exists
await async_get_blueprints(hass).async_populate()
async def reload_service(service: ServiceCall) -> None: async def reload_service(service: ServiceCall) -> None:
"""Call a service to reload scripts.""" """Call a service to reload scripts."""
@ -228,13 +231,12 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
return True return True
async def _async_process_config(hass, config, component) -> bool: async def _async_process_config(hass, config, component) -> None:
"""Process script configuration. """Process script configuration.
Return true, if Blueprints were used. Return true, if Blueprints were used.
""" """
entities = [] entities = []
blueprints_used = False
for config_key in extract_domain_configs(config, DOMAIN): for config_key in extract_domain_configs(config, DOMAIN):
conf: dict[str, dict[str, Any] | BlueprintInputs] = config[config_key] conf: dict[str, dict[str, Any] | BlueprintInputs] = config[config_key]
@ -244,7 +246,6 @@ async def _async_process_config(hass, config, component) -> bool:
raw_config = None raw_config = None
if isinstance(config_block, BlueprintInputs): if isinstance(config_block, BlueprintInputs):
blueprints_used = True
blueprint_inputs = config_block blueprint_inputs = config_block
raw_blueprint_inputs = blueprint_inputs.config_with_inputs raw_blueprint_inputs = blueprint_inputs.config_with_inputs
@ -271,8 +272,6 @@ async def _async_process_config(hass, config, component) -> bool:
await component.async_add_entities(entities) await component.async_add_entities(entities)
return blueprints_used
class ScriptEntity(ToggleEntity, RestoreEntity): class ScriptEntity(ToggleEntity, RestoreEntity):
"""Representation of a script entity.""" """Representation of a script entity."""