mirror of
https://github.com/home-assistant/core.git
synced 2025-12-24 12:59:34 +00:00
Log warning when entities referenced in service call not found (#31427)
* Raise entities not found error * Make it a warning, not an error * Add support for MATCH_ENTITY_NONE * Fix lint * Fix tests
This commit is contained in:
@@ -95,7 +95,10 @@ class TestTTS:
|
||||
self.hass.services.call(
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{tts.ATTR_MESSAGE: "I person is on front of your door."},
|
||||
{
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
},
|
||||
)
|
||||
self.hass.block_till_done()
|
||||
|
||||
@@ -103,13 +106,13 @@ class TestTTS:
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
||||
assert calls[0].data[
|
||||
ATTR_MEDIA_CONTENT_ID
|
||||
] == "{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3".format(
|
||||
] == "{}/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491_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",
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3",
|
||||
)
|
||||
)
|
||||
|
||||
@@ -125,7 +128,10 @@ class TestTTS:
|
||||
self.hass.services.call(
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{tts.ATTR_MESSAGE: "I person is on front of your door."},
|
||||
{
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
},
|
||||
)
|
||||
self.hass.block_till_done()
|
||||
|
||||
@@ -133,13 +139,13 @@ class TestTTS:
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
||||
assert calls[0].data[
|
||||
ATTR_MEDIA_CONTENT_ID
|
||||
] == "{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_de_-_demo.mp3".format(
|
||||
] == "{}/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491_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",
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_de_-_demo.mp3",
|
||||
)
|
||||
)
|
||||
|
||||
@@ -163,7 +169,8 @@ class TestTTS:
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{
|
||||
tts.ATTR_MESSAGE: "I person is on front of your door.",
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
tts.ATTR_LANGUAGE: "de",
|
||||
},
|
||||
)
|
||||
@@ -173,13 +180,13 @@ class TestTTS:
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
||||
assert calls[0].data[
|
||||
ATTR_MEDIA_CONTENT_ID
|
||||
] == "{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_de_-_demo.mp3".format(
|
||||
] == "{}/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491_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",
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_de_-_demo.mp3",
|
||||
)
|
||||
)
|
||||
|
||||
@@ -196,7 +203,8 @@ class TestTTS:
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{
|
||||
tts.ATTR_MESSAGE: "I person is on front of your door.",
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
tts.ATTR_LANGUAGE: "lang",
|
||||
},
|
||||
)
|
||||
@@ -206,7 +214,7 @@ class TestTTS:
|
||||
assert not os.path.isfile(
|
||||
os.path.join(
|
||||
self.default_tts_cache,
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_lang_-_demo.mp3",
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_lang_-_demo.mp3",
|
||||
)
|
||||
)
|
||||
|
||||
@@ -223,7 +231,8 @@ class TestTTS:
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{
|
||||
tts.ATTR_MESSAGE: "I person is on front of your door.",
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
tts.ATTR_LANGUAGE: "de",
|
||||
tts.ATTR_OPTIONS: {"voice": "alex"},
|
||||
},
|
||||
@@ -236,13 +245,13 @@ class TestTTS:
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
||||
assert calls[0].data[
|
||||
ATTR_MEDIA_CONTENT_ID
|
||||
] == "{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_de_{}_demo.mp3".format(
|
||||
] == "{}/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491_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(
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_de_{0}_demo.mp3".format(
|
||||
opt_hash
|
||||
),
|
||||
)
|
||||
@@ -265,7 +274,8 @@ class TestTTS:
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{
|
||||
tts.ATTR_MESSAGE: "I person is on front of your door.",
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
tts.ATTR_LANGUAGE: "de",
|
||||
},
|
||||
)
|
||||
@@ -277,13 +287,13 @@ class TestTTS:
|
||||
assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC
|
||||
assert calls[0].data[
|
||||
ATTR_MEDIA_CONTENT_ID
|
||||
] == "{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_de_{}_demo.mp3".format(
|
||||
] == "{}/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491_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(
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_de_{0}_demo.mp3".format(
|
||||
opt_hash
|
||||
),
|
||||
)
|
||||
@@ -302,7 +312,8 @@ class TestTTS:
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{
|
||||
tts.ATTR_MESSAGE: "I person is on front of your door.",
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
tts.ATTR_LANGUAGE: "de",
|
||||
tts.ATTR_OPTIONS: {"speed": 1},
|
||||
},
|
||||
@@ -315,7 +326,7 @@ class TestTTS:
|
||||
assert not os.path.isfile(
|
||||
os.path.join(
|
||||
self.default_tts_cache,
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_de_{0}_demo.mp3".format(
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_de_{0}_demo.mp3".format(
|
||||
opt_hash
|
||||
),
|
||||
)
|
||||
@@ -333,7 +344,10 @@ class TestTTS:
|
||||
self.hass.services.call(
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{tts.ATTR_MESSAGE: "I person is on front of your door."},
|
||||
{
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
},
|
||||
)
|
||||
self.hass.block_till_done()
|
||||
|
||||
@@ -341,7 +355,7 @@ class TestTTS:
|
||||
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"
|
||||
"/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491"
|
||||
"_en_-_demo.mp3"
|
||||
)
|
||||
|
||||
@@ -357,7 +371,10 @@ class TestTTS:
|
||||
self.hass.services.call(
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{tts.ATTR_MESSAGE: "I person is on front of your door."},
|
||||
{
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
},
|
||||
)
|
||||
self.hass.block_till_done()
|
||||
|
||||
@@ -365,7 +382,7 @@ class TestTTS:
|
||||
assert os.path.isfile(
|
||||
os.path.join(
|
||||
self.default_tts_cache,
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3",
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3",
|
||||
)
|
||||
)
|
||||
|
||||
@@ -375,7 +392,7 @@ class TestTTS:
|
||||
assert not os.path.isfile(
|
||||
os.path.join(
|
||||
self.default_tts_cache,
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3",
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3",
|
||||
)
|
||||
)
|
||||
|
||||
@@ -393,7 +410,10 @@ class TestTTS:
|
||||
self.hass.services.call(
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{tts.ATTR_MESSAGE: "I person is on front of your door."},
|
||||
{
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
},
|
||||
)
|
||||
self.hass.block_till_done()
|
||||
|
||||
@@ -401,7 +421,7 @@ class TestTTS:
|
||||
req = requests.get(calls[0].data[ATTR_MEDIA_CONTENT_ID])
|
||||
_, demo_data = self.demo_provider.get_tts_audio("bla", "en")
|
||||
demo_data = tts.SpeechManager.write_tags(
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3",
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3",
|
||||
demo_data,
|
||||
self.demo_provider,
|
||||
"AI person is in front of your door.",
|
||||
@@ -425,7 +445,10 @@ class TestTTS:
|
||||
self.hass.services.call(
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{tts.ATTR_MESSAGE: "I person is on front of your door."},
|
||||
{
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
},
|
||||
)
|
||||
self.hass.block_till_done()
|
||||
|
||||
@@ -433,10 +456,10 @@ class TestTTS:
|
||||
req = requests.get(calls[0].data[ATTR_MEDIA_CONTENT_ID])
|
||||
_, demo_data = self.demo_provider.get_tts_audio("bla", "de")
|
||||
demo_data = tts.SpeechManager.write_tags(
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_de_-_demo.mp3",
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_de_-_demo.mp3",
|
||||
demo_data,
|
||||
self.demo_provider,
|
||||
"I person is on front of your door.",
|
||||
"There is someone at the door.",
|
||||
"de",
|
||||
None,
|
||||
)
|
||||
@@ -453,7 +476,7 @@ class TestTTS:
|
||||
self.hass.start()
|
||||
|
||||
url = (
|
||||
"{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3"
|
||||
"{}/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3"
|
||||
).format(self.hass.config.api.base_url)
|
||||
|
||||
req = requests.get(url)
|
||||
@@ -487,7 +510,10 @@ class TestTTS:
|
||||
self.hass.services.call(
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{tts.ATTR_MESSAGE: "I person is on front of your door."},
|
||||
{
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
},
|
||||
)
|
||||
self.hass.block_till_done()
|
||||
|
||||
@@ -495,7 +521,7 @@ class TestTTS:
|
||||
assert not os.path.isfile(
|
||||
os.path.join(
|
||||
self.default_tts_cache,
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3",
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3",
|
||||
)
|
||||
)
|
||||
|
||||
@@ -512,7 +538,8 @@ class TestTTS:
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{
|
||||
tts.ATTR_MESSAGE: "I person is on front of your door.",
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
tts.ATTR_CACHE: False,
|
||||
},
|
||||
)
|
||||
@@ -522,7 +549,7 @@ class TestTTS:
|
||||
assert not os.path.isfile(
|
||||
os.path.join(
|
||||
self.default_tts_cache,
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3",
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3",
|
||||
)
|
||||
)
|
||||
|
||||
@@ -533,7 +560,7 @@ class TestTTS:
|
||||
_, demo_data = self.demo_provider.get_tts_audio("bla", "en")
|
||||
cache_file = os.path.join(
|
||||
self.default_tts_cache,
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3",
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3",
|
||||
)
|
||||
|
||||
os.mkdir(self.default_tts_cache)
|
||||
@@ -552,14 +579,17 @@ class TestTTS:
|
||||
self.hass.services.call(
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{tts.ATTR_MESSAGE: "I person is on front of your door."},
|
||||
{
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
},
|
||||
)
|
||||
self.hass.block_till_done()
|
||||
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data[
|
||||
ATTR_MEDIA_CONTENT_ID
|
||||
] == "{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3".format(
|
||||
] == "{}/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3".format(
|
||||
self.hass.config.api.base_url
|
||||
)
|
||||
|
||||
@@ -579,7 +609,10 @@ class TestTTS:
|
||||
self.hass.services.call(
|
||||
tts.DOMAIN,
|
||||
"demo_say",
|
||||
{tts.ATTR_MESSAGE: "I person is on front of your door."},
|
||||
{
|
||||
"entity_id": "media_player.something",
|
||||
tts.ATTR_MESSAGE: "There is someone at the door.",
|
||||
},
|
||||
)
|
||||
self.hass.block_till_done()
|
||||
|
||||
@@ -590,7 +623,7 @@ class TestTTS:
|
||||
_, demo_data = self.demo_provider.get_tts_audio("bla", "en")
|
||||
cache_file = os.path.join(
|
||||
self.default_tts_cache,
|
||||
"265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3",
|
||||
"42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3",
|
||||
)
|
||||
|
||||
os.mkdir(self.default_tts_cache)
|
||||
@@ -605,7 +638,7 @@ class TestTTS:
|
||||
self.hass.start()
|
||||
|
||||
url = (
|
||||
"{}/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3"
|
||||
"{}/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3"
|
||||
).format(self.hass.config.api.base_url)
|
||||
|
||||
req = requests.get(url)
|
||||
@@ -622,14 +655,15 @@ async def test_setup_component_and_web_get_url(hass, hass_client):
|
||||
client = await hass_client()
|
||||
|
||||
url = "/api/tts_get_url"
|
||||
data = {"platform": "demo", "message": "I person is on front of your door."}
|
||||
data = {"platform": "demo", "message": "There is someone at the door."}
|
||||
|
||||
req = await client.post(url, json=data)
|
||||
assert req.status == 200
|
||||
response = await req.json()
|
||||
assert response.get("url") == (
|
||||
"{}/api/tts_proxy/265944c108cbb00b2a62"
|
||||
"1be5930513e03a0bb2cd_en_-_demo.mp3".format(hass.config.api.base_url)
|
||||
"{}/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491_en_-_demo.mp3".format(
|
||||
hass.config.api.base_url
|
||||
)
|
||||
)
|
||||
|
||||
tts_cache = hass.config.path(tts.DEFAULT_CACHE_DIR)
|
||||
@@ -646,7 +680,7 @@ async def test_setup_component_and_web_get_url_bad_config(hass, hass_client):
|
||||
client = await hass_client()
|
||||
|
||||
url = "/api/tts_get_url"
|
||||
data = {"message": "I person is on front of your door."}
|
||||
data = {"message": "There is someone at the door."}
|
||||
|
||||
req = await client.post(url, json=data)
|
||||
assert req.status == 400
|
||||
|
||||
Reference in New Issue
Block a user