diff --git a/homeassistant/components/tts/__init__.py b/homeassistant/components/tts/__init__.py index 719f8c52e7a..d278283baaf 100644 --- a/homeassistant/components/tts/__init__.py +++ b/homeassistant/components/tts/__init__.py @@ -27,7 +27,6 @@ from homeassistant.const import ( CONF_PLATFORM, HTTP_BAD_REQUEST, HTTP_NOT_FOUND, - HTTP_OK, ) from homeassistant.core import callback from homeassistant.exceptions import HomeAssistantError @@ -117,7 +116,7 @@ async def async_setup(hass, config): use_cache = conf.get(CONF_CACHE, DEFAULT_CACHE) cache_dir = conf.get(CONF_CACHE_DIR, DEFAULT_CACHE_DIR) time_memory = conf.get(CONF_TIME_MEMORY, DEFAULT_TIME_MEMORY) - base_url = conf.get(CONF_BASE_URL) or get_url(hass) + base_url = conf.get(CONF_BASE_URL) hass.data[BASE_URL_KEY] = base_url await tts.async_init_cache(use_cache, cache_dir, time_memory, base_url) @@ -165,13 +164,16 @@ async def async_setup(hass, config): options = service.data.get(ATTR_OPTIONS) try: - url = await tts.async_get_url( + url = await tts.async_get_url_path( p_type, message, cache=cache, language=language, options=options ) except HomeAssistantError as err: _LOGGER.error("Error on init TTS: %s", err) return + base = tts.base_url or get_url(hass) + url = base + url + data = { ATTR_MEDIA_CONTENT_ID: url, ATTR_MEDIA_CONTENT_TYPE: MEDIA_TYPE_MUSIC, @@ -290,7 +292,7 @@ class SpeechManager: provider.name = engine self.providers[engine] = provider - async def async_get_url( + async def async_get_url_path( self, engine, message, cache=None, language=None, options=None ): """Get URL for play message. @@ -342,7 +344,7 @@ class SpeechManager: engine, key, message, use_cache, language, options ) - return f"{self.base_url}/api/tts_proxy/{filename}" + return f"/api/tts_proxy/{filename}" async def async_get_tts_audio(self, engine, key, message, cache, language, options): """Receive TTS and store for view in cache. @@ -579,15 +581,17 @@ class TextToSpeechUrlView(HomeAssistantView): options = data.get(ATTR_OPTIONS) try: - url = await self.tts.async_get_url( + path = await self.tts.async_get_url_path( p_type, message, cache=cache, language=language, options=options ) - resp = self.json({"url": url}, HTTP_OK) except HomeAssistantError as err: _LOGGER.error("Error on init tts: %s", err) - resp = self.json({"error": err}, HTTP_BAD_REQUEST) + return self.json({"error": err}, HTTP_BAD_REQUEST) - return resp + base = self.tts.base_url or get_url(self.tts.hass) + url = base + path + + return self.json({"url": url, "path": path}) class TextToSpeechView(HomeAssistantView): @@ -595,7 +599,7 @@ class TextToSpeechView(HomeAssistantView): requires_auth = False url = "/api/tts_proxy/{filename}" - name = "api:tts:speech" + name = "api:tts_speech" def __init__(self, tts): """Initialize a tts view.""" @@ -614,4 +618,4 @@ class TextToSpeechView(HomeAssistantView): def get_base_url(hass): """Get base URL.""" - return hass.data[BASE_URL_KEY] + return hass.data[BASE_URL_KEY] or get_url(hass) diff --git a/tests/components/tts/test_init.py b/tests/components/tts/test_init.py index 61d77b6c8e2..77fbd3f7170 100644 --- a/tests/components/tts/test_init.py +++ b/tests/components/tts/test_init.py @@ -699,9 +699,10 @@ async def test_setup_component_and_web_get_url(hass, hass_client): req = await client.post(url, json=data) assert req.status == 200 response = await req.json() - assert response.get("url") == ( - "http://example.local:8123/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3" - ) + assert response == { + "url": "http://example.local:8123/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3", + "path": "/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3", + } async def test_setup_component_and_web_get_url_bad_config(hass, hass_client):