<commit_before>dnspython [![Build Status](https://travis-ci.org/rthalley/dnspython.svg?branch=master)](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 is a utility to work with DNS, `/etc/hosts` is thus not used.
For simple forward DNS lookups, better use `socket.gethostbyname()`.

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`

Packages are available for some distributions:
 * [Ubuntu](http://packages.ubuntu.com/search?keywords=dnspython&searchon=names&suite=xenial&section=all)
 * [Debian](https://packages.debian.org/search?keywords=dnspython&searchon=names&suite=stable&section=all)
 * OpenSUSE: [py2](https://software.opensuse.org/package/python-dnspython), [py3](https://software.opensuse.org/package/python3-dnspython)

## 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 <NAME> 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:
<commit_msg>README fixes based on feedback on PR#190<commit_after>dnspython [![Build Status](https://travis-ci.org/rthalley/dnspython.svg?branch=master)](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 is a utility to work with DNS, `/etc/hosts` is thus not used.
For simple forward DNS lookups, better use `socket.gethostbyname()`.

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`

Packages are available for some distributions:
 * [Ubuntu](http://packages.ubuntu.com/search?keywords=dnspython&searchon=names&suite=xenial&section=all)
 * [Debian](https://packages.debian.org/search?keywords=dnspython&searchon=names&suite=stable&section=all)
 * OpenSUSE: [python-dnspython](https://software.opensuse.org/package/python-dnspython), [python3-dnspython](https://software.opensuse.org/package/python3-dnspython)
 * Fedora: [python-dns](https://apps.fedoraproject.org/packages/python-dns/), [python3-dns](https://apps.fedoraproject.org/packages/python3-dns)

If no package exists for your OS, please use pip as explained above.

## 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 <NAME> 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:

{'fraction_non_alphanumeric': 0.06787024522108515, 'fraction_numerical': 0.018343309519212203, 'mean_word_length': 4.1717423864203695, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 12, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2417075', 'n_tokens_mistral': 3430, 'n_tokens_neox': 3121, 'n_words': 1402}