Fix ONVIF YAML import (#35035)

This commit is contained in:
Franck Nijhof 2020-05-01 20:35:30 +02:00 committed by GitHub
parent b3201523aa
commit e1ae455f1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 23 deletions

View File

@ -5,15 +5,23 @@ import voluptuous as vol
from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
from homeassistant.const import CONF_HOST from homeassistant.const import (
CONF_HOST,
CONF_NAME,
CONF_PASSWORD,
CONF_PORT,
CONF_USERNAME,
)
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import config_per_platform from homeassistant.helpers import config_per_platform
from .const import ( from .const import (
CONF_PROFILE,
CONF_RTSP_TRANSPORT, CONF_RTSP_TRANSPORT,
DEFAULT_ARGUMENTS, DEFAULT_ARGUMENTS,
DEFAULT_PROFILE, DEFAULT_NAME,
DEFAULT_PASSWORD,
DEFAULT_PORT,
DEFAULT_USERNAME,
DOMAIN, DOMAIN,
RTSP_TRANS_PROTOCOLS, RTSP_TRANS_PROTOCOLS,
) )
@ -32,12 +40,14 @@ async def async_setup(hass: HomeAssistant, config: dict):
continue continue
config = p_config.copy() config = p_config.copy()
profile = config.get(CONF_PROFILE, DEFAULT_PROFILE)
if config[CONF_HOST] not in configs.keys(): if config[CONF_HOST] not in configs.keys():
configs[config[CONF_HOST]] = config configs[config[CONF_HOST]] = {
configs[config[CONF_HOST]][CONF_PROFILE] = [profile] CONF_HOST: config[CONF_HOST],
else: CONF_NAME: config.get(CONF_NAME, DEFAULT_NAME),
configs[config[CONF_HOST]][CONF_PROFILE].append(profile) 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(): for conf in configs.values():
hass.async_create_task( hass.async_create_task(
@ -64,7 +74,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry): async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = all( return all(
await asyncio.gather( await asyncio.gather(
*[ *[
hass.config_entries.async_forward_entry_unload(entry, component) hass.config_entries.async_forward_entry_unload(entry, component)
@ -73,8 +83,6 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):
) )
) )
return unload_ok
async def async_populate_options(hass, entry): async def async_populate_options(hass, entry):
"""Populate default options for device.""" """Populate default options for device."""

View File

@ -125,21 +125,20 @@ class OnvifFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
discovery = await async_discovery(self.hass) discovery = await async_discovery(self.hass)
for device in discovery: for device in discovery:
configured = False configured = any(
for entry in self._async_current_entries(): entry.unique_id == device[CONF_DEVICE_ID]
if entry.unique_id == device[CONF_DEVICE_ID]: for entry in self._async_current_entries()
configured = True )
break
if not configured: if not configured:
self.devices.append(device) self.devices.append(device)
LOGGER.debug("Discovered ONVIF devices %s", pformat(self.devices)) LOGGER.debug("Discovered ONVIF devices %s", pformat(self.devices))
if self.devices: if self.devices:
names = [] names = [
f"{device[CONF_NAME]} ({device[CONF_HOST]})" for device in self.devices
for device in self.devices: ]
names.append(f"{device[CONF_NAME]} ({device[CONF_HOST]})")
names.append(CONF_MANUAL_INPUT) names.append(CONF_MANUAL_INPUT)
@ -299,7 +298,7 @@ def get_device(hass, host, port, username, password) -> ONVIFCamera:
"""Get ONVIFCamera instance.""" """Get ONVIFCamera instance."""
session = async_get_clientsession(hass) session = async_get_clientsession(hass)
transport = AsyncTransport(None, session=session) transport = AsyncTransport(None, session=session)
device = ONVIFCamera( return ONVIFCamera(
host, host,
port, port,
username, username,
@ -307,5 +306,3 @@ def get_device(hass, host, port, username, password) -> ONVIFCamera:
f"{os.path.dirname(onvif.__file__)}/wsdl/", f"{os.path.dirname(onvif.__file__)}/wsdl/",
transport=transport, transport=transport,
) )
return device