mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 18:57:06 +00:00
Remove deprecated YAML configuration from ONVIF (#70395)
* Remove deprecated YAML configuration from ONVIF * remove async_setup completely
This commit is contained in:
parent
489e70bd7f
commit
9008a76bd4
@ -2,13 +2,8 @@
|
||||
from onvif.exceptions import ONVIFAuthError, ONVIFError, ONVIFTimeoutError
|
||||
|
||||
from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS
|
||||
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import (
|
||||
CONF_HOST,
|
||||
CONF_NAME,
|
||||
CONF_PASSWORD,
|
||||
CONF_PORT,
|
||||
CONF_USERNAME,
|
||||
EVENT_HOMEASSISTANT_STOP,
|
||||
HTTP_BASIC_AUTHENTICATION,
|
||||
HTTP_DIGEST_AUTHENTICATION,
|
||||
@ -16,51 +11,17 @@ from homeassistant.const import (
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import ConfigEntryNotReady
|
||||
from homeassistant.helpers import config_per_platform
|
||||
from homeassistant.helpers.typing import ConfigType
|
||||
|
||||
from .const import (
|
||||
CONF_RTSP_TRANSPORT,
|
||||
CONF_SNAPSHOT_AUTH,
|
||||
DEFAULT_ARGUMENTS,
|
||||
DEFAULT_NAME,
|
||||
DEFAULT_PASSWORD,
|
||||
DEFAULT_PORT,
|
||||
DEFAULT_USERNAME,
|
||||
DOMAIN,
|
||||
RTSP_TRANS_PROTOCOLS,
|
||||
)
|
||||
from .device import ONVIFDevice
|
||||
|
||||
|
||||
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
||||
"""Set up the ONVIF component."""
|
||||
# Import from yaml
|
||||
configs = {}
|
||||
for p_type, p_config in config_per_platform(config, "camera"):
|
||||
if p_type != DOMAIN:
|
||||
continue
|
||||
|
||||
config = p_config.copy()
|
||||
if config[CONF_HOST] not in configs:
|
||||
configs[config[CONF_HOST]] = {
|
||||
CONF_HOST: config[CONF_HOST],
|
||||
CONF_NAME: config.get(CONF_NAME, DEFAULT_NAME),
|
||||
CONF_PASSWORD: config.get(CONF_PASSWORD, DEFAULT_PASSWORD),
|
||||
CONF_PORT: config.get(CONF_PORT, DEFAULT_PORT),
|
||||
CONF_USERNAME: config.get(CONF_USERNAME, DEFAULT_USERNAME),
|
||||
}
|
||||
|
||||
for conf in configs.values():
|
||||
hass.async_create_task(
|
||||
hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_IMPORT}, data=conf
|
||||
)
|
||||
)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
"""Set up ONVIF from a config entry."""
|
||||
if DOMAIN not in hass.data:
|
||||
|
@ -261,10 +261,6 @@ class OnvifFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
finally:
|
||||
await device.close()
|
||||
|
||||
async def async_step_import(self, user_input):
|
||||
"""Handle import."""
|
||||
return await self.async_step_configure(user_input)
|
||||
|
||||
|
||||
class OnvifOptionsFlowHandler(config_entries.OptionsFlow):
|
||||
"""Handle ONVIF options."""
|
||||
|
@ -5,10 +5,7 @@ LOGGER = logging.getLogger(__package__)
|
||||
|
||||
DOMAIN = "onvif"
|
||||
|
||||
DEFAULT_NAME = "ONVIF Camera"
|
||||
DEFAULT_PORT = 5000
|
||||
DEFAULT_USERNAME = "admin"
|
||||
DEFAULT_PASSWORD = "888888"
|
||||
DEFAULT_PORT = 80
|
||||
DEFAULT_ARGUMENTS = "-pred 1"
|
||||
|
||||
CONF_DEVICE_ID = "deviceid"
|
||||
|
@ -1,9 +1,6 @@
|
||||
"""Test ONVIF config flow."""
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from onvif.exceptions import ONVIFError
|
||||
from zeep.exceptions import Fault
|
||||
|
||||
from homeassistant import config_entries, data_entry_flow
|
||||
from homeassistant.components.onvif import config_flow
|
||||
|
||||
@ -13,7 +10,6 @@ from . import (
|
||||
NAME,
|
||||
PASSWORD,
|
||||
PORT,
|
||||
SERIAL_NUMBER,
|
||||
URN,
|
||||
USERNAME,
|
||||
setup_mock_device,
|
||||
@ -107,8 +103,6 @@ async def test_flow_discovered_devices(hass):
|
||||
assert result["step_id"] == "configure"
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.onvif.async_setup", return_value=True
|
||||
) as mock_setup, patch(
|
||||
"homeassistant.components.onvif.async_setup_entry", return_value=True
|
||||
) as mock_setup_entry:
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
@ -120,7 +114,6 @@ async def test_flow_discovered_devices(hass):
|
||||
)
|
||||
|
||||
await hass.async_block_till_done()
|
||||
assert len(mock_setup.mock_calls) == 1
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||
@ -290,8 +283,6 @@ async def test_flow_manual_entry(hass):
|
||||
assert result["step_id"] == "configure"
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.onvif.async_setup", return_value=True
|
||||
) as mock_setup, patch(
|
||||
"homeassistant.components.onvif.async_setup_entry", return_value=True
|
||||
) as mock_setup_entry:
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
@ -306,7 +297,6 @@ async def test_flow_manual_entry(hass):
|
||||
)
|
||||
|
||||
await hass.async_block_till_done()
|
||||
assert len(mock_setup.mock_calls) == 1
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||
@ -320,189 +310,6 @@ async def test_flow_manual_entry(hass):
|
||||
}
|
||||
|
||||
|
||||
async def test_flow_import_not_implemented(hass):
|
||||
"""Test that config flow uses Serial Number when no MAC available."""
|
||||
with patch(
|
||||
"homeassistant.components.onvif.config_flow.get_device"
|
||||
) as mock_onvif_camera, patch(
|
||||
"homeassistant.components.onvif.ONVIFDevice"
|
||||
) as mock_device, patch(
|
||||
"homeassistant.components.onvif.async_setup", return_value=True
|
||||
) as mock_setup, patch(
|
||||
"homeassistant.components.onvif.async_setup_entry", return_value=True
|
||||
) as mock_setup_entry:
|
||||
setup_mock_onvif_camera(mock_onvif_camera, with_interfaces_not_implemented=True)
|
||||
setup_mock_device(mock_device)
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
config_flow.DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data={
|
||||
config_flow.CONF_NAME: NAME,
|
||||
config_flow.CONF_HOST: HOST,
|
||||
config_flow.CONF_PORT: PORT,
|
||||
config_flow.CONF_USERNAME: USERNAME,
|
||||
config_flow.CONF_PASSWORD: PASSWORD,
|
||||
},
|
||||
)
|
||||
|
||||
await hass.async_block_till_done()
|
||||
assert len(mock_setup.mock_calls) == 1
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||
assert result["title"] == f"{NAME} - {SERIAL_NUMBER}"
|
||||
assert result["data"] == {
|
||||
config_flow.CONF_NAME: NAME,
|
||||
config_flow.CONF_HOST: HOST,
|
||||
config_flow.CONF_PORT: PORT,
|
||||
config_flow.CONF_USERNAME: USERNAME,
|
||||
config_flow.CONF_PASSWORD: PASSWORD,
|
||||
}
|
||||
|
||||
|
||||
async def test_flow_import_no_mac(hass):
|
||||
"""Test that config flow uses Serial Number when no MAC available."""
|
||||
with patch(
|
||||
"homeassistant.components.onvif.config_flow.get_device"
|
||||
) as mock_onvif_camera, patch(
|
||||
"homeassistant.components.onvif.ONVIFDevice"
|
||||
) as mock_device, patch(
|
||||
"homeassistant.components.onvif.async_setup", return_value=True
|
||||
) as mock_setup, patch(
|
||||
"homeassistant.components.onvif.async_setup_entry", return_value=True
|
||||
) as mock_setup_entry:
|
||||
setup_mock_onvif_camera(mock_onvif_camera, with_interfaces=False)
|
||||
setup_mock_device(mock_device)
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
config_flow.DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data={
|
||||
config_flow.CONF_NAME: NAME,
|
||||
config_flow.CONF_HOST: HOST,
|
||||
config_flow.CONF_PORT: PORT,
|
||||
config_flow.CONF_USERNAME: USERNAME,
|
||||
config_flow.CONF_PASSWORD: PASSWORD,
|
||||
},
|
||||
)
|
||||
|
||||
await hass.async_block_till_done()
|
||||
assert len(mock_setup.mock_calls) == 1
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
|
||||
assert result["title"] == f"{NAME} - {SERIAL_NUMBER}"
|
||||
assert result["data"] == {
|
||||
config_flow.CONF_NAME: NAME,
|
||||
config_flow.CONF_HOST: HOST,
|
||||
config_flow.CONF_PORT: PORT,
|
||||
config_flow.CONF_USERNAME: USERNAME,
|
||||
config_flow.CONF_PASSWORD: PASSWORD,
|
||||
}
|
||||
|
||||
|
||||
async def test_flow_import_no_mac_or_serial(hass):
|
||||
"""Test that config flow fails when no MAC or Serial Number available."""
|
||||
with patch(
|
||||
"homeassistant.components.onvif.config_flow.get_device"
|
||||
) as mock_onvif_camera:
|
||||
setup_mock_onvif_camera(
|
||||
mock_onvif_camera, with_interfaces=False, with_serial=False
|
||||
)
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
config_flow.DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data={
|
||||
config_flow.CONF_NAME: NAME,
|
||||
config_flow.CONF_HOST: HOST,
|
||||
config_flow.CONF_PORT: PORT,
|
||||
config_flow.CONF_USERNAME: USERNAME,
|
||||
config_flow.CONF_PASSWORD: PASSWORD,
|
||||
},
|
||||
)
|
||||
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT
|
||||
assert result["reason"] == "no_mac"
|
||||
|
||||
|
||||
async def test_flow_import_no_h264(hass):
|
||||
"""Test that config flow fails when no MAC available."""
|
||||
with patch(
|
||||
"homeassistant.components.onvif.config_flow.get_device"
|
||||
) as mock_onvif_camera:
|
||||
setup_mock_onvif_camera(mock_onvif_camera, with_h264=False)
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
config_flow.DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data={
|
||||
config_flow.CONF_NAME: NAME,
|
||||
config_flow.CONF_HOST: HOST,
|
||||
config_flow.CONF_PORT: PORT,
|
||||
config_flow.CONF_USERNAME: USERNAME,
|
||||
config_flow.CONF_PASSWORD: PASSWORD,
|
||||
},
|
||||
)
|
||||
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT
|
||||
assert result["reason"] == "no_h264"
|
||||
|
||||
|
||||
async def test_flow_import_onvif_api_error(hass):
|
||||
"""Test that config flow fails when ONVIF API fails."""
|
||||
with patch(
|
||||
"homeassistant.components.onvif.config_flow.get_device"
|
||||
) as mock_onvif_camera:
|
||||
setup_mock_onvif_camera(mock_onvif_camera)
|
||||
mock_onvif_camera.create_devicemgmt_service = MagicMock(
|
||||
side_effect=ONVIFError("Could not get device mgmt service")
|
||||
)
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
config_flow.DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data={
|
||||
config_flow.CONF_NAME: NAME,
|
||||
config_flow.CONF_HOST: HOST,
|
||||
config_flow.CONF_PORT: PORT,
|
||||
config_flow.CONF_USERNAME: USERNAME,
|
||||
config_flow.CONF_PASSWORD: PASSWORD,
|
||||
},
|
||||
)
|
||||
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT
|
||||
assert result["reason"] == "onvif_error"
|
||||
|
||||
|
||||
async def test_flow_import_onvif_auth_error(hass):
|
||||
"""Test that config flow fails when ONVIF API fails."""
|
||||
with patch(
|
||||
"homeassistant.components.onvif.config_flow.get_device"
|
||||
) as mock_onvif_camera:
|
||||
setup_mock_onvif_camera(mock_onvif_camera)
|
||||
mock_onvif_camera.create_devicemgmt_service = MagicMock(
|
||||
side_effect=Fault("Auth Error")
|
||||
)
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
config_flow.DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data={
|
||||
config_flow.CONF_NAME: NAME,
|
||||
config_flow.CONF_HOST: HOST,
|
||||
config_flow.CONF_PORT: PORT,
|
||||
config_flow.CONF_USERNAME: USERNAME,
|
||||
config_flow.CONF_PASSWORD: PASSWORD,
|
||||
},
|
||||
)
|
||||
|
||||
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
|
||||
assert result["step_id"] == "configure"
|
||||
assert result["errors"]["base"] == "cannot_connect"
|
||||
|
||||
|
||||
async def test_option_flow(hass):
|
||||
"""Test config flow options."""
|
||||
entry, _, _ = await setup_onvif_integration(hass)
|
||||
|
Loading…
x
Reference in New Issue
Block a user