Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-dnspython for
openSUSE:Factory checked in at 2022-03-24 22:56:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-dnspython (Old)
and /work/SRC/openSUSE:Factory/.python-dnspython.new.1900 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-dnspython"
Thu Mar 24 22:56:49 2022 rev:33 rq:963789 version:2.2.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-dnspython/python-dnspython.changes
2022-02-13 19:50:55.686194377 +0100
+++
/work/SRC/openSUSE:Factory/.python-dnspython.new.1900/python-dnspython.changes
2022-03-24 22:56:52.984185233 +0100
@@ -1,0 +2,18 @@
+Mon Mar 14 21:04:18 UTC 2022 - Sebastian Wagner <[email protected]>
+
+- Update to version 2.2.1:
+ * dns.zone.from_text failed if relativize was False and an origin was
+ specified in the parameters.
+ * A number of types permitted an empty "rest of the rdata".
+ * L32, L64, LP, and NID were missing from dns/rdtypes/ANY/__init__.py
+ * The type definition for dns.resolver.resolve_address() was incorrect.
+ * dns/win32util.py erroneously had the executable bit set.
+ * The type definition for a number of asynchronous query routines was
+ missing the default of None for the backend parameter.
+ * dns/tsigkeyring.py didn't import dns.tsig.
+ * A number of rdata types that have a "rest of the line" behavior for
+ the last field of the rdata erroneously permitted an empty string.
+ * Timeout intervals are no longer reported with absurd precision in
+ exception text.
+
+-------------------------------------------------------------------
Old:
----
dnspython-2.2.0.tar.gz
New:
----
dnspython-2.2.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-dnspython.spec ++++++
--- /var/tmp/diff_new_pack.OrfpJA/_old 2022-03-24 22:56:53.540185780 +0100
+++ /var/tmp/diff_new_pack.OrfpJA/_new 2022-03-24 22:56:53.544185784 +0100
@@ -28,7 +28,7 @@
%{?!python_module:%define python_module() python3-%{**}}
%define skip_python2 1
Name: python-dnspython%{psuffix}
-Version: 2.2.0
+Version: 2.2.1
Release: 0
Summary: A DNS toolkit for Python
License: ISC
++++++ dnspython-2.2.0.tar.gz -> dnspython-2.2.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/PKG-INFO new/dnspython-2.2.1/PKG-INFO
--- old/dnspython-2.2.0/PKG-INFO 2022-01-18 14:25:28.352968000 +0100
+++ new/dnspython-2.2.1/PKG-INFO 2022-03-07 00:23:06.537618900 +0100
@@ -1,7 +1,8 @@
Metadata-Version: 2.1
Name: dnspython
-Version: 2.2.0
+Version: 2.2.1
Summary: DNS toolkit
+Home-page: https://www.dnspython.org
License: ISC
Author: Bob Halley
Author-email: [email protected]
@@ -29,3 +30,92 @@
Requires-Dist: sniffio (>=1.1,<2.0); extra == "curio"
Requires-Dist: trio (>=0.14,<0.20); extra == "trio"
Requires-Dist: wmi (>=1.5.1,<2.0.0); extra == "wmi"
+Project-URL: Bug Tracker, https://github.com/rthalley/dnspython/issues
+Project-URL: Documentation, https://dnspython.readthedocs.io/en/stable/
+Project-URL: Repository, https://github.com/rthalley/dnspython.git
+Description-Content-Type: text/markdown
+
+# dnspython
+
+[](https://github.com/rthalley/dnspython/actions/)
+[](https://dnspython.readthedocs.io/en/latest/?badge=latest)
+[](https://badge.fury.io/py/dnspython)
+[](https://opensource.org/licenses/ISC)
+
+## INTRODUCTION
+
+dnspython is a DNS toolkit for Python. It supports almost all record types. It
+can be used for queries, zone transfers, and dynamic updates. It supports TSIG
+authenticated messages and EDNS0.
+
+dnspython provides both high and low level access to DNS. The high level
classes
+perform queries for data of a given name, type, and class, and return an answer
+set. The low level classes allow direct manipulation of DNS zones, messages,
+names, and records.
+
+To see a few of the ways dnspython can be used, look in the `examples/`
+directory.
+
+dnspython is a utility to work with DNS, `/etc/hosts` is thus not used. For
+simple forward DNS lookups, it's better to use `socket.getaddrinfo()` or
+`socket.gethostbyname()`.
+
+dnspython originated at Nominum where it was developed
+to facilitate the testing of DNS software.
+
+## ABOUT THIS RELEASE
+
+This is dnspython 2.2.1
+Please read
+[What's New](https://dnspython.readthedocs.io/en/stable/whatsnew.html) for
+information about the changes in this release.
+
+## INSTALLATION
+
+* Many distributions have dnspython packaged for you, so you should
+ check there first.
+* If you have pip installed, you can do `pip install dnspython`
+* If not just download the source file and unzip it, then run
+ `sudo python setup.py install`
+* To install the latest from the master branch, run `pip install
git+https://github.com/rthalley/dnspython.git`
+
+Dnspython's default installation does not depend on any modules other than
+those in the Python standard library. To use some features, additional modules
+must be installed. For convenience, pip options are defined for the
requirements.
+
+If you want to use DNS-over-HTTPS, run
+`pip install dnspython[doh]`.
+
+If you want to use DNSSEC functionality, run
+`pip install dnspython[dnssec]`.
+
+If you want to use internationalized domain names (IDNA)
+functionality, you must run
+`pip install dnspython[idna]`
+
+If you want to use the Trio asynchronous I/O package, run
+`pip install dnspython[trio]`.
+
+If you want to use the Curio asynchronous I/O package, run
+`pip install dnspython[curio]`.
+
+If you want to use WMI on Windows to determine the active DNS settings
+instead of the default registry scanning method, run
+`pip install dnspython[wmi]`.
+
+Note that you can install any combination of the above, e.g.:
+`pip install dnspython[doh,dnssec,idna]`
+
+### Notices
+
+Python 2.x support ended with the release of 1.16.0. Dnspython 2.0.0 through
+2.2.x support Python 3.6 and later. As of dnspython 2.3.0, the minimum
+supported Python version will be 3.7. We plan to align future support with the
+lifetime of the Python 3 versions.
+
+Documentation has moved to
+[dnspython.readthedocs.io](https://dnspython.readthedocs.io).
+
+The ChangeLog has been discontinued. Please see the github project page
+and git history for detailed change information.
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/README.md
new/dnspython-2.2.1/README.md
--- old/dnspython-2.2.0/README.md 2022-01-18 14:24:24.957959000 +0100
+++ new/dnspython-2.2.1/README.md 2022-03-07 00:22:16.665122300 +0100
@@ -28,7 +28,7 @@
## ABOUT THIS RELEASE
-This is dnspython 2.2.0.
+This is dnspython 2.2.1
Please read
[What's New](https://dnspython.readthedocs.io/en/stable/whatsnew.html) for
information about the changes in this release.
@@ -44,8 +44,7 @@
Dnspython's default installation does not depend on any modules other than
those in the Python standard library. To use some features, additional modules
-must be installed. For convenience, pip options are defined for the
-requirements.
+must be installed. For convenience, pip options are defined for the
requirements.
If you want to use DNS-over-HTTPS, run
`pip install dnspython[doh]`.
@@ -72,8 +71,10 @@
### Notices
-Python 2.x support ended with the release of 1.16.0. dnspython 2.0.0 and
-later only support Python 3.6 and later.
+Python 2.x support ended with the release of 1.16.0. Dnspython 2.0.0 through
+2.2.x support Python 3.6 and later. As of dnspython 2.3.0, the minimum
+supported Python version will be 3.7. We plan to align future support with the
+lifetime of the Python 3 versions.
Documentation has moved to
[dnspython.readthedocs.io](https://dnspython.readthedocs.io).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/_immutable_attr.py
new/dnspython-2.2.1/dns/_immutable_attr.py
--- old/dnspython-2.2.0/dns/_immutable_attr.py 2022-01-18 14:24:20.383284300
+0100
+++ new/dnspython-2.2.1/dns/_immutable_attr.py 2022-03-07 00:22:16.666126300
+0100
@@ -49,7 +49,7 @@
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)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/asyncquery.pyi
new/dnspython-2.2.1/dns/asyncquery.pyi
--- old/dnspython-2.2.0/dns/asyncquery.pyi 2022-01-18 14:24:20.383865400
+0100
+++ new/dnspython-2.2.1/dns/asyncquery.pyi 2022-03-07 00:22:16.667009800
+0100
@@ -19,7 +19,7 @@
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 @@
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 @@
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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/dnssec.py
new/dnspython-2.2.1/dns/dnssec.py
--- old/dnspython-2.2.0/dns/dnssec.py 2022-01-18 14:24:20.384198000 +0100
+++ new/dnspython-2.2.1/dns/dnssec.py 2022-03-07 00:22:16.667302400 +0100
@@ -108,7 +108,7 @@
return total & 0xffff
class DSDigest(dns.enum.IntEnum):
- """DNSSEC Delgation Signer Digest Algorithm"""
+ """DNSSEC Delegation Signer Digest Algorithm"""
SHA1 = 1
SHA256 = 2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/exception.py
new/dnspython-2.2.1/dns/exception.py
--- old/dnspython-2.2.0/dns/exception.py 2022-01-18 14:24:20.384895600
+0100
+++ new/dnspython-2.2.1/dns/exception.py 2022-03-07 00:22:16.668151900
+0100
@@ -125,7 +125,7 @@
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:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/exception.pyi
new/dnspython-2.2.1/dns/exception.pyi
--- old/dnspython-2.2.0/dns/exception.pyi 2022-01-18 14:24:20.384949700
+0100
+++ new/dnspython-2.2.1/dns/exception.pyi 2022-03-07 00:22:16.668414800
+0100
@@ -8,3 +8,5 @@
class SyntaxError(DNSException): ...
class FormError(DNSException): ...
class Timeout(DNSException): ...
+class TooBig(DNSException): ...
+class UnexpectedEnd(SyntaxError): ...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/message.py
new/dnspython-2.2.1/dns/message.py
--- old/dnspython-2.2.0/dns/message.py 2022-01-18 14:24:20.385894500 +0100
+++ new/dnspython-2.2.1/dns/message.py 2022-03-07 00:22:16.669144400 +0100
@@ -509,7 +509,7 @@
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.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/query.py
new/dnspython-2.2.1/dns/query.py
--- old/dnspython-2.2.0/dns/query.py 2022-01-18 14:24:20.386944500 +0100
+++ new/dnspython-2.2.1/dns/query.py 2022-03-07 00:22:16.670580600 +0100
@@ -1085,10 +1085,10 @@
*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.
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/rdata.py
new/dnspython-2.2.1/dns/rdata.py
--- old/dnspython-2.2.0/dns/rdata.py 2022-01-18 14:24:20.387400200 +0100
+++ new/dnspython-2.2.1/dns/rdata.py 2022-03-07 00:22:16.671085400 +0100
@@ -557,7 +557,7 @@
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(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/rdataset.py
new/dnspython-2.2.1/dns/rdataset.py
--- old/dnspython-2.2.0/dns/rdataset.py 2022-01-18 14:24:20.387832200 +0100
+++ new/dnspython-2.2.1/dns/rdataset.py 2022-03-07 00:22:16.671743600 +0100
@@ -312,7 +312,7 @@
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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/rdtypes/ANY/TKEY.py
new/dnspython-2.2.1/dns/rdtypes/ANY/TKEY.py
--- old/dnspython-2.2.0/dns/rdtypes/ANY/TKEY.py 2022-01-18 14:24:20.394349300
+0100
+++ new/dnspython-2.2.1/dns/rdtypes/ANY/TKEY.py 2022-03-07 00:22:16.677906800
+0100
@@ -63,7 +63,7 @@
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,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/rdtypes/ANY/__init__.py
new/dnspython-2.2.1/dns/rdtypes/ANY/__init__.py
--- old/dnspython-2.2.0/dns/rdtypes/ANY/__init__.py 2022-01-18
14:24:20.395202600 +0100
+++ new/dnspython-2.2.1/dns/rdtypes/ANY/__init__.py 2022-03-07
00:22:16.678971300 +0100
@@ -37,8 +37,12 @@
'HINFO',
'HIP',
'ISDN',
+ 'L32',
+ 'L64',
'LOC',
+ 'LP',
'MX',
+ 'NID',
'NINFO',
'NS',
'NSEC',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/rdtypes/svcbbase.py
new/dnspython-2.2.1/dns/rdtypes/svcbbase.py
--- old/dnspython-2.2.0/dns/rdtypes/svcbbase.py 2022-01-18 14:24:20.397728200
+0100
+++ new/dnspython-2.2.1/dns/rdtypes/svcbbase.py 2022-03-07 00:22:16.682216000
+0100
@@ -435,7 +435,7 @@
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:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/rdtypes/txtbase.pyi
new/dnspython-2.2.1/dns/rdtypes/txtbase.pyi
--- old/dnspython-2.2.0/dns/rdtypes/txtbase.pyi 2022-01-18 14:24:20.398018800
+0100
+++ new/dnspython-2.2.1/dns/rdtypes/txtbase.pyi 2022-03-07 00:22:16.682589000
+0100
@@ -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):
...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/renderer.py
new/dnspython-2.2.1/dns/renderer.py
--- old/dnspython-2.2.0/dns/renderer.py 2022-01-18 14:24:20.398287000 +0100
+++ new/dnspython-2.2.1/dns/renderer.py 2022-03-07 00:22:16.682924500 +0100
@@ -49,8 +49,8 @@
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()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/resolver.py
new/dnspython-2.2.1/dns/resolver.py
--- old/dnspython-2.2.0/dns/resolver.py 2022-01-18 14:24:20.398558900 +0100
+++ new/dnspython-2.2.1/dns/resolver.py 2022-03-07 00:22:16.683373000 +0100
@@ -145,7 +145,7 @@
"""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):
@@ -1018,7 +1018,7 @@
*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.
+ before timing out.
*search*, a ``bool`` or ``None``, determines whether the
search list configured in the system's resolver configuration
@@ -1101,7 +1101,7 @@
"""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 @@
"""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 @@
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``.
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/resolver.pyi
new/dnspython-2.2.1/dns/resolver.pyi
--- old/dnspython-2.2.0/dns/resolver.pyi 2022-01-18 14:24:20.398638500
+0100
+++ new/dnspython-2.2.1/dns/resolver.pyi 2022-03-07 00:22:16.683576600
+0100
@@ -25,7 +25,7 @@
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 @@
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:
+ ...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/tokenizer.py
new/dnspython-2.2.1/dns/tokenizer.py
--- old/dnspython-2.2.0/dns/tokenizer.py 2022-01-18 14:24:20.399275000
+0100
+++ new/dnspython-2.2.1/dns/tokenizer.py 2022-03-07 00:22:16.684173800
+0100
@@ -600,9 +600,12 @@
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 @@
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):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/transaction.py
new/dnspython-2.2.1/dns/transaction.py
--- old/dnspython-2.2.0/dns/transaction.py 2022-01-18 14:24:20.399437200
+0100
+++ new/dnspython-2.2.1/dns/transaction.py 2022-03-07 00:22:16.684280900
+0100
@@ -389,7 +389,7 @@
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 @@
*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 @@
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()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/tsigkeyring.py
new/dnspython-2.2.1/dns/tsigkeyring.py
--- old/dnspython-2.2.0/dns/tsigkeyring.py 2022-01-18 14:24:20.399701600
+0100
+++ new/dnspython-2.2.1/dns/tsigkeyring.py 2022-03-07 00:22:16.684573200
+0100
@@ -20,6 +20,7 @@
import base64
import dns.name
+import dns.tsig
def from_text(textring):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/version.py
new/dnspython-2.2.1/dns/version.py
--- old/dnspython-2.2.0/dns/version.py 2022-01-18 14:24:24.958204300 +0100
+++ new/dnspython-2.2.1/dns/version.py 2022-03-07 00:22:16.685033600 +0100
@@ -22,7 +22,7 @@
#: MINOR
MINOR = 2
#: MICRO
-MICRO = 0
+MICRO = 1
#: RELEASELEVEL
RELEASELEVEL = 0x0f
#: SERIAL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/versioned.py
new/dnspython-2.2.1/dns/versioned.py
--- old/dnspython-2.2.0/dns/versioned.py 2022-01-18 14:24:20.400241000
+0100
+++ new/dnspython-2.2.1/dns/versioned.py 2022-03-07 00:22:16.685115300
+0100
@@ -131,7 +131,7 @@
#
# 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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/dns/zone.py
new/dnspython-2.2.1/dns/zone.py
--- old/dnspython-2.2.0/dns/zone.py 2022-01-18 14:24:20.400757800 +0100
+++ new/dnspython-2.2.1/dns/zone.py 2022-03-07 00:22:16.685707000 +0100
@@ -183,6 +183,11 @@
"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 @@
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 @@
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,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/pyproject.toml
new/dnspython-2.2.1/pyproject.toml
--- old/dnspython-2.2.0/pyproject.toml 2022-01-18 14:24:24.958942700 +0100
+++ new/dnspython-2.2.1/pyproject.toml 2022-03-07 00:22:16.695105000 +0100
@@ -1,6 +1,6 @@
[tool.poetry]
name = "dnspython"
-version = "2.2.0"
+version = "2.2.1"
description = "DNS toolkit"
authors = ["Bob Halley <[email protected]>"]
license = "ISC"
@@ -27,6 +27,13 @@
"**/.DS_Store",
"**/__pycache__/**",
]
+readme = "README.md"
+homepage = "https://www.dnspython.org"
+repository = "https://github.com/rthalley/dnspython.git"
+documentation = "https://dnspython.readthedocs.io/en/stable/"
+
+[tool.poetry.urls]
+"Bug Tracker" = "https://github.com/rthalley/dnspython/issues"
[tool.poetry.dependencies]
python = "^3.6"
@@ -42,8 +49,7 @@
wmi = {version="^1.5.1", optional=true}
[tool.poetry.dev-dependencies]
-mypy = "^0.920"
-pytest = ">=5.4.1,<7"
+pytest = ">=5.4.1,<8"
pytest-cov = "^3.0.0"
flake8 = "^4.0.1"
sphinx = "^4.0.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/setup.cfg
new/dnspython-2.2.1/setup.cfg
--- old/dnspython-2.2.0/setup.cfg 2022-01-18 14:24:20.406987700 +0100
+++ new/dnspython-2.2.1/setup.cfg 2022-03-07 00:22:16.695211400 +0100
@@ -6,6 +6,10 @@
license_file = LICENSE
description = DNS toolkit
url = http://www.dnspython.org
+project_urls =
+ Bug Tracker = https://github.com/rthalley/dnspython/issues
+ Documentation = https://dnspython.readthedocs.io/en/stable/
+ Source Code = https://github.com/rthalley/dnspython
long_description = dnspython is a DNS toolkit for Python. It supports almost
all
record types. It can be used for queries, zone transfers, and dynamic
updates. It supports TSIG authenticated messages and EDNS0.
@@ -48,7 +52,7 @@
DOH = httpx>=0.21.1; h2>=4.1.0; requests; requests-toolbelt
IDNA = idna>=2.1
DNSSEC = cryptography>=2.6
-trio = trio>=0.14.0; sniffio>=1.1
+trio = trio>=0.14.0
curio = curio>=1.2; sniffio>=1.1
wmi = wmi>=1.5.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/setup.py new/dnspython-2.2.1/setup.py
--- old/dnspython-2.2.0/setup.py 2022-01-18 14:25:28.352760000 +0100
+++ new/dnspython-2.2.1/setup.py 2022-03-07 00:23:06.537358000 +0100
@@ -18,14 +18,14 @@
setup_kwargs = {
'name': 'dnspython',
- 'version': '2.2.0',
+ 'version': '2.2.1',
'description': 'DNS toolkit',
- 'long_description': None,
+ 'long_description': "# dnspython\n\n[](https://github.com/rthalley/dnspython/actions/)\n[](https://dnspython.readthedocs.io/en/latest/?badge=latest)\n[](https://badge.fury.io/py/dnspython)\n[](https://opensource.org/licenses/ISC)\n\n##
INTRODUCTION\n\ndnspython is a DNS toolkit for Python. It supports almost all
record types. It\ncan be used for queries, zone transfers, and dynamic updates.
It supports TSIG\nauthenticated messages and EDNS0.\n\ndnspython provides both
high and low level access to DNS. The high level classes\nperform queries for
data of a given name, type, and class, and return an answer\nset. The low level
classes allow direct manipulation of DNS zon
es, messages,\nnames, and records.\n\nTo see a few of the ways dnspython can
be used, look in the `examples/`\ndirectory.\n\ndnspython is a utility to work
with DNS, `/etc/hosts` is thus not used. For\nsimple forward DNS lookups, it's
better to use `socket.getaddrinfo()` or\n`socket.gethostbyname()`.\n\ndnspython
originated at Nominum where it was developed\nto facilitate the testing of DNS
software.\n\n## ABOUT THIS RELEASE\n\nThis is dnspython 2.2.1\nPlease
read\n[What's New](https://dnspython.readthedocs.io/en/stable/whatsnew.html)
for\ninformation about the changes in this release.\n\n## INSTALLATION\n\n*
Many distributions have dnspython packaged for you, so you should\n check
there first.\n* If you have pip installed, you can do `pip install
dnspython`\n* If not just download the source file and unzip it, then run\n
`sudo python setup.py install`\n* To install the latest from the master branch,
run `pip install git+https://github.com/rthalley/dnspython.git`\n\nDnspython's
de
fault installation does not depend on any modules other than\nthose in the
Python standard library. To use some features, additional modules\nmust be
installed. For convenience, pip options are defined for the
requirements.\n\nIf you want to use DNS-over-HTTPS, run\n`pip install
dnspython[doh]`.\n\nIf you want to use DNSSEC functionality, run\n`pip install
dnspython[dnssec]`.\n\nIf you want to use internationalized domain names
(IDNA)\nfunctionality, you must run\n`pip install dnspython[idna]`\n\nIf you
want to use the Trio asynchronous I/O package, run\n`pip install
dnspython[trio]`.\n\nIf you want to use the Curio asynchronous I/O package,
run\n`pip install dnspython[curio]`.\n\nIf you want to use WMI on Windows to
determine the active DNS settings\ninstead of the default registry scanning
method, run\n`pip install dnspython[wmi]`.\n\nNote that you can install any
combination of the above, e.g.:\n`pip install
dnspython[doh,dnssec,idna]`\n\n### Notices\n\nPython 2.x support ended
with the release of 1.16.0. Dnspython 2.0.0 through\n2.2.x support Python
3.6 and later. As of dnspython 2.3.0, the minimum\nsupported Python version
will be 3.7. We plan to align future support with the\nlifetime of the Python
3 versions.\n\nDocumentation has moved
to\n[dnspython.readthedocs.io](https://dnspython.readthedocs.io).\n\nThe
ChangeLog has been discontinued. Please see the github project page\nand git
history for detailed change information.\n",
'author': 'Bob Halley',
'author_email': '[email protected]',
'maintainer': None,
'maintainer_email': None,
- 'url': None,
+ 'url': 'https://www.dnspython.org',
'packages': packages,
'package_data': package_data,
'extras_require': extras_require,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/tests/nanonameserver.py
new/dnspython-2.2.1/tests/nanonameserver.py
--- old/dnspython-2.2.0/tests/nanonameserver.py 2022-01-18 14:24:20.408140400
+0100
+++ new/dnspython-2.2.1/tests/nanonameserver.py 2022-03-07 00:22:16.697165500
+0100
@@ -215,7 +215,7 @@
except Exception:
# We could try to make a response from only the header
# if dnspython had a header_only option to
- # from_wire(), or if we truncated wire outselves, but
+ # from_wire(), or if we truncated wire ourselves, but
# for now we just drop.
return
try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/tests/test_dnssec.py
new/dnspython-2.2.1/tests/test_dnssec.py
--- old/dnspython-2.2.0/tests/test_dnssec.py 2022-01-18 14:24:20.409108200
+0100
+++ new/dnspython-2.2.1/tests/test_dnssec.py 2022-03-07 00:22:16.698422700
+0100
@@ -533,7 +533,8 @@
dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CDS, f'0 0 0 00')
test_records = {
- 'digest length inconsistent with digest type': ['0 0 0', '0 0 0
0000'],
+ 'expecting another identifier': ['0 0 0', '0 0 0 '],
+ 'digest length inconsistent with digest type': ['0 0 0 0000'],
'Odd-length string': ['0 0 0 0', '0 0 0 000'],
}
for msg, records in test_records.items():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/tests/test_message.py
new/dnspython-2.2.1/tests/test_message.py
--- old/dnspython-2.2.0/tests/test_message.py 2022-01-18 14:24:20.410071800
+0100
+++ new/dnspython-2.2.1/tests/test_message.py 2022-03-07 00:22:16.699801000
+0100
@@ -468,7 +468,7 @@
self.assertEqual(te.message(), q)
def test_bad_opt(self):
- # Not in addtional
+ # Not in additional
q = dns.message.Message(id=1)
opt = dns.rdtypes.ANY.OPT.OPT(1200, dns.rdatatype.OPT, ())
rrs = dns.rrset.from_rdata(dns.name.root, 0, opt)
@@ -494,7 +494,7 @@
def test_bad_tsig(self):
keyname = dns.name.from_text('key.')
- # Not in addtional
+ # Not in additional
q = dns.message.Message(id=1)
tsig = dns.rdtypes.ANY.TSIG.TSIG(dns.rdataclass.ANY,
dns.rdatatype.TSIG,
dns.tsig.HMAC_SHA256, 0, 300, b'1234',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/tests/test_rdata.py
new/dnspython-2.2.1/tests/test_rdata.py
--- old/dnspython-2.2.0/tests/test_rdata.py 2022-01-18 14:24:20.411121100
+0100
+++ new/dnspython-2.2.1/tests/test_rdata.py 2022-03-07 00:22:16.700973500
+0100
@@ -539,6 +539,9 @@
with self.assertRaises(dns.exception.SyntaxError):
dns.rdata.from_text('in', 'type45678', '\\# 6 000a03666f6f00')
+ def test_empty_generic(self):
+ dns.rdata.from_text('in', 'type45678', r'\# 0')
+
def test_covered_repr(self):
text = 'NSEC 1 3 3600 20190101000000 20030101000000 ' + \
'2143 foo Ym9ndXM='
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/tests/test_tokenizer.py
new/dnspython-2.2.1/tests/test_tokenizer.py
--- old/dnspython-2.2.0/tests/test_tokenizer.py 2022-01-18 14:24:20.412985600
+0100
+++ new/dnspython-2.2.1/tests/test_tokenizer.py 2022-03-07 00:22:16.703254500
+0100
@@ -325,7 +325,7 @@
def testBadConcatenateRemaining(self):
with self.assertRaises(dns.exception.SyntaxError):
- tok = dns.tokenizer.Tokenizer('a b "not an identifer" c')
+ tok = dns.tokenizer.Tokenizer('a b "not an identifier" c')
tok.concatenate_remaining_identifiers()
def testStdinFilename(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/dnspython-2.2.0/tests/test_zone.py
new/dnspython-2.2.1/tests/test_zone.py
--- old/dnspython-2.2.0/tests/test_zone.py 2022-01-18 14:24:20.414135200
+0100
+++ new/dnspython-2.2.1/tests/test_zone.py 2022-03-07 00:22:16.704584000
+0100
@@ -499,6 +499,13 @@
rds = z.get_rdataset('@', 'loc')
self.assertTrue(rds is None)
+ def testGetRdatasetWithRelativeNameFromAbsoluteZone(self):
+ z = dns.zone.from_text(example_text, 'example.', relativize=False)
+ rds = z.get_rdataset(dns.name.empty, 'soa')
+ self.assertIsNotNone(rds)
+ exrds = dns.rdataset.from_text('IN', 'SOA', 300, 'foo.example.
bar.example. 1 2 3 4 5')
+ self.assertEqual(rds, exrds)
+
def testGetRRset1(self):
z = dns.zone.from_text(example_text, 'example.', relativize=True)
rrs = z.get_rrset('@', 'soa')
@@ -801,7 +808,7 @@
self.assertEqual(rrs[0].target, n2008)
def testZoneMiscCases(self):
- # test that leading whitespace folllowed by EOL is treated like
+ # test that leading whitespace followed by EOL is treated like
# a blank line, and that out-of-zone names are dropped.
z1 = dns.zone.from_text(misc_cases_input, 'example.')
z2 = dns.zone.from_text(misc_cases_expected, 'example.')
@@ -1012,6 +1019,20 @@
rds = txn.get('example.', 'soa')
self.assertEqual(rds[0].serial, 1)
+ def testNoRelativizeReaderOriginInText(self):
+ z = dns.zone.from_text(example_text, relativize=False,
+ zone_factory=dns.versioned.Zone)
+ with z.reader(serial=1) as txn:
+ rds = txn.get('example.', 'soa')
+ self.assertEqual(rds[0].serial, 1)
+
+ def testNoRelativizeReaderAbsoluteGet(self):
+ z = dns.zone.from_text(example_text, 'example.', relativize=False,
+ zone_factory=dns.versioned.Zone)
+ with z.reader(serial=1) as txn:
+ rds = txn.get(dns.name.empty, 'soa')
+ self.assertEqual(rds[0].serial, 1)
+
def testCnameAndOtherDataAddOther(self):
z = dns.zone.from_text(example_cname, 'example.', relativize=True,
zone_factory=dns.versioned.Zone)