1
0
mirror of https://github.com/home-assistant/core.git synced 2026-02-15 07:36:16 +00:00

Mark tts method type hints as mandatory (#161235)

This commit is contained in:
epenet
2026-02-02 19:49:55 +01:00
committed by GitHub
parent fc60b16d65
commit c3534d5445
8 changed files with 72 additions and 31 deletions

View File

@@ -1,6 +1,7 @@
"""Support for Baidu speech service."""
import logging
from typing import Any
from aip import AipSpeech
import voluptuous as vol
@@ -9,6 +10,7 @@ from homeassistant.components.tts import (
CONF_LANG,
PLATFORM_SCHEMA as TTS_PLATFORM_SCHEMA,
Provider,
TtsAudioType,
)
from homeassistant.const import CONF_API_KEY
from homeassistant.helpers import config_validation as cv
@@ -85,17 +87,17 @@ class BaiduTTSProvider(Provider):
}
@property
def default_language(self):
def default_language(self) -> str:
"""Return the default language."""
return self._lang
@property
def supported_languages(self):
def supported_languages(self) -> list[str]:
"""Return a list of supported languages."""
return SUPPORTED_LANGUAGES
@property
def default_options(self):
def default_options(self) -> dict[str, Any]:
"""Return a dict including default options."""
return {
CONF_PERSON: self._speech_conf_data[_OPTIONS[CONF_PERSON]],
@@ -105,11 +107,16 @@ class BaiduTTSProvider(Provider):
}
@property
def supported_options(self):
def supported_options(self) -> list[str]:
"""Return a list of supported options."""
return SUPPORTED_OPTIONS
def get_tts_audio(self, message, language, options):
def get_tts_audio(
self,
message: str,
language: str,
options: dict[str, Any],
) -> TtsAudioType:
"""Load TTS from BaiduTTS."""
aip_speech = AipSpeech(

View File

@@ -2,6 +2,8 @@
from __future__ import annotations
from typing import Any
from speak2mary import MaryTTS
import voluptuous as vol
@@ -9,6 +11,7 @@ from homeassistant.components.tts import (
CONF_LANG,
PLATFORM_SCHEMA as TTS_PLATFORM_SCHEMA,
Provider,
TtsAudioType,
)
from homeassistant.const import CONF_EFFECT, CONF_HOST, CONF_PORT
from homeassistant.helpers import config_validation as cv
@@ -66,26 +69,28 @@ class MaryTTSProvider(Provider):
self.name = "MaryTTS"
@property
def default_language(self):
def default_language(self) -> str:
"""Return the default language."""
return self._mary.locale
@property
def supported_languages(self):
def supported_languages(self) -> list[str]:
"""Return list of supported languages."""
return SUPPORT_LANGUAGES
@property
def default_options(self):
def default_options(self) -> dict[str, Any]:
"""Return dict include default options."""
return {CONF_EFFECT: self._effects}
@property
def supported_options(self):
def supported_options(self) -> list[str]:
"""Return a list of supported options."""
return SUPPORT_OPTIONS
def get_tts_audio(self, message, language, options):
def get_tts_audio(
self, message: str, language: str, options: dict[str, Any]
) -> TtsAudioType:
"""Load TTS from MaryTTS."""
effects = options[CONF_EFFECT]

View File

@@ -1,6 +1,7 @@
"""Support for the Microsoft Cognitive Services text-to-speech service."""
import logging
from typing import Any
from pycsspeechtts import pycsspeechtts
from requests.exceptions import HTTPError
@@ -10,6 +11,7 @@ from homeassistant.components.tts import (
CONF_LANG,
PLATFORM_SCHEMA as TTS_PLATFORM_SCHEMA,
Provider,
TtsAudioType,
)
from homeassistant.const import CONF_API_KEY, CONF_REGION, CONF_TYPE, PERCENTAGE
from homeassistant.generated.microsoft_tts import SUPPORTED_LANGUAGES
@@ -89,26 +91,28 @@ class MicrosoftProvider(Provider):
self.name = "Microsoft"
@property
def default_language(self):
def default_language(self) -> str:
"""Return the default language."""
return self._lang
@property
def supported_languages(self):
def supported_languages(self) -> list[str]:
"""Return list of supported languages."""
return SUPPORTED_LANGUAGES
return list(SUPPORTED_LANGUAGES)
@property
def supported_options(self):
def supported_options(self) -> list[str]:
"""Return list of supported options like voice, emotion."""
return [CONF_GENDER, CONF_TYPE]
@property
def default_options(self):
def default_options(self) -> dict[str, Any]:
"""Return a dict include default options."""
return {CONF_GENDER: self._gender, CONF_TYPE: self._type}
def get_tts_audio(self, message, language, options):
def get_tts_audio(
self, message: str, language: str, options: dict[str, Any]
) -> TtsAudioType:
"""Load TTS from Microsoft."""
if language is None:
language = self._lang

View File

@@ -5,6 +5,7 @@ import os
import shutil
import subprocess
import tempfile
from typing import Any
import voluptuous as vol
@@ -12,6 +13,7 @@ from homeassistant.components.tts import (
CONF_LANG,
PLATFORM_SCHEMA as TTS_PLATFORM_SCHEMA,
Provider,
TtsAudioType,
)
_LOGGER = logging.getLogger(__name__)
@@ -42,16 +44,18 @@ class PicoProvider(Provider):
self.name = "PicoTTS"
@property
def default_language(self):
def default_language(self) -> str:
"""Return the default language."""
return self._lang
@property
def supported_languages(self):
def supported_languages(self) -> list[str]:
"""Return list of supported languages."""
return SUPPORT_LANGUAGES
def get_tts_audio(self, message, language, options):
def get_tts_audio(
self, message: str, language: str, options: dict[str, Any]
) -> TtsAudioType:
"""Load TTS using pico2wave."""
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as tmpf:
fname = tmpf.name

View File

@@ -3,6 +3,7 @@
import asyncio
from http import HTTPStatus
import logging
from typing import TYPE_CHECKING, Any
import aiohttp
import voluptuous as vol
@@ -11,6 +12,7 @@ from homeassistant.components.tts import (
CONF_LANG,
PLATFORM_SCHEMA as TTS_PLATFORM_SCHEMA,
Provider,
TtsAudioType,
)
from homeassistant.const import CONF_API_KEY
from homeassistant.helpers import config_validation as cv
@@ -182,17 +184,21 @@ class VoiceRSSProvider(Provider):
}
@property
def default_language(self):
def default_language(self) -> str:
"""Return the default language."""
return self._lang
@property
def supported_languages(self):
def supported_languages(self) -> list[str]:
"""Return list of supported languages."""
return SUPPORT_LANGUAGES
async def async_get_tts_audio(self, message, language, options):
async def async_get_tts_audio(
self, message: str, language: str, options: dict[str, Any]
) -> TtsAudioType:
"""Load TTS from VoiceRSS."""
if TYPE_CHECKING:
assert self.hass
websession = async_get_clientsession(self.hass)
form_data = self._form_data.copy()

