Merge pull request #13061 from home-assistant/release-0-65-2

0.65.2
This commit is contained in:
Paulus Schoutsen 2018-03-10 11:11:02 -08:00 committed by GitHub
commit 60aacff827
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 40 additions and 25 deletions

View File

@ -113,15 +113,17 @@ def async_from_config_dict(config: Dict[str, Any],
yield from hass.async_add_job(loader.prepare, hass)
# Make a copy because we are mutating it.
new_config = OrderedDict()
for key, value in config.items():
new_config[key] = value or {}
config = new_config
config = OrderedDict(config)
# Merge packages
conf_util.merge_packages_config(
config, core_config.get(conf_util.CONF_PACKAGES, {}))
# Ensure we have no None values after merge
for key, value in config.items():
if not value:
config[key] = {}
hass.config_entries = config_entries.ConfigEntries(hass, config)
yield from hass.config_entries.async_load()

View File

@ -240,13 +240,13 @@ class SensiboClimate(ClimateDevice):
def min_temp(self):
"""Return the minimum temperature."""
return self._temperatures_list[0] \
if self._temperatures_list else super().min_temp()
if self._temperatures_list else super().min_temp
@property
def max_temp(self):
"""Return the maximum temperature."""
return self._temperatures_list[-1] \
if self._temperatures_list else super().max_temp()
if self._temperatures_list else super().max_temp
@asyncio.coroutine
def async_set_temperature(self, **kwargs):

View File

@ -24,7 +24,7 @@ from homeassistant.core import callback
from homeassistant.helpers.translation import async_get_translations
from homeassistant.loader import bind_hass
REQUIREMENTS = ['home-assistant-frontend==20180309.0']
REQUIREMENTS = ['home-assistant-frontend==20180310.0']
DOMAIN = 'frontend'
DEPENDENCIES = ['api', 'websocket_api', 'http', 'system_log']

View File

@ -221,7 +221,7 @@ class LIFXManager(object):
tasks = []
for light in self.service_to_entities(service):
if service.service == SERVICE_LIFX_SET_STATE:
task = light.async_set_state(**service.data)
task = light.set_state(**service.data)
tasks.append(self.hass.async_add_job(task))
if tasks:
await asyncio.wait(tasks, loop=self.hass.loop)

View File

@ -26,7 +26,7 @@ from homeassistant.components.light import (
Light, PLATFORM_SCHEMA)
import homeassistant.helpers.config_validation as cv
REQUIREMENTS = ['yeelight==0.3.3']
REQUIREMENTS = ['yeelight==0.4.0']
_LOGGER = logging.getLogger(__name__)

View File

@ -19,7 +19,7 @@ from homeassistant.util import Throttle
from homeassistant.util.json import load_json, save_json
import homeassistant.helpers.config_validation as cv
REQUIREMENTS = ['pysabnzbd==0.0.3']
REQUIREMENTS = ['pysabnzbd==1.0.1']
_CONFIGURING = {}
_LOGGER = logging.getLogger(__name__)
@ -82,7 +82,7 @@ async def async_update_queue(sab_api):
This ensures that the queue info only gets updated once for all sensors
"""
await sab_api.refresh_queue()
await sab_api.refresh_data()
def request_configuration(host, name, hass, config, async_add_devices,

View File

@ -4,6 +4,7 @@ Sensor from an SQL Query.
For more details about this platform, please refer to the documentation at
https://home-assistant.io/components/sensor.sql/
"""
import decimal
import logging
import voluptuous as vol
@ -131,17 +132,20 @@ class SQLSensor(Entity):
try:
sess = self.sessionmaker()
result = sess.execute(self._query)
self._attributes = {}
if not result.returns_rows or result.rowcount == 0:
_LOGGER.warning("%s returned no results", self._query)
self._state = None
self._attributes = {}
return
for res in result:
_LOGGER.debug("result = %s", res.items())
data = res[self._column_name]
self._attributes = {k: v for k, v in res.items()}
for key, value in res.items():
if isinstance(value, decimal.Decimal):
value = float(decimal)
self._attributes[key] = value
except sqlalchemy.exc.SQLAlchemyError as err:
_LOGGER.error("Error executing query %s: %s", self._query, err)
return

View File

@ -554,7 +554,7 @@ class WinkAuthCallbackView(HomeAssistantView):
from aiohttp import web
hass = request.app['hass']
data = request.GET
data = request.query
response_message = """Wink has been successfully authorized!
You can close this window now! For the best results you should reboot

View File

@ -182,19 +182,19 @@ def setup(hass, config):
gateway_only_schema = _add_gateway_to_schema(xiaomi, vol.Schema({}))
hass.services.async_register(
hass.services.register(
DOMAIN, SERVICE_PLAY_RINGTONE, play_ringtone_service,
schema=_add_gateway_to_schema(xiaomi, SERVICE_SCHEMA_PLAY_RINGTONE))
hass.services.async_register(
hass.services.register(
DOMAIN, SERVICE_STOP_RINGTONE, stop_ringtone_service,
schema=gateway_only_schema)
hass.services.async_register(
hass.services.register(
DOMAIN, SERVICE_ADD_DEVICE, add_device_service,
schema=gateway_only_schema)
hass.services.async_register(
hass.services.register(
DOMAIN, SERVICE_REMOVE_DEVICE, remove_device_service,
schema=_add_gateway_to_schema(xiaomi, SERVICE_SCHEMA_REMOVE_DEVICE))

View File

@ -562,6 +562,9 @@ def merge_packages_config(config, packages, _log_pkg_error=_log_pkg_error):
continue
if merge_type == 'dict':
if comp_conf is None:
comp_conf = OrderedDict()
if not isinstance(comp_conf, dict):
_log_pkg_error(
pack_name, comp_name, config,

View File

@ -2,7 +2,7 @@
"""Constants used by Home Assistant components."""
MAJOR_VERSION = 0
MINOR_VERSION = 65
PATCH_VERSION = '1'
PATCH_VERSION = '2'
__short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION)
__version__ = '{}.{}'.format(__short_version__, PATCH_VERSION)
REQUIRED_PYTHON_VER = (3, 5, 3)

View File

@ -326,6 +326,11 @@ def check_ha_config_file(config_dir):
config, core_config.get(CONF_PACKAGES, {}), _pack_error)
del core_config[CONF_PACKAGES]
# Ensure we have no None values after merge
for key, value in config.items():
if not value:
config[key] = {}
# Filter out repeating config sections
components = set(key.split(' ')[0] for key in config.keys())

View File

@ -353,7 +353,7 @@ hipnotify==1.0.8
holidays==0.9.3
# homeassistant.components.frontend
home-assistant-frontend==20180309.0
home-assistant-frontend==20180310.0
# homeassistant.components.camera.onvif
http://github.com/tgaugry/suds-passworddigest-py3/archive/86fc50e39b4d2b8997481967d6a7fe1c57118999.zip#suds-passworddigest-py3==0.1.2a
@ -863,7 +863,7 @@ pyqwikswitch==0.4
pyrainbird==0.1.3
# homeassistant.components.sensor.sabnzbd
pysabnzbd==0.0.3
pysabnzbd==1.0.1
# homeassistant.components.climate.sensibo
pysensibo==1.0.2
@ -1292,7 +1292,7 @@ yahoo-finance==1.4.0
yahooweather==0.10
# homeassistant.components.light.yeelight
yeelight==0.3.3
yeelight==0.4.0
# homeassistant.components.light.yeelightsunflower
yeelightsunflower==0.0.8

View File

@ -78,7 +78,7 @@ hbmqtt==0.9.1
holidays==0.9.3
# homeassistant.components.frontend
home-assistant-frontend==20180309.0
home-assistant-frontend==20180310.0
# homeassistant.components.influxdb
# homeassistant.components.sensor.influxdb

View File

@ -29,7 +29,7 @@ class TestSQLSensor(unittest.TestCase):
'db_url': 'sqlite://',
'queries': [{
'name': 'count_tables',
'query': 'SELECT count(*) value FROM sqlite_master;',
'query': 'SELECT 5 as value',
'column': 'value',
}]
}
@ -38,7 +38,8 @@ class TestSQLSensor(unittest.TestCase):
assert setup_component(self.hass, 'sensor', config)
state = self.hass.states.get('sensor.count_tables')
self.assertEqual(state.state, '0')
assert state.state == '5'
assert state.attributes['value'] == 5
def test_invalid_query(self):
"""Test the SQL sensor for invalid queries."""