1
0
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:
Paulus Schoutsen
2020-02-04 14:42:07 -08:00
committed by GitHub
parent 201ea2557e
commit f41623ca64
16 changed files with 339 additions and 89 deletions

View File

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