Bugfix time and task coro (#6968)
* Bugfix time and task coro * fix also other create_task * fix tests * fix lint in test
This commit is contained in:
parent
2ce8c2f80e
commit
74ac160355
2 changed files with 26 additions and 40 deletions
|
@ -31,7 +31,8 @@ from homeassistant.const import (
|
|||
from homeassistant.exceptions import (
|
||||
HomeAssistantError, InvalidEntityFormatError)
|
||||
from homeassistant.util.async import (
|
||||
run_coroutine_threadsafe, run_callback_threadsafe)
|
||||
run_coroutine_threadsafe, run_callback_threadsafe,
|
||||
fire_coroutine_threadsafe)
|
||||
import homeassistant.util as util
|
||||
import homeassistant.util.dt as dt_util
|
||||
import homeassistant.util.location as location
|
||||
|
@ -131,7 +132,7 @@ class HomeAssistant(object):
|
|||
def start(self) -> None:
|
||||
"""Start home assistant."""
|
||||
# Register the async start
|
||||
self.add_job(self.async_start())
|
||||
fire_coroutine_threadsafe(self.async_start(), self.loop)
|
||||
|
||||
# Run forever and catch keyboard interrupt
|
||||
try:
|
||||
|
@ -140,7 +141,7 @@ class HomeAssistant(object):
|
|||
self.loop.run_forever()
|
||||
return self.exit_code
|
||||
except KeyboardInterrupt:
|
||||
self.loop.create_task(self.async_stop())
|
||||
fire_coroutine_threadsafe(self.async_stop(), self.loop)
|
||||
self.loop.run_forever()
|
||||
finally:
|
||||
self.loop.close()
|
||||
|
@ -246,8 +247,7 @@ class HomeAssistant(object):
|
|||
|
||||
def stop(self) -> None:
|
||||
"""Stop Home Assistant and shuts down all threads."""
|
||||
self.loop.call_soon_threadsafe(
|
||||
self.loop.create_task, self.async_stop())
|
||||
fire_coroutine_threadsafe(self.async_stop(), self.loop)
|
||||
|
||||
@asyncio.coroutine
|
||||
def async_stop(self, exit_code=0) -> None:
|
||||
|
@ -1091,17 +1091,13 @@ def _async_create_timer(hass):
|
|||
|
||||
handle = hass.loop.call_later(slp_seconds, fire_time_event, nxt)
|
||||
|
||||
@callback
|
||||
def start_timer(event):
|
||||
"""Create an async timer."""
|
||||
_LOGGER.info("Timer:starting")
|
||||
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, stop_timer)
|
||||
fire_time_event(monotonic())
|
||||
|
||||
@callback
|
||||
def stop_timer(event):
|
||||
"""Stop the timer."""
|
||||
if handle is not None:
|
||||
handle.cancel()
|
||||
|
||||
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, start_timer)
|
||||
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, stop_timer)
|
||||
|
||||
_LOGGER.info("Timer:starting")
|
||||
fire_time_event(monotonic())
|
||||
|
|
|
@ -16,8 +16,7 @@ from homeassistant.util.unit_system import (METRIC_SYSTEM)
|
|||
from homeassistant.const import (
|
||||
__version__, EVENT_STATE_CHANGED, ATTR_FRIENDLY_NAME, CONF_UNIT_SYSTEM,
|
||||
ATTR_NOW, EVENT_TIME_CHANGED, EVENT_HOMEASSISTANT_STOP,
|
||||
EVENT_HOMEASSISTANT_CLOSE, EVENT_HOMEASSISTANT_START,
|
||||
EVENT_SERVICE_REGISTERED, EVENT_SERVICE_REMOVED)
|
||||
EVENT_HOMEASSISTANT_CLOSE, EVENT_SERVICE_REGISTERED, EVENT_SERVICE_REMOVED)
|
||||
|
||||
from tests.common import get_test_home_assistant
|
||||
|
||||
|
@ -813,28 +812,21 @@ def test_create_timer(mock_monotonic, loop):
|
|||
funcs.append(func)
|
||||
return orig_callback(func)
|
||||
|
||||
with patch.object(ha, 'callback', mock_callback):
|
||||
ha._async_create_timer(hass)
|
||||
|
||||
assert len(funcs) == 3
|
||||
fire_time_event, start_timer, stop_timer = funcs
|
||||
|
||||
assert len(hass.bus.async_listen_once.mock_calls) == 1
|
||||
event_type, callback = hass.bus.async_listen_once.mock_calls[0][1]
|
||||
assert event_type == EVENT_HOMEASSISTANT_START
|
||||
assert callback is start_timer
|
||||
|
||||
mock_monotonic.side_effect = 10.2, 10.3
|
||||
|
||||
with patch('homeassistant.core.dt_util.utcnow',
|
||||
return_value=sentinel.mock_date):
|
||||
start_timer(None)
|
||||
with patch.object(ha, 'callback', mock_callback), \
|
||||
patch('homeassistant.core.dt_util.utcnow',
|
||||
return_value=sentinel.mock_date):
|
||||
ha._async_create_timer(hass)
|
||||
|
||||
assert len(hass.bus.async_listen_once.mock_calls) == 2
|
||||
assert len(funcs) == 2
|
||||
fire_time_event, stop_timer = funcs
|
||||
|
||||
assert len(hass.bus.async_listen_once.mock_calls) == 1
|
||||
assert len(hass.bus.async_fire.mock_calls) == 1
|
||||
assert len(hass.loop.call_later.mock_calls) == 1
|
||||
|
||||
event_type, callback = hass.bus.async_listen_once.mock_calls[1][1]
|
||||
event_type, callback = hass.bus.async_listen_once.mock_calls[0][1]
|
||||
assert event_type == EVENT_HOMEASSISTANT_STOP
|
||||
assert callback is stop_timer
|
||||
|
||||
|
@ -859,17 +851,15 @@ def test_timer_out_of_sync(mock_monotonic, loop):
|
|||
funcs.append(func)
|
||||
return orig_callback(func)
|
||||
|
||||
with patch.object(ha, 'callback', mock_callback):
|
||||
ha._async_create_timer(hass)
|
||||
|
||||
assert len(funcs) == 3
|
||||
fire_time_event, start_timer, stop_timer = funcs
|
||||
|
||||
mock_monotonic.side_effect = 10.2, 11.3, 11.3
|
||||
|
||||
with patch('homeassistant.core.dt_util.utcnow',
|
||||
return_value=sentinel.mock_date):
|
||||
start_timer(None)
|
||||
with patch.object(ha, 'callback', mock_callback), \
|
||||
patch('homeassistant.core.dt_util.utcnow',
|
||||
return_value=sentinel.mock_date):
|
||||
ha._async_create_timer(hass)
|
||||
|
||||
assert len(funcs) == 2
|
||||
fire_time_event, stop_timer = funcs
|
||||
|
||||
assert len(hass.loop.call_later.mock_calls) == 1
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue