From: Bob Halley Date: Wed, 20 May 2020 02:23:29 +0000 (-0700) Subject: move raise_on_no_error out of Answer X-Git-Tag: v2.0.0rc1~186 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9e104f089216c11a28919f6785482fc29ed7102d;p=thirdparty%2Fdnspython.git move raise_on_no_error out of Answer --- diff --git a/dns/resolver.py b/dns/resolver.py index fe409e0e..d63ed364 100644 --- a/dns/resolver.py +++ b/dns/resolver.py @@ -201,8 +201,7 @@ class Answer(object): RRset's name might not be the query name. """ - def __init__(self, qname, rdtype, rdclass, response, - raise_on_no_answer=True, nameserver=None, + def __init__(self, qname, rdtype, rdclass, response, nameserver=None, port=None): self.qname = qname self.rdtype = rdtype @@ -233,12 +232,8 @@ class Answer(object): break continue except KeyError: - if raise_on_no_answer: - raise NoAnswer(response=response) - if raise_on_no_answer: - raise NoAnswer(response=response) - if rrset is None and raise_on_no_answer: - raise NoAnswer(response=response) + # Exit the chaining loop + break self.canonical_name = qname self.rrset = rrset if rrset is None: @@ -635,11 +630,12 @@ class _Resolution(object): rcode = response.rcode() if rcode == dns.rcode.NOERROR: answer = Answer(self.qname, self.rdtype, self.rdclass, response, - self.raise_on_no_answer, self.nameserver, - self.port) + self.nameserver, self.port) if self.resolver.cache: self.resolver.cache.put((self.qname, self.rdtype, self.rdclass), answer) + if answer.rrset is None and self.raise_on_no_answer: + raise NoAnswer(response=answer.response) return (answer, True) elif rcode == dns.rcode.NXDOMAIN: self.nxdomain_responses[self.qname] = response diff --git a/tests/test_resolver.py b/tests/test_resolver.py index 373ce606..389bcfb0 100644 --- a/tests/test_resolver.py +++ b/tests/test_resolver.py @@ -254,7 +254,7 @@ class BaseResolverTests(unittest.TestCase): message = dns.message.from_text(dangling_cname_0_message_text) name = dns.name.from_text('example.') answer = dns.resolver.Answer(name, dns.rdatatype.A, dns.rdataclass.IN, - message, raise_on_no_answer=False) + message) def test_python_internal_truth(answer): if answer: return True