View File

@@ -1,6 +1,7 @@
"""Support for IBM Watson TTS integration."""
import logging
from typing import Any
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
from ibm_watson import TextToSpeechV1
@@ -9,6 +10,7 @@ import voluptuous as vol
from homeassistant.components.tts import (
PLATFORM_SCHEMA as TTS_PLATFORM_SCHEMA,
Provider,
TtsAudioType,
)
from homeassistant.helpers import config_validation as cv
@@ -163,26 +165,28 @@ class WatsonTTSProvider(Provider):
self.name = "Watson TTS"
@property
def supported_languages(self):
def supported_languages(self) -> list[str]:
"""Return a list of supported languages."""
return self.supported_langs
@property
def default_language(self):
def default_language(self) -> str:
"""Return the default language."""
return self.default_lang
@property
def default_options(self):
def default_options(self) -> dict[str, Any]:
"""Return dict include default options."""
return {CONF_VOICE: self.default_voice}
@property
def supported_options(self):
def supported_options(self) -> list[str]:
"""Return a list of supported options."""
return [CONF_VOICE]
def get_tts_audio(self, message, language, options):
def get_tts_audio(
self, message: str, language: str, options: dict[str, Any]
) -> TtsAudioType:
"""Request TTS file from Watson TTS."""
response = self.service.synthesize(
text=message, accept=self.output_format, voice=options[CONF_VOICE]

View File

@@ -3,6 +3,7 @@
import asyncio
from http import HTTPStatus
import logging
from typing import TYPE_CHECKING, Any
import aiohttp
import voluptuous as vol
@@ -11,6 +12,7 @@ from homeassistant.components.tts import (
CONF_LANG,
PLATFORM_SCHEMA as TTS_PLATFORM_SCHEMA,
Provider,
TtsAudioType,
)
from homeassistant.const import CONF_API_KEY
from homeassistant.helpers import config_validation as cv
@@ -104,22 +106,26 @@ class YandexSpeechKitProvider(Provider):
self.name = "YandexTTS"
@property
def default_language(self):
def default_language(self) -> str:
"""Return the default language."""
return self._language
@property
def supported_languages(self):
def supported_languages(self) -> list[str]:
"""Return list of supported languages."""
return SUPPORT_LANGUAGES
@property
def supported_options(self):
def supported_options(self) -> list[str]:
"""Return list of supported options."""
return SUPPORTED_OPTIONS
async def async_get_tts_audio(self, message, language, options):
async def async_get_tts_audio(
self, message: str, language: str, options: dict[str, Any]
) -> TtsAudioType:
"""Load TTS from yandex."""
if TYPE_CHECKING:
assert self.hass
websession = async_get_clientsession(self.hass)
actual_language = language

View File

@@ -2710,24 +2710,29 @@ _INHERITANCE_MATCH: dict[str, list[ClassTypeHintMatch]] = {
TypeHintMatch(
function_name="default_language",
return_type=["str", None],
mandatory=True,
),
TypeHintMatch(
function_name="supported_languages",
return_type=["list[str]", None],
mandatory=True,
),
TypeHintMatch(
function_name="supported_options",
return_type=["list[str]", None],
mandatory=True,
),
TypeHintMatch(
function_name="default_options",
return_type=["Mapping[str, Any]", None],
mandatory=True,
),
TypeHintMatch(
function_name="get_tts_audio",
arg_types={1: "str", 2: "str", 3: "dict[str, Any]"},
return_type="TtsAudioType",
has_async_counterpart=True,
mandatory=True,
),
],
),