Add a base_url configuration setting to tts. (#16478)
* Add a base_url configuration setting to tts. * Remove the empty string as default value for base_urls As requested in https://github.com/home-assistant/home-assistant/pull/16478#pullrequestreview-153526144
This commit is contained in:
parent
253e787a1b
commit
a1578e3c6e
2 changed files with 53 additions and 28 deletions
|
@ -43,6 +43,7 @@ CONF_CACHE = 'cache'
|
|||
CONF_CACHE_DIR = 'cache_dir'
|
||||
CONF_LANG = 'language'
|
||||
CONF_TIME_MEMORY = 'time_memory'
|
||||
CONF_BASE_URL = 'base_url'
|
||||
|
||||
DEFAULT_CACHE = True
|
||||
DEFAULT_CACHE_DIR = 'tts'
|
||||
|
@ -65,6 +66,7 @@ PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
|
|||
vol.Optional(CONF_CACHE_DIR, default=DEFAULT_CACHE_DIR): cv.string,
|
||||
vol.Optional(CONF_TIME_MEMORY, default=DEFAULT_TIME_MEMORY):
|
||||
vol.All(vol.Coerce(int), vol.Range(min=60, max=57600)),
|
||||
vol.Optional(CONF_BASE_URL): cv.string,
|
||||
})
|
||||
|
||||
SCHEMA_SERVICE_SAY = vol.Schema({
|
||||
|
@ -87,8 +89,9 @@ 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 hass.config.api.base_url
|
||||
|
||||
await tts.async_init_cache(use_cache, cache_dir, time_memory)
|
||||
await tts.async_init_cache(use_cache, cache_dir, time_memory, base_url)
|
||||
except (HomeAssistantError, KeyError) as err:
|
||||
_LOGGER.error("Error on cache init %s", err)
|
||||
return False
|
||||
|
@ -180,13 +183,16 @@ class SpeechManager:
|
|||
self.use_cache = DEFAULT_CACHE
|
||||
self.cache_dir = DEFAULT_CACHE_DIR
|
||||
self.time_memory = DEFAULT_TIME_MEMORY
|
||||
self.base_url = None
|
||||
self.file_cache = {}
|
||||
self.mem_cache = {}
|
||||
|
||||
async def async_init_cache(self, use_cache, cache_dir, time_memory):
|
||||
async def async_init_cache(self, use_cache, cache_dir, time_memory,
|
||||
base_url):
|
||||
"""Init config folder and load file cache."""
|
||||
self.use_cache = use_cache
|
||||
self.time_memory = time_memory
|
||||
self.base_url = base_url
|
||||
|
||||
def init_tts_cache_dir(cache_dir):
|
||||
"""Init cache folder."""
|
||||
|
@ -299,8 +305,7 @@ class SpeechManager:
|
|||
filename = await self.async_get_tts_audio(
|
||||
engine, key, message, use_cache, language, options)
|
||||
|
||||
return "{}/api/tts_proxy/{}".format(
|
||||
self.hass.config.api.base_url, filename)
|
||||
return "{}/api/tts_proxy/{}".format(self.base_url, filename)
|
||||
|
||||
async def async_get_tts_audio(
|
||||
self, engine, key, message, cache, language, options):
|
||||
|
|
|
@ -97,10 +97,9 @@ class TestTTS:
|
|||
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_ID].find(
|
||||
"/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd"
|
||||
"_en_-_demo.mp3") \
|
||||
!= -1
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_ID] == \
|
||||
"{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd" \
|
||||
"_en_-_demo.mp3".format(self.hass.config.api.base_url)
|
||||
assert os.path.isfile(os.path.join(
|
||||
self.default_tts_cache,
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3"))
|
||||
|
@ -126,10 +125,9 @@ class TestTTS:
|
|||
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_ID].find(
|
||||
"/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd"
|
||||
"_de_-_demo.mp3") \
|
||||
!= -1
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_ID] == \
|
||||
"{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd" \
|
||||
"_de_-_demo.mp3".format(self.hass.config.api.base_url)
|
||||
assert os.path.isfile(os.path.join(
|
||||
self.default_tts_cache,
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_de_-_demo.mp3"))
|
||||
|
@ -167,10 +165,9 @@ class TestTTS:
|
|||
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_ID].find(
|
||||
"/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd"
|
||||
"_de_-_demo.mp3") \
|
||||
!= -1
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_ID] == \
|
||||
"{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd" \
|
||||
"_de_-_demo.mp3".format(self.hass.config.api.base_url)
|
||||
assert os.path.isfile(os.path.join(
|
||||
self.default_tts_cache,
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_de_-_demo.mp3"))
|
||||
|
@ -225,10 +222,9 @@ class TestTTS:
|
|||
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_ID].find(
|
||||
"/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd"
|
||||
"_de_{0}_demo.mp3".format(opt_hash)) \
|
||||
!= -1
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_ID] == \
|
||||
"{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd" \
|
||||
"_de_{}_demo.mp3".format(self.hass.config.api.base_url, opt_hash)
|
||||
assert os.path.isfile(os.path.join(
|
||||
self.default_tts_cache,
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_de_{0}_demo.mp3".format(
|
||||
|
@ -259,10 +255,9 @@ class TestTTS:
|
|||
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_ID].find(
|
||||
"/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd"
|
||||
"_de_{0}_demo.mp3".format(opt_hash)) \
|
||||
!= -1
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_ID] == \
|
||||
"{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd" \
|
||||
"_de_{}_demo.mp3".format(self.hass.config.api.base_url, opt_hash)
|
||||
assert os.path.isfile(os.path.join(
|
||||
self.default_tts_cache,
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_de_{0}_demo.mp3".format(
|
||||
|
@ -298,6 +293,32 @@ class TestTTS:
|
|||
"265944c108cbb00b2a621be5930513e03a0bb2cd_de_{0}_demo.mp3".format(
|
||||
opt_hash)))
|
||||
|
||||
def test_setup_component_and_test_service_with_base_url_set(self):
|
||||
"""Set up the demo platform with ``base_url`` set and call service."""
|
||||
calls = mock_service(self.hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
|
||||
|
||||
config = {
|
||||
tts.DOMAIN: {
|
||||
'platform': 'demo',
|
||||
'base_url': 'http://fnord',
|
||||
}
|
||||
}
|
||||
|
||||
with assert_setup_component(1, tts.DOMAIN):
|
||||
setup_component(self.hass, tts.DOMAIN, config)
|
||||
|
||||
self.hass.services.call(tts.DOMAIN, 'demo_say', {
|
||||
tts.ATTR_MESSAGE: "I person is on front of your door.",
|
||||
})
|
||||
self.hass.block_till_done()
|
||||
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_ID] == \
|
||||
"http://fnord" \
|
||||
"/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd" \
|
||||
"_en_-_demo.mp3"
|
||||
|
||||
def test_setup_component_and_test_service_clear_cache(self):
|
||||
"""Set up the demo platform and call service clear cache."""
|
||||
calls = mock_service(self.hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
|
||||
|
@ -507,10 +528,9 @@ class TestTTS:
|
|||
self.hass.block_till_done()
|
||||
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_ID].find(
|
||||
"/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd"
|
||||
"_en_-_demo.mp3") \
|
||||
!= -1
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_ID] == \
|
||||
"{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd" \
|
||||
"_en_-_demo.mp3".format(self.hass.config.api.base_url)
|
||||
|
||||
@patch('homeassistant.components.tts.demo.DemoProvider.get_tts_audio',
|
||||
return_value=(None, None))
|
||||
|
|
Loading…
Add table
Reference in a new issue