mirror of
				https://github.com/home-assistant/core.git
				synced 2025-10-31 22:49:26 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Generate config flow file."""
 | |
| import json
 | |
| from typing import Dict
 | |
| 
 | |
| from .model import Config, Integration
 | |
| 
 | |
| BASE = """
 | |
| \"\"\"Automatically generated by hassfest.
 | |
| 
 | |
| To update, run python3 -m script.hassfest
 | |
| \"\"\"
 | |
| 
 | |
| # fmt: off
 | |
| 
 | |
| FLOWS = {}
 | |
| """.strip()
 | |
| 
 | |
| 
 | |
| def validate_integration(integration: Integration):
 | |
|     """Validate we can load config flow without installing requirements."""
 | |
|     if not (integration.path / "config_flow.py").is_file():
 | |
|         integration.add_error(
 | |
|             "config_flow", "Config flows need to be defined in the file config_flow.py"
 | |
|         )
 | |
| 
 | |
|     # Currently not require being able to load config flow without
 | |
|     # installing requirements.
 | |
|     # try:
 | |
|     #     integration.import_pkg('config_flow')
 | |
|     # except ImportError as err:
 | |
|     #     integration.add_error(
 | |
|     #         'config_flow',
 | |
|     #         "Unable to import config flow: {}. Config flows should be able "
 | |
|     #         "to be imported without installing requirements.".format(err))
 | |
|     #     return
 | |
| 
 | |
|     # if integration.domain not in config_entries.HANDLERS:
 | |
|     #     integration.add_error(
 | |
|     #         'config_flow',
 | |
|     #         "Importing the config flow platform did not register a config "
 | |
|     #         "flow handler.")
 | |
| 
 | |
| 
 | |
| def generate_and_validate(integrations: Dict[str, Integration]):
 | |
|     """Validate and generate config flow data."""
 | |
|     domains = []
 | |
| 
 | |
|     for domain in sorted(integrations):
 | |
|         integration = integrations[domain]
 | |
| 
 | |
|         if not integration.manifest:
 | |
|             continue
 | |
| 
 | |
|         config_flow = integration.manifest.get("config_flow")
 | |
| 
 | |
|         if not config_flow:
 | |
|             continue
 | |
| 
 | |
|         validate_integration(integration)
 | |
| 
 | |
|         domains.append(domain)
 | |
| 
 | |
|     return BASE.format(json.dumps(domains, indent=4))
 | |
| 
 | |
| 
 | |
| def validate(integrations: Dict[str, Integration], config: Config):
 | |
|     """Validate config flow file."""
 | |
|     config_flow_path = config.root / "homeassistant/generated/config_flows.py"
 | |
|     config.cache["config_flow"] = content = generate_and_validate(integrations)
 | |
| 
 | |
|     with open(str(config_flow_path), "r") as fp:
 | |
|         if fp.read().strip() != content:
 | |
|             config.add_error(
 | |
|                 "config_flow",
 | |
|                 "File config_flows.py is not up to date. "
 | |
|                 "Run python3 -m script.hassfest",
 | |
|                 fixable=True,
 | |
|             )
 | |
|         return
 | |
| 
 | |
| 
 | |
| def generate(integrations: Dict[str, Integration], config: Config):
 | |
|     """Generate config flow file."""
 | |
|     config_flow_path = config.root / "homeassistant/generated/config_flows.py"
 | |
|     with open(str(config_flow_path), "w") as fp:
 | |
|         fp.write(config.cache["config_flow"] + "\n")
 | 
