mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-07 05:31:15 -07:00
Bump dnspython from 2.2.0 to 2.2.1 (#1679)
* Bump dnspython from 2.2.0 to 2.2.1 Bumps [dnspython](https://github.com/rthalley/dnspython) from 2.2.0 to 2.2.1. - [Release notes](https://github.com/rthalley/dnspython/releases) - [Changelog](https://github.com/rthalley/dnspython/blob/master/doc/whatsnew.rst) - [Commits](https://github.com/rthalley/dnspython/compare/v2.2.0...v2.2.1) --- updated-dependencies: - dependency-name: dnspython dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * Update dnspython==2.2.1 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
54c9214b03
commit
aa0c58ef0e
23 changed files with 88 additions and 30 deletions
|
@ -49,7 +49,7 @@ def _immutable_init(f):
|
|||
f(*args, **kwargs)
|
||||
finally:
|
||||
if not previous:
|
||||
# If we started the initialzation, establish immutability
|
||||
# If we started the initialization, establish immutability
|
||||
# by removing the attribute that allows mutation
|
||||
object.__delattr__(args[0], '_immutable_init')
|
||||
nf.__signature__ = inspect.signature(f)
|
||||
|
|
|
@ -19,7 +19,7 @@ async def udp(q : message.Message, where : str,
|
|||
one_rr_per_rrset : Optional[bool] = False,
|
||||
ignore_trailing : Optional[bool] = False,
|
||||
sock : Optional[asyncbackend.DatagramSocket] = None,
|
||||
backend : Optional[asyncbackend.Backend]) -> message.Message:
|
||||
backend : Optional[asyncbackend.Backend] = None) -> message.Message:
|
||||
pass
|
||||
|
||||
async def tcp(q : message.Message, where : str, timeout : float = None, port=53,
|
||||
|
@ -28,7 +28,7 @@ async def tcp(q : message.Message, where : str, timeout : float = None, port=53,
|
|||
one_rr_per_rrset : Optional[bool] = False,
|
||||
ignore_trailing : Optional[bool] = False,
|
||||
sock : Optional[asyncbackend.StreamSocket] = None,
|
||||
backend : Optional[asyncbackend.Backend]) -> message.Message:
|
||||
backend : Optional[asyncbackend.Backend] = None) -> message.Message:
|
||||
pass
|
||||
|
||||
async def tls(q : message.Message, where : str,
|
||||
|
@ -37,7 +37,7 @@ async def tls(q : message.Message, where : str,
|
|||
one_rr_per_rrset : Optional[bool] = False,
|
||||
ignore_trailing : Optional[bool] = False,
|
||||
sock : Optional[asyncbackend.StreamSocket] = None,
|
||||
backend : Optional[asyncbackend.Backend],
|
||||
backend : Optional[asyncbackend.Backend] = None,
|
||||
ssl_context: Optional[ssl.SSLContext] = None,
|
||||
server_hostname: Optional[str] = None) -> message.Message:
|
||||
pass
|
||||
|
|
|
@ -108,7 +108,7 @@ def key_id(key):
|
|||
return total & 0xffff
|
||||
|
||||
class DSDigest(dns.enum.IntEnum):
|
||||
"""DNSSEC Delgation Signer Digest Algorithm"""
|
||||
"""DNSSEC Delegation Signer Digest Algorithm"""
|
||||
|
||||
SHA1 = 1
|
||||
SHA256 = 2
|
||||
|
|
|
@ -125,7 +125,7 @@ class TooBig(DNSException):
|
|||
class Timeout(DNSException):
|
||||
"""The DNS operation timed out."""
|
||||
supp_kwargs = {'timeout'}
|
||||
fmt = "The DNS operation timed out after {timeout} seconds"
|
||||
fmt = "The DNS operation timed out after {timeout:.3f} seconds"
|
||||
|
||||
|
||||
class ExceptionWrapper:
|
||||
|
|
|
@ -8,3 +8,5 @@ class DNSException(Exception):
|
|||
class SyntaxError(DNSException): ...
|
||||
class FormError(DNSException): ...
|
||||
class Timeout(DNSException): ...
|
||||
class TooBig(DNSException): ...
|
||||
class UnexpectedEnd(SyntaxError): ...
|
||||
|
|
|
@ -509,7 +509,7 @@ class Message:
|
|||
expected to return a key.
|
||||
|
||||
*keyname*, a ``dns.name.Name``, ``str`` or ``None``, the name of
|
||||
thes TSIG key to use; defaults to ``None``. If *keyring* is a
|
||||
this TSIG key to use; defaults to ``None``. If *keyring* is a
|
||||
``dict``, the key must be defined in it. If *keyring* is a
|
||||
``dns.tsig.Key``, this is ignored.
|
||||
|
||||
|
|
|
@ -1085,10 +1085,10 @@ def inbound_xfr(where, txn_manager, query=None,
|
|||
|
||||
*udp_mode*, a ``dns.query.UDPMode``, determines how UDP is used
|
||||
for IXFRs. The default is ``dns.UDPMode.NEVER``, i.e. only use
|
||||
TCP. Other possibilites are ``dns.UDPMode.TRY_FIRST``, which
|
||||
TCP. Other possibilities are ``dns.UDPMode.TRY_FIRST``, which
|
||||
means "try UDP but fallback to TCP if needed", and
|
||||
``dns.UDPMode.ONLY``, which means "try UDP and raise
|
||||
``dns.xfr.UseTCP`` if it does not succeeed.
|
||||
``dns.xfr.UseTCP`` if it does not succeed.
|
||||
|
||||
Raises on errors.
|
||||
"""
|
||||
|
|
|
@ -557,7 +557,7 @@ class GenericRdata(Rdata):
|
|||
raise dns.exception.SyntaxError(
|
||||
r'generic rdata does not start with \#')
|
||||
length = tok.get_int()
|
||||
hex = tok.concatenate_remaining_identifiers().encode()
|
||||
hex = tok.concatenate_remaining_identifiers(True).encode()
|
||||
data = binascii.unhexlify(hex)
|
||||
if len(data) != length:
|
||||
raise dns.exception.SyntaxError(
|
||||
|
|
|
@ -312,7 +312,7 @@ class Rdataset(dns.set.Set):
|
|||
def processing_order(self):
|
||||
"""Return rdatas in a valid processing order according to the type's
|
||||
specification. For example, MX records are in preference order from
|
||||
lowest to highest preferences, with items of the same perference
|
||||
lowest to highest preferences, with items of the same preference
|
||||
shuffled.
|
||||
|
||||
For types that do not define a processing order, the rdatas are
|
||||
|
|
|
@ -63,7 +63,7 @@ class TKEY(dns.rdata.Rdata):
|
|||
error = tok.get_uint16()
|
||||
key_b64 = tok.get_string().encode()
|
||||
key = base64.b64decode(key_b64)
|
||||
other_b64 = tok.concatenate_remaining_identifiers().encode()
|
||||
other_b64 = tok.concatenate_remaining_identifiers(True).encode()
|
||||
other = base64.b64decode(other_b64)
|
||||
|
||||
return cls(rdclass, rdtype, algorithm, inception, expiration, mode,
|
||||
|
|
|
@ -37,8 +37,12 @@ __all__ = [
|
|||
'HINFO',
|
||||
'HIP',
|
||||
'ISDN',
|
||||
'L32',
|
||||
'L64',
|
||||
'LOC',
|
||||
'LP',
|
||||
'MX',
|
||||
'NID',
|
||||
'NINFO',
|
||||
'NS',
|
||||
'NSEC',
|
||||
|
|
|
@ -435,7 +435,7 @@ class SVCBBase(dns.rdata.Rdata):
|
|||
if not isinstance(v, Param) and v is not None:
|
||||
raise ValueError("not a Param")
|
||||
self.params = dns.immutable.Dict(params)
|
||||
# Make sure any paramater listed as mandatory is present in the
|
||||
# Make sure any parameter listed as mandatory is present in the
|
||||
# record.
|
||||
mandatory = params.get(ParamKey.MANDATORY)
|
||||
if mandatory:
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
import typing
|
||||
from .. import rdata
|
||||
|
||||
class TXTBase(rdata.Rdata):
|
||||
strings: typing.Tuple[bytes, ...]
|
||||
|
||||
def __init__(self, rdclass: int, rdtype: int, strings: typing.Iterable[bytes]) -> None:
|
||||
...
|
||||
def to_text(self, origin: typing.Any, relativize: bool, **kw: typing.Any) -> str:
|
||||
...
|
||||
class TXT(TXTBase):
|
||||
...
|
||||
|
|
|
@ -49,8 +49,8 @@ class Renderer:
|
|||
r.add_rrset(dns.renderer.ANSWER, rrset_2)
|
||||
r.add_rrset(dns.renderer.AUTHORITY, ns_rrset)
|
||||
r.add_edns(0, 0, 4096)
|
||||
r.add_rrset(dns.renderer.ADDTIONAL, ad_rrset_1)
|
||||
r.add_rrset(dns.renderer.ADDTIONAL, ad_rrset_2)
|
||||
r.add_rrset(dns.renderer.ADDITIONAL, ad_rrset_1)
|
||||
r.add_rrset(dns.renderer.ADDITIONAL, ad_rrset_2)
|
||||
r.write_header()
|
||||
r.add_tsig(keyname, secret, 300, 1, 0, '', request_mac)
|
||||
wire = r.get_wire()
|
||||
|
|
|
@ -145,7 +145,7 @@ class LifetimeTimeout(dns.exception.Timeout):
|
|||
"""The resolution lifetime expired."""
|
||||
|
||||
msg = "The resolution lifetime expired."
|
||||
fmt = "%s after {timeout} seconds: {errors}" % msg[:-1]
|
||||
fmt = "%s after {timeout:.3f} seconds: {errors}" % msg[:-1]
|
||||
supp_kwargs = {'timeout', 'errors'}
|
||||
|
||||
def _fmt_kwargs(self, **kwargs):
|
||||
|
@ -1101,7 +1101,7 @@ class Resolver(BaseResolver):
|
|||
"""Query nameservers to find the answer to the question.
|
||||
|
||||
This method calls resolve() with ``search=True``, and is
|
||||
provided for backwards compatbility with prior versions of
|
||||
provided for backwards compatibility with prior versions of
|
||||
dnspython. See the documentation for the resolve() method for
|
||||
further details.
|
||||
"""
|
||||
|
@ -1200,7 +1200,7 @@ def query(qname, rdtype=dns.rdatatype.A, rdclass=dns.rdataclass.IN,
|
|||
"""Query nameservers to find the answer to the question.
|
||||
|
||||
This method calls resolve() with ``search=True``, and is
|
||||
provided for backwards compatbility with prior versions of
|
||||
provided for backwards compatibility with prior versions of
|
||||
dnspython. See the documentation for the resolve() method for
|
||||
further details.
|
||||
"""
|
||||
|
@ -1253,7 +1253,7 @@ def zone_for_name(name, rdclass=dns.rdataclass.IN, tcp=False, resolver=None,
|
|||
root servers in your network and they are misconfigured.)
|
||||
|
||||
Raises ``dns.resolver.LifetimeTimeout`` if the answer could not be
|
||||
found in the alotted lifetime.
|
||||
found in the allotted lifetime.
|
||||
|
||||
Returns a ``dns.name.Name``.
|
||||
"""
|
||||
|
|
|
@ -25,7 +25,7 @@ def query(qname : str, rdtype : Union[int,str] = 0,
|
|||
tcp=False, source=None, raise_on_no_answer=True,
|
||||
source_port=0, lifetime : Optional[float]=None):
|
||||
...
|
||||
def resolve_address(self, ipaddr: str, *args: Any, **kwargs: Optional[Dict]):
|
||||
def resolve_address(ipaddr: str, *args: Any, **kwargs: Optional[Dict]):
|
||||
...
|
||||
class LRUCache:
|
||||
def __init__(self, max_size=1000):
|
||||
|
@ -59,3 +59,8 @@ class Resolver:
|
|||
raise_on_no_answer=True, source_port : int = 0,
|
||||
lifetime : Optional[float]=None):
|
||||
...
|
||||
default_resolver: typing.Optional[Resolver]
|
||||
def reset_default_resolver() -> None:
|
||||
...
|
||||
def get_default_resolver() -> Resolver:
|
||||
...
|
||||
|
|
|
@ -600,9 +600,12 @@ class Tokenizer:
|
|||
break
|
||||
return tokens
|
||||
|
||||
def concatenate_remaining_identifiers(self):
|
||||
def concatenate_remaining_identifiers(self, allow_empty=False):
|
||||
"""Read the remaining tokens on the line, which should be identifiers.
|
||||
|
||||
Raises dns.exception.SyntaxError if there are no remaining tokens,
|
||||
unless `allow_empty=True` is given.
|
||||
|
||||
Raises dns.exception.SyntaxError if a token is seen that is not an
|
||||
identifier.
|
||||
|
||||
|
@ -618,6 +621,8 @@ class Tokenizer:
|
|||
if not token.is_identifier():
|
||||
raise dns.exception.SyntaxError
|
||||
s += token.value
|
||||
if not (allow_empty or s):
|
||||
raise dns.exception.SyntaxError('expecting another identifier')
|
||||
return s
|
||||
|
||||
def as_name(self, token, origin=None, relativize=False, relativize_to=None):
|
||||
|
|
|
@ -389,7 +389,7 @@ class Transaction:
|
|||
if rdataset.rdclass != self.manager.get_class():
|
||||
raise ValueError(f'{method} has objects of wrong RdataClass')
|
||||
if rdataset.rdtype == dns.rdatatype.SOA:
|
||||
(_, _, origin) = self.manager.origin_information()
|
||||
(_, _, origin) = self._origin_information()
|
||||
if name != origin:
|
||||
raise ValueError(f'{method} has non-origin SOA')
|
||||
self._raise_if_not_empty(method, args)
|
||||
|
@ -560,7 +560,7 @@ class Transaction:
|
|||
*commit*, a bool. If ``True``, commit the transaction, otherwise
|
||||
roll it back.
|
||||
|
||||
If committing adn the commit fails, then roll back and raise an
|
||||
If committing and the commit fails, then roll back and raise an
|
||||
exception.
|
||||
"""
|
||||
raise NotImplementedError # pragma: no cover
|
||||
|
@ -585,3 +585,12 @@ class Transaction:
|
|||
Returns a node or ``None``.
|
||||
"""
|
||||
raise NotImplementedError # pragma: no cover
|
||||
|
||||
#
|
||||
# Low-level API with a default implementation, in case a subclass needs
|
||||
# to override.
|
||||
#
|
||||
|
||||
def _origin_information(self):
|
||||
# This is only used by _add()
|
||||
return self.manager.origin_information()
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
import base64
|
||||
|
||||
import dns.name
|
||||
import dns.tsig
|
||||
|
||||
|
||||
def from_text(textring):
|
||||
|
|
|
@ -22,7 +22,7 @@ MAJOR = 2
|
|||
#: MINOR
|
||||
MINOR = 2
|
||||
#: MICRO
|
||||
MICRO = 0
|
||||
MICRO = 1
|
||||
#: RELEASELEVEL
|
||||
RELEASELEVEL = 0x0f
|
||||
#: SERIAL
|
||||
|
|
|
@ -131,7 +131,7 @@ class Zone(dns.zone.Zone):
|
|||
#
|
||||
# We only wake one sleeper at a time, so it's important
|
||||
# that no event waiter can exit this method (e.g. via
|
||||
# cancelation) without returning a transaction or waking
|
||||
# cancellation) without returning a transaction or waking
|
||||
# someone else up.
|
||||
#
|
||||
# This is not a problem with Threading module threads as
|
||||
|
|
|
@ -183,6 +183,11 @@ class Zone(dns.transaction.TransactionManager):
|
|||
"name parameter must be a subdomain of the zone origin")
|
||||
if self.relativize:
|
||||
name = name.relativize(self.origin)
|
||||
elif not self.relativize:
|
||||
# We have a relative name in a non-relative zone, so derelativize.
|
||||
if self.origin is None:
|
||||
raise KeyError('no zone origin is defined')
|
||||
name = name.derelativize(self.origin)
|
||||
return name
|
||||
|
||||
def __getitem__(self, key):
|
||||
|
@ -870,11 +875,20 @@ class Version:
|
|||
|
||||
def _validate_name(self, name):
|
||||
if name.is_absolute():
|
||||
if not name.is_subdomain(self.zone.origin):
|
||||
if self.origin is None:
|
||||
# This should probably never happen as other code (e.g.
|
||||
# _rr_line) will notice the lack of an origin before us, but
|
||||
# we check just in case!
|
||||
raise KeyError('no zone origin is defined')
|
||||
if not name.is_subdomain(self.origin):
|
||||
raise KeyError("name is not a subdomain of the zone origin")
|
||||
if self.zone.relativize:
|
||||
# XXXRTH should it be an error if self.origin is still None?
|
||||
name = name.relativize(self.origin)
|
||||
elif not self.zone.relativize:
|
||||
# We have a relative name in a non-relative zone, so derelativize.
|
||||
if self.origin is None:
|
||||
raise KeyError('no zone origin is defined')
|
||||
name = name.derelativize(self.origin)
|
||||
return name
|
||||
|
||||
def get_node(self, name):
|
||||
|
@ -1030,6 +1044,18 @@ class Transaction(dns.transaction.Transaction):
|
|||
def _get_node(self, name):
|
||||
return self.version.get_node(name)
|
||||
|
||||
def _origin_information(self):
|
||||
(absolute, relativize, effective) = self.manager.origin_information()
|
||||
if absolute is None and self.version.origin is not None:
|
||||
# No origin has been committed yet, but we've learned one as part of
|
||||
# this txn. Use it.
|
||||
absolute = self.version.origin
|
||||
if relativize:
|
||||
effective = dns.name.empty
|
||||
else:
|
||||
effective = absolute
|
||||
return (absolute, relativize, effective)
|
||||
|
||||
|
||||
def from_text(text, origin=None, rdclass=dns.rdataclass.IN,
|
||||
relativize=True, zone_factory=Zone, filename=None,
|
||||
|
|
|
@ -11,7 +11,7 @@ cheroot==8.6.0
|
|||
cherrypy==18.6.1
|
||||
cloudinary==1.29.0
|
||||
distro==1.7.0
|
||||
dnspython==2.2.0
|
||||
dnspython==2.2.1
|
||||
facebook-sdk==3.1.0
|
||||
future==0.18.2
|
||||
gntp==1.0.3
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue