Fix here_travel_time config_flow import (#72313)
* Handle import of entity_namespace * Update homeassistant/components/here_travel_time/config_flow.py Co-authored-by: Allen Porter <allen.porter@gmail.com> * Fix mypy Co-authored-by: Allen Porter <allen.porter@gmail.com>
This commit is contained in:
parent
7df7e33d17
commit
7649adde5f
2 changed files with 42 additions and 26 deletions
|
@ -8,7 +8,13 @@ from herepy import HEREError, InvalidCredentialsError, RouteMode, RoutingApi
|
|||
import voluptuous as vol
|
||||
|
||||
from homeassistant import config_entries
|
||||
from homeassistant.const import CONF_API_KEY, CONF_MODE, CONF_NAME, CONF_UNIT_SYSTEM
|
||||
from homeassistant.const import (
|
||||
CONF_API_KEY,
|
||||
CONF_ENTITY_NAMESPACE,
|
||||
CONF_MODE,
|
||||
CONF_NAME,
|
||||
CONF_UNIT_SYSTEM,
|
||||
)
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.data_entry_flow import FlowResult
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
|
@ -231,9 +237,7 @@ class HERETravelTimeConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||
)
|
||||
return self.async_show_form(step_id="destination_entity", data_schema=schema)
|
||||
|
||||
async def async_step_import(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
) -> FlowResult:
|
||||
async def async_step_import(self, user_input: dict[str, Any]) -> FlowResult:
|
||||
"""Import from configuration.yaml."""
|
||||
options: dict[str, Any] = {}
|
||||
user_input, options = self._transform_import_input(user_input)
|
||||
|
@ -249,39 +253,47 @@ class HERETravelTimeConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||
)
|
||||
|
||||
def _transform_import_input(
|
||||
self, user_input
|
||||
self, import_input: dict[str, Any]
|
||||
) -> tuple[dict[str, Any], dict[str, Any]]:
|
||||
"""Transform platform schema input to new model."""
|
||||
options: dict[str, Any] = {}
|
||||
if user_input.get(CONF_ORIGIN_LATITUDE) is not None:
|
||||
user_input[CONF_ORIGIN_LATITUDE] = user_input.pop(CONF_ORIGIN_LATITUDE)
|
||||
user_input[CONF_ORIGIN_LONGITUDE] = user_input.pop(CONF_ORIGIN_LONGITUDE)
|
||||
else:
|
||||
user_input[CONF_ORIGIN_ENTITY_ID] = user_input.pop(CONF_ORIGIN_ENTITY_ID)
|
||||
user_input: dict[str, Any] = {}
|
||||
|
||||
if user_input.get(CONF_DESTINATION_LATITUDE) is not None:
|
||||
user_input[CONF_DESTINATION_LATITUDE] = user_input.pop(
|
||||
CONF_DESTINATION_LATITUDE
|
||||
)
|
||||
user_input[CONF_DESTINATION_LONGITUDE] = user_input.pop(
|
||||
CONF_DESTINATION_LONGITUDE
|
||||
)
|
||||
if import_input.get(CONF_ORIGIN_LATITUDE) is not None:
|
||||
user_input[CONF_ORIGIN_LATITUDE] = import_input[CONF_ORIGIN_LATITUDE]
|
||||
user_input[CONF_ORIGIN_LONGITUDE] = import_input[CONF_ORIGIN_LONGITUDE]
|
||||
else:
|
||||
user_input[CONF_DESTINATION_ENTITY_ID] = user_input.pop(
|
||||
user_input[CONF_ORIGIN_ENTITY_ID] = import_input[CONF_ORIGIN_ENTITY_ID]
|
||||
|
||||
if import_input.get(CONF_DESTINATION_LATITUDE) is not None:
|
||||
user_input[CONF_DESTINATION_LATITUDE] = import_input[
|
||||
CONF_DESTINATION_LATITUDE
|
||||
]
|
||||
user_input[CONF_DESTINATION_LONGITUDE] = import_input[
|
||||
CONF_DESTINATION_LONGITUDE
|
||||
]
|
||||
else:
|
||||
user_input[CONF_DESTINATION_ENTITY_ID] = import_input[
|
||||
CONF_DESTINATION_ENTITY_ID
|
||||
)
|
||||
]
|
||||
|
||||
user_input[CONF_API_KEY] = import_input[CONF_API_KEY]
|
||||
user_input[CONF_MODE] = import_input[CONF_MODE]
|
||||
user_input[CONF_NAME] = import_input[CONF_NAME]
|
||||
if (namespace := import_input.get(CONF_ENTITY_NAMESPACE)) is not None:
|
||||
user_input[CONF_NAME] = f"{namespace} {user_input[CONF_NAME]}"
|
||||
|
||||
options[CONF_TRAFFIC_MODE] = (
|
||||
TRAFFIC_MODE_ENABLED
|
||||
if user_input.pop(CONF_TRAFFIC_MODE, False)
|
||||
if import_input.get(CONF_TRAFFIC_MODE, False)
|
||||
else TRAFFIC_MODE_DISABLED
|
||||
)
|
||||
options[CONF_ROUTE_MODE] = user_input.pop(CONF_ROUTE_MODE)
|
||||
options[CONF_UNIT_SYSTEM] = user_input.pop(
|
||||
options[CONF_ROUTE_MODE] = import_input.get(CONF_ROUTE_MODE)
|
||||
options[CONF_UNIT_SYSTEM] = import_input.get(
|
||||
CONF_UNIT_SYSTEM, self.hass.config.units.name
|
||||
)
|
||||
options[CONF_ARRIVAL_TIME] = user_input.pop(CONF_ARRIVAL, None)
|
||||
options[CONF_DEPARTURE_TIME] = user_input.pop(CONF_DEPARTURE, None)
|
||||
options[CONF_ARRIVAL_TIME] = import_input.get(CONF_ARRIVAL, None)
|
||||
options[CONF_DEPARTURE_TIME] = import_input.get(CONF_DEPARTURE, None)
|
||||
|
||||
return user_input, options
|
||||
|
||||
|
|
|
@ -29,8 +29,10 @@ from homeassistant.components.here_travel_time.sensor import (
|
|||
)
|
||||
from homeassistant.const import (
|
||||
CONF_API_KEY,
|
||||
CONF_ENTITY_NAMESPACE,
|
||||
CONF_MODE,
|
||||
CONF_NAME,
|
||||
CONF_SCAN_INTERVAL,
|
||||
CONF_UNIT_SYSTEM,
|
||||
CONF_UNIT_SYSTEM_IMPERIAL,
|
||||
CONF_UNIT_SYSTEM_METRIC,
|
||||
|
@ -416,16 +418,18 @@ async def test_import_flow_entity_id(hass: HomeAssistant) -> None:
|
|||
CONF_ROUTE_MODE: ROUTE_MODE_FASTEST,
|
||||
CONF_UNIT_SYSTEM: CONF_UNIT_SYSTEM_IMPERIAL,
|
||||
CONF_TRAFFIC_MODE: TRAFFIC_MODE_ENABLED,
|
||||
CONF_ENTITY_NAMESPACE: "namespace",
|
||||
CONF_SCAN_INTERVAL: 2678400,
|
||||
},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||
assert result["title"] == "test_name"
|
||||
assert result["title"] == "namespace test_name"
|
||||
|
||||
entry = hass.config_entries.async_entries(DOMAIN)[0]
|
||||
assert entry.data == {
|
||||
CONF_NAME: "test_name",
|
||||
CONF_NAME: "namespace test_name",
|
||||
CONF_API_KEY: CONF_API_KEY,
|
||||
CONF_ORIGIN_ENTITY_ID: "sensor.origin",
|
||||
CONF_DESTINATION_ENTITY_ID: "sensor.destination",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue