Include relative path in tts get url (#45623)

* Include relative path in tts get url

* Always cal get_url when requested
This commit is contained in:
Paulus Schoutsen 2021-01-28 09:33:18 +01:00 committed by GitHub
parent 7673f57248
commit 92e084cee1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 14 deletions

View file

@ -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)

View file

@ -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):