[Python-modules-commits] [dnspython] 02/07: Import dnspython_1.15.0.orig.tar.gz
Scott Kitterman
kitterman at moszumanska.debian.org
Mon Oct 24 12:09:01 UTC 2016
This is an automated email from the git hooks/post-receive script.
kitterman pushed a commit to branch master
in repository dnspython.
commit 131bfc40a93a1cd64c3a1bccbe3391608733a8dd
Author: Scott Kitterman <scott at kitterman.com>
Date: Mon Oct 24 07:25:24 2016 -0400
Import dnspython_1.15.0.orig.tar.gz
---
ChangeLog | 23 ++
LICENSE | 2 +
PKG-INFO | 4 +-
README.md | 612 ------------------------------------
dns/_compat.py | 38 ++-
dns/e164.py | 9 +-
dns/entropy.py | 34 +-
dns/exception.py | 12 +-
dns/grange.py | 6 +-
dns/hash.py | 1 -
dns/inet.py | 10 +-
dns/ipv6.py | 4 +-
dns/message.py | 9 +-
dns/name.py | 223 +++++++++++--
dns/opcode.py | 4 +-
dns/query.py | 13 +-
dns/rdata.py | 18 +-
dns/rdatatype.py | 2 +
dns/{hash.py => rdtypes/ANY/AVC.py} | 19 +-
dns/rdtypes/ANY/CAA.py | 1 -
dns/rdtypes/ANY/CERT.py | 1 -
dns/rdtypes/ANY/HINFO.py | 1 -
dns/rdtypes/ANY/HIP.py | 2 +-
dns/rdtypes/ANY/ISDN.py | 1 -
dns/rdtypes/ANY/LOC.py | 10 +-
dns/rdtypes/ANY/NSEC3.py | 1 -
dns/rdtypes/ANY/NSEC3PARAM.py | 1 -
dns/rdtypes/ANY/SSHFP.py | 1 -
dns/rdtypes/ANY/TLSA.py | 1 -
dns/rdtypes/ANY/URI.py | 1 -
dns/rdtypes/ANY/X25.py | 1 -
dns/rdtypes/IN/A.py | 1 -
dns/rdtypes/IN/AAAA.py | 1 -
dns/rdtypes/IN/APL.py | 3 +-
dns/rdtypes/IN/DHCID.py | 1 -
dns/rdtypes/IN/IPSECKEY.py | 1 -
dns/rdtypes/IN/NSAP.py | 1 -
dns/rdtypes/IN/WKS.py | 1 -
dns/rdtypes/dsbase.py | 1 -
dns/rdtypes/euibase.py | 4 +-
dns/rdtypes/txtbase.py | 1 -
dns/renderer.py | 1 -
dns/resolver.py | 156 ++++++---
dns/reversename.py | 2 +-
dns/rrset.py | 9 +-
dns/set.py | 6 -
dns/tokenizer.py | 4 +-
dns/tsig.py | 7 +-
dns/tsigkeyring.py | 8 +-
dns/version.py | 2 +-
dns/wiredata.py | 59 ++--
dns/zone.py | 61 ++--
dnspython.egg-info/PKG-INFO | 4 +-
dnspython.egg-info/SOURCES.txt | 3 +-
examples/e164.py | 6 +-
examples/mx.py | 4 +-
examples/name.py | 14 +-
examples/reverse.py | 6 +-
examples/reverse_name.py | 6 +-
examples/xfr.py | 4 +-
examples/zonediff.py | 116 ++++---
setup.py | 2 +-
tests/example | 1 +
tests/example1.good | 1 +
tests/example2.good | 1 +
tests/example3.good | 1 +
tests/test_bugs.py | 4 +-
tests/test_dnssec.py | 145 +++++----
tests/test_exceptions.py | 1 -
tests/test_flags.py | 6 +-
tests/test_generate.py | 7 +-
tests/test_grange.py | 7 +-
tests/test_message.py | 9 +-
tests/test_name.py | 162 +++++++---
tests/test_namedict.py | 8 +-
tests/test_ntoaaton.py | 58 ++--
tests/test_rdtypeandclass.py | 24 +-
tests/test_rdtypeanyeui.py | 2 +-
tests/test_resolver.py | 221 ++++++++++++-
tests/test_rrset.py | 2 +-
tests/test_set.py | 2 +-
tests/test_tokenizer.py | 15 +-
tests/test_update.py | 8 +-
tests/test_wiredata.py | 126 ++++++++
tests/test_zone.py | 92 ++++--
tests/utest.py | 2 +-
86 files changed, 1340 insertions(+), 1125 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 6768880..15c356a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+2016-09-29 Bob Halley <halley at dnspython.org>
+
+ * IDNA 2008 support is now available if the "idna" module has been
+ installed and IDNA 2008 is requested. The default IDNA behavior
+ is still IDNA 2003. The new IDNA codec mechanism is currently
+ only useful for direct calls to dns.name.from_text() or
+ dns.name.from_unicode(), but in future releases it will be
+ deployed throughout dnspython, e.g. so that you can read a
+ masterfile with an IDNA 2008 codec in force.
+
+ * By default, dns.name.to_unicode() is not strict about which
+ version of IDNA the input complies with. Strictness can be
+ requested by using one of the strict IDNA codecs.
+
+ * Add AVC RR support.
+
+ * Some problems with newlines in various output modes have been
+ addressed.
+
+ * dns.name.to_text() now returns text and not bytes on Python 3.x
+
+ * More miscellaneous fixes for the Python 2/3 codeline merge.
+
2016-05-27 Bob Halley <halley at dnspython.org>
* (Version 1.14.0 released)
diff --git a/LICENSE b/LICENSE
index 633c18c..2896ca9 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,3 +1,5 @@
+ISC License
+
Copyright (C) 2001-2003 Nominum, Inc.
Permission to use, copy, modify, and distribute this software and its
diff --git a/PKG-INFO b/PKG-INFO
index 373643b..69ce630 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: dnspython
-Version: 1.14.0
+Version: 1.15.0
Summary: DNS toolkit
Home-page: http://www.dnspython.org
Author: Bob Halley
Author-email: halley at dnspython.org
License: BSD-like
-Download-URL: http://www.dnspython.org/kits/1.14.0/dnspython-1.14.0.tar.gz
+Download-URL: http://www.dnspython.org/kits/1.15.0/dnspython-1.15.0.tar.gz
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.
diff --git a/README.md b/README.md
deleted file mode 100644
index 99b92cb..0000000
--- a/README.md
+++ /dev/null
@@ -1,612 +0,0 @@
-dnspython [](https://travis-ci.org/rthalley/dnspython)
-
-## 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 originated at Nominum where it was developed to facilitate
-the testing of DNS software. Nominum has generously allowed it to be
-open sourced under a BSD-style license, and helps support its future
-development by continuing to employ the author :).
-
-## INSTALLATION
-- If you have pip installed, you can do this
-`pip install dnspython`
-- If not just download the source file and unzip it, then run this
-`sudo python setup.py install`
-
-## ABOUT THIS RELEASE
-
-This is dnspython 1.14.0
-
-New since 1.13.0:
-
- CSYNC RRs are now supported.
-
- dns/message.py (make_query): Setting any value which implies
- EDNS will turn on EDNS if 'use_edns' has not been specified.
-
-Bugs fixed since 1.13.0:
-
- TSIG signature algorithm setting was broken by the Python 2
- and Python 3 code line merge.
-
- A bug in the LOC RR destroyed N/S and E/W distinctions within
- a degree of the equator or prime merdian respectively.
-
- Misc. fixes to deal with fallout from the Python 2 & 3 merge.
- [issue #156], [issue #157], [issue #158], [issue #159],
- [issue #160].
-
- Running with python optimization on caused issues when
- stripped docstrings were referenced. [issue #154]
-
- dns.zone.from_text() erroneously required the zone to be provided.
- [issue #153]
-
-New since 1.12.0:
-
- Dnspython now uses a single source for Python 2 and Python 3,
- eliminating the painful merging between the Python 2 and Python 3
- branches. Thank you so much to Arthur Gautier for taking on this
- challenge and making it work! It was a big job!
-
- Support for Python older than 2.6 dropped.
-
- Support for Python older than 3.3 dropped.
-
- Zone origin can be specified as a string.
-
- A rich string representation for all DNSExceptions.
-
- setuptools has replaced distutils
-
- Added support for CAA, CDS, CDNSKEY, EUI48, EUI64, and URI RR
- types.
-
- Names now support the pickle protocol.
-
- Ports can be specified per-nameserver in the stub resolver.
-
-Bugs fixed since 1.12.0:
-
- A number of Unicode name bugs have been fixed.
-
- resolv.conf processing now rejects lines with too few tokens.
-
- NameDicts now keep the max-depth value correct, and update properly.
-
-New since 1.11.1:
-
- Added dns.zone.to_text().
-
- Added support for "options rotate" in /etc/resolv.conf.
-
- dns.rdtypes.ANY.DNSKEY now has helpers functions to convert
- between the numeric form of the flags and a set of
- human-friendly strings
-
- The reverse name of an IPv6 mapped IPv4 address is now in the
- IPv4 reverse namespace.
-
- The test system can now run the tests without requiring
- dnspython to be installed.
-
- Preliminary Elliptic Curve DNSSEC Validation (requires ecdsa module)
-
-Bugs fixed since 1.11.1:
-
- dnspython raised an exception when reading a masterfile starting
- with leading whitespace
-
- dnspython was affected by a python slicing API bug present on
- 64-bit windows.
-
- Unicode escaping was applied at the wrong time.
-
- RRSIG to_text() did not respect the relativize setting.
-
- APL RRs with zero rdlength were rejected.
-
- The tokenizer could put back an unescaped token.
-
- Making a response to a message signed with TSIG was broken.
-
- The IXFR state machine didn't handle long IXFR diffs.
-
-New since 1.11.0:
-
- Nothing
-
-Bugs fixed since 1.11.0:
-
- dns.resolver.Resolver erroneously referred to 'retry_servfail'
- instead of 'self.retry_servfail'.
-
- dns.tsigkeyring.to_text() would fail trying to convert the
- keyname to text.
-
- Multi-message TSIGs were broken for algorithms other than
- HMAC-MD5 because we weren't passing the right digest module to
- the HMAC code.
-
- dns.dnssec._find_candidate_keys() tried to extract the key
- from the wrong variable name.
-
- $GENERATE tests were not backward compatible with python 2.4.
-
-New since 1.10.0:
-
- $GENERATE support
-
- TLSA RR support
-
- Added set_flags() method to dns.resolver.Resolver
-
-Bugs fixed since 1.10.0:
-
- Names with offsets >= 2^14 are no longer added to the compression
- table.
-
- The "::" syntax is not used to shorten a single 16-bit section of
- the text form an IPv6 address.
-
- Caches are now locked.
-
- YXDOMAIN is raised if seen by the resolver.
-
- Empty rdatasets are not printed.
-
- DNSKEY key tags are no longer assumed to be unique.
-
-New since 1.9.4:
-
- Added dns.resolver.LRUCache. In this cache implementation,
- the cache size is limited to a user-specified number of nodes,
- and when adding a new node to a full cache the least-recently
- used node is removed. If you're crawling the web or otherwise
- doing lots of resolutions and you are using a cache, switching
- to the LRUCache is recommended.
-
- dns.resolver.query() will try TCP if a UDP response is
- truncated.
-
- The python socket module's DNS methods can be now be overridden
- with implementations that use dnspython's resolver.
-
- Old DNSSEC types KEY, NXT, and SIG have been removed.
-
- Whitespace is allowed in SSHFP fingerprints.
-
- Origin checking in dns.zone.from_xfr() can be disabled.
-
- Trailing junk checking can be disabled.
-
- A source port can be specified when creating a resolver query.
-
- All EDNS values may now be specified to dns.message.make_query().
-
-Bugs fixed since 1.9.4:
-
- IPv4 and IPv6 address processing is now stricter.
-
- Bounds checking of slices in rdata wire processing is now more
- strict, and bounds errors (e.g. we got less data than was
- expected) now raise dns.exception.FormError rather than
- IndexError.
-
- Specifying a source port without specifying source used to
- have no effect, but now uses the wildcard address and the
- specified port.
-
-New since 1.9.3:
-
- Nothing.
-
-Bugs fixed since 1.9.3:
-
- The rdata _wire_cmp() routine now handles relative names.
-
- The SIG RR implementation was missing 'import struct'.
-
-New since 1.9.2:
-
- A boolean parameter, 'raise_on_no_answer', has been added to
- the query() methods. In no-error, no-data situations, this
- parameter determines whether NoAnswer should be raised or not.
- If True, NoAnswer is raised. If False, then an Answer()
- object with a None rrset will be returned.
-
- Resolver Answer() objects now have a canonical_name field.
-
- Rdata now have a __hash__ method.
-
-Bugs fixed since 1.9.2:
-
- Dnspython was erroneously doing case-insensitive comparisons
- of the names in NSEC and RRSIG RRs.
-
- We now use "is" and not "==" when testing what section an RR
- is in.
-
- The resolver now disallows metaqueries.
-
-New since 1.9.1:
-
- Nothing.
-
-Bugs fixed since 1.9.1:
-
- The dns.dnssec module didn't work at all due to missing
- imports that escaped detection in testing because the test
- suite also did the imports. The third time is the charm!
-
-New since 1.9.0:
-
- Nothing.
-
-Bugs fixed since 1.9.0:
-
- The dns.dnssec module didn't work with DSA due to namespace
- contamination from a "from"-style import.
-
-New since 1.8.0:
-
- dnspython now uses poll() instead of select() when available.
-
- Basic DNSSEC validation can be done using dns.dnsec.validate()
- and dns.dnssec.validate_rrsig() if you have PyCrypto 2.3 or
- later installed. Complete secure resolution is not yet
- available.
-
- Added key_id() to the DNSSEC module, which computes the DNSSEC
- key id of a DNSKEY rdata.
-
- Added make_ds() to the DNSSEC module, which returns the DS RR
- for a given DNSKEY rdata.
-
- dnspython now raises an exception if HMAC-SHA284 or
- HMAC-SHA512 are used with a Python older than 2.5.2. (Older
- Pythons do not compute the correct value.)
-
- Symbolic constants are now available for TSIG algorithm names.
-
-Bugs fixed since 1.8.0
-
- dns.resolver.zone_for_name() didn't handle a query response
- with a CNAME or DNAME correctly in some cases.
-
- When specifying rdata types and classes as text, Unicode
- strings may now be used.
-
- Hashlib compatibility issues have been fixed.
-
- dns.message now imports dns.edns.
-
- The TSIG algorithm value was passed incorrectly to use_tsig()
- in some cases.
-
-New since 1.7.1:
-
- Support for hmac-sha1, hmac-sha224, hmac-sha256, hmac-sha384
- and hmac-sha512 has been contributed by Kevin Chen.
-
- The tokenizer's tokens are now Token objects instead of (type,
- value) tuples.
-
-Bugs fixed since 1.7.1:
-
- Escapes in masterfiles now work correctly. Previously they
- were only working correctly when the text involved was part of
- a domain name.
-
- When constructing a DDNS update, if the present() method was
- used with a single rdata, a zero TTL was not added.
-
- The entropy pool needed locking to be thread safe.
-
- The entropy pool's reading of /dev/random could cause
- dnspython to block.
-
- The entropy pool did buffered reads, potentially consuming more
- randomness than we needed.
-
- The entropy pool did not seed with high quality randomness on
- Windows.
-
- SRV records were compared incorrectly.
-
- In the e164 query function, the resolver parameter was not
- used.
-
-New since 1.7.0:
-
- Nothing
-
-Bugs fixed since 1.7.0:
-
- The 1.7.0 kitting process inadvertently omitted the code for the
- DLV RR.
-
- Negative DDNS prerequisites are now handled correctly.
-
-New since 1.6.0:
-
- Rdatas now have a to_digestable() method, which returns the
- DNSSEC canonical form of the rdata, suitable for use in
- signature computations.
-
- The NSEC3, NSEC3PARAM, DLV, and HIP RR types are now supported.
-
- An entropy module has been added and is used to randomize query ids.
-
- EDNS0 options are now supported.
-
- UDP IXFR is now supported.
-
- The wire format parser now has a 'one_rr_per_rrset' mode, which
- suppresses the usual coalescing of all RRs of a given type into a
- single RRset.
-
- Various helpful DNSSEC-related constants are now defined.
-
- The resolver's query() method now has an optional 'source' parameter,
- allowing the source IP address to be specified.
-
-Bugs fixed since 1.6.0:
-
- On Windows, the resolver set the domain incorrectly.
-
- DS RR parsing only allowed one Base64 chunk.
-
- TSIG validation didn't always use absolute names.
-
- NSEC.to_text() only printed the last window.
-
- We did not canonicalize IPv6 addresses before comparing them; we
- would thus treat equivalent but different textual forms, e.g.
- "1:00::1" and "1::1" as being non-equivalent.
-
- If the peer set a TSIG error, we didn't raise an exception.
-
- Some EDNS bugs in the message code have been fixed (see the ChangeLog
- for details).
-
-New since 1.5.0:
- Added dns.inet.is_multicast().
-
-Bugs fixed since 1.5.0:
-
- If select() raises an exception due to EINTR, we should just
- select() again.
-
- If the queried address is a multicast address, then don't
- check that the address of the response is the same as the
- address queried.
-
- NAPTR comparisons didn't compare the preference field due to a
- typo.
-
- Testing of whether a Windows NIC is enabled now works on Vista
- thanks to code contributed by Paul Marks.
-
-New since 1.4.0:
-
- Answer objects now support more of the python sequence
- protocol, forwarding the requests to the answer rrset.
- E.g. "for a in answer" is equivalent to "for a in
- answer.rrset", "answer[i]" is equivalent to "answer.rrset[i]",
- and "answer[i:j]" is equivalent to "answer.rrset[i:j]".
-
- Making requests using EDNS, including indicating DNSSEC awareness,
- is now easier. For example, you can now say:
-
- q = dns.message.make_query('www.dnspython.org', 'MX',
- want_dnssec=True)
-
- dns.query.xfr() can now be used for IXFR.
-
- Support has been added for the DHCID, IPSECKEY, and SPF RR types.
-
- UDP messages from unexpected sources can now be ignored by
- setting ignore_unexpected to True when calling dns.query.udp.
-
-Bugs fixed since 1.4.0:
-
- If /etc/resolv.conf didn't exist, we raised an exception
- instead of simply using the default resolver configuration.
-
- In dns.resolver.Resolver._config_win32_fromkey(), we were
- passing the wrong variable to self._config_win32_search().
-
-New since 1.3.5:
-
- You can now convert E.164 numbers to/from their ENUM name
- forms:
-
- >>> import dns.e164
- >>> n = dns.e164.from_e164("+1 555 1212")
- >>> n
- <DNS name 2.1.2.1.5.5.5.1.e164.arpa.>
- >>> dns.e164.to_e164(n)
- '+15551212'
-
- You can now convert IPv4 and IPv6 address to/from their
- corresponding DNS reverse map names:
-
- >>> import dns.reversename
- >>> n = dns.reversename.from_address("127.0.0.1")
- >>> n
- <DNS name 1.0.0.127.in-addr.arpa.>
- >>> dns.reversename.to_address(n)
- '127.0.0.1'
-
- You can now convert between Unicode strings and their IDN ACE
- form:
-
- >>> n = dns.name.from_text(u'les-\u00e9l\u00e8ves.example.')
- >>> n
- <DNS name xn--les-lves-50ai.example.>
- >>> n.to_unicode()
- u'les-\xe9l\xe8ves.example.'
-
- The origin parameter to dns.zone.from_text() and dns.zone.to_text()
- is now optional. If not specified, the origin will be taken from
- the first $ORIGIN statement in the master file.
-
- Sanity checking of a zone can be disabled; this is useful when
- working with files which are zone fragments.
-
-Bugs fixed since 1.3.5:
-
- The correct delimiter was not used when retrieving the
- list of nameservers from the registry in certain versions of
- windows.
-
- The floating-point version of latitude and longitude in LOC RRs
- (float_latitude and float_longitude) had incorrect signs for
- south latitudes and west longitudes.
-
- BIND 8 TTL syntax is now accepted in all TTL-like places (i.e.
- SOA fields refresh, retry, expire, and minimum; SIG/RRSIG
- field original_ttl).
-
- TTLs are now bounds checked when their text form is parsed,
- and their values must be in the closed interval [0, 2^31 - 1].
-
-New since 1.3.4:
-
- In the resolver, if time goes backward a little bit, ignore
- it.
-
- zone_for_name() has been added to the resolver module. It
- returns the zone which is authoritative for the specified
- name, which is handy for dynamic update. E.g.
-
- import dns.resolver
- print dns.resolver.zone_for_name('www.dnspython.org')
-
- will output "dnspython.org." and
-
- print dns.resolver.zone_for_name('a.b.c.d.e.f.example.')
-
- will output ".".
-
- The default resolver can be fetched with the
- get_default_resolver() method.
-
- You can now get the parent (immediate superdomain) of a name
- by using the parent() method.
-
- Zone.iterate_rdatasets() and Zone.iterate_rdatas() now have
- a default rdtype of dns.rdatatype.ANY like the documentation
- says.
-
- A Dynamic DNS example, ddns.py, has been added.
-
-New since 1.3.3:
-
- The source address and port may now be specified when calling
- dns.query.{udp,tcp,xfr}.
-
- The resolver now does exponential backoff each time it runs
- through all of the nameservers.
-
- Rcodes which indicate a nameserver is likely to be a
- "permanent failure" for a query cause the nameserver to be removed
- from the mix for that query.
-
-New since 1.3.2:
-
- dns.message.Message.find_rrset() now uses an index, vastly
- improving the from_wire() performance of large messages such
- as zone transfers.
-
- Added dns.message.make_response(), which creates a skeletal
- response for the specified query.
-
- Added opcode() and set_opcode() convenience methods to the
- dns.message.Message class. Added the request_payload
- attribute to the Message class.
-
- The 'file' parameter of dns.name.Name.to_wire() is now
- optional; if omitted, the wire form will be returned as the
- value of the function.
-
- dns.zone.from_xfr() in relativization mode incorrectly set
- zone.origin to the empty name.
-
- The masterfile parser incorrectly rejected TXT records where a
- value was not quoted.
-
-New since 1.3.1:
-
- The NSEC format doesn't allow specifying types by number, so
- we shouldn't either. (Using the unknown type format is still
- OK though.)
-
- The resolver wasn't catching dns.exception.Timeout, so a timeout
- erroneously caused the whole resolution to fail instead of just
- going on to the next server.
-
- The renderer module didn't import random, causing an exception
- to be raised if a query id wasn't provided when a Renderer was
- created.
-
- The conversion of LOC milliseconds values from text to binary was
- incorrect if the length of the milliseconds string was not 3.
-
-New since 1.3.0:
-
- Added support for the SSHFP type.
-
-New since 1.2.0:
-
- Added support for new DNSSEC types RRSIG, NSEC, and DNSKEY.
-
-This release fixes all known bugs.
-
-See the ChangeLog file for more detailed information on changes since
-the prior release.
-
-
-## REQUIREMENTS
-
-Python 2.6 or later.
-
-
-## HOME PAGE
-
-For the latest in releases, documentation, and information, visit the
-dnspython home page at
-
- http://www.dnspython.org/
-
-
-
-## DOCUMENTATION
-
-Documentation is sparse at the moment. Use pydoc, or read the HTML
-documentation at the dnspython home page, or download the HTML
-documentation.
-
-
-## BUG REPORTS
-
-Bug reports may be sent to bugs at dnspython.org
-
-
-## MAILING LISTS
-
-A number of mailing lists are available. Visit the dnspython home
-page to subscribe or unsubscribe.
diff --git a/dns/_compat.py b/dns/_compat.py
index cffe4bb..956f9a1 100644
--- a/dns/_compat.py
+++ b/dns/_compat.py
@@ -1,12 +1,13 @@
import sys
-
+import decimal
+from decimal import Context
if sys.version_info > (3,):
long = int
xrange = range
else:
- long = long
- xrange = xrange
+ long = long # pylint: disable=long-builtin
+ xrange = xrange # pylint: disable=xrange-builtin
# unicode / binary types
if sys.version_info > (3,):
@@ -14,8 +15,33 @@ if sys.version_info > (3,):
binary_type = bytes
string_types = (str,)
unichr = chr
+ def maybe_decode(x):
+ return x.decode()
+ def maybe_encode(x):
+ return x.encode()
else:
- text_type = unicode
+ text_type = unicode # pylint: disable=unicode-builtin, undefined-variable
binary_type = str
- string_types = (basestring,)
- unichr = unichr
+ string_types = (
+ basestring, # pylint: disable=basestring-builtin, undefined-variable
+ )
+ unichr = unichr # pylint: disable=unichr-builtin
+ def maybe_decode(x):
+ return x
+ def maybe_encode(x):
+ return x
+
+
+def round_py2_compat(what):
+ """
+ Python 2 and Python 3 use different rounding strategies in round(). This
+ function ensures that results are python2/3 compatible and backward
+ compatible with previous py2 releases
+ :param what: float
+ :return: rounded long
+ """
+ d = Context(
+ prec=len(str(long(what))), # round to integer with max precision
+ rounding=decimal.ROUND_HALF_UP
+ ).create_decimal(str(what)) # str(): python 2.6 compat
+ return long(d)
diff --git a/dns/e164.py b/dns/e164.py
index 2cc911c..9930073 100644
--- a/dns/e164.py
+++ b/dns/e164.py
@@ -56,7 +56,7 @@ def to_e164(name, origin=public_enum_domain, want_plus_prefix=True):
"""
if origin is not None:
name = name.relativize(origin)
- dlabels = [d for d in name.labels if (d.isdigit() and len(d) == 1)]
+ dlabels = [d for d in name.labels if d.isdigit() and len(d) == 1]
if len(dlabels) != len(name.labels):
raise dns.exception.SyntaxError('non-digit labels in ENUM domain name')
dlabels.reverse()
@@ -73,12 +73,13 @@ def query(number, domains, resolver=None):
"""
if resolver is None:
resolver = dns.resolver.get_default_resolver()
+ e_nx = dns.resolver.NXDOMAIN()
for domain in domains:
if isinstance(domain, string_types):
domain = dns.name.from_text(domain)
qname = dns.e164.from_e164(number, domain)
try:
return resolver.query(qname, 'NAPTR')
- except dns.resolver.NXDOMAIN:
- pass
- raise dns.resolver.NXDOMAIN
+ except dns.resolver.NXDOMAIN as e:
+ e_nx += e
+ raise e_nx
diff --git a/dns/entropy.py b/dns/entropy.py
index 43841a7..de7a70a 100644
--- a/dns/entropy.py
+++ b/dns/entropy.py
@@ -14,6 +14,7 @@
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
import os
+import random
import time
from ._compat import long, binary_type
try:
@@ -33,21 +34,23 @@ class EntropyPool(object):
import hashlib
self.hash = hashlib.sha1()
self.hash_len = 20
- except:
+ except ImportError:
try:
import sha
self.hash = sha.new()
self.hash_len = 20
- except:
- import md5
+ except ImportError:
+ import md5 # pylint: disable=import-error
self.hash = md5.new()
self.hash_len = 16
self.pool = bytearray(b'\0' * self.hash_len)
if seed is not None:
self.stir(bytearray(seed))
self.seeded = True
+ self.seed_pid = os.getpid()
else:
self.seeded = False
+ self.seed_pid = 0
def stir(self, entropy, already_locked=False):
if not already_locked:
@@ -64,19 +67,21 @@ class EntropyPool(object):
self.lock.release()
def _maybe_seed(self):
- if not self.seeded:
+ if not self.seeded or self.seed_pid != os.getpid():
try:
seed = os.urandom(16)
- except:
+ except Exception:
try:
r = open('/dev/urandom', 'rb', 0)
try:
seed = r.read(16)
finally:
r.close()
- except:
+ except Exception:
seed = str(time.time())
self.seeded = True
+ self.seed_pid = os.getpid()
+ self.digest = None
seed = bytearray(seed)
self.stir(seed, True)
@@ -114,14 +119,23 @@ class EntropyPool(object):
else:
rand = self.random_8
max = 255
- return (first + size * rand() // (max + 1))
+ return first + size * rand() // (max + 1)
pool = EntropyPool()
+try:
+ system_random = random.SystemRandom()
+except Exception:
+ system_random = None
def random_16():
- return pool.random_16()
-
+ if system_random is not None:
+ return system_random.randrange(0, 65536)
+ else:
+ return pool.random_16()
def between(first, last):
- return pool.random_between(first, last)
+ if system_random is not None:
+ return system_random.randrange(first, last + 1)
+ else:
+ return pool.random_between(first, last)
diff --git a/dns/exception.py b/dns/exception.py
index 62fbe2c..6c0b1f4 100644
--- a/dns/exception.py
+++ b/dns/exception.py
@@ -23,14 +23,14 @@ class DNSException(Exception):
It supports two basic modes of operation:
a) Old/compatible mode is used if __init__ was called with
- empty **kwargs.
+ empty **kwargs.
In compatible mode all *args are passed to standard Python Exception class
as before and all *args are printed by standard __str__ implementation.
Class variable msg (or doc string if msg is None) is returned from str()
if *args is empty.
b) New/parametrized mode is used if __init__ was called with
- non-empty **kwargs.
+ non-empty **kwargs.
In the new mode *args has to be empty and all kwargs has to exactly match
set in class variable self.supp_kwargs. All kwargs are stored inside
self.kwargs and used in new __str__ implementation to construct
@@ -45,8 +45,11 @@ class DNSException(Exception):
def __init__(self, *args, **kwargs):
self._check_params(*args, **kwargs)
- self._check_kwargs(**kwargs)
- self.kwargs = kwargs
+ if kwargs:
+ self.kwargs = self._check_kwargs(**kwargs)
+ self.msg = str(self)
+ else:
+ self.kwargs = dict() # defined but empty for old mode exceptions
if self.msg is None:
# doc string is better implicit message than empty string
self.msg = self.__doc__
@@ -68,6 +71,7 @@ class DNSException(Exception):
assert set(kwargs.keys()) == self.supp_kwargs, \
'following set of keyword args is required: %s' % (
self.supp_kwargs)
+ return kwargs
def _fmt_kwargs(self, **kwargs):
"""Format kwargs before printing them.
diff --git a/dns/grange.py b/dns/grange.py
index 01a3257..9ce9f67 100644
--- a/dns/grange.py
+++ b/dns/grange.py
@@ -34,6 +34,10 @@ def from_text(text):
... 4041 lines suppressed ...
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/dnspython.git
More information about the Python-modules-commits
mailing list