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

Class HostAnswers

dns/resolver.py:325–373  ·  view source on GitHub ↗

A dict of DNS stub resolver answers to a host name lookup, indexed by type.

Source from the content-addressed store, hash-verified

323
324
325class HostAnswers(Answers):
326 """A dict of DNS stub resolver answers to a host name lookup, indexed by
327 type.
328 """
329
330 @classmethod
331 def make(
332 cls,
333 v6: Answer | None = None,
334 v4: Answer | None = None,
335 add_empty: bool = True,
336 ) -> "HostAnswers":
337 answers = HostAnswers()
338 if v6 is not None and (add_empty or v6.rrset):
339 answers[dns.rdatatype.AAAA] = v6
340 if v4 is not None and (add_empty or v4.rrset):
341 answers[dns.rdatatype.A] = v4
342 return answers
343
344 # Returns pairs of (address, family) from this result, potentially
345 # filtering by address family.
346 def addresses_and_families(
347 self, family: int = socket.AF_UNSPEC
348 ) -> Iterator[Tuple[str, int]]:
349 if family == socket.AF_UNSPEC:
350 yield from self.addresses_and_families(socket.AF_INET6)
351 yield from self.addresses_and_families(socket.AF_INET)
352 return
353 elif family == socket.AF_INET6:
354 answer = self.get(dns.rdatatype.AAAA)
355 elif family == socket.AF_INET:
356 answer = self.get(dns.rdatatype.A)
357 else: # pragma: no cover
358 raise NotImplementedError(f"unknown address family {family}")
359 if answer:
360 for rdata in answer:
361 yield (rdata.address, family)
362
363 # Returns addresses from this result, potentially filtering by
364 # address family.
365 def addresses(self, family: int = socket.AF_UNSPEC) -> Iterator[str]:
366 return (pair[0] for pair in self.addresses_and_families(family))
367
368 # Returns the canonical name from this result.
369 def canonical_name(self) -> dns.name.Name:
370 answer = self.get(dns.rdatatype.AAAA, self.get(dns.rdatatype.A))
371 if answer is None:
372 raise EmptyHostAnswers
373 return answer.canonical_name
374
375
376class CacheStatistics:

Callers 1

makeMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…