From 8523aaca64704b8a1a34368e24dd51e4d71c3354 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 10 Aug 2017 23:26:19 +0200 Subject: [PATCH 01/16] Prepare for release --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 85846e32f59..93bdb947afc 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 51 -PATCH_VERSION = '0.dev0' +PATCH_VERSION = '0' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 4, 2) From 956543ae1eb89bc546930a0f6c8089f37de7d7e8 Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Sat, 12 Aug 2017 04:55:57 +0200 Subject: [PATCH 02/16] Remove not needed call to update (#8930) * This will ensure no I/O in entity properties. --- homeassistant/components/switch/rachio.py | 1 - 1 file changed, 1 deletion(-) diff --git a/homeassistant/components/switch/rachio.py b/homeassistant/components/switch/rachio.py index 547442a4233..c9b6011bcbd 100644 --- a/homeassistant/components/switch/rachio.py +++ b/homeassistant/components/switch/rachio.py @@ -199,7 +199,6 @@ class RachioZone(SwitchDevice): @property def is_on(self): """Whether the zone is currently running.""" - self._device.update() schedule = self._device.current_schedule return self.zone_id == schedule.get('zoneId') From daf7d9ea7fa892cee5e74339ca92036bece0bc90 Mon Sep 17 00:00:00 2001 From: cribbstechnologies Date: Sat, 12 Aug 2017 11:50:02 -0400 Subject: [PATCH 03/16] fixing emulated hue issue and testing it (#8928) * fixing emulated hue issue and testing it * fixing hound issues * I should probably stop using vim * Check against dict directly instead of items. --- .../components/emulated_hue/__init__.py | 4 +- tests/components/emulated_hue/test_init.py | 59 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/emulated_hue/__init__.py b/homeassistant/components/emulated_hue/__init__.py index 315fc564999..ae0a26aaea4 100644 --- a/homeassistant/components/emulated_hue/__init__.py +++ b/homeassistant/components/emulated_hue/__init__.py @@ -193,7 +193,9 @@ class Config(object): if entity_id == ent_id: return number - number = str(max(int(k) for k in self.numbers) + 1) + number = '1' + if self.numbers: + number = str(max(int(k) for k in self.numbers) + 1) self.numbers[number] = entity_id self._save_numbers_json() return number diff --git a/tests/components/emulated_hue/test_init.py b/tests/components/emulated_hue/test_init.py index 8c0a6dc4f60..2dcb9ecbf21 100755 --- a/tests/components/emulated_hue/test_init.py +++ b/tests/components/emulated_hue/test_init.py @@ -36,6 +36,65 @@ def test_config_google_home_entity_id_to_number(): assert entity_id == 'light.test2' +def test_config_google_home_entity_id_to_number_altered(): + """Test config adheres to the type.""" + conf = Config(Mock(), { + 'type': 'google_home' + }) + + mop = mock_open(read_data=json.dumps({'21': 'light.test2'})) + handle = mop() + + with patch('homeassistant.components.emulated_hue.open', mop, create=True): + number = conf.entity_id_to_number('light.test') + assert number == '22' + assert handle.write.call_count == 1 + assert json.loads(handle.write.mock_calls[0][1][0]) == { + '21': 'light.test2', + '22': 'light.test', + } + + number = conf.entity_id_to_number('light.test') + assert number == '22' + assert handle.write.call_count == 1 + + number = conf.entity_id_to_number('light.test2') + assert number == '21' + assert handle.write.call_count == 1 + + entity_id = conf.number_to_entity_id('21') + assert entity_id == 'light.test2' + + +def test_config_google_home_entity_id_to_number_empty(): + """Test config adheres to the type.""" + conf = Config(Mock(), { + 'type': 'google_home' + }) + + mop = mock_open(read_data='') + handle = mop() + + with patch('homeassistant.components.emulated_hue.open', mop, create=True): + number = conf.entity_id_to_number('light.test') + assert number == '1' + assert handle.write.call_count == 1 + assert json.loads(handle.write.mock_calls[0][1][0]) == { + '1': 'light.test', + } + + number = conf.entity_id_to_number('light.test') + assert number == '1' + assert handle.write.call_count == 1 + + number = conf.entity_id_to_number('light.test2') + assert number == '2' + assert handle.write.call_count == 2 + + entity_id = conf.number_to_entity_id('2') + assert entity_id == 'light.test2' + + def test_config_alexa_entity_id_to_number(): """Test config adheres to the type.""" conf = Config(None, { From 5814fdadd0e4df5e86281534188de5b69be2a4cb Mon Sep 17 00:00:00 2001 From: Philipp Schmitt Date: Fri, 11 Aug 2017 11:22:22 +0200 Subject: [PATCH 04/16] Update roombapy to 1.3.1 to avoid installing all the mapping dependencies (#8925) --- homeassistant/components/vacuum/roomba.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/vacuum/roomba.py b/homeassistant/components/vacuum/roomba.py index b6dcda4bcaa..cf9ee064283 100644 --- a/homeassistant/components/vacuum/roomba.py +++ b/homeassistant/components/vacuum/roomba.py @@ -17,7 +17,7 @@ from homeassistant.const import ( import homeassistant.helpers.config_validation as cv -REQUIREMENTS = ['roombapy==1.3.0'] +REQUIREMENTS = ['roombapy==1.3.1'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 91be5eb7be3..ad38eb8aa05 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -838,7 +838,7 @@ rflink==0.0.34 ring_doorbell==0.1.4 # homeassistant.components.vacuum.roomba -roombapy==1.3.0 +roombapy==1.3.1 # homeassistant.components.switch.rpi_rf # rpi-rf==0.9.6 From 08899ade0029364ba10e161638237927522bbfad Mon Sep 17 00:00:00 2001 From: William Scanlon Date: Fri, 11 Aug 2017 02:35:45 -0400 Subject: [PATCH 05/16] Update python-wink version to fix Dome water valve bug. (#8923) --- homeassistant/components/switch/wink.py | 3 ++- homeassistant/components/wink.py | 2 +- requirements_all.txt | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/switch/wink.py b/homeassistant/components/switch/wink.py index ec9311ac9e9..aa33c2f7132 100644 --- a/homeassistant/components/switch/wink.py +++ b/homeassistant/components/switch/wink.py @@ -65,7 +65,8 @@ class WinkToggleDevice(WinkDevice, ToggleEntity): attributes = super(WinkToggleDevice, self).device_state_attributes try: event = self.wink.last_event() - attributes["last_event"] = event + if event is not None: + attributes["last_event"] = event except AttributeError: pass return attributes diff --git a/homeassistant/components/wink.py b/homeassistant/components/wink.py index 316c939492b..8d40f5dad48 100644 --- a/homeassistant/components/wink.py +++ b/homeassistant/components/wink.py @@ -25,7 +25,7 @@ from homeassistant.const import ( from homeassistant.helpers.entity import Entity import homeassistant.helpers.config_validation as cv -REQUIREMENTS = ['python-wink==1.4.2', 'pubnubsub-handler==1.0.2'] +REQUIREMENTS = ['python-wink==1.5.1', 'pubnubsub-handler==1.0.2'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index ad38eb8aa05..07bb6846c61 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -775,7 +775,7 @@ python-velbus==2.0.11 python-vlc==1.1.2 # homeassistant.components.wink -python-wink==1.4.2 +python-wink==1.5.1 # homeassistant.components.zwave python_openzwave==0.4.0.31 From eef3dda1e92b68119107b41f3ecbb2af7b6fc5d2 Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Sat, 12 Aug 2017 18:39:05 +0200 Subject: [PATCH 06/16] Fix SET_TEMPERATURE_SCHEMA in climate component (#8879) * Require either temperature or high/low target temperatures. * Add tests. --- homeassistant/components/climate/__init__.py | 18 +++++---- tests/common.py | 5 ++- tests/components/climate/test_init.py | 40 ++++++++++++++++++++ 3 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 tests/components/climate/test_init.py diff --git a/homeassistant/components/climate/__init__.py b/homeassistant/components/climate/__init__.py index 6dd66817d43..1f919301254 100644 --- a/homeassistant/components/climate/__init__.py +++ b/homeassistant/components/climate/__init__.py @@ -86,13 +86,17 @@ SET_AUX_HEAT_SCHEMA = vol.Schema({ vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, vol.Required(ATTR_AUX_HEAT): cv.boolean, }) -SET_TEMPERATURE_SCHEMA = vol.Schema({ - vol.Exclusive(ATTR_TEMPERATURE, 'temperature'): vol.Coerce(float), - vol.Inclusive(ATTR_TARGET_TEMP_HIGH, 'temperature'): vol.Coerce(float), - vol.Inclusive(ATTR_TARGET_TEMP_LOW, 'temperature'): vol.Coerce(float), - vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, - vol.Optional(ATTR_OPERATION_MODE): cv.string, -}) +SET_TEMPERATURE_SCHEMA = vol.Schema(vol.All( + cv.has_at_least_one_key( + ATTR_TEMPERATURE, ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_LOW), + { + vol.Exclusive(ATTR_TEMPERATURE, 'temperature'): vol.Coerce(float), + vol.Inclusive(ATTR_TARGET_TEMP_HIGH, 'temperature'): vol.Coerce(float), + vol.Inclusive(ATTR_TARGET_TEMP_LOW, 'temperature'): vol.Coerce(float), + vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, + vol.Optional(ATTR_OPERATION_MODE): cv.string, + } +)) SET_FAN_MODE_SCHEMA = vol.Schema({ vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, vol.Required(ATTR_FAN_MODE): cv.string, diff --git a/tests/common.py b/tests/common.py index 5e328959a7a..5fdec2fc411 100644 --- a/tests/common.py +++ b/tests/common.py @@ -174,7 +174,7 @@ def get_test_instance_port(): @ha.callback -def async_mock_service(hass, domain, service): +def async_mock_service(hass, domain, service, schema=None): """Set up a fake service & return a calls log list to this service.""" calls = [] @@ -183,7 +183,8 @@ def async_mock_service(hass, domain, service): """Mock service call.""" calls.append(call) - hass.services.async_register(domain, service, mock_service_log) + hass.services.async_register( + domain, service, mock_service_log, schema=schema) return calls diff --git a/tests/components/climate/test_init.py b/tests/components/climate/test_init.py new file mode 100644 index 00000000000..2e942c5988c --- /dev/null +++ b/tests/components/climate/test_init.py @@ -0,0 +1,40 @@ +"""The tests for the climate component.""" +import asyncio + +from homeassistant.components.climate import SET_TEMPERATURE_SCHEMA +from tests.common import async_mock_service + + +@asyncio.coroutine +def test_set_temp_schema_no_req(hass, caplog): + """Test the set temperature schema with missing required data.""" + domain = 'climate' + service = 'test_set_temperature' + schema = SET_TEMPERATURE_SCHEMA + calls = async_mock_service(hass, domain, service, schema) + + data = {'operation_mode': 'test', 'entity_id': ['climate.test_id']} + yield from hass.services.async_call(domain, service, data) + yield from hass.async_block_till_done() + + assert len(calls) == 0 + assert 'ERROR' in caplog.text + assert 'Invalid service data' in caplog.text + + +@asyncio.coroutine +def test_set_temp_schema(hass, caplog): + """Test the set temperature schema with ok required data.""" + domain = 'climate' + service = 'test_set_temperature' + schema = SET_TEMPERATURE_SCHEMA + calls = async_mock_service(hass, domain, service, schema) + + data = { + 'temperature': 20.0, 'operation_mode': 'test', + 'entity_id': ['climate.test_id']} + yield from hass.services.async_call(domain, service, data) + yield from hass.async_block_till_done() + + assert len(calls) == 1 + assert calls[-1].data == data From 46d9d77d03b91b3c57e4b712c088e3975d8ea1cc Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 12 Aug 2017 14:54:50 -0700 Subject: [PATCH 07/16] Update frontend --- homeassistant/components/frontend/version.py | 2 +- .../www_static/home-assistant-polymer | 2 +- .../www_static/panels/ha-panel-config.html | 2 +- .../www_static/panels/ha-panel-config.html.gz | Bin 20661 -> 20665 bytes 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py index 001e369602b..59b09aa4ca1 100644 --- a/homeassistant/components/frontend/version.py +++ b/homeassistant/components/frontend/version.py @@ -6,7 +6,7 @@ FINGERPRINTS = { "frontend.html": "fb225cfababf965f8e19a8eb5c5a2a7e", "mdi.html": "e91f61a039ed0a9936e7ee5360da3870", "micromarkdown-js.html": "93b5ec4016f0bba585521cf4d18dec1a", - "panels/ha-panel-config.html": "878fd176dad70fe5cb8fc3c4ca72145c", + "panels/ha-panel-config.html": "ec48185c79000d0cfe5bbf38c7974944", "panels/ha-panel-dev-event.html": "d409e7ab537d9fe629126d122345279c", "panels/ha-panel-dev-info.html": "b0e55eb657fd75f21aba2426ac0cedc0", "panels/ha-panel-dev-mqtt.html": "94b222b013a98583842de3e72d5888c6", diff --git a/homeassistant/components/frontend/www_static/home-assistant-polymer b/homeassistant/components/frontend/www_static/home-assistant-polymer index a51b9c1eb5a..823a6996708 160000 --- a/homeassistant/components/frontend/www_static/home-assistant-polymer +++ b/homeassistant/components/frontend/www_static/home-assistant-polymer @@ -1 +1 @@ -Subproject commit a51b9c1eb5aecd119706a64c353b5df1de0af8cd +Subproject commit 823a6996708d5b85097fb1db0defbc03516e77bf diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-config.html b/homeassistant/components/frontend/www_static/panels/ha-panel-config.html index 98742c6ac29..d645ff87f8e 100644 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-config.html +++ b/homeassistant/components/frontend/www_static/panels/ha-panel-config.html @@ -1,4 +1,4 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-config.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-config.html.gz index 775e05b4a0207047491e526b6172a078c99639a2..e794d3735977c39139d3b34360a40ad42c371c37 100644 GIT binary patch delta 7808 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 SCB=BO`~Ly;5tJT)e*plD&QI_F delta 7804 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 Date: Sat, 12 Aug 2017 14:56:34 -0700 Subject: [PATCH 08/16] Version bump to 0.51.1 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 93bdb947afc..68413994a80 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 51 -PATCH_VERSION = '0' +PATCH_VERSION = '1' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 4, 2) From 56597d290c4ef71687738193b04ad742149195d8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 13 Aug 2017 21:53:22 -0700 Subject: [PATCH 09/16] Version bump to 0.51.2 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 68413994a80..ab94bd3e420 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 51 -PATCH_VERSION = '1' +PATCH_VERSION = '2' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 4, 2) From fc8e8e5d8c54acdccc88f062dfaea4d2e747d9a5 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 13 Aug 2017 21:52:36 -0700 Subject: [PATCH 10/16] Update frontend --- homeassistant/components/frontend/version.py | 2 +- .../frontend/www_static/frontend.html | 8 ++++---- .../frontend/www_static/frontend.html.gz | Bin 165967 -> 165958 bytes .../www_static/home-assistant-polymer | 2 +- .../frontend/www_static/service_worker.js | 2 +- .../frontend/www_static/service_worker.js.gz | Bin 5139 -> 5141 bytes 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py index 59b09aa4ca1..07cd39ca581 100644 --- a/homeassistant/components/frontend/version.py +++ b/homeassistant/components/frontend/version.py @@ -3,7 +3,7 @@ FINGERPRINTS = { "compatibility.js": "1686167ff210e001f063f5c606b2e74b", "core.js": "2a7d01e45187c7d4635da05065b5e54e", - "frontend.html": "fb225cfababf965f8e19a8eb5c5a2a7e", + "frontend.html": "5a2a3d6181cc820f5b3e94d1a50def74", "mdi.html": "e91f61a039ed0a9936e7ee5360da3870", "micromarkdown-js.html": "93b5ec4016f0bba585521cf4d18dec1a", "panels/ha-panel-config.html": "ec48185c79000d0cfe5bbf38c7974944", diff --git a/homeassistant/components/frontend/www_static/frontend.html b/homeassistant/components/frontend/www_static/frontend.html index 1281ef93b0d..71c4381108a 100644 --- a/homeassistant/components/frontend/www_static/frontend.html +++ b/homeassistant/components/frontend/www_static/frontend.html @@ -50,7 +50,7 @@ .input-content.is-invalid ::slotted(textarea), .input-content.is-invalid ::slotted(iron-autogrow-textarea), .input-content.is-invalid ::slotted(.paper-input-input){@apply --paper-input-container-input-invalid;}.prefix ::slotted(*){display:inline-block;@apply --paper-font-subhead;@apply --layout-flex-none;@apply --paper-input-prefix;}.suffix ::slotted(*){display:inline-block;@apply --paper-font-subhead;@apply --layout-flex-none;@apply --paper-input-suffix;}.input-content ::slotted(input){min-width:0;}.input-content ::slotted(textarea){resize:none;}.add-on-content{position:relative;}.add-on-content.is-invalid ::slotted(*){color:var(--paper-input-container-invalid-color, var(--error-color));}.add-on-content.is-highlighted ::slotted(*){color:var(--paper-input-container-focus-color, var(--primary-color));}