33from __future__ import annotations
44
55import asyncio
6- from collections .abc import Callable , Coroutine , Iterable
6+ from collections .abc import Callable , Coroutine , Iterable , Mapping
77import dataclasses
88from enum import Enum
99from functools import cache , partial
@@ -612,6 +612,8 @@ async def async_get_all_descriptions(
612612 # Don't warn for missing services, because it triggers false
613613 # positives for things like scripts, that register as a service
614614 description = {"fields" : yaml_description .get ("fields" , {})}
615+ if description_placeholders := service .description_placeholders :
616+ description ["description_placeholders" ] = description_placeholders
615617
616618 for item in ("description" , "name" , "target" ):
617619 if item in yaml_description :
@@ -955,6 +957,8 @@ def async_register_admin_service(
955957 ],
956958 schema : VolSchemaType = vol .Schema ({}, extra = vol .PREVENT_EXTRA ),
957959 supports_response : SupportsResponse = SupportsResponse .NONE ,
960+ * ,
961+ description_placeholders : Mapping [str , str ] | None = None ,
958962) -> None :
959963 """Register a service that requires admin access."""
960964 hass .services .async_register (
@@ -967,6 +971,7 @@ def async_register_admin_service(
967971 ),
968972 schema ,
969973 supports_response ,
974+ description_placeholders = description_placeholders ,
970975 )
971976
972977
@@ -1112,6 +1117,7 @@ def async_register_entity_service(
11121117 domain : str ,
11131118 name : str ,
11141119 * ,
1120+ description_placeholders : Mapping [str , str ] | None = None ,
11151121 entity_device_classes : Iterable [str | None ] | None = None ,
11161122 entities : dict [str , Entity ],
11171123 func : str | Callable [..., Any ],
@@ -1145,6 +1151,7 @@ def async_register_entity_service(
11451151 schema ,
11461152 supports_response ,
11471153 job_type = job_type ,
1154+ description_placeholders = description_placeholders ,
11481155 )
11491156
11501157
@@ -1154,6 +1161,7 @@ def async_register_platform_entity_service(
11541161 service_domain : str ,
11551162 service_name : str ,
11561163 * ,
1164+ description_placeholders : Mapping [str , str ] | None = None ,
11571165 entity_device_classes : Iterable [str | None ] | None = None ,
11581166 entity_domain : str ,
11591167 func : str | Callable [..., Any ],
@@ -1191,4 +1199,5 @@ def get_entities() -> dict[str, Entity]:
11911199 schema ,
11921200 supports_response ,
11931201 job_type = HassJobType .Coroutinefunction ,
1202+ description_placeholders = description_placeholders ,
11941203 )
0 commit comments