- Add
timeweb
provider (#1850) - Add
qcloud
provider (#1824)
- Update cloudflare documentation regarding the zoneID (#1783)
- Add support of personal access tokens (PATs) in
gandi
provider (#1987) - Prevent invalid TTL values and proper behavior with subdomains in
godaddy
provider (#1834)
- New method to determine the actual zone name for a given FQDN. Historically it was an extraction
of the second-level domain given well-known TLDs (eg.,
domain.net
forwww.domain.net
) usingtldextract
, and usage of--delegated
option to enforce a specific zone name that is useful for third-level domains hosted on a specific zone (eg., sub-zonesub.domain.net
delegated from zonedomain.net
). It is now possible to use the--resolve-zone-name
flag on Lexicon client to trigger an actual resolution of the zone name from a given FQDN using live DNS servers by leveragingdnspython
utilities. Most of the time this makes--delegated
useless, since Lexicon will be able to guess the correct zone name.
- Add support to Python 3.12.
- Support older versions of requests (<2.27.0) in
ovh
provider.
- Drop support for Python 3.7
- Protect
ovh
provider against invalid response bodies that are returned sometimes by OVH APIs. - Fix filtering by record content in
godaddy
provider.
- Add
pyotp
Python dependency in Lexicon to help implementing OTP (one-time password) on providers whose API supports this kind of authentication. - Add OTP support on
hover
provider, with a new flag named--auth-totp-secret
. - Add type marker
py.typed
to inform types checkers about availability of type annotations in Lexicon codebase.
- Fix and modernize ReadTheDoc documentation build.
- Better error management and resource cleanup when
Client
is used as a context manager.
- Stop using
cryptography
in providers where only hashing is needed.
- Add back declared support to Python 3.7 for few cycles
- New way to invoke Lexicon as a library:
lexicon.client.Client
becomes a context manager. When invoked with thewith
keyword, it will provide an operation object that embeds the target provider fully authenticated (authenticate
method called on the Provider). This operation object gives access to four methods:create_record
,update_record
,delete_record
andlist_records
. These methods can be invoked instead of the oldexecute
method to execute a specific action on the DNS zone. In this case,type
,name
,content
fields do not need to be set in the config anymore, since they are passed directly as arguments to the new methods. Upon context manager closing, thecleanup
method defined in the Provider is ensured to be called. See the README file of the project for an example of how to use this new approach. - Python warnings are emitted from the code to alert about the deprecations listed below.
- Former
NAMESERVER_DOMAIN
variable andprovider_parser
function that had to be defined in each provider module are respectively migrated toget_nameservers
andconfigure_parser
static methods in each Provider class. They are defined as abstract in the interface and must be implemented in the concrete classes. - Former private methods
_create_record
,_modify_record
,_delete_record
and_list_records
are migrated to their public counterpartcreate_record
,modify_record
,delete_record
andlist_records
in each Provider class. These are the new abstract methods for each action that need to be implemented. - Method
lexicon.client.Client.execute
is deprecated and will be removed in Lexicon 4. - Package
lexicon.providers
, containing the actual provider implementations, is migrated tolexicon._private.providers
. The provider implementations are not supposed to be used directly, please uselexicon.client.Client
instead with the new methods described above. Packagelexicon.providers
stubs tolexicon._private.providers
to ease the migration path, but it is deprecated and will be removed in Lexicon 4. - Module
lexicon.providers.base
, that contains the Provider interface to implement, is migrated to modulelexicon.interfaces
. Modulelexicon.providers.base
stubs tolexicon.interfaces
to ease the migration path, but it is deprecated and will be removed in Lexicon 4. - Modules
lexicon.cli
,lexicon.parser
andlexicon.discovery
are migrated to the private packagelexicon._private
as they are not part of the public API. Old modules stubs to the new modules in the private packagelexicon._private
to ease the migration path, but it is deprecated and will be removed in Lexicon 4. - Update documentation, in particular the developer guide, to take into account the new architecture of the code to implement a new Provider.
- Functional codebase in
/lexicon
folder is moved in/src/lexicon
folder to comply with modern Python project layouts. Tests are migrated to/tests
folder.
- Drop support for Python 3.7
- Add
wedos
provider (#1675)
- Proper handling off authentication errors on
easydns
provider (#1674) - Allow management of pending (non-active) domains in
cloudflare
provider (#1659)
- Add
duckdns
provider (experimental support) (#1533) - Add
dnsservices
provider (#1603) - Add
flexibleengine
provider (#1600) - Official support for Python 3.11
- Upgrade API version used for
azure
provider (#1606) - Various fixes for documentation (#1488 #1458 #1601 #1605)
- Fix check for extra dependencies (#1568)
- Fix
easyname
provider (update action) (#1442)
- Fix
hetzner
provider with large list of entries (#1389)
- Fix upsertRecordSet in
yandex
provider (#1423)
- Better management of domain zone id in
yandex
provider (#1338) - Fix create record action on
glesys
provider (#1356) - Fix create multiple TXT records for the same name in
azure
provider (#1359)
- Add
porkbun
provider (#1283)
- Add support of record update without an identifier in
yandex
provider (#1253)
- Improve the Oracle Cloud DNS (
oci
) provider on the authentication mechanism (#1251) - Add API documentation to Oracle Cloud DNS (#1247)
- Add
namecom
provider (#1212)
- Fix TLD with two parts for
namecheap
provider (#1237) - Fix
entity__name
parsing ineasyname
provider (#1230)
- Add
--zone-id
CLI flag forroute53
provider - Add
yandexcloud
provider dedicated to Yandex Cloud solution (#1213)
- Improve documentation with auto-generation
- Clarify that
yandex
provider supports Yandex PDD only (#1211) - Use UUIDs in
aliyun
provider to avoid nonce collisions
- Add
misaka
provider (#1205 #556)
- Fix
yandex
provider for MX/SRV records (#1201) - Fix
joker
provider by using POST requests instead of GET (#1201)
- Add
webgo
provider (#1102)
- Extend possible record types list for
dreamhost
provider (#1110)
- Fix compatibility with requests>=2 in
transip
provider
- Fix configuration reference
- Reimplement the
transip
provider using the new REST v6 API
- Drop Python 3.6 support
- Complete redesign of the update and delete actions in GoDaddy provider to fix several issues
- Add the Value Domain provider (#1018)
- Fix issue on the GoDaddy provider for update actions
- Fix
plesk
provider (#1004) - Update nameservers in
namecheap
provider (#911)
- Fix
dreamhost
provider since deprecated API endpoints are removed (#998)
- Fix
rackspace
provider by not sending a body request forGET
requests (#989)
transip
provider is deprecated and not maintained anymore, it will be replaced soon by a newtransip
provider build on top of the TransIP v6 REST API
transip
provider is not part of thefull
dns-lexicon extra, you need to install explicitly thetransip
extra instead
- Allow to use newer versions of
cryptography
- Fix doc about unit tests
- Add the Vercel provider (formerly known as Zeit)
- Add the Oracle Cloud Infrastructure (OCI) DNS provider (#860)
- Keep old Zeit provider for compatibility purpose with deprecation notices
- Support multiple domain statuses for Joker provider (#880)
- Support deprecated
method_whitelist
parameter in urllib3.util.retry.Retry for urllib3<1.26 - Fix support of registered domains for INWX provider (#828)
- Update
mypy
and use external types modules
- Vendor
pynamecheap
project fornamecheap
provider - Annotate public API with types
- Check mypy types during CI
- Add the RFC2136 DynDNS provider (named
ddns
) - Use Lexicon specific exceptions in code:
AuthenticationError
for authentication problems
- Implement the base provider as an ABC class
- Improve
plesk
provider for wildcard domains or subdomains - Use
poetry-core
instead ofpoetry
for the builds - Switch to GitHub-native Dependabot
- Remove dependency of
plesk
provider toxmltodict
- Remove some Python 2 specific code
- Remove deprecated
type
parameter in providers public methods
- Migrate Vultr provider to the V2 API (#770)
- Add the Mythic Beasts provider (#739)
- Add the Infomaniak provider (#685 #762)
- Improve dev tooling (#761)
- Support both
tldextract
2.x and 3.x - Upgrade third-party dependencies
- Validate PowerDNS provider parameters (#755)
- Support dnspython>=2.1 for
localzone
provider (#760) - Update Mythic Beasts documentation (#693)
- Fix documentation build and publication
- Remove
mock
andnose
dependencies (#706)
- Handle large number of hosted zones in
route53
provider
- Fix domains in "lock" state with
joker
provider
- Add the Joker.com provider
- Add environment variable
TLDEXTRACT_CACHE_PATH
to configure a tldextract cache custom location for Lexicon
- Old environment variable
TLDEXTRACT_CACHE_FILE
is deprecated and will be removed in a future release
- Avoid installation problems with setuptools==50
- Migrating codebase to Python 3.6+ specific features (Lexicon will explicitly break on older versions now)
- Fix Easyname provider to work with their new website
- Add pagination support to Google Cloud DNS provider (#577)
- Add official support to Python 3.9
- Add SSHFP record support to CloudFlare provider (library only) (#612)
- Fix create/update operations when CAA records are presents in GoDaddy provider (#545)
- Fix Hover provider with new authentication URL (#618)
- Fix Gandi provider to use the new LiveDNS API URL
- Improve versions constraints by declaring latest major versions known to work with Lexicon
- Relax versions constraints on Lexicon dependencies until there is a real need.
- Add the Njalla provider
- Use
poetry
to manage dependencies, build and package Lexicon. - Add integration tests for Mac OS X
- The
beautifulsoup4
dependency has been integrated to the core ones for generic purpose. As a consequencehenet
,easyname
andgratisdns
providers do not have optional dependencies anymore. - Update Docker image to use Python 3.8, and install Lexicon with full extras.
- Remove support for Python 2.7.
- Remove support for Python 3.5.
- Remove the extra
security
fromrequests
dependency which does not make sense anymore on recent versions of Python.
- Redesign of the release process using Azure Pipelines.
- Create a dedicated documentation on ReadTheDoc, refactor README.md into README.rst.
- Fix localzone provider to make it work with dnspython 2.x.
- Update easyname provider against the recent API changes.