]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Standardize exceptions raised by Resolvers
authorBen Darnell <ben@bendarnell.com>
Sun, 12 Jun 2016 16:22:44 +0000 (12:22 -0400)
committerBen Darnell <ben@bendarnell.com>
Sun, 12 Jun 2016 16:22:44 +0000 (12:22 -0400)
Fixes #1721

tornado/netutil.py
tornado/platform/caresresolver.py
tornado/platform/twisted.py
tornado/test/netutil_test.py

index 348f3519c134df389cf963331a3e93a9641b9581..5cbcdb92545cfa0551ffb80b7ed654f4774ad1f9 100644 (file)
@@ -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()
 
index d68b3fcc4b48aec43656d3c0c6fc25439990a4eb..4205de30c22afad08018caf785df3e25e7f227a0 100644 (file)
@@ -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)
index 653a79ffc2937b4aba216829a3c427b489a069f1..92157c7c045cfd2127fb761eb43ee973c7992373 100644 (file)
@@ -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):
index 2f4207a3e557c29a5742bd2f07aab27cb7c47167..a645bef21d954f9ba5adef9f110ff139e17b07b2 100644 (file)
@@ -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)