Пример #1
0
        def f():
            (yield gen.Callback("noargs"))()
            self.assertEqual((yield gen.Wait("noargs")), None)
            (yield gen.Callback("1arg"))(42)
            self.assertEqual((yield gen.Wait("1arg")), 42)

            (yield gen.Callback("kwargs"))(value=42)
            result = yield gen.Wait("kwargs")
            self.assertTrue(isinstance(result, gen.Arguments))
            self.assertEqual(((), dict(value=42)), result)
            self.assertEqual(dict(value=42), result.kwargs)

            (yield gen.Callback("2args"))(42, 43)
            result = yield gen.Wait("2args")
            self.assertTrue(isinstance(result, gen.Arguments))
            self.assertEqual(((42, 43), {}), result)
            self.assertEqual((42, 43), result.args)

            def task_func(callback):
                callback(None, error="foo")

            result = yield gen.Task(task_func)
            self.assertTrue(isinstance(result, gen.Arguments))
            self.assertEqual(((None, ), dict(error="foo")), result)

            self.stop()
Пример #2
0
 def f():
     for k in range(3):
         self.io_loop.add_callback((yield gen.Callback(k)))
     yield gen.Wait(1)
     self.io_loop.add_callback((yield gen.Callback(3)))
     yield gen.Wait(0)
     yield gen.Wait(3)
     yield gen.Wait(2)
     self.stop()
Пример #3
0
 def get(self):
     self.io_loop = self.request.connection.stream.io_loop
     self.io_loop.add_callback((yield gen.Callback("k1")))
     yield gen.Wait("k1")
     self.write("1")
     self.io_loop.add_callback((yield gen.Callback("k2")))
     yield gen.Wait("k2")
     self.write("2")
     # reuse an old key
     self.io_loop.add_callback((yield gen.Callback("k1")))
     yield gen.Wait("k1")
     self.finish("3")
Пример #4
0
 def resolve(self, host, port, family=0):
     if is_valid_ip(host):
         addresses = [host]
     else:
         # gethostbyname doesn't take callback as a kwarg
         self.channel.gethostbyname(host, family, (yield gen.Callback(1)))
         callback_args = yield gen.Wait(1)
         assert isinstance(callback_args, gen.Arguments)
         assert not callback_args.kwargs
         result, error = callback_args.args
         if error:
             raise IOError(
                 'C-Ares returned error %s: %s while resolving %s' %
                 (error, pycares.errno.strerror(error), host))
         addresses = result.addresses
     addrinfo = []
     for address in addresses:
         if '.' in address:
             address_family = socket.AF_INET
         elif ':' in address:
             address_family = socket.AF_INET6
         else:
             address_family = socket.AF_UNSPEC
         if family != socket.AF_UNSPEC and family != address_family:
             raise IOError('Requested socket family %d but got %d' %
                           (family, address_family))
         addrinfo.append((address_family, (address, port)))
     raise gen.Return(addrinfo)
Пример #5
0
 def f():
     self.callback = yield gen.Callback('a')
     with StackContext(functools.partial(self.context, 'c1')):
         # This yield is a problem: the generator will be suspended
         # and the StackContext's __exit__ is not called yet, so
         # the context will be left on _state.contexts for anything
         # that runs before the yield resolves.
         yield gen.Wait('a')
Пример #6
0
 def test_wait_transfer_stack_context(self):
     # Wait should not pick up contexts from where callback was invoked,
     # even if that function improperly fails to wrap its callback.
     cb = yield gen.Callback('k1')
     self.function_with_stack_context(cb)
     self.assertEqual(self.named_contexts, [])
     yield gen.Wait('k1')
     self.assertEqual(self.named_contexts, [])
Пример #7
0
 def f2():
     (yield gen.Callback(1))()
     yield gen.Wait(1)
     self.io_loop.add_callback(lambda: 1 / 0)
     try:
         yield gen.Task(self.io_loop.add_timeout,
                        self.io_loop.time() + 10)
     except ZeroDivisionError:
         raise KeyError()
Пример #8
0
 def test_multi_mixed_types(self):
     # A YieldPoint (Wait) and Future (Task) can be combined
     # (and use the YieldPoint codepath)
     (yield gen.Callback("k1"))("v1")
     responses = yield [
         gen.Wait("k1"),
         gen.Task(self.delay_callback, 3, arg="v2")
     ]
     self.assertEqual(responses, ["v1", "v2"])
Пример #9
0
 def f():
     try:
         yield gen.Wait("k1")
         raise Exception("did not get expected exception")
     except gen.UnknownKeyError:
         pass
     (yield gen.Callback("k2"))("v2")
     self.assertEqual((yield gen.Wait("k2")), "v2")
     self.stop()
Пример #10
0
    def test_async_await_mixed_multi_native_yieldpoint(self):
        namespace = exec_test(
            globals(), locals(), """
        async def f1():
            await gen.Task(self.io_loop.add_callback)
            return 42
        """)

        @gen.coroutine
        def f2():
            yield gen.Task(self.io_loop.add_callback)
            raise gen.Return(43)

        f2(callback=(yield gen.Callback('cb')))
        results = yield [namespace['f1'](), gen.Wait('cb')]
        self.assertEqual(results, [42, 43])
        self.finished = True
Пример #11
0
 def f():
     (yield gen.Callback("k1"))("v1")
     (yield gen.Callback("k2"))("v2")
     results = yield [gen.Wait("k1"), gen.Wait("k2")]
     self.assertEqual(results, ["v1", "v2"])
     self.stop()
Пример #12
0
 def f():
     (yield gen.Callback((1, 2)))((3, 4))
     res = yield gen.Wait((1, 2))
     self.assertEqual((3, 4), res)
     self.stop()
Пример #13
0
 def f():
     self.io_loop.add_callback((yield gen.Callback("k1")))
     yield gen.Wait("k1")
     self.stop()
Пример #14
0
 def f():
     (yield gen.Callback("k1"))()
     res = yield gen.Wait("k1")
     self.assertTrue(res is None)
     self.stop()
Пример #15
0
 def f():
     yield gen.Callback("k1")
     yield gen.Wait("k2")
     self.stop()
Пример #16
0
 def f():
     (yield gen.Callback("k1"))(42)
     res = yield gen.Wait("k1")
     self.assertEqual(42, res)
     self.stop()
Пример #17
0
 def test_yield_outside_with(self):
     # This pattern avoids the problem in the previous test.
     cb = yield gen.Callback('k1')
     with StackContext(functools.partial(self.context, 'c1')):
         self.io_loop.add_callback(cb)
     yield gen.Wait('k1')
Пример #18
0
 def f():
     self.orphaned_callback = yield gen.Callback(1)
Пример #19
0
 def f():
     yield gen.Callback((1, 2))
     yield gen.Wait((2, 3))
     self.stop()
Пример #20
0
 def f():
     yield gen.Callback((1, 2))
     self.stop()
Пример #21
0
 def f():
     yield gen.Callback("k1")
     self.stop()
Пример #22
0
 def test_yield_outside_with_exception_stack_context(self):
     cb = yield gen.Callback('k1')
     with ExceptionStackContext(lambda t, v, tb: False):
         self.io_loop.add_callback(cb)
     yield gen.Wait('k1')
Пример #23
0
 def f():
     (yield gen.Callback("k1"))("v1")
     (yield gen.Callback("k2"))("v2")
     results = yield dict(foo=gen.Wait("k1"), bar=gen.Wait("k2"))
     self.assertEqual(results, dict(foo="v1", bar="v2"))
     self.stop()