Example #1
0
 def test_constructor_heterogenous_futures(self):
     fut1 = futures.Future(loop=self.one_loop)
     fut2 = futures.Future(loop=self.other_loop)
     with self.assertRaises(ValueError):
         tasks.gather(fut1, fut2)
     with self.assertRaises(ValueError):
         tasks.gather(fut1, loop=self.other_loop)
Example #2
0
 def test_constructor_heterogenous_futures(self):
     fut1 = futures.Future(loop=self.one_loop)
     fut2 = futures.Future(loop=self.other_loop)
     with self.assertRaises(ValueError):
         tasks.gather(fut1, fut2)
     with self.assertRaises(ValueError):
         tasks.gather(fut1, loop=self.other_loop)
Example #3
0
 def test_constructor_homogenous_futures(self):
     children = [futures.Future(loop=self.other_loop) for i in range(3)]
     fut = tasks.gather(*children)
     self.assertIs(fut._loop, self.other_loop)
     self._run_loop(self.other_loop)
     self.assertFalse(fut.done())
     fut = tasks.gather(*children, loop=self.other_loop)
     self.assertIs(fut._loop, self.other_loop)
     self._run_loop(self.other_loop)
     self.assertFalse(fut.done())
Example #4
0
 def test_constructor_homogenous_futures(self):
     children = [futures.Future(loop=self.other_loop) for i in range(3)]
     fut = tasks.gather(*children)
     self.assertIs(fut._loop, self.other_loop)
     self._run_loop(self.other_loop)
     self.assertFalse(fut.done())
     fut = tasks.gather(*children, loop=self.other_loop)
     self.assertIs(fut._loop, self.other_loop)
     self._run_loop(self.other_loop)
     self.assertFalse(fut.done())
Example #5
0
 def _check_empty_sequence(self, seq_or_iter):
     events.set_event_loop(self.one_loop)
     self.addCleanup(events.set_event_loop, None)
     fut = tasks.gather(*seq_or_iter)
     self.assertIsInstance(fut, futures.Future)
     self.assertIs(fut._loop, self.one_loop)
     self._run_loop(self.one_loop)
     self.assertTrue(fut.done())
     self.assertEqual(fut.result(), [])
     fut = tasks.gather(*seq_or_iter, loop=self.other_loop)
     self.assertIs(fut._loop, self.other_loop)
Example #6
0
 def _check_empty_sequence(self, seq_or_iter):
     events.set_event_loop(self.one_loop)
     self.addCleanup(events.set_event_loop, None)
     fut = tasks.gather(*seq_or_iter)
     self.assertIsInstance(fut, futures.Future)
     self.assertIs(fut._loop, self.one_loop)
     self._run_loop(self.one_loop)
     self.assertTrue(fut.done())
     self.assertEqual(fut.result(), [])
     fut = tasks.gather(*seq_or_iter, loop=self.other_loop)
     self.assertIs(fut._loop, self.other_loop)
Example #7
0
 def test_constructor_loop_selection(self):
     @tasks.coroutine
     def coro():
         return 'abc'
     gen1 = coro()
     gen2 = coro()
     fut = tasks.gather(gen1, gen2)
     self.assertIs(fut._loop, self.one_loop)
     gen1.close()
     gen2.close()
     gen3 = coro()
     gen4 = coro()
     fut = tasks.gather(gen3, gen4, loop=self.other_loop)
     self.assertIs(fut._loop, self.other_loop)
     gen3.close()
     gen4.close()
Example #8
0
    def test_constructor_loop_selection(self):
        @tasks.coroutine
        def coro():
            return 'abc'

        gen1 = coro()
        gen2 = coro()
        fut = tasks.gather(gen1, gen2)
        self.assertIs(fut._loop, self.one_loop)
        gen1.close()
        gen2.close()
        gen3 = coro()
        gen4 = coro()
        fut = tasks.gather(gen3, gen4, loop=self.other_loop)
        self.assertIs(fut._loop, self.other_loop)
        gen3.close()
        gen4.close()
Example #9
0
 def test_shield_gather(self):
     child1 = futures.Future(loop=self.loop)
     child2 = futures.Future(loop=self.loop)
     parent = tasks.gather(child1, child2, loop=self.loop)
     outer = tasks.shield(parent, loop=self.loop)
     test_utils.run_briefly(self.loop)
     outer.cancel()
     test_utils.run_briefly(self.loop)
     self.assertTrue(outer.cancelled())
     child1.set_result(1)
     child2.set_result(2)
     test_utils.run_briefly(self.loop)
     self.assertEqual(parent.result(), [1, 2])
Example #10
0
 def test_shield_gather(self):
     child1 = futures.Future(loop=self.loop)
     child2 = futures.Future(loop=self.loop)
     parent = tasks.gather(child1, child2, loop=self.loop)
     outer = tasks.shield(parent, loop=self.loop)
     test_utils.run_briefly(self.loop)
     outer.cancel()
     test_utils.run_briefly(self.loop)
     self.assertTrue(outer.cancelled())
     child1.set_result(1)
     child2.set_result(2)
     test_utils.run_briefly(self.loop)
     self.assertEqual(parent.result(), [1, 2])
Example #11
0
 def _check_success(self, **kwargs):
     a, b, c = [futures.Future(loop=self.one_loop) for i in range(3)]
     fut = tasks.gather(*self.wrap_futures(a, b, c), **kwargs)
     cb = Mock()
     fut.add_done_callback(cb)
     b.set_result(1)
     a.set_result(2)
     self._run_loop(self.one_loop)
     self.assertEqual(cb.called, False)
     self.assertFalse(fut.done())
     c.set_result(3)
     self._run_loop(self.one_loop)
     cb.assert_called_once_with(fut)
     self.assertEqual(fut.result(), [2, 1, 3])
Example #12
0
 def _check_success(self, **kwargs):
     a, b, c = [futures.Future(loop=self.one_loop) for i in range(3)]
     fut = tasks.gather(*self.wrap_futures(a, b, c), **kwargs)
     cb = Mock()
     fut.add_done_callback(cb)
     b.set_result(1)
     a.set_result(2)
     self._run_loop(self.one_loop)
     self.assertEqual(cb.called, False)
     self.assertFalse(fut.done())
     c.set_result(3)
     self._run_loop(self.one_loop)
     cb.assert_called_once_with(fut)
     self.assertEqual(fut.result(), [2, 1, 3])
Example #13
0
 def test_one_cancellation(self):
     a, b, c, d, e = [futures.Future(loop=self.one_loop) for i in range(5)]
     fut = tasks.gather(a, b, c, d, e)
     cb = Mock()
     fut.add_done_callback(cb)
     a.set_result(1)
     b.cancel()
     self._run_loop(self.one_loop)
     self.assertTrue(fut.done())
     cb.assert_called_once_with(fut)
     self.assertFalse(fut.cancelled())
     self.assertIsInstance(fut.exception(), futures.CancelledError)
     # Does nothing
     c.set_result(3)
     d.cancel()
     e.set_exception(RuntimeError())
Example #14
0
 def test_one_exception(self):
     a, b, c, d, e = [futures.Future(loop=self.one_loop) for i in range(5)]
     fut = tasks.gather(*self.wrap_futures(a, b, c, d, e))
     cb = Mock()
     fut.add_done_callback(cb)
     exc = ZeroDivisionError()
     a.set_result(1)
     b.set_exception(exc)
     self._run_loop(self.one_loop)
     self.assertTrue(fut.done())
     cb.assert_called_once_with(fut)
     self.assertIs(fut.exception(), exc)
     # Does nothing
     c.set_result(3)
     d.cancel()
     e.set_exception(RuntimeError())
Example #15
0
 def test_one_cancellation(self):
     a, b, c, d, e = [futures.Future(loop=self.one_loop) for i in range(5)]
     fut = tasks.gather(a, b, c, d, e)
     cb = Mock()
     fut.add_done_callback(cb)
     a.set_result(1)
     b.cancel()
     self._run_loop(self.one_loop)
     self.assertTrue(fut.done())
     cb.assert_called_once_with(fut)
     self.assertFalse(fut.cancelled())
     self.assertIsInstance(fut.exception(), futures.CancelledError)
     # Does nothing
     c.set_result(3)
     d.cancel()
     e.set_exception(RuntimeError())
Example #16
0
 def test_one_exception(self):
     a, b, c, d, e = [futures.Future(loop=self.one_loop) for i in range(5)]
     fut = tasks.gather(*self.wrap_futures(a, b, c, d, e))
     cb = Mock()
     fut.add_done_callback(cb)
     exc = ZeroDivisionError()
     a.set_result(1)
     b.set_exception(exc)
     self._run_loop(self.one_loop)
     self.assertTrue(fut.done())
     cb.assert_called_once_with(fut)
     self.assertIs(fut.exception(), exc)
     # Does nothing
     c.set_result(3)
     d.cancel()
     e.set_exception(RuntimeError())
Example #17
0
 def test_gather_shield(self):
     child1 = futures.Future(loop=self.loop)
     child2 = futures.Future(loop=self.loop)
     inner1 = tasks.shield(child1, loop=self.loop)
     inner2 = tasks.shield(child2, loop=self.loop)
     parent = tasks.gather(inner1, inner2, loop=self.loop)
     test_utils.run_briefly(self.loop)
     parent.cancel()
     # This should cancel inner1 and inner2 but bot child1 and child2.
     test_utils.run_briefly(self.loop)
     self.assertIsInstance(parent.exception(), futures.CancelledError)
     self.assertTrue(inner1.cancelled())
     self.assertTrue(inner2.cancelled())
     child1.set_result(1)
     child2.set_result(2)
     test_utils.run_briefly(self.loop)
Example #18
0
 def test_gather_shield(self):
     child1 = futures.Future(loop=self.loop)
     child2 = futures.Future(loop=self.loop)
     inner1 = tasks.shield(child1, loop=self.loop)
     inner2 = tasks.shield(child2, loop=self.loop)
     parent = tasks.gather(inner1, inner2, loop=self.loop)
     test_utils.run_briefly(self.loop)
     parent.cancel()
     # This should cancel inner1 and inner2 but bot child1 and child2.
     test_utils.run_briefly(self.loop)
     self.assertIsInstance(parent.exception(), futures.CancelledError)
     self.assertTrue(inner1.cancelled())
     self.assertTrue(inner2.cancelled())
     child1.set_result(1)
     child2.set_result(2)
     test_utils.run_briefly(self.loop)
Example #19
0
 def test_return_exceptions(self):
     a, b, c, d = [futures.Future(loop=self.one_loop) for i in range(4)]
     fut = tasks.gather(*self.wrap_futures(a, b, c, d),
                        return_exceptions=True)
     cb = Mock()
     fut.add_done_callback(cb)
     exc = ZeroDivisionError()
     exc2 = RuntimeError()
     b.set_result(1)
     c.set_exception(exc)
     a.set_result(3)
     self._run_loop(self.one_loop)
     self.assertFalse(fut.done())
     d.set_exception(exc2)
     self._run_loop(self.one_loop)
     self.assertTrue(fut.done())
     cb.assert_called_once_with(fut)
     self.assertEqual(fut.result(), [3, 1, exc, exc2])
Example #20
0
 def test_return_exceptions(self):
     a, b, c, d = [futures.Future(loop=self.one_loop) for i in range(4)]
     fut = tasks.gather(*self.wrap_futures(a, b, c, d),
                        return_exceptions=True)
     cb = Mock()
     fut.add_done_callback(cb)
     exc = ZeroDivisionError()
     exc2 = RuntimeError()
     b.set_result(1)
     c.set_exception(exc)
     a.set_result(3)
     self._run_loop(self.one_loop)
     self.assertFalse(fut.done())
     d.set_exception(exc2)
     self._run_loop(self.one_loop)
     self.assertTrue(fut.done())
     cb.assert_called_once_with(fut)
     self.assertEqual(fut.result(), [3, 1, exc, exc2])
Example #21
0
 def test_result_exception_one_cancellation(self):
     a, b, c, d, e, f = [futures.Future(loop=self.one_loop)
                         for i in range(6)]
     fut = tasks.gather(a, b, c, d, e, f, return_exceptions=True)
     cb = Mock()
     fut.add_done_callback(cb)
     a.set_result(1)
     zde = ZeroDivisionError()
     b.set_exception(zde)
     c.cancel()
     self._run_loop(self.one_loop)
     self.assertFalse(fut.done())
     d.set_result(3)
     e.cancel()
     rte = RuntimeError()
     f.set_exception(rte)
     res = self.one_loop.run_until_complete(fut)
     self.assertIsInstance(res[2], futures.CancelledError)
     self.assertIsInstance(res[4], futures.CancelledError)
     res[2] = res[4] = None
     self.assertEqual(res, [1, zde, None, 3, None, rte])
     cb.assert_called_once_with(fut)
Example #22
0
 def test_result_exception_one_cancellation(self):
     a, b, c, d, e, f = [
         futures.Future(loop=self.one_loop) for i in range(6)
     ]
     fut = tasks.gather(a, b, c, d, e, f, return_exceptions=True)
     cb = Mock()
     fut.add_done_callback(cb)
     a.set_result(1)
     zde = ZeroDivisionError()
     b.set_exception(zde)
     c.cancel()
     self._run_loop(self.one_loop)
     self.assertFalse(fut.done())
     d.set_result(3)
     e.cancel()
     rte = RuntimeError()
     f.set_exception(rte)
     res = self.one_loop.run_until_complete(fut)
     self.assertIsInstance(res[2], futures.CancelledError)
     self.assertIsInstance(res[4], futures.CancelledError)
     res[2] = res[4] = None
     self.assertEqual(res, [1, zde, None, 3, None, rte])
     cb.assert_called_once_with(fut)
Example #23
0
 def outer():
     yield from tasks.gather(inner(a), inner(b), loop=self.one_loop)
Example #24
0
 def outer():
     nonlocal proof, gatherer
     gatherer = tasks.gather(child1, child2, loop=self.one_loop)
     yield from gatherer
     proof += 100
Example #25
0
 def outer():
     yield from tasks.gather(inner(a), inner(b), loop=self.one_loop)
Example #26
0
 def outer():
     nonlocal proof, gatherer
     gatherer = tasks.gather(child1, child2, loop=self.one_loop)
     yield from gatherer
     proof += 100