]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
Extend NoAnswer exception with optional question.
authorPetr Spacek <pspacek@redhat.com>
Thu, 15 Jan 2015 16:44:49 +0000 (17:44 +0100)
committerPetr Spacek <pspacek@redhat.com>
Thu, 12 Feb 2015 11:34:17 +0000 (12:34 +0100)
The actual question will be printed as part of string representation of
NoAnswer exception instead of terse
"The response did not contain an answer to the question."

dns/resolver.py

index 79de3ab4488389bf5bbd28eec7f7fc04b2fee5fe..ca9f98f3461961180e41dce44440d0e5c029169e 100644 (file)
@@ -58,8 +58,19 @@ class YXDOMAIN(dns.exception.DNSException):
 Timeout = dns.exception.Timeout
 
 class NoAnswer(dns.exception.DNSException):
-    """The response did not contain an answer to the question."""
-    pass
+    """The DNS response does not contain an answer to the question."""
+    def __init__(self, question=None):
+        super(dns.exception.DNSException, self).__init__()
+        self.question = question
+
+    def __str__(self):
+        message = self.__doc__
+        if self.question:
+            message = message[0:-1]
+            for q in self.question:
+                message += ' %s' % q
+        return message
+
 
 class NoNameservers(dns.exception.DNSException):
     """No non-broken nameservers are available to answer the query."""
@@ -136,11 +147,11 @@ class Answer(object):
                         continue
                     except KeyError:
                         if raise_on_no_answer:
-                            raise NoAnswer
+                            raise NoAnswer(question=response.question)
                 if raise_on_no_answer:
-                    raise NoAnswer
+                    raise NoAnswer(question=response.question)
         if rrset is None and raise_on_no_answer:
-            raise NoAnswer
+            raise NoAnswer(question=response.question)
         self.canonical_name = qname
         self.rrset = rrset
         if rrset is None: