From 0e00de8a332045ee9e722615253318edbe592f58 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 10 Mar 2018 10:40:28 -0800 Subject: [PATCH] Convert decimals from SQL results (#13059) --- homeassistant/components/sensor/sql.py | 8 ++++++-- tests/components/sensor/test_sql.py | 5 +++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/sensor/sql.py b/homeassistant/components/sensor/sql.py index 50d60bfc426..402076c6fd8 100644 --- a/homeassistant/components/sensor/sql.py +++ b/homeassistant/components/sensor/sql.py @@ -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 diff --git a/tests/components/sensor/test_sql.py b/tests/components/sensor/test_sql.py index 5e639b9f338..7665b5c9037 100644 --- a/tests/components/sensor/test_sql.py +++ b/tests/components/sensor/test_sql.py @@ -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."""