我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用asyncio.Task()。
def longpoll_run(self, custom_process=False): self.main_task = Task(self.longpoll_processor()) if custom_process: return self.main_task self.logger.info("Started to process messages") try: self.loop.run_until_complete(self.main_task) except (KeyboardInterrupt, SystemExit): self.stop() self.logger.info("Stopped to process messages") except asyncio.CancelledError: pass
def _accept_client(self, client_reader, client_writer): """ This method accepts a new client connection and creates a Task to handle this client. self.clients is updated to keep track of the new client. """ # start a new Task to handle this specific client connection task = asyncio.Task(self._handle_client(client_reader, client_writer)) self.clients[task] = (client_reader, client_writer) def client_done(task): print("client task done:", task, file=sys.stderr) del self.clients[task] task.add_done_callback(client_done)
def test_put_cancelled(self): q = asyncio.Queue(loop=self.loop) @asyncio.coroutine def queue_put(): yield from q.put(1) return True @asyncio.coroutine def test(): return (yield from q.get()) t = asyncio.Task(queue_put(), loop=self.loop) self.assertEqual(1, self.loop.run_until_complete(test())) self.assertTrue(t.done()) self.assertTrue(t.result())
def test_put_cancelled_race(self): q = asyncio.Queue(loop=self.loop, maxsize=1) put_a = asyncio.Task(q.put('a'), loop=self.loop) put_b = asyncio.Task(q.put('b'), loop=self.loop) put_c = asyncio.Task(q.put('X'), loop=self.loop) test_utils.run_briefly(self.loop) self.assertTrue(put_a.done()) self.assertFalse(put_b.done()) put_c.cancel() test_utils.run_briefly(self.loop) self.assertTrue(put_c.done()) self.assertEqual(q.get_nowait(), 'a') self.assertEqual(q.get_nowait(), 'b') self.loop.run_until_complete(put_b)
def test_readline(self): # Read one line. 'readline' will need to wait for the data # to come from 'cb' stream = asyncio.StreamReader(loop=self.loop) stream.feed_data(b'chunk1 ') read_task = asyncio.Task(stream.readline(), loop=self.loop) def cb(): stream.feed_data(b'chunk2 ') stream.feed_data(b'chunk3 ') stream.feed_data(b'\n chunk4') self.loop.call_soon(cb) line = self.loop.run_until_complete(read_task) self.assertEqual(b'chunk1 chunk2 chunk3 \n', line) self.assertEqual(b' chunk4', stream._buffer)
def test_readexactly_eof(self): # Read exact number of bytes (eof). stream = asyncio.StreamReader(loop=self.loop) n = 2 * len(self.DATA) read_task = asyncio.Task(stream.readexactly(n), loop=self.loop) def cb(): stream.feed_data(self.DATA) stream.feed_eof() self.loop.call_soon(cb) with self.assertRaises(asyncio.IncompleteReadError) as cm: self.loop.run_until_complete(read_task) self.assertEqual(cm.exception.partial, self.DATA) self.assertEqual(cm.exception.expected, n) self.assertEqual(str(cm.exception), '18 bytes read on a total of 36 expected bytes') self.assertEqual(b'', stream._buffer)
def test_create_task(self): class MyTask(asyncio.Task): pass @asyncio.coroutine def test(): pass class EventLoop(base_events.BaseEventLoop): def create_task(self, coro): return MyTask(coro, loop=loop) loop = EventLoop() self.set_event_loop(loop) coro = test() task = asyncio.async(coro, loop=loop) self.assertIsInstance(task, MyTask) # make warnings quiet task._log_destroy_pending = False coro.close()
def test_create_connection_multiple(self): @asyncio.coroutine def getaddrinfo(*args, **kw): return [(2, 1, 6, '', ('0.0.0.1', 80)), (2, 1, 6, '', ('0.0.0.2', 80))] def getaddrinfo_task(*args, **kwds): return asyncio.Task(getaddrinfo(*args, **kwds), loop=self.loop) self.loop.getaddrinfo = getaddrinfo_task self.loop.sock_connect = mock.Mock() self.loop.sock_connect.side_effect = OSError coro = self.loop.create_connection( MyProto, 'example.com', 80, family=socket.AF_INET) with self.assertRaises(OSError): self.loop.run_until_complete(coro)
def test_create_connection_no_local_addr(self): @asyncio.coroutine def getaddrinfo(host, *args, **kw): if host == 'example.com': return [(2, 1, 6, '', ('107.6.106.82', 80)), (2, 1, 6, '', ('107.6.106.82', 80))] else: return [] def getaddrinfo_task(*args, **kwds): return asyncio.Task(getaddrinfo(*args, **kwds), loop=self.loop) self.loop.getaddrinfo = getaddrinfo_task coro = self.loop.create_connection( MyProto, 'example.com', 80, family=socket.AF_INET, local_addr=(None, 8080)) self.assertRaises( OSError, self.loop.run_until_complete, coro)
def test_create_server_empty_host(self): # if host is empty string use None instead host = object() @asyncio.coroutine def getaddrinfo(*args, **kw): nonlocal host host = args[0] yield from [] def getaddrinfo_task(*args, **kwds): return asyncio.Task(getaddrinfo(*args, **kwds), loop=self.loop) self.loop.getaddrinfo = getaddrinfo_task fut = self.loop.create_server(MyProto, '', 0) self.assertRaises(OSError, self.loop.run_until_complete, fut) self.assertIsNone(host)
def test_async_task(self): @asyncio.coroutine def notmuch(): return 'ok' t_orig = asyncio.Task(notmuch(), loop=self.loop) t = asyncio.async(t_orig) self.loop.run_until_complete(t) self.assertTrue(t.done()) self.assertEqual(t.result(), 'ok') self.assertIs(t, t_orig) loop = asyncio.new_event_loop() self.set_event_loop(loop) with self.assertRaises(ValueError): t = asyncio.async(t_orig, loop=loop) loop.close() t = asyncio.async(t_orig, loop=self.loop) self.assertIs(t, t_orig)
def test_cancel(self): def gen(): when = yield self.assertAlmostEqual(10.0, when) yield 0 loop = self.new_test_loop(gen) @asyncio.coroutine def task(): yield from asyncio.sleep(10.0, loop=loop) return 12 t = asyncio.Task(task(), loop=loop) loop.call_soon(t.cancel) with self.assertRaises(asyncio.CancelledError): loop.run_until_complete(t) self.assertTrue(t.done()) self.assertTrue(t.cancelled()) self.assertFalse(t.cancel())
def test_cancel_both_task_and_inner_future(self): f = asyncio.Future(loop=self.loop) @asyncio.coroutine def task(): yield from f return 12 t = asyncio.Task(task(), loop=self.loop) test_utils.run_briefly(self.loop) f.cancel() t.cancel() with self.assertRaises(asyncio.CancelledError): self.loop.run_until_complete(t) self.assertTrue(t.done()) self.assertTrue(f.cancelled()) self.assertTrue(t.cancelled())
def test_cancel_task_catching(self): fut1 = asyncio.Future(loop=self.loop) fut2 = asyncio.Future(loop=self.loop) @asyncio.coroutine def task(): yield from fut1 try: yield from fut2 except asyncio.CancelledError: return 42 t = asyncio.Task(task(), loop=self.loop) test_utils.run_briefly(self.loop) self.assertIs(t._fut_waiter, fut1) # White-box test. fut1.set_result(None) test_utils.run_briefly(self.loop) self.assertIs(t._fut_waiter, fut2) # White-box test. t.cancel() self.assertTrue(fut2.cancelled()) res = self.loop.run_until_complete(t) self.assertEqual(res, 42) self.assertFalse(t.cancelled())
def test_cancel_current_task(self): loop = asyncio.new_event_loop() self.set_event_loop(loop) @asyncio.coroutine def task(): t.cancel() self.assertTrue(t._must_cancel) # White-box test. # The sleep should be cancelled immediately. yield from asyncio.sleep(100, loop=loop) return 12 t = asyncio.Task(task(), loop=loop) self.assertRaises( asyncio.CancelledError, loop.run_until_complete, t) self.assertTrue(t.done()) self.assertFalse(t._must_cancel) # White-box test. self.assertFalse(t.cancel())
def test_as_completed_with_unused_timeout(self): def gen(): yield yield 0 yield 0.01 loop = self.new_test_loop(gen) a = asyncio.sleep(0.01, 'a', loop=loop) @asyncio.coroutine def foo(): for f in asyncio.as_completed([a], timeout=1, loop=loop): v = yield from f self.assertEqual(v, 'a') loop.run_until_complete(asyncio.Task(foo(), loop=loop))
def test_as_completed_duplicate_coroutines(self): @asyncio.coroutine def coro(s): return s @asyncio.coroutine def runner(): result = [] c = coro('ham') for f in asyncio.as_completed([c, c, coro('spam')], loop=self.loop): result.append((yield from f)) return result fut = asyncio.Task(runner(), loop=self.loop) self.loop.run_until_complete(fut) result = fut.result() self.assertEqual(set(result), {'ham', 'spam'}) self.assertEqual(len(result), 2)
def test_sleep(self): def gen(): when = yield self.assertAlmostEqual(0.05, when) when = yield 0.05 self.assertAlmostEqual(0.1, when) yield 0.05 loop = self.new_test_loop(gen) @asyncio.coroutine def sleeper(dt, arg): yield from asyncio.sleep(dt/2, loop=loop) res = yield from asyncio.sleep(dt/2, arg, loop=loop) return res t = asyncio.Task(sleeper(0.1, 'yeah'), loop=loop) loop.run_until_complete(t) self.assertTrue(t.done()) self.assertEqual(t.result(), 'yeah') self.assertAlmostEqual(0.1, loop.time())
def test_task_cancel_waiter_future(self): fut = asyncio.Future(loop=self.loop) @asyncio.coroutine def coro(): yield from fut task = asyncio.Task(coro(), loop=self.loop) test_utils.run_briefly(self.loop) self.assertIs(task._fut_waiter, fut) task.cancel() test_utils.run_briefly(self.loop) self.assertRaises( asyncio.CancelledError, self.loop.run_until_complete, task) self.assertIsNone(task._fut_waiter) self.assertTrue(fut.cancelled())
def test_yield_from_corowrapper(self): old_debug = asyncio.coroutines._DEBUG asyncio.coroutines._DEBUG = True try: @asyncio.coroutine def t1(): return (yield from t2()) @asyncio.coroutine def t2(): f = asyncio.Future(loop=self.loop) asyncio.Task(t3(f), loop=self.loop) return (yield from f) @asyncio.coroutine def t3(f): f.set_result((1, 2, 3)) task = asyncio.Task(t1(), loop=self.loop) val = self.loop.run_until_complete(task) self.assertEqual(val, (1, 2, 3)) finally: asyncio.coroutines._DEBUG = old_debug
def __new__(cls, name, bases, attrs, **kwargs): """ put the :class:`~peony.commands.tasks.Task`s in the right place """ tasks = {'init_tasks': set(), 'tasks': set()} for base in bases: if hasattr(base, '_tasks'): for key, value in base._tasks.items(): tasks[key] |= value for attr in attrs.values(): if isinstance(attr, init_task): tasks['init_tasks'].add(attr) elif isinstance(attr, task): tasks['tasks'].add(attr) attrs['_tasks'] = tasks return super().__new__(cls, name, bases, attrs)
def new_task(task_name, *, data=None, config=None, timeout=None, loop=None): """ Schedules the execution of the coroutine registered as `task_name` (either defined in a task holder class or not) in the loop and returns an instance of `asyncio.Task()` (or a subclass of it). """ klass, coro_fn = TaskRegistry.get(task_name) if klass: task_holder = klass(config) coro = coro_fn(task_holder, data) else: coro = coro_fn(data) task = asyncio.ensure_future(coro, loop=loop) if timeout: TimeoutHandle(task, timeout).start() return task
def _step(self, exc=None): """ Wrapper around `Task._step()` to automatically dispatch a `TaskExecState.BEGIN` event. """ if not self._in_progress: self._start = datetime.now(timezone.utc) source = {'task_exec_id': self.uid} if self._template: source['task_template_id'] = self._template.uid if self._workflow: source['workflow_template_id'] = self._workflow.template.uid source['workflow_exec_id'] = self._workflow.uid self._source = EventSource(**source) self._in_progress = True data = { 'type': TaskExecState.BEGIN.value, 'content': self._inputs } self._broker.dispatch( data, topics=workflow_exec_topics(self._source._workflow_exec_id), source=self._source, ) super()._step(exc)
def __init__(self, producer: Callable[[], 'Actor'] = None, spawner: Callable[[str, 'Props', pid.PID], pid.PID] = default_spawner, mailbox_producer: Callable[ [invoker.AbstractInvoker, 'AbstractDispatcher'], mailbox.AbstractMailbox] = default_mailbox_producer, dispatcher: 'AbstractDispatcher' = dispatcher.ThreadDispatcher(), supervisor_strategy: supervision.AbstractSupervisorStrategy = None, middleware: List[Callable[[context.AbstractContext], Task]] = None, middleware_chain: Callable[[context.AbstractContext], Task] = None) -> None: self.__producer = producer self.__spawner = spawner self.__mailbox_producer = mailbox_producer self.__supervisor_strategy = supervisor_strategy self.__dispatcher = dispatcher self.__middleware = middleware self.__middleware_chain = middleware_chain
def run(self) -> None: self._context = await self._build_context() self.logger.debug("context:", self._context) for retry in itertools.count(1): self._connection_task = self.loop.create_task(self._connection.run()) self._worker_task = self.loop.create_task(self._worker()) self._worker_task.add_done_callback(self._worker_done) try: await self._connection_task except Exception: self.logger.exception("Connection Task errored") # Wait until worker task emptied the queue (and terminates) await self._worker_task if self.stopped: return # We didn't stop, so try to reconnect after a timeout seconds = 10 * retry self.logger.info(f"Retry connecting in {seconds} seconds") await asyncio.sleep(seconds) # TODO doesn't terminate if KeyboardInterrupt occurs here self._reset()
def crawl(self): """Run the crawler until all finished.""" with (yield from self.termination): while self.todo or self.busy: if self.todo: url, max_redirect = self.todo.popitem() fetcher = Fetcher(self.log, url, crawler=self, max_redirect=max_redirect, max_tries=self.max_tries, ) self.busy[url] = fetcher fetcher.task = asyncio.Task(self.fetch(fetcher)) else: yield from self.termination.wait() self.t1 = time.time()
def _start(self, fetcher_num): """ start the tasks, and wait for finishing """ # initial fetcher session self._inst_fetcher.init_session(self._loop) # start tasks and wait done tasks_list = [asyncio.Task(self._work(index+1), loop=self._loop) for index in range(fetcher_num)] await self._queue.join() for task in tasks_list: task.cancel() # close fetcher session self._inst_fetcher.close_session() self.print_status() return
def start_background_task(self, target, *args, **kwargs): """Start a background task using the appropriate async model. This is a utility function that applications can use to start a background task using the method that is compatible with the selected async mode. :param target: the target function to execute. Must be a coroutine. :param args: arguments to pass to the function. :param kwargs: keyword arguments to pass to the function. The return value is a ``asyncio.Task`` object. Note: this method is a coroutine. """ return self.eio.start_background_task(target, *args, **kwargs)
def test_sync_angle(self): """Test sync function for cover with angle.""" xknx = XKNX(loop=self.loop) cover = Cover( xknx, 'TestCover', group_address_long='1/2/1', group_address_short='1/2/2', group_address_position='1/2/3', group_address_angle='1/2/4') self.loop.run_until_complete(asyncio.Task(cover.sync(False))) self.assertEqual(xknx.telegrams.qsize(), 2) telegram1 = xknx.telegrams.get_nowait() self.assertEqual(telegram1, Telegram(Address('1/2/3'), TelegramType.GROUP_READ)) telegram2 = xknx.telegrams.get_nowait() self.assertEqual(telegram2, Telegram(Address('1/2/4'), TelegramType.GROUP_READ))
def test_sync_angle_state(self): """Test sync function with angle/explicit state.""" xknx = XKNX(loop=self.loop) cover = Cover( xknx, 'TestCover', group_address_long='1/2/1', group_address_short='1/2/2', group_address_angle='1/2/3', group_address_angle_state='1/2/4') self.loop.run_until_complete(asyncio.Task(cover.sync(False))) self.assertEqual(xknx.telegrams.qsize(), 1) telegram1 = xknx.telegrams.get_nowait() self.assertEqual(telegram1, Telegram(Address('1/2/4'), TelegramType.GROUP_READ)) # # TEST SET UP #
def test_set_up(self): """Test moving cover to 'up' position.""" xknx = XKNX(loop=self.loop) cover = Cover( xknx, 'TestCover', group_address_long='1/2/1', group_address_short='1/2/2', group_address_position='1/2/3', group_address_position_state='1/2/4') self.loop.run_until_complete(asyncio.Task(cover.set_up())) self.assertEqual(xknx.telegrams.qsize(), 1) telegram = xknx.telegrams.get_nowait() self.assertEqual(telegram, Telegram(Address('1/2/1'), payload=DPTBinary(0))) # # TEST SET DOWN #
def test_set_short_up(self): """Test moving cover 'short up'.""" xknx = XKNX(loop=self.loop) cover = Cover( xknx, 'TestCover', group_address_long='1/2/1', group_address_short='1/2/2', group_address_position='1/2/3', group_address_position_state='1/2/4') self.loop.run_until_complete(asyncio.Task(cover.set_short_up())) self.assertEqual(xknx.telegrams.qsize(), 1) telegram = xknx.telegrams.get_nowait() self.assertEqual(telegram, Telegram(Address('1/2/2'), payload=DPTBinary(1))) # # TEST SET SHORT DOWN #
def test_set_down(self): """Test moving cover 'short down'.""" xknx = XKNX(loop=self.loop) cover = Cover( xknx, 'TestCover', group_address_long='1/2/1', group_address_short='1/2/2', group_address_position='1/2/3', group_address_position_state='1/2/4') self.loop.run_until_complete(asyncio.Task(cover.set_short_down())) self.assertEqual(xknx.telegrams.qsize(), 1) telegram = xknx.telegrams.get_nowait() self.assertEqual(telegram, Telegram(Address('1/2/2'), payload=DPTBinary(0))) # # TEST STOP #
def test_stop(self): """Test stopping cover.""" xknx = XKNX(loop=self.loop) cover = Cover( xknx, 'TestCover', group_address_long='1/2/1', group_address_short='1/2/2', group_address_position='1/2/3', group_address_position_state='1/2/4') self.loop.run_until_complete(asyncio.Task(cover.stop())) self.assertEqual(xknx.telegrams.qsize(), 1) telegram = xknx.telegrams.get_nowait() self.assertEqual(telegram, Telegram(Address('1/2/2'), payload=DPTBinary(0))) # # TEST POSITION #
def test_angle(self): """Test changing angle.""" xknx = XKNX(loop=self.loop) cover = Cover( xknx, 'Children.Venetian', group_address_long='1/4/14', group_address_short='1/4/15', group_address_position_state='1/4/17', group_address_position='1/4/16', group_address_angle='1/4/18', group_address_angle_state='1/4/19') self.loop.run_until_complete(asyncio.Task(cover.set_angle(50))) self.assertEqual(xknx.telegrams.qsize(), 1) telegram = xknx.telegrams.get_nowait() self.assertEqual(telegram, Telegram(Address('1/4/18'), payload=DPTArray(0x80))) # # TEST PROCESS #
def test_process_callback(self): """Test process / reading telegrams from telegram queue. Test if callback is executed.""" # pylint: disable=no-self-use xknx = XKNX(loop=self.loop) cover = Cover( xknx, 'TestCover', group_address_long='1/2/1', group_address_short='1/2/2', group_address_position='1/2/3', group_address_position_state='1/2/4') after_update_callback = Mock() @asyncio.coroutine def async_after_update_callback(device): """Async callback.""" after_update_callback(device) cover.register_device_updated_cb(async_after_update_callback) telegram = Telegram(Address('1/2/4'), payload=DPTArray(42)) self.loop.run_until_complete(asyncio.Task(cover.process(telegram))) after_update_callback.assert_called_with(cover)
def test_sync(self): """Test sync function / sending group reads to KNX bus.""" xknx = XKNX(loop=self.loop) sensor = Sensor( xknx, 'TestSensor', group_address='1/2/3') self.loop.run_until_complete(asyncio.Task(sensor.sync(False))) self.assertEqual(xknx.telegrams.qsize(), 1) telegram = xknx.telegrams.get_nowait() self.assertEqual(telegram, Telegram(Address('1/2/3'), TelegramType.GROUP_READ)) # # TEST PROCESS #
def test_process_callback(self): """Test process / reading telegrams from telegram queue. Test if callback is called.""" # pylint: disable=no-self-use xknx = XKNX(loop=self.loop) sensor = Sensor( xknx, 'TestSensor', group_address='1/2/3') after_update_callback = Mock() @asyncio.coroutine def async_after_update_callback(device): """Async callback.""" after_update_callback(device) sensor.register_device_updated_cb(async_after_update_callback) telegram = Telegram(Address('1/2/3')) telegram.payload = DPTArray((0x01, 0x02, 0x03)) self.loop.run_until_complete(asyncio.Task(sensor.process(telegram))) after_update_callback.assert_called_with(sensor)
def test_sync_state_address(self): """Test sync function / sending group reads to KNX bus. Test with Switch with explicit state address.""" xknx = XKNX(loop=self.loop) switch = Switch(xknx, "TestOutlet", group_address='1/2/3', group_address_state='1/2/4') self.loop.run_until_complete(asyncio.Task(switch.sync(False))) self.assertEqual(xknx.telegrams.qsize(), 1) telegram = xknx.telegrams.get_nowait() self.assertEqual(telegram, Telegram(Address('1/2/4'), TelegramType.GROUP_READ)) # # TEST PROCESS #
def test_process(self): """Test process / reading telegrams from telegram queue. Test if device was updated.""" xknx = XKNX(loop=self.loop) switch = Switch(xknx, 'TestOutlet', group_address='1/2/3') self.assertEqual(switch.state, False) telegram_on = Telegram() telegram_on.group_address = Address('1/2/3') telegram_on.payload = DPTBinary(1) self.loop.run_until_complete(asyncio.Task(switch.process(telegram_on))) self.assertEqual(switch.state, True) telegram_off = Telegram() telegram_off.group_address = Address('1/2/3') telegram_off.payload = DPTBinary(0) self.loop.run_until_complete(asyncio.Task(switch.process(telegram_off))) self.assertEqual(switch.state, False)
def test_process_callback(self): """Test process / reading telegrams from telegram queue. Test if callback was called.""" # pylint: disable=no-self-use xknx = XKNX(loop=self.loop) switch = Switch(xknx, 'TestOutlet', group_address='1/2/3') after_update_callback = Mock() @asyncio.coroutine def async_after_update_callback(device): """Async callback.""" after_update_callback(device) switch.register_device_updated_cb(async_after_update_callback) telegram = Telegram() telegram.group_address = Address('1/2/3') telegram.payload = DPTBinary(1) self.loop.run_until_complete(asyncio.Task(switch.process(telegram))) after_update_callback.assert_called_with(switch) # # TEST SET ON #
def test_process(self): """Test process / reading telegrams from telegram queue.""" xknx = XKNX(loop=self.loop) binaryinput = BinarySensor(xknx, 'TestInput', '1/2/3') self.assertEqual(binaryinput.state, BinarySensorState.OFF) telegram_on = Telegram() telegram_on.payload = DPTBinary(1) self.loop.run_until_complete(asyncio.Task(binaryinput.process(telegram_on))) self.assertEqual(binaryinput.state, BinarySensorState.ON) telegram_off = Telegram() telegram_off.payload = DPTBinary(0) self.loop.run_until_complete(asyncio.Task(binaryinput.process(telegram_off))) self.assertEqual(binaryinput.state, BinarySensorState.OFF)
def test_process_significant_bit(self): """Test process / reading telegrams from telegram queue with specific significant bit set.""" xknx = XKNX(loop=self.loop) binaryinput = BinarySensor(xknx, 'TestInput', '1/2/3', significant_bit=3) self.assertEqual(binaryinput.state, BinarySensorState.OFF) # Wrong significant bit: 0000 1011 = 11 telegram_on = Telegram() telegram_on.payload = DPTBinary(11) self.loop.run_until_complete(asyncio.Task(binaryinput.process(telegram_on))) self.assertEqual(binaryinput.state, BinarySensorState.OFF) # Correct significant bit: 0000 1101 = 13 telegram_on = Telegram() telegram_on.payload = DPTBinary(13) self.loop.run_until_complete(asyncio.Task(binaryinput.process(telegram_on))) self.assertEqual(binaryinput.state, BinarySensorState.ON) # Resetting, significant bit: 0000 0011 = 3 telegram_off = Telegram() telegram_off.payload = DPTBinary(3) self.loop.run_until_complete(asyncio.Task(binaryinput.process(telegram_off))) self.assertEqual(binaryinput.state, BinarySensorState.OFF)
def test_process_callback(self): """Test after_update_callback after state of switch was changed.""" # pylint: disable=no-self-use xknx = XKNX(loop=self.loop) switch = BinarySensor(xknx, 'TestInput', group_address='1/2/3') after_update_callback = Mock() @asyncio.coroutine def async_after_update_callback(device): """Async callback.""" after_update_callback(device) switch.register_device_updated_cb(async_after_update_callback) telegram = Telegram() telegram.payload = DPTBinary(1) self.loop.run_until_complete(asyncio.Task(switch.process(telegram))) after_update_callback.assert_called_with(switch)
def test_set_operation_mode_with_controller_status(self): """Test set_operation_mode with controller status adddressedefined.""" xknx = XKNX(loop=self.loop) climate = Climate( xknx, 'TestClimate', group_address_temperature='1/2/1', group_address_controller_status='1/2/4') for operation_mode in HVACOperationMode: if operation_mode == HVACOperationMode.AUTO: continue self.loop.run_until_complete(asyncio.Task(climate.set_operation_mode(operation_mode))) self.assertEqual(xknx.telegrams.qsize(), 1) telegram = xknx.telegrams.get_nowait() self.assertEqual( telegram, Telegram( Address('1/2/4'), payload=DPTArray(DPTControllerStatus.to_knx(operation_mode))))
def test_sync_operation_mode(self): """Test sync function / sending group reads to KNX bus for operation mode.""" xknx = XKNX(loop=self.loop) climate = Climate( xknx, 'TestClimate', group_address_operation_mode='1/2/3', group_address_controller_status='1/2/4') self.loop.run_until_complete(asyncio.Task(climate.sync(False))) self.assertEqual(xknx.telegrams.qsize(), 2) telegram1 = xknx.telegrams.get_nowait() self.assertEqual( telegram1, Telegram(Address('1/2/3'), TelegramType.GROUP_READ)) telegram2 = xknx.telegrams.get_nowait() self.assertEqual( telegram2, Telegram(Address('1/2/4'), TelegramType.GROUP_READ))
def test_sync_operation_mode_state(self): """Test sync function / sending group reads to KNX bus for operation mode with explicit state addresses.""" xknx = XKNX(loop=self.loop) climate = Climate( xknx, 'TestClimate', group_address_operation_mode='1/2/3', group_address_operation_mode_state='1/2/5', group_address_controller_status='1/2/4', group_address_controller_status_state='1/2/6') self.loop.run_until_complete(asyncio.Task(climate.sync(False))) self.assertEqual(xknx.telegrams.qsize(), 2) telegram1 = xknx.telegrams.get_nowait() self.assertEqual( telegram1, Telegram(Address('1/2/5'), TelegramType.GROUP_READ)) telegram2 = xknx.telegrams.get_nowait() self.assertEqual( telegram2, Telegram(Address('1/2/6'), TelegramType.GROUP_READ)) # # TEST PROCESS #
def test_process_callback_temp(self): """Test process / reading telegrams from telegram queue. Test if callback is executed when receiving temperature.""" # pylint: disable=no-self-use xknx = XKNX(loop=self.loop) climate = Climate( xknx, 'TestClimate', group_address_temperature='1/2/3') after_update_callback = Mock() @asyncio.coroutine def async_after_update_callback(device): """Async callback.""" after_update_callback(device) climate.register_device_updated_cb(async_after_update_callback) telegram = Telegram(Address('1/2/3')) telegram.payload = DPTArray(DPTTemperature().to_knx(21.34)) self.loop.run_until_complete(asyncio.Task(climate.process(telegram))) after_update_callback.assert_called_with(climate) # # SUPPORTED OPERATION MODES #
def test_sync(self): """Test sync function / sending group reads to KNX bus.""" xknx = XKNX(loop=self.loop) time = Time(xknx, "TestTime", group_address='1/2/3') self.loop.run_until_complete(asyncio.Task(time.sync(False))) self.assertEqual(xknx.telegrams.qsize(), 1) telegram = xknx.telegrams.get_nowait() self.assertEqual(telegram.group_address, Address('1/2/3')) self.assertEqual(telegram.telegramtype, TelegramType.GROUP_WRITE) self.assertEqual(len(telegram.payload.value), 3) # # TEST HAS GROUP ADDRESS #