mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-06 05:01:14 -07:00
Bump dnspython from 2.0.0 to 2.2.0 (#1618)
* Bump dnspython from 2.0.0 to 2.2.0 Bumps [dnspython]() from 2.0.0 to 2.2.0. --- updated-dependencies: - dependency-name: dnspython dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * Update dnspython==2.2.0 Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> [skip ci]
This commit is contained in:
parent
515a5d42d3
commit
3c93b5600f
143 changed files with 7498 additions and 2054 deletions
|
@ -34,7 +34,8 @@ _udp = dns.asyncquery.udp
|
|||
_tcp = dns.asyncquery.tcp
|
||||
|
||||
|
||||
class Resolver(dns.resolver.Resolver):
|
||||
class Resolver(dns.resolver.BaseResolver):
|
||||
"""Asynchronous DNS stub resolver."""
|
||||
|
||||
async def resolve(self, qname, rdtype=dns.rdatatype.A,
|
||||
rdclass=dns.rdataclass.IN,
|
||||
|
@ -43,53 +44,12 @@ class Resolver(dns.resolver.Resolver):
|
|||
backend=None):
|
||||
"""Query nameservers asynchronously to find the answer to the question.
|
||||
|
||||
The *qname*, *rdtype*, and *rdclass* parameters may be objects
|
||||
of the appropriate type, or strings that can be converted into objects
|
||||
of the appropriate type.
|
||||
|
||||
*qname*, a ``dns.name.Name`` or ``str``, the query name.
|
||||
|
||||
*rdtype*, an ``int`` or ``str``, the query type.
|
||||
|
||||
*rdclass*, an ``int`` or ``str``, the query class.
|
||||
|
||||
*tcp*, a ``bool``. If ``True``, use TCP to make the query.
|
||||
|
||||
*source*, a ``str`` or ``None``. If not ``None``, bind to this IP
|
||||
address when making queries.
|
||||
|
||||
*raise_on_no_answer*, a ``bool``. If ``True``, raise
|
||||
``dns.resolver.NoAnswer`` if there's no answer to the question.
|
||||
|
||||
*source_port*, an ``int``, the port from which to send the message.
|
||||
|
||||
*lifetime*, a ``float``, how many seconds a query should run
|
||||
before timing out.
|
||||
|
||||
*search*, a ``bool`` or ``None``, determines whether the
|
||||
search list configured in the system's resolver configuration
|
||||
are used for relative names, and whether the resolver's domain
|
||||
may be added to relative names. The default is ``None``,
|
||||
which causes the value of the resolver's
|
||||
``use_search_by_default`` attribute to be used.
|
||||
|
||||
*backend*, a ``dns.asyncbackend.Backend``, or ``None``. If ``None``,
|
||||
the default, then dnspython will use the default backend.
|
||||
|
||||
Raises ``dns.resolver.NXDOMAIN`` if the query name does not exist.
|
||||
|
||||
Raises ``dns.resolver.YXDOMAIN`` if the query name is too long after
|
||||
DNAME substitution.
|
||||
|
||||
Raises ``dns.resolver.NoAnswer`` if *raise_on_no_answer* is
|
||||
``True`` and the query name exists but has no RRset of the
|
||||
desired type and class.
|
||||
|
||||
Raises ``dns.resolver.NoNameservers`` if no non-broken
|
||||
nameservers are available to answer the question.
|
||||
|
||||
Returns a ``dns.resolver.Answer`` instance.
|
||||
|
||||
See :py:func:`dns.resolver.Resolver.resolve()` for the
|
||||
documentation of the other parameters, exceptions, and return
|
||||
type of this method.
|
||||
"""
|
||||
|
||||
resolution = dns.resolver._Resolution(self, qname, rdtype, rdclass, tcp,
|
||||
|
@ -111,7 +71,8 @@ class Resolver(dns.resolver.Resolver):
|
|||
(nameserver, port, tcp, backoff) = resolution.next_nameserver()
|
||||
if backoff:
|
||||
await backend.sleep(backoff)
|
||||
timeout = self._compute_timeout(start, lifetime)
|
||||
timeout = self._compute_timeout(start, lifetime,
|
||||
resolution.errors)
|
||||
try:
|
||||
if dns.inet.is_address(nameserver):
|
||||
if tcp:
|
||||
|
@ -126,8 +87,9 @@ class Resolver(dns.resolver.Resolver):
|
|||
raise_on_truncation=True,
|
||||
backend=backend)
|
||||
else:
|
||||
# We don't do DoH yet.
|
||||
raise NotImplementedError
|
||||
response = await dns.asyncquery.https(request,
|
||||
nameserver,
|
||||
timeout=timeout)
|
||||
except Exception as ex:
|
||||
(_, done) = resolution.query_result(None, ex)
|
||||
continue
|
||||
|
@ -139,11 +101,6 @@ class Resolver(dns.resolver.Resolver):
|
|||
if answer is not None:
|
||||
return answer
|
||||
|
||||
async def query(self, *args, **kwargs):
|
||||
# We have to define something here as we don't want to inherit the
|
||||
# parent's query().
|
||||
raise NotImplementedError
|
||||
|
||||
async def resolve_address(self, ipaddr, *args, **kwargs):
|
||||
"""Use an asynchronous resolver to run a reverse query for PTR
|
||||
records.
|
||||
|
@ -165,6 +122,30 @@ class Resolver(dns.resolver.Resolver):
|
|||
rdclass=dns.rdataclass.IN,
|
||||
*args, **kwargs)
|
||||
|
||||
# pylint: disable=redefined-outer-name
|
||||
|
||||
async def canonical_name(self, name):
|
||||
"""Determine the canonical name of *name*.
|
||||
|
||||
The canonical name is the name the resolver uses for queries
|
||||
after all CNAME and DNAME renamings have been applied.
|
||||
|
||||
*name*, a ``dns.name.Name`` or ``str``, the query name.
|
||||
|
||||
This method can raise any exception that ``resolve()`` can
|
||||
raise, other than ``dns.resolver.NoAnswer`` and
|
||||
``dns.resolver.NXDOMAIN``.
|
||||
|
||||
Returns a ``dns.name.Name``.
|
||||
"""
|
||||
try:
|
||||
answer = await self.resolve(name, raise_on_no_answer=False)
|
||||
canonical_name = answer.canonical_name
|
||||
except dns.resolver.NXDOMAIN as e:
|
||||
canonical_name = e.canonical_name
|
||||
return canonical_name
|
||||
|
||||
|
||||
default_resolver = None
|
||||
|
||||
|
||||
|
@ -188,52 +169,46 @@ def reset_default_resolver():
|
|||
|
||||
async def resolve(qname, rdtype=dns.rdatatype.A, rdclass=dns.rdataclass.IN,
|
||||
tcp=False, source=None, raise_on_no_answer=True,
|
||||
source_port=0, search=None, backend=None):
|
||||
source_port=0, lifetime=None, search=None, backend=None):
|
||||
"""Query nameservers asynchronously to find the answer to the question.
|
||||
|
||||
This is a convenience function that uses the default resolver
|
||||
object to make the query.
|
||||
|
||||
See ``dns.asyncresolver.Resolver.resolve`` for more information on the
|
||||
parameters.
|
||||
See :py:func:`dns.asyncresolver.Resolver.resolve` for more
|
||||
information on the parameters.
|
||||
"""
|
||||
|
||||
return await get_default_resolver().resolve(qname, rdtype, rdclass, tcp,
|
||||
source, raise_on_no_answer,
|
||||
source_port, search, backend)
|
||||
source_port, lifetime, search,
|
||||
backend)
|
||||
|
||||
|
||||
async def resolve_address(ipaddr, *args, **kwargs):
|
||||
"""Use a resolver to run a reverse query for PTR records.
|
||||
|
||||
See ``dns.asyncresolver.Resolver.resolve_address`` for more
|
||||
See :py:func:`dns.asyncresolver.Resolver.resolve_address` for more
|
||||
information on the parameters.
|
||||
"""
|
||||
|
||||
return await get_default_resolver().resolve_address(ipaddr, *args, **kwargs)
|
||||
|
||||
async def canonical_name(name):
|
||||
"""Determine the canonical name of *name*.
|
||||
|
||||
See :py:func:`dns.resolver.Resolver.canonical_name` for more
|
||||
information on the parameters and possible exceptions.
|
||||
"""
|
||||
|
||||
return await get_default_resolver().canonical_name(name)
|
||||
|
||||
async def zone_for_name(name, rdclass=dns.rdataclass.IN, tcp=False,
|
||||
resolver=None, backend=None):
|
||||
"""Find the name of the zone which contains the specified name.
|
||||
|
||||
*name*, an absolute ``dns.name.Name`` or ``str``, the query name.
|
||||
|
||||
*rdclass*, an ``int``, the query class.
|
||||
|
||||
*tcp*, a ``bool``. If ``True``, use TCP to make the query.
|
||||
|
||||
*resolver*, a ``dns.asyncresolver.Resolver`` or ``None``, the
|
||||
resolver to use. If ``None``, the default resolver is used.
|
||||
|
||||
*backend*, a ``dns.asyncbackend.Backend``, or ``None``. If ``None``,
|
||||
the default, then dnspython will use the default backend.
|
||||
|
||||
Raises ``dns.resolver.NoRootSOA`` if there is no SOA RR at the DNS
|
||||
root. (This is only likely to happen if you're using non-default
|
||||
root servers in your network and they are misconfigured.)
|
||||
|
||||
Returns a ``dns.name.Name``.
|
||||
See :py:func:`dns.resolver.Resolver.zone_for_name` for more
|
||||
information on the parameters and possible exceptions.
|
||||
"""
|
||||
|
||||
if isinstance(name, str):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue