From 93fd6fa11b30c2fa0941847c721e9e4ff3dfe938 Mon Sep 17 00:00:00 2001 From: Alex Harvey Date: Thu, 12 May 2016 10:33:22 -0700 Subject: [PATCH] fixes for pep and delay start --- homeassistant/components/recorder.py | 11 ++++++++--- tests/components/test_recorder.py | 11 +++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/recorder.py b/homeassistant/components/recorder.py index f760fc882f5..0c7454ad694 100644 --- a/homeassistant/components/recorder.py +++ b/homeassistant/components/recorder.py @@ -22,6 +22,7 @@ from homeassistant.const import ( EVENT_TIME_CHANGED, MATCH_ALL) from homeassistant.core import Event, EventOrigin, State from homeassistant.remote import JSONEncoder +from homeassistant.helpers.event import track_point_in_utc_time DOMAIN = "recorder" @@ -33,8 +34,9 @@ RETURN_ONE_ROW = "one_row" CONF_PURGE_DAYS = "purge_days" CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.All(dict, { - CONF_PURGE_DAYS: int + DOMAIN: vol.Schema({ + vol.Optional(CONF_PURGE_DAYS): vol.All(vol.Coerce(int), + vol.Range(min=1)), }) }, extra=vol.ALLOW_EXTRA) @@ -204,7 +206,10 @@ class Recorder(threading.Thread): """Start processing events to save.""" self._setup_connection() self._setup_run() - self._purge_old_data() + if self.purge_days is not None: + track_point_in_utc_time(self.hass, + lambda now: self._purge_old_data(), + dt_util.utcnow() + timedelta(minutes=5)) while True: event = self.queue.get() diff --git a/tests/components/test_recorder.py b/tests/components/test_recorder.py index cb96e079a63..b2db41efc3c 100644 --- a/tests/components/test_recorder.py +++ b/tests/components/test_recorder.py @@ -43,12 +43,13 @@ class TestRecorder(unittest.TestCase): timestamp = now state = 'dontpurgeme' recorder.query("INSERT INTO states (" - "entity_id, domain, state, attributes, last_changed," - "last_updated, created, utc_offset, event_id)" + "entity_id, domain, state, attributes," + "last_changed, last_updated, created," + "utc_offset, event_id)" "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", ('test.recorder2', 'sensor', state, - json.dumps(attributes), timestamp, timestamp, - timestamp, -18000, event_id + 1000)) + json.dumps(attributes), timestamp, timestamp, + timestamp, -18000, event_id + 1000)) def _add_test_events(self): """Adds a few events for testing.""" @@ -155,7 +156,6 @@ class TestRecorder(unittest.TestCase): 'event_type LIKE "EVENT_TEST%"') self.assertEqual(len(events), 3) - def test_purge_disabled(self): """Tests leaving purge_days disabled.""" self._add_test_states() @@ -167,7 +167,6 @@ class TestRecorder(unittest.TestCase): self.assertEqual(len(states), 5) self.assertEqual(len(events), 5) - # run purge_old_data() recorder._INSTANCE.purge_days = None recorder._INSTANCE._purge_old_data()