hourly periodic task

This commit is contained in:
magnusknutas 2016-01-26 17:06:50 +01:00
parent 13fbefcdf8
commit ec5d88b98e
4 changed files with 24 additions and 4 deletions

1
.gitignore vendored
View File

@ -72,6 +72,7 @@ nosetests.xml
# venv stuff
pyvenv.cfg
pip-selfcheck.json
venv
# vimmy stuff
*.swp

View File

@ -34,7 +34,7 @@ def trigger(hass, config, action):
hours, minutes, seconds = after.hour, after.minute, after.second
elif (CONF_HOURS in config or CONF_MINUTES in config or
CONF_SECONDS in config):
hours = convert(config.get(CONF_HOURS), int)
hours = config.get(CONF_HOURS)
minutes = config.get(CONF_MINUTES)
seconds = config.get(CONF_SECONDS)
else:

View File

@ -162,7 +162,7 @@ def track_utc_time_change(hass, action, year=None, month=None, day=None,
pmp = _process_match_param
year, month, day = pmp(year), pmp(month), pmp(day)
hour, minute, second = pmp(hour), pmp(minute), pmp(second)
hour, minute, second = pmp(hour, rang=24), pmp(minute), pmp(second)
@ft.wraps(action)
def pattern_time_change_listener(event):
@ -196,12 +196,13 @@ def track_time_change(hass, action, year=None, month=None, day=None,
local=True)
def _process_match_param(parameter):
def _process_match_param(parameter, rang=None):
""" Wraps parameter in a tuple if it is not one and returns it. """
if parameter is None or parameter == MATCH_ALL:
return MATCH_ALL
elif isinstance(parameter, str) and parameter.startswith('/'):
return tuple(range(0, 60, convert(parameter.lstrip('/'), int)))
rang = rang or 60
return tuple(range(0, rang, convert(parameter.lstrip('/'), int)))
elif isinstance(parameter, str) or not hasattr(parameter, '__iter__'):
return (parameter,)
else:

View File

@ -237,3 +237,21 @@ class TestEventHelpers(unittest.TestCase):
self._send_time_changed(datetime(2014, 5, 24, 12, 5, 0))
self.hass.pool.block_till_done()
self.assertEqual(2, len(specific_runs))
def test_periodic_task_hour(self):
specific_runs = []
track_utc_time_change(
self.hass, lambda x: specific_runs.append(1), hour='/2')
self._send_time_changed(datetime(2014, 5, 24, 12, 0, 0))
self.hass.pool.block_till_done()
self.assertEqual(1, len(specific_runs))
self._send_time_changed(datetime(2014, 5, 24, 13, 0, 0))
self.hass.pool.block_till_done()
self.assertEqual(1, len(specific_runs))
self._send_time_changed(datetime(2014, 5, 24, 14, 0, 0))
self.hass.pool.block_till_done()
self.assertEqual(2, len(specific_runs))