From: Ben Darnell Date: Sat, 2 Mar 2013 19:30:42 +0000 (-0500) Subject: Convert resolvers to @gen.coroutine. X-Git-Tag: v3.0.0~85 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fbba77ea9c4b446d90cfaee70f0fe7d738061f05;p=thirdparty%2Ftornado.git Convert resolvers to @gen.coroutine. This adds a requirement that there be a "current" IOLoop, which introduced a few ripples. --- diff --git a/tornado/httpclient.py b/tornado/httpclient.py index 1b6455049..9ceeb0225 100644 --- a/tornado/httpclient.py +++ b/tornado/httpclient.py @@ -85,7 +85,8 @@ class HTTPClient(object): def callback(response): self._response = response self._io_loop.stop() - self._async_client.fetch(request, callback, **kwargs) + self._io_loop.add_callback(self._async_client.fetch, request, + callback, **kwargs) self._io_loop.start() response = self._response self._response = None diff --git a/tornado/platform/caresresolver.py b/tornado/platform/caresresolver.py index 83fd86a8c..729be3c41 100644 --- a/tornado/platform/caresresolver.py +++ b/tornado/platform/caresresolver.py @@ -45,9 +45,8 @@ class CaresResolver(Resolver): write_fd = fd self.channel.process_fd(read_fd, write_fd) - @return_future - @gen.engine - def resolve(self, host, port, family=0, callback=None): + @gen.coroutine + def resolve(self, host, port, family=0): if is_valid_ip(host): addresses = [host] else: @@ -73,4 +72,4 @@ class CaresResolver(Resolver): raise Exception('Requested socket family %d but got %d' % (family, address_family)) addrinfo.append((address_family, (address, port))) - callback(addrinfo) + raise gen.Return(addrinfo) diff --git a/tornado/platform/twisted.py b/tornado/platform/twisted.py index eb6c402dc..7eb7b778d 100644 --- a/tornado/platform/twisted.py +++ b/tornado/platform/twisted.py @@ -499,6 +499,8 @@ class TwistedResolver(Resolver): most one result, and arguments other than ``host`` and ``family`` are ignored. It may fail to resolve when ``family`` is not ``socket.AF_UNSPEC``. + + Requires Twisted 12.1 or newer. """ def initialize(self, io_loop=None): self.io_loop = io_loop or IOLoop.instance() @@ -513,9 +515,8 @@ class TwistedResolver(Resolver): self.resolver = twisted.names.resolve.ResolverChain( [host_resolver, cache_resolver, real_resolver]) - @return_future - @gen.engine - def resolve(self, host, port, family=0, callback=None): + @gen.coroutine + def resolve(self, host, port, family=0): # getHostByName doesn't accept IP addresses, so if the input # looks like an IP address just return it immediately. if twisted.internet.abstract.isIPAddress(host): @@ -539,4 +540,4 @@ class TwistedResolver(Resolver): result = [ (resolved_family, (resolved, port)), ] - self.io_loop.add_callback(callback, result) + raise gen.Return(result) diff --git a/tornado/test/netutil_test.py b/tornado/test/netutil_test.py index 6d9a63c16..ca594c096 100644 --- a/tornado/test/netutil_test.py +++ b/tornado/test/netutil_test.py @@ -65,6 +65,7 @@ class CaresResolverTest(AsyncTestCase, _ResolverTestMixin): @unittest.skipIf(twisted is None, "twisted module not present") +@unittest.skipIf(twisted.__version__ < "12.1", "old version of twisted") class TwistedResolverTest(AsyncTestCase, _ResolverTestMixin): def setUp(self): super(TwistedResolverTest, self).setUp() diff --git a/tornado/test/twisted_test.py b/tornado/test/twisted_test.py index f3c548490..bcde80282 100644 --- a/tornado/test/twisted_test.py +++ b/tornado/test/twisted_test.py @@ -351,10 +351,12 @@ class CompatibilityTests(unittest.TestCase): def setUp(self): self.saved_signals = save_signal_handlers() self.io_loop = IOLoop() + self.io_loop.make_current() self.reactor = TornadoReactor(self.io_loop) def tearDown(self): self.reactor.disconnectAll() + self.io_loop.clear_current() self.io_loop.close(all_fds=True) restore_signal_handlers(self.saved_signals)