Deprecate YAML config for AirVisual (0.119 removal) (#42581)
This commit is contained in:
parent
6c5ef0970a
commit
3707b72a37
3 changed files with 21 additions and 79 deletions
|
@ -10,9 +10,8 @@ from pyairvisual.errors import (
|
||||||
KeyExpiredError,
|
KeyExpiredError,
|
||||||
NodeProError,
|
NodeProError,
|
||||||
)
|
)
|
||||||
import voluptuous as vol
|
|
||||||
|
|
||||||
from homeassistant.config_entries import SOURCE_IMPORT, SOURCE_REAUTH
|
from homeassistant.config_entries import SOURCE_REAUTH
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_ATTRIBUTION,
|
ATTR_ATTRIBUTION,
|
||||||
CONF_API_KEY,
|
CONF_API_KEY,
|
||||||
|
@ -49,34 +48,8 @@ DATA_LISTENER = "listener"
|
||||||
|
|
||||||
DEFAULT_ATTRIBUTION = "Data provided by AirVisual"
|
DEFAULT_ATTRIBUTION = "Data provided by AirVisual"
|
||||||
DEFAULT_NODE_PRO_UPDATE_INTERVAL = timedelta(minutes=1)
|
DEFAULT_NODE_PRO_UPDATE_INTERVAL = timedelta(minutes=1)
|
||||||
DEFAULT_OPTIONS = {CONF_SHOW_ON_MAP: True}
|
|
||||||
|
|
||||||
GEOGRAPHY_COORDINATES_SCHEMA = vol.Schema(
|
CONFIG_SCHEMA = cv.deprecated(DOMAIN, invalidation_version="0.119")
|
||||||
{
|
|
||||||
vol.Required(CONF_LATITUDE): cv.latitude,
|
|
||||||
vol.Required(CONF_LONGITUDE): cv.longitude,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
GEOGRAPHY_PLACE_SCHEMA = vol.Schema(
|
|
||||||
{
|
|
||||||
vol.Required(CONF_CITY): cv.string,
|
|
||||||
vol.Required(CONF_STATE): cv.string,
|
|
||||||
vol.Required(CONF_COUNTRY): cv.string,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
CLOUD_API_SCHEMA = vol.Schema(
|
|
||||||
{
|
|
||||||
vol.Required(CONF_API_KEY): cv.string,
|
|
||||||
vol.Optional(CONF_GEOGRAPHIES, default=[]): vol.All(
|
|
||||||
cv.ensure_list,
|
|
||||||
[vol.Any(GEOGRAPHY_COORDINATES_SCHEMA, GEOGRAPHY_PLACE_SCHEMA)],
|
|
||||||
),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
CONFIG_SCHEMA = vol.Schema({DOMAIN: CLOUD_API_SCHEMA}, extra=vol.ALLOW_EXTRA)
|
|
||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
|
@ -154,24 +127,6 @@ def async_sync_geo_coordinator_update_intervals(hass, api_key):
|
||||||
async def async_setup(hass, config):
|
async def async_setup(hass, config):
|
||||||
"""Set up the AirVisual component."""
|
"""Set up the AirVisual component."""
|
||||||
hass.data[DOMAIN] = {DATA_COORDINATOR: {}, DATA_LISTENER: {}}
|
hass.data[DOMAIN] = {DATA_COORDINATOR: {}, DATA_LISTENER: {}}
|
||||||
|
|
||||||
if DOMAIN not in config:
|
|
||||||
return True
|
|
||||||
|
|
||||||
conf = config[DOMAIN]
|
|
||||||
|
|
||||||
for geography in conf.get(
|
|
||||||
CONF_GEOGRAPHIES,
|
|
||||||
[{CONF_LATITUDE: hass.config.latitude, CONF_LONGITUDE: hass.config.longitude}],
|
|
||||||
):
|
|
||||||
hass.async_create_task(
|
|
||||||
hass.config_entries.flow.async_init(
|
|
||||||
DOMAIN,
|
|
||||||
context={"source": SOURCE_IMPORT},
|
|
||||||
data={CONF_API_KEY: conf[CONF_API_KEY], **geography},
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
@ -347,7 +302,7 @@ async def async_migrate_entry(hass, config_entry):
|
||||||
hass.async_create_task(
|
hass.async_create_task(
|
||||||
hass.config_entries.flow.async_init(
|
hass.config_entries.flow.async_init(
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
context={"source": SOURCE_IMPORT},
|
context={"source": "geography"},
|
||||||
data={CONF_API_KEY: config_entry.data[CONF_API_KEY], **geography},
|
data={CONF_API_KEY: config_entry.data[CONF_API_KEY], **geography},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -146,10 +146,6 @@ class AirVisualFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
||||||
data={**user_input, CONF_INTEGRATION_TYPE: INTEGRATION_TYPE_GEOGRAPHY},
|
data={**user_input, CONF_INTEGRATION_TYPE: INTEGRATION_TYPE_GEOGRAPHY},
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_step_import(self, import_config):
|
|
||||||
"""Import a config entry from configuration.yaml."""
|
|
||||||
return await self.async_step_geography(import_config)
|
|
||||||
|
|
||||||
async def async_step_node_pro(self, user_input=None):
|
async def async_step_node_pro(self, user_input=None):
|
||||||
"""Handle the initialization of the integration with a Node/Pro."""
|
"""Handle the initialization of the integration with a Node/Pro."""
|
||||||
if not user_input:
|
if not user_input:
|
||||||
|
|
|
@ -9,7 +9,7 @@ from homeassistant.components.airvisual import (
|
||||||
INTEGRATION_TYPE_GEOGRAPHY,
|
INTEGRATION_TYPE_GEOGRAPHY,
|
||||||
INTEGRATION_TYPE_NODE_PRO,
|
INTEGRATION_TYPE_NODE_PRO,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import SOURCE_IMPORT, SOURCE_USER
|
from homeassistant.config_entries import SOURCE_USER
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_API_KEY,
|
CONF_API_KEY,
|
||||||
CONF_IP_ADDRESS,
|
CONF_IP_ADDRESS,
|
||||||
|
@ -37,7 +37,10 @@ async def test_duplicate_error(hass):
|
||||||
).add_to_hass(hass)
|
).add_to_hass(hass)
|
||||||
|
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": SOURCE_IMPORT}, data=geography_conf
|
DOMAIN, context={"source": SOURCE_USER}, data={"type": "Geographical Location"}
|
||||||
|
)
|
||||||
|
result = await hass.config_entries.flow.async_configure(
|
||||||
|
result["flow_id"], user_input=geography_conf
|
||||||
)
|
)
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT
|
assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT
|
||||||
|
@ -73,8 +76,14 @@ async def test_invalid_identifier(hass):
|
||||||
side_effect=InvalidKeyError,
|
side_effect=InvalidKeyError,
|
||||||
):
|
):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": SOURCE_IMPORT}, data=geography_conf
|
DOMAIN,
|
||||||
|
context={"source": SOURCE_USER},
|
||||||
|
data={"type": "Geographical Location"},
|
||||||
)
|
)
|
||||||
|
result = await hass.config_entries.flow.async_configure(
|
||||||
|
result["flow_id"], user_input=geography_conf
|
||||||
|
)
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
|
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
|
||||||
assert result["errors"] == {CONF_API_KEY: "invalid_api_key"}
|
assert result["errors"] == {CONF_API_KEY: "invalid_api_key"}
|
||||||
|
|
||||||
|
@ -162,6 +171,7 @@ async def test_options_flow(hass):
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.components.airvisual.async_setup_entry", return_value=True
|
"homeassistant.components.airvisual.async_setup_entry", return_value=True
|
||||||
):
|
):
|
||||||
|
await hass.config_entries.async_setup(config_entry.entry_id)
|
||||||
result = await hass.config_entries.options.async_init(config_entry.entry_id)
|
result = await hass.config_entries.options.async_init(config_entry.entry_id)
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
|
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
|
||||||
|
@ -187,31 +197,12 @@ async def test_step_geography(hass):
|
||||||
"homeassistant.components.airvisual.async_setup_entry", return_value=True
|
"homeassistant.components.airvisual.async_setup_entry", return_value=True
|
||||||
), patch("pyairvisual.air_quality.AirQuality.nearest_city"):
|
), patch("pyairvisual.air_quality.AirQuality.nearest_city"):
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": SOURCE_IMPORT}, data=conf
|
DOMAIN,
|
||||||
|
context={"source": SOURCE_USER},
|
||||||
|
data={"type": "Geographical Location"},
|
||||||
)
|
)
|
||||||
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
result = await hass.config_entries.flow.async_configure(
|
||||||
assert result["title"] == "Cloud API (51.528308, -0.3817765)"
|
result["flow_id"], user_input=conf
|
||||||
assert result["data"] == {
|
|
||||||
CONF_API_KEY: "abcde12345",
|
|
||||||
CONF_LATITUDE: 51.528308,
|
|
||||||
CONF_LONGITUDE: -0.3817765,
|
|
||||||
CONF_INTEGRATION_TYPE: INTEGRATION_TYPE_GEOGRAPHY,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async def test_step_import(hass):
|
|
||||||
"""Test the import step for both types of configuration."""
|
|
||||||
geography_conf = {
|
|
||||||
CONF_API_KEY: "abcde12345",
|
|
||||||
CONF_LATITUDE: 51.528308,
|
|
||||||
CONF_LONGITUDE: -0.3817765,
|
|
||||||
}
|
|
||||||
|
|
||||||
with patch(
|
|
||||||
"homeassistant.components.airvisual.async_setup_entry", return_value=True
|
|
||||||
), patch("pyairvisual.air_quality.AirQuality.nearest_city"):
|
|
||||||
result = await hass.config_entries.flow.async_init(
|
|
||||||
DOMAIN, context={"source": SOURCE_IMPORT}, data=geography_conf
|
|
||||||
)
|
)
|
||||||
|
|
||||||
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue