From: Ben Darnell Date: Sun, 12 Jun 2016 16:22:44 +0000 (-0400) Subject: Standardize exceptions raised by Resolvers X-Git-Tag: v4.4.0b1~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5ae369754fcc83862c5905bf6b66fec69b5d3be7;p=thirdparty%2Ftornado.git Standardize exceptions raised by Resolvers Fixes #1721 --- diff --git a/tornado/netutil.py b/tornado/netutil.py index 348f3519c..5cbcdb925 100644 --- a/tornado/netutil.py +++ b/tornado/netutil.py @@ -332,6 +332,11 @@ class Resolver(Configurable): port)`` pair for IPv4; additional fields may be present for IPv6). If a ``callback`` is passed, it will be run with the result as an argument when it is complete. + + :raises IOError: if the address cannot be resolved. + + .. versionchanged:: 4.4 + Standardized all implementations to raise `IOError`. """ raise NotImplementedError() diff --git a/tornado/platform/caresresolver.py b/tornado/platform/caresresolver.py index d68b3fcc4..4205de30c 100644 --- a/tornado/platform/caresresolver.py +++ b/tornado/platform/caresresolver.py @@ -61,8 +61,8 @@ class CaresResolver(Resolver): assert not callback_args.kwargs result, error = callback_args.args if error: - raise Exception('C-Ares returned error %s: %s while resolving %s' % - (error, pycares.errno.strerror(error), host)) + 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: @@ -73,7 +73,7 @@ class CaresResolver(Resolver): else: address_family = socket.AF_UNSPEC if family != socket.AF_UNSPEC and family != address_family: - raise Exception('Requested socket family %d but got %d' % - (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) diff --git a/tornado/platform/twisted.py b/tornado/platform/twisted.py index 653a79ffc..92157c7c0 100644 --- a/tornado/platform/twisted.py +++ b/tornado/platform/twisted.py @@ -556,7 +556,10 @@ class TwistedResolver(Resolver): deferred = self.resolver.getHostByName(utf8(host)) resolved = yield gen.Task(deferred.addBoth) if isinstance(resolved, failure.Failure): - resolved.raiseException() + try: + resolved.raiseException() + except twisted.names.error.DomainError as e: + raise IOError(e) elif twisted.internet.abstract.isIPAddress(resolved): resolved_family = socket.AF_INET elif twisted.internet.abstract.isIPv6Address(resolved): diff --git a/tornado/test/netutil_test.py b/tornado/test/netutil_test.py index 2f4207a3e..a645bef21 100644 --- a/tornado/test/netutil_test.py +++ b/tornado/test/netutil_test.py @@ -64,7 +64,7 @@ class _ResolverErrorTestMixin(object): @gen_test def test_future_interface_bad_host(self): - with self.assertRaises(Exception): + with self.assertRaises(IOError): yield self.resolver.resolve('an invalid domain', 80, socket.AF_UNSPEC)