Fixes for upnp-component/#17753 and missing hass-data when only setup from config entry (#17868)

* Upgrade to async_upnp_client==0.13.0, fixing #17753

* Fix missing 'local_ip' when upnp-component itself is not setup, but ConfigEntry is
This commit is contained in:
Steven Looman 2018-10-29 08:10:01 +01:00 committed by Paulus Schoutsen
parent 851d7e22e7
commit 96c5e4c507
5 changed files with 22 additions and 22 deletions

View File

@ -25,7 +25,7 @@ from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv
from homeassistant.util import get_local_ip
REQUIREMENTS = ['async-upnp-client==0.12.7']
REQUIREMENTS = ['async-upnp-client==0.13.0']
_LOGGER = logging.getLogger(__name__)

View File

@ -16,7 +16,6 @@ from homeassistant.helpers import config_validation as cv
from homeassistant.helpers import dispatcher
from homeassistant.helpers.typing import ConfigType
from homeassistant.helpers.typing import HomeAssistantType
from homeassistant.util import get_local_ip
from .const import (
CONF_ENABLE_PORT_MAPPING, CONF_ENABLE_SENSORS,
@ -26,11 +25,11 @@ from .const import (
)
from .const import DOMAIN
from .const import LOGGER as _LOGGER
from .config_flow import ensure_domain_data
from .config_flow import async_ensure_domain_data
from .device import Device
REQUIREMENTS = ['async-upnp-client==0.12.7']
REQUIREMENTS = ['async-upnp-client==0.13.0']
NOTIFICATION_ID = 'upnp_notification'
NOTIFICATION_TITLE = 'UPnP/IGD Setup'
@ -87,7 +86,7 @@ def _substitute_hass_ports(ports, hass_port=None):
# config
async def async_setup(hass: HomeAssistantType, config: ConfigType):
"""Register a port mapping for Home Assistant via UPnP."""
ensure_domain_data(hass)
await async_ensure_domain_data(hass)
# ensure sane config
if DOMAIN not in config:
@ -97,9 +96,6 @@ async def async_setup(hass: HomeAssistantType, config: ConfigType):
# overridden local ip
if CONF_LOCAL_IP in upnp_config:
hass.data[DOMAIN]['local_ip'] = upnp_config[CONF_LOCAL_IP]
else:
hass.data[DOMAIN]['local_ip'] = \
await hass.async_add_executor_job(get_local_ip)
# determine ports
ports = {CONF_HASS: CONF_HASS} # default, port_mapping disabled by default
@ -121,7 +117,7 @@ async def async_setup(hass: HomeAssistantType, config: ConfigType):
async def async_setup_entry(hass: HomeAssistantType,
config_entry: ConfigEntry):
"""Set up UPnP/IGD-device from a config entry."""
ensure_domain_data(hass)
await async_ensure_domain_data(hass)
data = config_entry.data
# build UPnP/IGD device

View File

@ -5,6 +5,7 @@ import voluptuous as vol
from homeassistant import config_entries
from homeassistant import data_entry_flow
from homeassistant.util import get_local_ip
from .const import (
CONF_ENABLE_PORT_MAPPING, CONF_ENABLE_SENSORS,
@ -13,7 +14,7 @@ from .const import (
from .const import DOMAIN
def ensure_domain_data(hass):
async def async_ensure_domain_data(hass):
"""Ensure hass.data is filled properly."""
hass.data[DOMAIN] = hass.data.get(DOMAIN, {})
hass.data[DOMAIN]['devices'] = hass.data[DOMAIN].get('devices', {})
@ -24,6 +25,9 @@ def ensure_domain_data(hass):
'enable_port_mapping': False,
'ports': {'hass': 'hass'},
})
if 'local_ip' not in hass.data[DOMAIN]:
hass.data[DOMAIN]['local_ip'] = \
await hass.async_add_executor_job(get_local_ip)
@config_entries.HANDLERS.register(DOMAIN)
@ -64,7 +68,7 @@ class UpnpFlowHandler(data_entry_flow.FlowHandler):
This flow is triggered by the discovery component. It will check if the
host is already configured and delegate to the import step if not.
"""
ensure_domain_data(self.hass)
await async_ensure_domain_data(self.hass)
# store discovered device
discovery_info['friendly_name'] = \
@ -91,7 +95,7 @@ class UpnpFlowHandler(data_entry_flow.FlowHandler):
async def async_step_user(self, user_input=None):
"""Manual set up."""
ensure_domain_data(self.hass)
await async_ensure_domain_data(self.hass)
# if user input given, handle it
user_input = user_input or {}
@ -132,13 +136,13 @@ class UpnpFlowHandler(data_entry_flow.FlowHandler):
async def async_step_import(self, import_info):
"""Import a new UPnP/IGD as a config entry."""
ensure_domain_data(self.hass)
await async_ensure_domain_data(self.hass)
return await self._async_save_entry(import_info)
async def _async_save_entry(self, import_info):
"""Store UPNP/IGD as new entry."""
ensure_domain_data(self.hass)
await async_ensure_domain_data(self.hass)
# ensure we know the host
name = import_info['name']

View File

@ -156,7 +156,7 @@ asterisk_mbox==0.5.0
# homeassistant.components.upnp
# homeassistant.components.media_player.dlna_dmr
async-upnp-client==0.12.7
async-upnp-client==0.13.0
# homeassistant.components.light.avion
# avion==0.7

View File

@ -55,7 +55,7 @@ async def test_async_setup_no_auto_config(hass):
# no upnp
}
with MockDependency('netdisco.discovery'), \
patch('homeassistant.components.upnp.get_local_ip',
patch('homeassistant.components.upnp.config_flow.get_local_ip',
return_value='192.168.1.10'):
await async_setup_component(hass, 'upnp', config)
await hass.async_block_till_done()
@ -76,7 +76,7 @@ async def test_async_setup_auto_config(hass):
'upnp': {},
}
with MockDependency('netdisco.discovery'), \
patch('homeassistant.components.upnp.get_local_ip',
patch('homeassistant.components.upnp.config_flow.get_local_ip',
return_value='192.168.1.10'):
await async_setup_component(hass, 'upnp', config)
await hass.async_block_till_done()
@ -100,7 +100,7 @@ async def test_async_setup_auto_config_port_mapping(hass):
},
}
with MockDependency('netdisco.discovery'), \
patch('homeassistant.components.upnp.get_local_ip',
patch('homeassistant.components.upnp.config_flow.get_local_ip',
return_value='192.168.1.10'):
await async_setup_component(hass, 'upnp', config)
await hass.async_block_till_done()
@ -121,7 +121,7 @@ async def test_async_setup_auto_config_no_sensors(hass):
'upnp': {'sensors': False},
}
with MockDependency('netdisco.discovery'), \
patch('homeassistant.components.upnp.get_local_ip',
patch('homeassistant.components.upnp.config_flow.get_local_ip',
return_value='192.168.1.10'):
await async_setup_component(hass, 'upnp', config)
await hass.async_block_till_done()
@ -150,7 +150,7 @@ async def test_async_setup_entry_default(hass):
# no upnp
}
with MockDependency('netdisco.discovery'), \
patch('homeassistant.components.upnp.get_local_ip',
patch('homeassistant.components.upnp.config_flow.get_local_ip',
return_value='192.168.1.10'):
await async_setup_component(hass, 'http', config)
await async_setup_component(hass, 'upnp', config)
@ -160,7 +160,7 @@ async def test_async_setup_entry_default(hass):
mock_device = MockDevice(udn)
with patch.object(Device, 'async_create_device') as create_device:
create_device.return_value = mock_coro(return_value=mock_device)
with patch('homeassistant.components.upnp.get_local_ip',
with patch('homeassistant.components.upnp.config_flow.get_local_ip',
return_value='192.168.1.10'):
assert await upnp.async_setup_entry(hass, entry) is True
@ -194,7 +194,7 @@ async def test_async_setup_entry_port_mapping(hass):
},
}
with MockDependency('netdisco.discovery'), \
patch('homeassistant.components.upnp.get_local_ip',
patch('homeassistant.components.upnp.config_flow.get_local_ip',
return_value='192.168.1.10'):
await async_setup_component(hass, 'http', config)
await async_setup_component(hass, 'upnp', config)