Move default options to config_flow for waze_travel_time (#80681)
Move default options to config_flow Signed-off-by: Kevin Stillhammer <kevin.stillhammer@gmail.com> Signed-off-by: Kevin Stillhammer <kevin.stillhammer@gmail.com>
This commit is contained in:
parent
fe67703e13
commit
c70614fd7c
5 changed files with 44 additions and 52 deletions
|
@ -5,8 +5,10 @@ import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
from homeassistant.const import CONF_NAME, CONF_REGION
|
from homeassistant.const import CONF_NAME, CONF_REGION
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
|
from homeassistant.data_entry_flow import FlowResult
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
from homeassistant.util.unit_system import IMPERIAL_SYSTEM
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
CONF_AVOID_FERRIES,
|
CONF_AVOID_FERRIES,
|
||||||
|
@ -20,7 +22,9 @@ from .const import (
|
||||||
CONF_UNITS,
|
CONF_UNITS,
|
||||||
CONF_VEHICLE_TYPE,
|
CONF_VEHICLE_TYPE,
|
||||||
DEFAULT_NAME,
|
DEFAULT_NAME,
|
||||||
|
DEFAULT_OPTIONS,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
|
IMPERIAL_UNITS,
|
||||||
REGIONS,
|
REGIONS,
|
||||||
UNITS,
|
UNITS,
|
||||||
VEHICLE_TYPES,
|
VEHICLE_TYPES,
|
||||||
|
@ -28,6 +32,14 @@ from .const import (
|
||||||
from .helpers import is_valid_config_entry
|
from .helpers import is_valid_config_entry
|
||||||
|
|
||||||
|
|
||||||
|
def default_options(hass: HomeAssistant) -> dict[str, str | bool]:
|
||||||
|
"""Get the default options."""
|
||||||
|
defaults = DEFAULT_OPTIONS.copy()
|
||||||
|
if hass.config.units is IMPERIAL_SYSTEM:
|
||||||
|
defaults[CONF_UNITS] = IMPERIAL_UNITS
|
||||||
|
return defaults
|
||||||
|
|
||||||
|
|
||||||
class WazeOptionsFlow(config_entries.OptionsFlow):
|
class WazeOptionsFlow(config_entries.OptionsFlow):
|
||||||
"""Handle an options flow for Waze Travel Time."""
|
"""Handle an options flow for Waze Travel Time."""
|
||||||
|
|
||||||
|
@ -35,7 +47,7 @@ class WazeOptionsFlow(config_entries.OptionsFlow):
|
||||||
"""Initialize waze options flow."""
|
"""Initialize waze options flow."""
|
||||||
self.config_entry = config_entry
|
self.config_entry = config_entry
|
||||||
|
|
||||||
async def async_step_init(self, user_input=None):
|
async def async_step_init(self, user_input=None) -> FlowResult:
|
||||||
"""Handle the initial step."""
|
"""Handle the initial step."""
|
||||||
if user_input is not None:
|
if user_input is not None:
|
||||||
return self.async_create_entry(
|
return self.async_create_entry(
|
||||||
|
@ -99,7 +111,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||||
"""Get the options flow for this handler."""
|
"""Get the options flow for this handler."""
|
||||||
return WazeOptionsFlow(config_entry)
|
return WazeOptionsFlow(config_entry)
|
||||||
|
|
||||||
async def async_step_user(self, user_input=None):
|
async def async_step_user(self, user_input=None) -> FlowResult:
|
||||||
"""Handle the initial step."""
|
"""Handle the initial step."""
|
||||||
errors = {}
|
errors = {}
|
||||||
user_input = user_input or {}
|
user_input = user_input or {}
|
||||||
|
@ -115,6 +127,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||||
return self.async_create_entry(
|
return self.async_create_entry(
|
||||||
title=user_input.get(CONF_NAME, DEFAULT_NAME),
|
title=user_input.get(CONF_NAME, DEFAULT_NAME),
|
||||||
data=user_input,
|
data=user_input,
|
||||||
|
options=default_options(self.hass),
|
||||||
)
|
)
|
||||||
|
|
||||||
# If we get here, it's because we couldn't connect
|
# If we get here, it's because we couldn't connect
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
"""Constants for waze_travel_time."""
|
"""Constants for waze_travel_time."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
DOMAIN = "waze_travel_time"
|
DOMAIN = "waze_travel_time"
|
||||||
|
|
||||||
CONF_DESTINATION = "destination"
|
CONF_DESTINATION = "destination"
|
||||||
|
@ -25,3 +27,12 @@ UNITS = [METRIC_UNITS, IMPERIAL_UNITS]
|
||||||
|
|
||||||
REGIONS = ["US", "NA", "EU", "IL", "AU"]
|
REGIONS = ["US", "NA", "EU", "IL", "AU"]
|
||||||
VEHICLE_TYPES = ["car", "taxi", "motorcycle"]
|
VEHICLE_TYPES = ["car", "taxi", "motorcycle"]
|
||||||
|
|
||||||
|
DEFAULT_OPTIONS: dict[str, str | bool] = {
|
||||||
|
CONF_REALTIME: DEFAULT_REALTIME,
|
||||||
|
CONF_VEHICLE_TYPE: DEFAULT_VEHICLE_TYPE,
|
||||||
|
CONF_UNITS: METRIC_UNITS,
|
||||||
|
CONF_AVOID_FERRIES: DEFAULT_AVOID_FERRIES,
|
||||||
|
CONF_AVOID_SUBSCRIPTION_ROADS: DEFAULT_AVOID_SUBSCRIPTION_ROADS,
|
||||||
|
CONF_AVOID_TOLL_ROADS: DEFAULT_AVOID_TOLL_ROADS,
|
||||||
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ from homeassistant.helpers.entity import DeviceInfo
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.location import find_coordinates
|
from homeassistant.helpers.location import find_coordinates
|
||||||
from homeassistant.util.unit_conversion import DistanceConverter
|
from homeassistant.util.unit_conversion import DistanceConverter
|
||||||
from homeassistant.util.unit_system import US_CUSTOMARY_SYSTEM
|
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
CONF_AVOID_FERRIES,
|
CONF_AVOID_FERRIES,
|
||||||
|
@ -39,15 +38,9 @@ from .const import (
|
||||||
CONF_REALTIME,
|
CONF_REALTIME,
|
||||||
CONF_UNITS,
|
CONF_UNITS,
|
||||||
CONF_VEHICLE_TYPE,
|
CONF_VEHICLE_TYPE,
|
||||||
DEFAULT_AVOID_FERRIES,
|
|
||||||
DEFAULT_AVOID_SUBSCRIPTION_ROADS,
|
|
||||||
DEFAULT_AVOID_TOLL_ROADS,
|
|
||||||
DEFAULT_NAME,
|
DEFAULT_NAME,
|
||||||
DEFAULT_REALTIME,
|
|
||||||
DEFAULT_VEHICLE_TYPE,
|
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
IMPERIAL_UNITS,
|
IMPERIAL_UNITS,
|
||||||
METRIC_UNITS,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
@ -61,39 +54,6 @@ async def async_setup_entry(
|
||||||
async_add_entities: AddEntitiesCallback,
|
async_add_entities: AddEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up a Waze travel time sensor entry."""
|
"""Set up a Waze travel time sensor entry."""
|
||||||
defaults = {
|
|
||||||
CONF_REALTIME: DEFAULT_REALTIME,
|
|
||||||
CONF_VEHICLE_TYPE: DEFAULT_VEHICLE_TYPE,
|
|
||||||
CONF_UNITS: METRIC_UNITS,
|
|
||||||
CONF_AVOID_FERRIES: DEFAULT_AVOID_FERRIES,
|
|
||||||
CONF_AVOID_SUBSCRIPTION_ROADS: DEFAULT_AVOID_SUBSCRIPTION_ROADS,
|
|
||||||
CONF_AVOID_TOLL_ROADS: DEFAULT_AVOID_TOLL_ROADS,
|
|
||||||
}
|
|
||||||
if hass.config.units is US_CUSTOMARY_SYSTEM:
|
|
||||||
defaults[CONF_UNITS] = IMPERIAL_UNITS
|
|
||||||
|
|
||||||
if not config_entry.options:
|
|
||||||
new_data = config_entry.data.copy()
|
|
||||||
options = {}
|
|
||||||
for key in (
|
|
||||||
CONF_INCL_FILTER,
|
|
||||||
CONF_EXCL_FILTER,
|
|
||||||
CONF_REALTIME,
|
|
||||||
CONF_VEHICLE_TYPE,
|
|
||||||
CONF_AVOID_TOLL_ROADS,
|
|
||||||
CONF_AVOID_SUBSCRIPTION_ROADS,
|
|
||||||
CONF_AVOID_FERRIES,
|
|
||||||
CONF_UNITS,
|
|
||||||
):
|
|
||||||
if key in new_data:
|
|
||||||
options[key] = new_data.pop(key)
|
|
||||||
elif key in defaults:
|
|
||||||
options[key] = defaults[key]
|
|
||||||
|
|
||||||
hass.config_entries.async_update_entry(
|
|
||||||
config_entry, data=new_data, options=options
|
|
||||||
)
|
|
||||||
|
|
||||||
destination = config_entry.data[CONF_DESTINATION]
|
destination = config_entry.data[CONF_DESTINATION]
|
||||||
origin = config_entry.data[CONF_ORIGIN]
|
origin = config_entry.data[CONF_ORIGIN]
|
||||||
region = config_entry.data[CONF_REGION]
|
region = config_entry.data[CONF_REGION]
|
||||||
|
|
|
@ -14,9 +14,11 @@ from homeassistant.components.waze_travel_time.const import (
|
||||||
CONF_UNITS,
|
CONF_UNITS,
|
||||||
CONF_VEHICLE_TYPE,
|
CONF_VEHICLE_TYPE,
|
||||||
DEFAULT_NAME,
|
DEFAULT_NAME,
|
||||||
|
DEFAULT_OPTIONS,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
|
IMPERIAL_UNITS,
|
||||||
)
|
)
|
||||||
from homeassistant.const import CONF_NAME, CONF_REGION, CONF_UNIT_SYSTEM_IMPERIAL
|
from homeassistant.const import CONF_NAME, CONF_REGION
|
||||||
|
|
||||||
from .const import MOCK_CONFIG
|
from .const import MOCK_CONFIG
|
||||||
|
|
||||||
|
@ -53,6 +55,7 @@ async def test_options(hass):
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
data=MOCK_CONFIG,
|
data=MOCK_CONFIG,
|
||||||
|
options=DEFAULT_OPTIONS,
|
||||||
)
|
)
|
||||||
entry.add_to_hass(hass)
|
entry.add_to_hass(hass)
|
||||||
await hass.config_entries.async_setup(entry.entry_id)
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
|
@ -72,7 +75,7 @@ async def test_options(hass):
|
||||||
CONF_EXCL_FILTER: "exclude",
|
CONF_EXCL_FILTER: "exclude",
|
||||||
CONF_INCL_FILTER: "include",
|
CONF_INCL_FILTER: "include",
|
||||||
CONF_REALTIME: False,
|
CONF_REALTIME: False,
|
||||||
CONF_UNITS: CONF_UNIT_SYSTEM_IMPERIAL,
|
CONF_UNITS: IMPERIAL_UNITS,
|
||||||
CONF_VEHICLE_TYPE: "taxi",
|
CONF_VEHICLE_TYPE: "taxi",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -85,7 +88,7 @@ async def test_options(hass):
|
||||||
CONF_EXCL_FILTER: "exclude",
|
CONF_EXCL_FILTER: "exclude",
|
||||||
CONF_INCL_FILTER: "include",
|
CONF_INCL_FILTER: "include",
|
||||||
CONF_REALTIME: False,
|
CONF_REALTIME: False,
|
||||||
CONF_UNITS: CONF_UNIT_SYSTEM_IMPERIAL,
|
CONF_UNITS: IMPERIAL_UNITS,
|
||||||
CONF_VEHICLE_TYPE: "taxi",
|
CONF_VEHICLE_TYPE: "taxi",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,7 +99,7 @@ async def test_options(hass):
|
||||||
CONF_EXCL_FILTER: "exclude",
|
CONF_EXCL_FILTER: "exclude",
|
||||||
CONF_INCL_FILTER: "include",
|
CONF_INCL_FILTER: "include",
|
||||||
CONF_REALTIME: False,
|
CONF_REALTIME: False,
|
||||||
CONF_UNITS: CONF_UNIT_SYSTEM_IMPERIAL,
|
CONF_UNITS: IMPERIAL_UNITS,
|
||||||
CONF_VEHICLE_TYPE: "taxi",
|
CONF_VEHICLE_TYPE: "taxi",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,9 +10,10 @@ from homeassistant.components.waze_travel_time.const import (
|
||||||
CONF_REALTIME,
|
CONF_REALTIME,
|
||||||
CONF_UNITS,
|
CONF_UNITS,
|
||||||
CONF_VEHICLE_TYPE,
|
CONF_VEHICLE_TYPE,
|
||||||
|
DEFAULT_OPTIONS,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
|
IMPERIAL_UNITS,
|
||||||
)
|
)
|
||||||
from homeassistant.const import CONF_UNIT_SYSTEM_IMPERIAL
|
|
||||||
|
|
||||||
from .const import MOCK_CONFIG
|
from .const import MOCK_CONFIG
|
||||||
|
|
||||||
|
@ -51,7 +52,7 @@ def mock_update_keyerror_fixture(mock_wrc):
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"data,options",
|
"data,options",
|
||||||
[(MOCK_CONFIG, {})],
|
[(MOCK_CONFIG, DEFAULT_OPTIONS)],
|
||||||
)
|
)
|
||||||
@pytest.mark.usefixtures("mock_update", "mock_config")
|
@pytest.mark.usefixtures("mock_update", "mock_config")
|
||||||
async def test_sensor(hass):
|
async def test_sensor(hass):
|
||||||
|
@ -84,7 +85,7 @@ async def test_sensor(hass):
|
||||||
(
|
(
|
||||||
MOCK_CONFIG,
|
MOCK_CONFIG,
|
||||||
{
|
{
|
||||||
CONF_UNITS: CONF_UNIT_SYSTEM_IMPERIAL,
|
CONF_UNITS: IMPERIAL_UNITS,
|
||||||
CONF_REALTIME: True,
|
CONF_REALTIME: True,
|
||||||
CONF_VEHICLE_TYPE: "car",
|
CONF_VEHICLE_TYPE: "car",
|
||||||
CONF_AVOID_TOLL_ROADS: True,
|
CONF_AVOID_TOLL_ROADS: True,
|
||||||
|
@ -105,7 +106,9 @@ async def test_imperial(hass):
|
||||||
@pytest.mark.usefixtures("mock_update_wrcerror")
|
@pytest.mark.usefixtures("mock_update_wrcerror")
|
||||||
async def test_sensor_failed_wrcerror(hass, caplog):
|
async def test_sensor_failed_wrcerror(hass, caplog):
|
||||||
"""Test that sensor update fails with log message."""
|
"""Test that sensor update fails with log message."""
|
||||||
config_entry = MockConfigEntry(domain=DOMAIN, data=MOCK_CONFIG, entry_id="test")
|
config_entry = MockConfigEntry(
|
||||||
|
domain=DOMAIN, data=MOCK_CONFIG, options=DEFAULT_OPTIONS, entry_id="test"
|
||||||
|
)
|
||||||
config_entry.add_to_hass(hass)
|
config_entry.add_to_hass(hass)
|
||||||
await hass.config_entries.async_setup(config_entry.entry_id)
|
await hass.config_entries.async_setup(config_entry.entry_id)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -117,7 +120,9 @@ async def test_sensor_failed_wrcerror(hass, caplog):
|
||||||
@pytest.mark.usefixtures("mock_update_keyerror")
|
@pytest.mark.usefixtures("mock_update_keyerror")
|
||||||
async def test_sensor_failed_keyerror(hass, caplog):
|
async def test_sensor_failed_keyerror(hass, caplog):
|
||||||
"""Test that sensor update fails with log message."""
|
"""Test that sensor update fails with log message."""
|
||||||
config_entry = MockConfigEntry(domain=DOMAIN, data=MOCK_CONFIG, entry_id="test")
|
config_entry = MockConfigEntry(
|
||||||
|
domain=DOMAIN, data=MOCK_CONFIG, options=DEFAULT_OPTIONS, entry_id="test"
|
||||||
|
)
|
||||||
config_entry.add_to_hass(hass)
|
config_entry.add_to_hass(hass)
|
||||||
await hass.config_entries.async_setup(config_entry.entry_id)
|
await hass.config_entries.async_setup(config_entry.entry_id)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue