Update HAP-python to 2.1.0 (#14528)

This commit is contained in:
cdce8p 2018-05-18 16:32:57 +02:00 committed by GitHub
parent d36996c8f0
commit 12e76ef7c1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 56 additions and 48 deletions

View file

@ -29,7 +29,7 @@ from .util import show_setup_message, validate_entity_config
TYPES = Registry()
_LOGGER = logging.getLogger(__name__)
REQUIREMENTS = ['HAP-python==2.0.0']
REQUIREMENTS = ['HAP-python==2.1.0']
# #### Driver Status ####
STATUS_READY = 0
@ -185,7 +185,8 @@ class HomeKit():
ip_addr = self._ip_address or get_local_ip()
path = self.hass.config.path(HOMEKIT_FILE)
self.bridge = HomeBridge(self.hass)
self.driver = HomeDriver(self.bridge, self._port, ip_addr, path)
self.driver = HomeDriver(self.hass, self.bridge, port=self._port,
address=ip_addr, persist_file=path)
def add_bridge_accessory(self, state):
"""Try adding accessory to bridge if configured beforehand."""
@ -213,8 +214,8 @@ class HomeKit():
self.add_bridge_accessory(state)
self.bridge.set_driver(self.driver)
if not self.bridge.paired:
show_setup_message(self.hass, self.bridge)
if not self.driver.state.paired:
show_setup_message(self.hass, self.driver.state.pincode)
_LOGGER.debug('Driver start')
self.hass.add_job(self.driver.start)

View file

@ -115,20 +115,23 @@ class HomeBridge(Bridge):
"""Prevent print of pyhap setup message to terminal."""
pass
def add_paired_client(self, client_uuid, client_public):
"""Override super function to dismiss setup message if paired."""
super().add_paired_client(client_uuid, client_public)
dismiss_setup_message(self.hass)
def remove_paired_client(self, client_uuid):
"""Override super function to show setup message if unpaired."""
super().remove_paired_client(client_uuid)
show_setup_message(self.hass, self)
class HomeDriver(AccessoryDriver):
"""Adapter class for AccessoryDriver."""
def __init__(self, *args, **kwargs):
def __init__(self, hass, *args, **kwargs):
"""Initialize a AccessoryDriver object."""
super().__init__(*args, **kwargs)
self.hass = hass
def pair(self, client_uuid, client_public):
"""Override super function to dismiss setup message if paired."""
value = super().pair(client_uuid, client_public)
if value:
dismiss_setup_message(self.hass)
return value
def unpair(self, client_uuid):
"""Override super function to show setup message if unpaired."""
super().unpair(client_uuid)
show_setup_message(self.hass, self.state.pincode)

View file

@ -38,9 +38,9 @@ def validate_entity_config(values):
return entities
def show_setup_message(hass, bridge):
def show_setup_message(hass, pincode):
"""Display persistent notification with setup information."""
pin = bridge.pincode.decode()
pin = pincode.decode()
_LOGGER.info('Pincode: %s', pin)
message = 'To setup Home Assistant in the Home App, enter the ' \
'following code:\n### {}'.format(pin)

View file

@ -28,7 +28,7 @@ Adafruit-SHT31==1.0.2
DoorBirdPy==0.1.3
# homeassistant.components.homekit
HAP-python==2.0.0
HAP-python==2.1.0
# homeassistant.components.notify.mastodon
Mastodon.py==1.2.2

View file

@ -19,7 +19,7 @@ requests_mock==1.5
# homeassistant.components.homekit
HAP-python==2.0.0
HAP-python==2.1.0
# homeassistant.components.notify.html5
PyJWT==1.6.0

View file

@ -116,26 +116,6 @@ def test_home_bridge():
# setup_message
bridge.setup_message()
# add_paired_client
with patch('pyhap.accessory.Accessory.add_paired_client') \
as mock_add_paired_client, \
patch('homeassistant.components.homekit.accessories.'
'dismiss_setup_message') as mock_dissmiss_msg:
bridge.add_paired_client('client_uuid', 'client_public')
mock_add_paired_client.assert_called_with('client_uuid', 'client_public')
mock_dissmiss_msg.assert_called_with('hass')
# remove_paired_client
with patch('pyhap.accessory.Accessory.remove_paired_client') \
as mock_remove_paired_client, \
patch('homeassistant.components.homekit.accessories.'
'show_setup_message') as mock_show_msg:
bridge.remove_paired_client('client_uuid')
mock_remove_paired_client.assert_called_with('client_uuid')
mock_show_msg.assert_called_with('hass', bridge)
def test_home_driver():
"""Test HomeDriver class."""
@ -143,9 +123,30 @@ def test_home_driver():
ip_address = '127.0.0.1'
port = 51826
path = '.homekit.state'
pin = b'123-45-678'
with patch('pyhap.accessory_driver.AccessoryDriver.__init__') \
as mock_driver:
HomeDriver(bridge, ip_address, port, path)
driver = HomeDriver('hass', bridge, ip_address, port, path)
mock_driver.assert_called_with(bridge, ip_address, port, path)
driver.state = Mock(pincode=pin)
# pair
with patch('pyhap.accessory_driver.AccessoryDriver.pair') as mock_pair, \
patch('homeassistant.components.homekit.accessories.'
'dismiss_setup_message') as mock_dissmiss_msg:
driver.pair('client_uuid', 'client_public')
mock_pair.assert_called_with('client_uuid', 'client_public')
mock_dissmiss_msg.assert_called_with('hass')
# unpair
with patch('pyhap.accessory_driver.AccessoryDriver.unpair') \
as mock_unpair, \
patch('homeassistant.components.homekit.accessories.'
'show_setup_message') as mock_show_msg:
driver.unpair('client_uuid')
mock_unpair.assert_called_with('client_uuid')
mock_show_msg.assert_called_with('hass', pin)

View file

@ -107,7 +107,8 @@ async def test_homekit_setup(hass):
path = hass.config.path(HOMEKIT_FILE)
assert isinstance(homekit.bridge, HomeBridge)
mock_driver.assert_called_with(
homekit.bridge, DEFAULT_PORT, IP_ADDRESS, path)
hass, homekit.bridge, port=DEFAULT_PORT,
address=IP_ADDRESS, persist_file=path)
# Test if stop listener is setup
assert hass.bus.async_listeners().get(EVENT_HOMEASSISTANT_STOP) == 1
@ -119,7 +120,8 @@ async def test_homekit_setup_ip_address(hass):
with patch(PATH_HOMEKIT + '.accessories.HomeDriver') as mock_driver:
await hass.async_add_job(homekit.setup)
mock_driver.assert_called_with(ANY, DEFAULT_PORT, '172.0.0.0', ANY)
mock_driver.assert_called_with(
hass, ANY, port=DEFAULT_PORT, address='172.0.0.0', persist_file=ANY)
async def test_homekit_add_accessory(hass):
@ -167,9 +169,10 @@ async def test_homekit_entity_filter(hass):
async def test_homekit_start(hass, debounce_patcher):
"""Test HomeKit start method."""
pin = b'123-45-678'
homekit = HomeKit(hass, None, None, {}, {'cover.demo': {}})
homekit.bridge = HomeBridge(hass)
homekit.driver = Mock()
homekit.driver = Mock(state=Mock(paired=False, pincode=pin))
hass.states.async_set('light.demo', 'on')
state = hass.states.async_all()[0]
@ -180,7 +183,7 @@ async def test_homekit_start(hass, debounce_patcher):
await hass.async_add_job(homekit.start)
mock_add_acc.assert_called_with(state)
mock_setup_msg.assert_called_with(hass, homekit.bridge)
mock_setup_msg.assert_called_with(hass, pin)
assert homekit.driver.start.called is True
assert homekit.status == STATUS_RUNNING

View file

@ -2,7 +2,6 @@
import pytest
import voluptuous as vol
from homeassistant.components.homekit.accessories import HomeBridge
from homeassistant.components.homekit.const import HOMEKIT_NOTIFY_ID
from homeassistant.components.homekit.util import (
show_setup_message, dismiss_setup_message, convert_to_float,
@ -10,7 +9,7 @@ from homeassistant.components.homekit.util import (
from homeassistant.components.homekit.util import validate_entity_config \
as vec
from homeassistant.components.persistent_notification import (
DOMAIN, ATTR_NOTIFICATION_ID)
DOMAIN, ATTR_MESSAGE, ATTR_NOTIFICATION_ID)
from homeassistant.const import (
ATTR_CODE, STATE_UNKNOWN, TEMP_CELSIUS, TEMP_FAHRENHEIT, CONF_NAME)
@ -74,16 +73,17 @@ def test_density_to_air_quality():
async def test_show_setup_msg(hass):
"""Test show setup message as persistence notification."""
bridge = HomeBridge(hass)
pincode = b'123-45-678'
call_create_notification = async_mock_service(hass, DOMAIN, 'create')
await hass.async_add_job(show_setup_message, hass, bridge)
await hass.async_add_job(show_setup_message, hass, pincode)
await hass.async_block_till_done()
assert call_create_notification
assert call_create_notification[0].data[ATTR_NOTIFICATION_ID] == \
HOMEKIT_NOTIFY_ID
assert pincode.decode() in call_create_notification[0].data[ATTR_MESSAGE]
async def test_dismiss_setup_msg(hass):