MCPcopy Create free account
hub / github.com/rthalley/dnspython / next_request

Method next_request

dns/resolver.py:685–758  ·  view source on GitHub ↗

Get the next request to send, and check the cache. Returns a (request, answer) tuple. At most one of request or answer will not be None.

(
        self,
    )

Source from the content-addressed store, hash-verified

683 self.backoff = 0.0
684
685 def next_request(
686 self,
687 ) -> Tuple[dns.message.QueryMessage | None, Answer | None]:
688 """Get the next request to send, and check the cache.
689
690 Returns a (request, answer) tuple. At most one of request or
691 answer will not be None.
692 """
693
694 # We return a tuple instead of Union[Message,Answer] as it lets
695 # the caller avoid isinstance().
696
697 while len(self.qnames) > 0:
698 self.qname = self.qnames.pop(0)
699
700 # Do we know the answer?
701 if self.resolver.cache:
702 answer = self.resolver.cache.get(
703 (self.qname, self.rdtype, self.rdclass)
704 )
705 if answer is not None:
706 if answer.rrset is None and self.raise_on_no_answer:
707 raise NoAnswer(response=answer.response)
708 else:
709 return (None, answer)
710 answer = self.resolver.cache.get(
711 (self.qname, dns.rdatatype.ANY, self.rdclass)
712 )
713 if answer is not None and answer.response.rcode() == dns.rcode.NXDOMAIN:
714 # cached NXDOMAIN; record it and continue to next
715 # name.
716 self.nxdomain_responses[self.qname] = answer.response
717 continue
718
719 # Build the request
720 request = dns.message.make_query(self.qname, self.rdtype, self.rdclass)
721 if self.resolver.keyname is not None:
722 request.use_tsig(
723 self.resolver.keyring,
724 self.resolver.keyname,
725 algorithm=self.resolver.keyalgorithm,
726 )
727 request.use_edns(
728 self.resolver.edns,
729 self.resolver.ednsflags,
730 self.resolver.payload,
731 options=self.resolver.ednsoptions,
732 )
733 if self.resolver.flags is not None:
734 request.flags = self.resolver.flags
735
736 self.nameservers = self.resolver._enrich_nameservers(
737 self.resolver._nameservers,
738 self.resolver.nameserver_ports,
739 self.resolver.port,
740 )
741 if self.resolver.rotate:
742 random.shuffle(self.nameservers)

Calls 8

NoAnswerClass · 0.85
NXDOMAINClass · 0.85
popMethod · 0.80
rcodeMethod · 0.80
_enrich_nameserversMethod · 0.80
getMethod · 0.45
use_tsigMethod · 0.45
use_ednsMethod · 0.45