Fix missing translations in generic (#130672)

This commit is contained in:
epenet 2024-11-15 09:48:02 +01:00 committed by Franck Nijhof
parent 9e4d26137e
commit 8d6f2e78f5
No known key found for this signature in database
GPG Key ID: D62583BA8AB11CA3
3 changed files with 8 additions and 6 deletions

View File

@ -282,7 +282,7 @@ async def async_test_stream(
return {CONF_STREAM_SOURCE: "timeout"} return {CONF_STREAM_SOURCE: "timeout"}
await stream.stop() await stream.stop()
except StreamWorkerError as err: except StreamWorkerError as err:
return {CONF_STREAM_SOURCE: str(err)} return {CONF_STREAM_SOURCE: "unknown_with_details", "error_details": str(err)}
except PermissionError: except PermissionError:
return {CONF_STREAM_SOURCE: "stream_not_permitted"} return {CONF_STREAM_SOURCE: "stream_not_permitted"}
except OSError as err: except OSError as err:
@ -339,6 +339,7 @@ class GenericIPCamConfigFlow(ConfigFlow, domain=DOMAIN):
) -> ConfigFlowResult: ) -> ConfigFlowResult:
"""Handle the start of the config flow.""" """Handle the start of the config flow."""
errors = {} errors = {}
description_placeholders = {}
hass = self.hass hass = self.hass
if user_input: if user_input:
# Secondary validation because serialised vol can't seem to handle this complexity: # Secondary validation because serialised vol can't seem to handle this complexity:
@ -372,6 +373,8 @@ class GenericIPCamConfigFlow(ConfigFlow, domain=DOMAIN):
# temporary preview for user to check the image # temporary preview for user to check the image
self.preview_cam = user_input self.preview_cam = user_input
return await self.async_step_user_confirm_still() return await self.async_step_user_confirm_still()
if "error_details" in errors:
description_placeholders["error"] = errors.pop("error_details")
elif self.user_input: elif self.user_input:
user_input = self.user_input user_input = self.user_input
else: else:
@ -379,6 +382,7 @@ class GenericIPCamConfigFlow(ConfigFlow, domain=DOMAIN):
return self.async_show_form( return self.async_show_form(
step_id="user", step_id="user",
data_schema=build_schema(user_input), data_schema=build_schema(user_input),
description_placeholders=description_placeholders,
errors=errors, errors=errors,
) )

View File

@ -3,6 +3,7 @@
"config": { "config": {
"error": { "error": {
"unknown": "[%key:common::config_flow::error::unknown%]", "unknown": "[%key:common::config_flow::error::unknown%]",
"unknown_with_details": "An unknown error occurred: {error}",
"already_exists": "A camera with these URL settings already exists.", "already_exists": "A camera with these URL settings already exists.",
"unable_still_load": "Unable to load valid image from still image URL (e.g. invalid host, URL or authentication failure). Review log for more info.", "unable_still_load": "Unable to load valid image from still image URL (e.g. invalid host, URL or authentication failure). Review log for more info.",
"unable_still_load_auth": "Unable to load valid image from still image URL: The camera may require a user name and password, or they are not correct.", "unable_still_load_auth": "Unable to load valid image from still image URL: The camera may require a user name and password, or they are not correct.",

View File

@ -637,10 +637,6 @@ async def test_form_stream_other_error(hass: HomeAssistant, user_flow) -> None:
await hass.async_block_till_done() await hass.async_block_till_done()
@pytest.mark.parametrize( # Remove when translations fixed
"ignore_translations",
["component.generic.config.error.Some message"],
)
@respx.mock @respx.mock
@pytest.mark.usefixtures("fakeimg_png") @pytest.mark.usefixtures("fakeimg_png")
async def test_form_stream_worker_error( async def test_form_stream_worker_error(
@ -656,7 +652,8 @@ async def test_form_stream_worker_error(
TESTDATA, TESTDATA,
) )
assert result2["type"] is FlowResultType.FORM assert result2["type"] is FlowResultType.FORM
assert result2["errors"] == {"stream_source": "Some message"} assert result2["errors"] == {"stream_source": "unknown_with_details"}
assert result2["description_placeholders"] == {"error": "Some message"}
@respx.mock @respx.mock