1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-08 17:49:37 +01:00

Automatically generate entity platform enum (#152193)

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Paulus Schoutsen
2025-09-14 16:44:48 -04:00
committed by GitHub
parent e40ecdfb00
commit f5535db24c
7 changed files with 108 additions and 50 deletions
+2
View File
@@ -19,6 +19,7 @@ from . import (
dhcp,
docker,
icons,
integration_info,
json,
manifest,
metadata,
@@ -44,6 +45,7 @@ INTEGRATION_PLUGINS = [
dependencies,
dhcp,
icons,
integration_info,
json,
manifest,
mqtt,
+42
View File
@@ -0,0 +1,42 @@
"""Write integration constants."""
from __future__ import annotations
from .model import Config, Integration
from .serializer import format_python
def validate(integrations: dict[str, Integration], config: Config) -> None:
"""Validate integrations file."""
if config.specific_integrations:
return
int_type = "entity"
domains = [
integration.domain
for integration in integrations.values()
if integration.manifest.get("integration_type") == int_type
# Tag is type "entity" but has no entity platform
and integration.domain != "tag"
]
code = [
"from enum import StrEnum",
"class EntityPlatforms(StrEnum):",
f' """Available {int_type} platforms."""',
]
code.extend([f' {domain.upper()} = "{domain}"' for domain in sorted(domains)])
config.cache[f"integrations_{int_type}"] = format_python(
"\n".join(code), generator="script.hassfest"
)
def generate(integrations: dict[str, Integration], config: Config) -> None:
"""Generate integration file."""
int_type = "entity"
filename = "entity_platforms"
platform_path = config.root / f"homeassistant/generated/{filename}.py"
platform_path.write_text(config.cache[f"integrations_{int_type}"])