Add python 3.14 support (#10481)

fixes https://github.com/certbot/certbot/issues/10477. this is based on
the PR that did this for 3.13 at
https://github.com/certbot/certbot/pull/10164
This commit is contained in:
ohemorange 2025-11-04 10:49:51 -08:00 committed by GitHub
parent 4d5d5f7ae8
commit 2ec8320763
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
30 changed files with 161 additions and 120 deletions

View file

@ -4,7 +4,7 @@ jobs:
- name: IMAGE_NAME
value: ubuntu-22.04
- name: PYTHON_VERSION
value: 3.13
value: 3.14
- group: certbot-common
strategy:
matrix:
@ -14,6 +14,9 @@ jobs:
linux-py312:
PYTHON_VERSION: 3.12
TOXENV: py312
linux-py313:
PYTHON_VERSION: 3.13
TOXENV: py313
linux-isolated:
TOXENV: 'isolated-acme,isolated-certbot,isolated-apache,isolated-cloudflare,isolated-digitalocean,isolated-dnsimple,isolated-dnsmadeeasy,isolated-gehirn,isolated-google,isolated-linode,isolated-luadns,isolated-nsone,isolated-ovh,isolated-rfc2136,isolated-route53,isolated-sakuracloud,isolated-nginx'
linux-integration-certbot-oldest:
@ -31,7 +34,10 @@ jobs:
linux-py312-integration:
PYTHON_VERSION: 3.12
TOXENV: integration
# python 3.13 integration tests are not run here because they're run as
linux-py313-integration:
PYTHON_VERSION: 3.13
TOXENV: integration
# python 3.14 integration tests are not run here because they're run as
# part of the standard test suite
nginx-compat:
TOXENV: nginx_compat

View file

@ -1,7 +1,7 @@
jobs:
- job: test
variables:
PYTHON_VERSION: 3.13
PYTHON_VERSION: 3.14
strategy:
matrix:
macos-cover:

View file

@ -21,6 +21,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
]

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -20,6 +20,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
]

View file

@ -3,6 +3,8 @@
# the coverage: indeed, certbot is launched as a CLI from a subprocess.
disable_warnings = module-not-imported,no-data-collected
omit = **/*_test.py,**/tests/*,**/dns_common*,**/certbot_nginx/_internal/parser_obj.py
patch = subprocess
parallel = True
[report]
# Exclude unit tests in coverage during integration tests.

View file

@ -21,6 +21,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
]

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -28,6 +28,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -23,6 +23,7 @@ classifiers = [
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
"Topic :: System :: Installation/Setup",

View file

@ -21,6 +21,7 @@ classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Security",
]

View file

@ -0,0 +1 @@
Support for Python 3.14 was added.

View file

@ -9,5 +9,10 @@
# deprecation warnings and gives time for plugins that don't use the deprecated
# API to propagate, especially for plugins packaged as an external snap, before
# we release breaking changes.
#
# 1) In v2.28.0, google-api-core added an annoying message that the current python's EOL
# is coming up. We deprecate python versions on schedule, so mostly this is just an
# annoyance for our own tests, and can probably be silenced forever.
filterwarnings =
error
ignore:You are using a Python version (.*) which Google will stop supporting:FutureWarning

View file

@ -2,20 +2,20 @@
# that script.
apacheconfig==0.3.2 ; python_version == "3.10"
asn1crypto==0.24.0 ; python_version == "3.10"
astroid==3.3.11 ; python_version == "3.10"
attrs==25.3.0 ; python_version == "3.10"
beautifulsoup4==4.13.4 ; python_version == "3.10"
astroid==4.0.1 ; python_version == "3.10"
attrs==25.4.0 ; python_version == "3.10"
beautifulsoup4==4.14.2 ; python_version == "3.10"
boto3==1.20.34 ; python_version == "3.10"
botocore==1.23.34 ; python_version == "3.10"
cachetools==5.5.2 ; python_version == "3.10"
certifi==2025.8.3 ; python_version == "3.10"
certifi==2025.10.5 ; python_version == "3.10"
cffi==1.14.1 ; python_version == "3.10"
chardet==3.0.4 ; python_version == "3.10"
cloudflare==2.19.0 ; python_version == "3.10"
colorama==0.4.6 ; (sys_platform == "win32" or platform_system == "Windows") and python_version == "3.10"
configargparse==1.5.3 ; python_version == "3.10"
configobj==5.0.6 ; python_version == "3.10"
coverage==7.10.4 ; python_version == "3.10"
coverage==7.11.0 ; python_version == "3.10"
cryptography==43.0.0 ; python_version == "3.10"
cython==0.29.37 ; python_version == "3.10"
dill==0.4.0 ; python_version == "3.10"
@ -25,30 +25,30 @@ dns-lexicon==3.15.1 ; python_version == "3.10"
dnspython==2.6.1 ; python_version == "3.10"
exceptiongroup==1.3.0 ; python_version == "3.10"
execnet==2.1.1 ; python_version == "3.10"
filelock==3.19.1 ; python_version == "3.10"
filelock==3.20.0 ; python_version == "3.10"
funcsigs==0.4 ; python_version == "3.10"
google-api-python-client==1.6.5 ; python_version == "3.10"
google-auth==2.16.0 ; python_version == "3.10"
httplib2==0.9.2 ; python_version == "3.10"
idna==2.6 ; python_version == "3.10"
iniconfig==2.1.0 ; python_version == "3.10"
iniconfig==2.3.0 ; python_version == "3.10"
ipaddress==1.0.16 ; python_version == "3.10"
isort==6.0.1 ; python_version == "3.10"
isort==7.0.0 ; python_version == "3.10"
jmespath==0.10.0 ; python_version == "3.10"
josepy==2.1.0 ; python_version == "3.10"
josepy==2.2.0 ; python_version == "3.10"
jsonlines==4.0.0 ; python_version == "3.10"
jsonpickle==4.1.1 ; python_version == "3.10"
mccabe==0.7.0 ; python_version == "3.10"
mypy-extensions==1.1.0 ; python_version == "3.10"
mypy==1.17.1 ; python_version == "3.10"
mypy==1.18.2 ; python_version == "3.10"
ndg-httpsclient==0.3.2 ; python_version == "3.10"
oauth2client==4.1.3 ; python_version == "3.10"
packaging==25.0 ; python_version == "3.10"
parsedatetime==2.6 ; python_version == "3.10"
pathspec==0.12.1 ; python_version == "3.10"
pbr==1.8.0 ; python_version == "3.10"
pip==25.2 ; python_version == "3.10"
platformdirs==4.3.8 ; python_version == "3.10"
pip==25.3 ; python_version == "3.10"
platformdirs==4.5.0 ; python_version == "3.10"
pluggy==1.6.0 ; python_version == "3.10"
ply==3.4 ; python_version == "3.10"
py==1.11.0 ; python_version == "3.10"
@ -56,42 +56,42 @@ pyasn1-modules==0.4.1 ; python_version == "3.10"
pyasn1==0.4.8 ; python_version == "3.10"
pycparser==2.14 ; python_version == "3.10"
pygments==2.19.2 ; python_version == "3.10"
pylint==3.3.8 ; python_version == "3.10"
pylint==4.0.2 ; python_version == "3.10"
pyopenssl==25.0.0 ; python_version == "3.10"
pyotp==2.9.0 ; python_version == "3.10"
pyparsing==2.4.7 ; python_version == "3.10"
pyrfc3339==1.0 ; python_version == "3.10"
pytest-cov==6.2.1 ; python_version == "3.10"
pytest-cov==7.0.0 ; python_version == "3.10"
pytest-xdist==3.8.0 ; python_version == "3.10"
pytest==8.4.1 ; python_version == "3.10"
pytest==8.4.2 ; python_version == "3.10"
python-augeas==0.5.0 ; python_version == "3.10"
python-dateutil==2.9.0.post0 ; python_version == "3.10"
python-digitalocean==1.15.0 ; python_version == "3.10"
pytz==2025.2 ; python_version == "3.10"
pywin32==311 ; python_version == "3.10" and sys_platform == "win32"
pyyaml==6.0.2 ; python_version == "3.10"
requests-file==2.1.0 ; python_version == "3.10"
pyyaml==6.0.3 ; python_version == "3.10"
requests-file==3.0.1 ; python_version == "3.10"
requests==2.25.1 ; python_version == "3.10"
rsa==4.9.1 ; python_version == "3.10"
ruff==0.12.9 ; python_version == "3.10"
ruff==0.14.3 ; python_version == "3.10"
s3transfer==0.5.2 ; python_version == "3.10"
setuptools==80.9.0 ; python_version == "3.10"
six==1.16.0 ; python_version == "3.10"
soupsieve==2.7 ; python_version == "3.10"
soupsieve==2.8 ; python_version == "3.10"
tldextract==5.3.0 ; python_version == "3.10"
tomli==2.2.1 ; python_version == "3.10"
tomli==2.3.0 ; python_version == "3.10"
tomlkit==0.13.3 ; python_version == "3.10"
tox==3.28.0 ; python_version == "3.10"
types-httplib2==0.22.0.20250622 ; python_version == "3.10"
types-pyrfc3339==2.0.1.20241107 ; python_version == "3.10"
types-python-dateutil==2.9.0.20250809 ; python_version == "3.10"
types-pywin32==311.0.0.20250809 ; python_version == "3.10"
types-httplib2==0.31.0.20250913 ; python_version == "3.10"
types-pyrfc3339==2.0.1.20250825 ; python_version == "3.10"
types-python-dateutil==2.9.0.20251008 ; python_version == "3.10"
types-pywin32==311.0.0.20251008 ; python_version == "3.10"
types-requests==2.31.0.6 ; python_version == "3.10"
types-setuptools==80.9.0.20250809 ; python_version == "3.10"
types-setuptools==80.9.0.20250822 ; python_version == "3.10"
types-urllib3==1.26.25.14 ; python_version == "3.10"
typing-extensions==4.14.1 ; python_version == "3.10"
typing-extensions==4.15.0 ; python_version == "3.10"
uritemplate==3.0.1 ; python_version == "3.10"
urllib3==1.26.5 ; python_version == "3.10"
uv==0.8.11 ; python_version == "3.10"
virtualenv==20.34.0 ; python_version == "3.10"
uv==0.9.7 ; python_version == "3.10"
virtualenv==20.35.4 ; python_version == "3.10"
wheel==0.45.1 ; python_version == "3.10"

View file

@ -41,10 +41,13 @@ letstest = {path = "../../../letstest"}
# as a dependency here to ensure a version of cython is pinned for extra
# stability.
#
# We also pin back cython as is currently required by pyyaml. See
# https://github.com/yaml/pyyaml/pull/702 and
# https://github.com/yaml/pyyaml/issues/601.
cython = "<3.0"
# As of pyyaml 6.0.2, cython >= 3.0 is required for py >= 3.13, and < 3.0 for py < 3.13.
# See https://github.com/yaml/pyyaml/pull/808/files.
cython = [
{ version = "<3.0", python = "<3.13" },
{ version = ">=3.0", python = ">=3.13" }
]
# setuptools-rust is a build dependency of cryptography, and since we don't have
# a great way of pinning build dependencies, we simply list it here to ensure a
# working version. Note: if build dependencies of setuptools-rust break at some

View file

@ -95,10 +95,13 @@ urllib3 = "1.26.5"
# cython is a build dependency of pyyaml
#
# We also pin back cython as is currently required by pyyaml. See
# https://github.com/yaml/pyyaml/pull/702 and
# https://github.com/yaml/pyyaml/issues/601.
cython = "<3.0"
#
# As of pyyaml 6.0.2, cython >= 3.0 is required for py >= 3.13, and < 3.0 for py < 3.13.
# See https://github.com/yaml/pyyaml/pull/808/files.
cython = [
{ version = "<3.0", python = "<3.13" },
{ version = ">=3.0", python = ">=3.13" }
]
# Other dependencies
# We add any dependencies that must be specified in this file for any another

View file

@ -6,72 +6,73 @@
# https://docs.github.com/en/github/visualizing-repository-data-with-graphs/about-the-dependency-graph#supported-package-ecosystems
# for more info.
alabaster==1.0.0 ; python_version >= "3.10" and python_version < "4.0"
anyio==4.10.0 ; python_version >= "3.10" and python_version < "4.0"
anyio==4.11.0 ; python_version >= "3.10" and python_version < "4.0"
apacheconfig==0.3.2 ; python_version >= "3.10" and python_version < "4.0"
astroid==3.3.11 ; python_version >= "3.10" and python_version < "4.0"
asttokens==3.0.0 ; python_version >= "3.10" and python_version < "4.0"
attrs==25.3.0 ; python_version >= "3.10" and python_version < "4.0"
azure-core==1.35.0 ; python_version >= "3.10" and python_version < "4.0"
attrs==25.4.0 ; python_version >= "3.10" and python_version < "4.0"
azure-core==1.36.0 ; python_version >= "3.10" and python_version < "4.0"
azure-devops==7.1.0b4 ; python_version >= "3.10" and python_version < "4.0"
babel==2.17.0 ; python_version >= "3.10" and python_version < "4.0"
backports-tarfile==1.2.0 ; python_version >= "3.10" and python_version < "3.12"
bcrypt==4.3.0 ; python_version >= "3.10" and python_version < "4.0"
beautifulsoup4==4.13.4 ; python_version >= "3.10" and python_version < "4.0"
boto3==1.40.15 ; python_version >= "3.10" and python_version < "4.0"
botocore==1.40.15 ; python_version >= "3.10" and python_version < "4.0"
bcrypt==5.0.0 ; python_version >= "3.10" and python_version < "4.0"
beautifulsoup4==4.14.2 ; python_version >= "3.10" and python_version < "4.0"
boto3==1.40.65 ; python_version >= "3.10" and python_version < "4.0"
botocore==1.40.65 ; python_version >= "3.10" and python_version < "4.0"
build==1.3.0 ; python_version >= "3.10" and python_version < "4.0"
cachecontrol==0.14.3 ; python_version >= "3.10" and python_version < "4.0"
cachetools==5.5.2 ; python_version >= "3.10" and python_version < "4.0"
certifi==2025.8.3 ; python_version >= "3.10" and python_version < "4.0"
cffi==1.17.1 ; python_version >= "3.10" and python_version < "4.0"
cachetools==6.2.1 ; python_version >= "3.10" and python_version < "4.0"
certifi==2025.10.5 ; python_version >= "3.10" and python_version < "4.0"
cffi==2.0.0 ; python_version >= "3.10" and python_version < "4.0"
chardet==5.2.0 ; python_version >= "3.10" and python_version < "4.0"
charset-normalizer==3.4.3 ; python_version >= "3.10" and python_version < "4.0"
charset-normalizer==3.4.4 ; python_version >= "3.10" and python_version < "4.0"
cleo==2.1.0 ; python_version >= "3.10" and python_version < "4.0"
click==8.2.1 ; python_version >= "3.10" and python_version < "4.0"
click==8.3.0 ; python_version >= "3.10" and python_version < "4.0"
cloudflare==2.19.4 ; python_version >= "3.10" and python_version < "4.0"
colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0"
configargparse==1.7.1 ; python_version >= "3.10" and python_version < "4.0"
configobj==5.0.9 ; python_version >= "3.10" and python_version < "4.0"
coverage==7.10.4 ; python_version >= "3.10" and python_version < "4.0"
coverage==7.11.0 ; python_version >= "3.10" and python_version < "4.0"
crashtest==0.4.1 ; python_version >= "3.10" and python_version < "4.0"
cryptography==45.0.6 ; python_version >= "3.10" and python_version < "4.0"
cython==0.29.37 ; python_version >= "3.10" and python_version < "4.0"
cryptography==46.0.3 ; python_version >= "3.10" and python_version < "4.0"
cython==0.29.37 ; python_version >= "3.10" and python_version <= "3.12"
cython==3.1.6 ; python_version >= "3.13" and python_version < "4.0"
decorator==5.2.1 ; python_version >= "3.10" and python_version < "4.0"
deprecated==1.2.18 ; python_version >= "3.10" and python_version < "4.0"
deprecated==1.3.1 ; python_version >= "3.10" and python_version < "4.0"
dill==0.4.0 ; python_version >= "3.10" and python_version < "4.0"
distlib==0.4.0 ; python_version >= "3.10" and python_version < "4.0"
distro==1.9.0 ; python_version >= "3.10" and python_version < "4.0"
dns-lexicon==3.21.1 ; python_version >= "3.10" and python_version < "4.0"
dnspython==2.7.0 ; python_version >= "3.10" and python_version < "4.0"
dnspython==2.8.0 ; python_version >= "3.10" and python_version < "4.0"
docutils==0.21.2 ; python_version >= "3.10" and python_version < "4.0"
dulwich==0.22.8 ; python_version >= "3.10" and python_version < "4.0"
dulwich==0.24.8 ; python_version >= "3.10" and python_version < "4.0"
exceptiongroup==1.3.0 ; python_version == "3.10"
execnet==2.1.1 ; python_version >= "3.10" and python_version < "4.0"
executing==2.2.0 ; python_version >= "3.10" and python_version < "4.0"
executing==2.2.1 ; python_version >= "3.10" and python_version < "4.0"
fabric==3.2.2 ; python_version >= "3.10" and python_version < "4.0"
fastjsonschema==2.21.2 ; python_version >= "3.10" and python_version < "4.0"
filelock==3.19.1 ; python_version >= "3.10" and python_version < "4.0"
findpython==0.6.3 ; python_version >= "3.10" and python_version < "4.0"
google-api-core==2.25.1 ; python_version >= "3.10" and python_version < "4.0"
google-api-python-client==2.179.0 ; python_version >= "3.10" and python_version < "4.0"
google-auth-httplib2==0.2.0 ; python_version >= "3.10" and python_version < "4.0"
google-auth==2.40.3 ; python_version >= "3.10" and python_version < "4.0"
googleapis-common-protos==1.70.0 ; python_version >= "3.10" and python_version < "4.0"
filelock==3.20.0 ; python_version >= "3.10" and python_version < "4.0"
findpython==0.7.0 ; python_version >= "3.10" and python_version < "4.0"
google-api-core==2.28.1 ; python_version >= "3.10" and python_version < "4.0"
google-api-python-client==2.186.0 ; python_version >= "3.10" and python_version < "4.0"
google-auth-httplib2==0.2.1 ; python_version >= "3.10" and python_version < "4.0"
google-auth==2.42.1 ; python_version >= "3.10" and python_version < "4.0"
googleapis-common-protos==1.71.0 ; python_version >= "3.10" and python_version < "4.0"
h11==0.16.0 ; python_version >= "3.10" and python_version < "4.0"
httpcore==1.0.9 ; python_version >= "3.10" and python_version < "4.0"
httplib2==0.22.0 ; python_version >= "3.10" and python_version < "4.0"
httplib2==0.31.0 ; python_version >= "3.10" and python_version < "4.0"
httpx==0.28.1 ; python_version >= "3.10" and python_version < "4.0"
id==1.5.0 ; python_version >= "3.10" and python_version < "4.0"
idna==3.10 ; python_version >= "3.10" and python_version < "4.0"
idna==3.11 ; python_version >= "3.10" and python_version < "4.0"
imagesize==1.4.1 ; python_version >= "3.10" and python_version < "4.0"
importlib-metadata==8.7.0 ; python_version >= "3.10" and python_version < "3.12"
iniconfig==2.1.0 ; python_version >= "3.10" and python_version < "4.0"
iniconfig==2.3.0 ; python_version >= "3.10" and python_version < "4.0"
installer==0.7.0 ; python_version >= "3.10" and python_version < "4.0"
invoke==2.2.0 ; python_version >= "3.10" and python_version < "4.0"
invoke==2.2.1 ; python_version >= "3.10" and python_version < "4.0"
ipdb==0.13.13 ; python_version >= "3.10" and python_version < "4.0"
ipython-pygments-lexers==1.1.1 ; python_version >= "3.11" and python_version < "4.0"
ipython==8.37.0 ; python_version == "3.10"
ipython==9.4.0 ; python_version >= "3.11" and python_version < "4.0"
ipython==9.6.0 ; python_version >= "3.11" and python_version < "4.0"
isodate==0.7.2 ; python_version >= "3.10" and python_version < "4.0"
isort==5.13.2 ; python_version >= "3.10" and python_version < "4.0"
jaraco-classes==3.4.0 ; python_version >= "3.10" and python_version < "4.0"
@ -81,83 +82,83 @@ jedi==0.19.2 ; python_version >= "3.10" and python_version < "4.0"
jeepney==0.9.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "linux"
jinja2==3.1.6 ; python_version >= "3.10" and python_version < "4.0"
jmespath==1.0.1 ; python_version >= "3.10" and python_version < "4.0"
josepy==2.1.0 ; python_version >= "3.10" and python_version < "4.0"
josepy==2.2.0 ; python_version >= "3.10" and python_version < "4.0"
jsonlines==4.0.0 ; python_version >= "3.10" and python_version < "4.0"
jsonpickle==4.1.1 ; python_version >= "3.10" and python_version < "4.0"
keyring==25.6.0 ; python_version >= "3.10" and python_version < "4.0"
markdown-it-py==4.0.0 ; python_version >= "3.10" and python_version < "4.0"
markupsafe==3.0.2 ; python_version >= "3.10" and python_version < "4.0"
matplotlib-inline==0.1.7 ; python_version >= "3.10" and python_version < "4.0"
markupsafe==3.0.3 ; python_version >= "3.10" and python_version < "4.0"
matplotlib-inline==0.2.1 ; python_version >= "3.10" and python_version < "4.0"
mccabe==0.7.0 ; python_version >= "3.10" and python_version < "4.0"
mdurl==0.1.2 ; python_version >= "3.10" and python_version < "4.0"
more-itertools==10.7.0 ; python_version >= "3.10" and python_version < "4.0"
msgpack==1.1.1 ; python_version >= "3.10" and python_version < "4.0"
more-itertools==10.8.0 ; python_version >= "3.10" and python_version < "4.0"
msgpack==1.1.2 ; python_version >= "3.10" and python_version < "4.0"
msrest==0.7.1 ; python_version >= "3.10" and python_version < "4.0"
mypy-extensions==1.1.0 ; python_version >= "3.10" and python_version < "4.0"
mypy==1.9.0 ; python_version >= "3.10" and python_version < "4.0"
nh3==0.3.0 ; python_version >= "3.10" and python_version < "4.0"
nh3==0.3.2 ; python_version >= "3.10" and python_version < "4.0"
oauthlib==3.3.1 ; python_version >= "3.10" and python_version < "4.0"
packaging==25.0 ; python_version >= "3.10" and python_version < "4.0"
paramiko==4.0.0 ; python_version >= "3.10" and python_version < "4.0"
parsedatetime==2.6 ; python_version >= "3.10" and python_version < "4.0"
parso==0.8.4 ; python_version >= "3.10" and python_version < "4.0"
pbs-installer==2025.8.18 ; python_version >= "3.10" and python_version < "4.0"
parso==0.8.5 ; python_version >= "3.10" and python_version < "4.0"
pbs-installer==2025.10.31 ; python_version >= "3.10" and python_version < "4.0"
pexpect==4.9.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform != "win32" and sys_platform != "emscripten"
pip==25.2 ; python_version >= "3.10" and python_version < "4.0"
pip==25.3 ; python_version >= "3.10" and python_version < "4.0"
pkginfo==1.12.1.2 ; python_version >= "3.10" and python_version < "4.0"
platformdirs==4.3.8 ; python_version >= "3.10" and python_version < "4.0"
platformdirs==4.5.0 ; python_version >= "3.10" and python_version < "4.0"
pluggy==1.6.0 ; python_version >= "3.10" and python_version < "4.0"
ply==3.11 ; python_version >= "3.10" and python_version < "4.0"
poetry-core==2.1.3 ; python_version >= "3.10" and python_version < "4.0"
poetry-core==2.2.1 ; python_version >= "3.10" and python_version < "4.0"
poetry-plugin-export==1.9.0 ; python_version >= "3.10" and python_version < "4.0"
poetry==2.1.4 ; python_version >= "3.10" and python_version < "4.0"
prompt-toolkit==3.0.51 ; python_version >= "3.10" and python_version < "4.0"
poetry==2.2.1 ; python_version >= "3.10" and python_version < "4.0"
prompt-toolkit==3.0.52 ; python_version >= "3.10" and python_version < "4.0"
proto-plus==1.26.1 ; python_version >= "3.10" and python_version < "4.0"
protobuf==6.32.0 ; python_version >= "3.10" and python_version < "4.0"
protobuf==6.33.0 ; python_version >= "3.10" and python_version < "4.0"
ptyprocess==0.7.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform != "win32" and sys_platform != "emscripten"
pure-eval==0.2.3 ; python_version >= "3.10" and python_version < "4.0"
pyasn1-modules==0.4.2 ; python_version >= "3.10" and python_version < "4.0"
pyasn1==0.6.1 ; python_version >= "3.10" and python_version < "4.0"
pycparser==2.22 ; python_version >= "3.10" and python_version < "4.0"
pycparser==2.23 ; python_version >= "3.10" and python_version < "4.0" and implementation_name != "PyPy"
pygments==2.19.2 ; python_version >= "3.10" and python_version < "4.0"
pylint==3.3.3 ; python_version >= "3.10" and python_version < "4.0"
pynacl==1.5.0 ; python_version >= "3.10" and python_version < "4.0"
pyopenssl==25.1.0 ; python_version >= "3.10" and python_version < "4.0"
pynacl==1.6.0 ; python_version >= "3.10" and python_version < "4.0"
pyopenssl==25.3.0 ; python_version >= "3.10" and python_version < "4.0"
pyotp==2.9.0 ; python_version >= "3.10" and python_version < "4.0"
pyparsing==3.2.3 ; python_version >= "3.10" and python_version < "4.0"
pyproject-api==1.9.1 ; python_version >= "3.10" and python_version < "4.0"
pyparsing==3.2.5 ; python_version >= "3.10" and python_version < "4.0"
pyproject-api==1.10.0 ; python_version >= "3.10" and python_version < "4.0"
pyproject-hooks==1.2.0 ; python_version >= "3.10" and python_version < "4.0"
pyrfc3339==2.0.1 ; python_version >= "3.10" and python_version < "4.0"
pytest-cov==6.2.1 ; python_version >= "3.10" and python_version < "4.0"
pyrfc3339==2.1.0 ; python_version >= "3.10" and python_version < "4.0"
pytest-cov==7.0.0 ; python_version >= "3.10" and python_version < "4.0"
pytest-xdist==3.8.0 ; python_version >= "3.10" and python_version < "4.0"
pytest==8.4.1 ; python_version >= "3.10" and python_version < "4.0"
pytest==8.4.2 ; python_version >= "3.10" and python_version < "4.0"
python-augeas==1.2.0 ; python_version >= "3.10" and python_version < "4.0"
python-dateutil==2.9.0.post0 ; python_version >= "3.10" and python_version < "4.0"
python-digitalocean==1.17.0 ; python_version >= "3.10" and python_version < "4.0"
pywin32-ctypes==0.2.3 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32"
pywin32==311 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32"
pyyaml==6.0.2 ; python_version >= "3.10" and python_version < "4.0"
rapidfuzz==3.13.0 ; python_version >= "3.10" and python_version < "4.0"
pyyaml==6.0.3 ; python_version >= "3.10" and python_version < "4.0"
rapidfuzz==3.14.3 ; python_version >= "3.10" and python_version < "4.0"
readme-renderer==44.0 ; python_version >= "3.10" and python_version < "4.0"
requests-file==2.1.0 ; python_version >= "3.10" and python_version < "4.0"
requests-file==3.0.1 ; python_version >= "3.10" and python_version < "4.0"
requests-oauthlib==2.0.0 ; python_version >= "3.10" and python_version < "4.0"
requests-toolbelt==1.0.0 ; python_version >= "3.10" and python_version < "4.0"
requests==2.32.5 ; python_version >= "3.10" and python_version < "4.0"
rfc3986==2.0.0 ; python_version >= "3.10" and python_version < "4.0"
rich==14.1.0 ; python_version >= "3.10" and python_version < "4.0"
rich==14.2.0 ; python_version >= "3.10" and python_version < "4.0"
roman-numerals-py==3.1.0 ; python_version >= "3.11" and python_version < "4.0"
rsa==4.9.1 ; python_version >= "3.10" and python_version < "4.0"
ruff==0.12.10 ; python_version >= "3.10" and python_version < "4.0"
s3transfer==0.13.1 ; python_version >= "3.10" and python_version < "4.0"
secretstorage==3.3.3 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "linux"
ruff==0.14.3 ; python_version >= "3.10" and python_version < "4.0"
s3transfer==0.14.0 ; python_version >= "3.10" and python_version < "4.0"
secretstorage==3.4.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "linux"
semantic-version==2.10.0 ; python_version >= "3.10" and python_version < "4.0"
setuptools-rust==1.11.1 ; python_version >= "3.10" and python_version < "4.0"
setuptools-rust==1.12.0 ; python_version >= "3.10" and python_version < "4.0"
setuptools==80.9.0 ; python_version >= "3.10" and python_version < "4.0"
shellingham==1.5.4 ; python_version >= "3.10" and python_version < "4.0"
six==1.17.0 ; python_version >= "3.10" and python_version < "4.0"
sniffio==1.3.1 ; python_version >= "3.10" and python_version < "4.0"
snowballstemmer==3.0.1 ; python_version >= "3.10" and python_version < "4.0"
soupsieve==2.7 ; python_version >= "3.10" and python_version < "4.0"
soupsieve==2.8 ; python_version >= "3.10" and python_version < "4.0"
sphinx-rtd-theme==3.0.2 ; python_version >= "3.10" and python_version < "4.0"
sphinx==8.1.3 ; python_version == "3.10"
sphinx==8.2.3 ; python_version >= "3.11" and python_version < "4.0"
@ -170,27 +171,27 @@ sphinxcontrib-qthelp==2.0.0 ; python_version >= "3.10" and python_version < "4.0
sphinxcontrib-serializinghtml==2.0.0 ; python_version >= "3.10" and python_version < "4.0"
stack-data==0.6.3 ; python_version >= "3.10" and python_version < "4.0"
tldextract==5.3.0 ; python_version >= "3.10" and python_version < "4.0"
tomli==2.2.1 ; python_version == "3.10"
tomli==2.3.0 ; python_version == "3.10"
tomlkit==0.13.3 ; python_version >= "3.10" and python_version < "4.0"
towncrier==24.8.0 ; python_version >= "3.10" and python_version < "4.0"
tox==4.27.0 ; python_version >= "3.10" and python_version < "4.0"
towncrier==25.8.0 ; python_version >= "3.10" and python_version < "4.0"
tox==4.32.0 ; python_version >= "3.10" and python_version < "4.0"
traitlets==5.14.3 ; python_version >= "3.10" and python_version < "4.0"
trove-classifiers==2025.8.6.13 ; python_version >= "3.10" and python_version < "4.0"
twine==6.1.0 ; python_version >= "3.10" and python_version < "4.0"
types-httplib2==0.22.0.20250622 ; python_version >= "3.10" and python_version < "4.0"
types-pyrfc3339==2.0.1.20241107 ; python_version >= "3.10" and python_version < "4.0"
types-python-dateutil==2.9.0.20250822 ; python_version >= "3.10" and python_version < "4.0"
types-pywin32==311.0.0.20250822 ; python_version >= "3.10" and python_version < "4.0"
types-requests==2.32.4.20250809 ; python_version >= "3.10" and python_version < "4.0"
trove-classifiers==2025.9.11.17 ; python_version >= "3.10" and python_version < "4.0"
twine==6.2.0 ; python_version >= "3.10" and python_version < "4.0"
types-httplib2==0.31.0.20250913 ; python_version >= "3.10" and python_version < "4.0"
types-pyrfc3339==2.0.1.20250825 ; python_version >= "3.10" and python_version < "4.0"
types-python-dateutil==2.9.0.20251008 ; python_version >= "3.10" and python_version < "4.0"
types-pywin32==311.0.0.20251008 ; python_version >= "3.10" and python_version < "4.0"
types-requests==2.32.4.20250913 ; python_version >= "3.10" and python_version < "4.0"
types-setuptools==80.9.0.20250822 ; python_version >= "3.10" and python_version < "4.0"
typing-extensions==4.14.1 ; python_version >= "3.10" and python_version < "4.0"
typing-extensions==4.15.0 ; python_version >= "3.10" and python_version < "4.0"
uritemplate==4.2.0 ; python_version >= "3.10" and python_version < "4.0"
urllib3==2.5.0 ; python_version >= "3.10" and python_version < "4.0"
uv==0.8.13 ; python_version >= "3.10" and python_version < "4.0"
virtualenv==20.32.0 ; python_version >= "3.10" and python_version < "4.0"
wcwidth==0.2.13 ; python_version >= "3.10" and python_version < "4.0"
uv==0.9.7 ; python_version >= "3.10" and python_version < "4.0"
virtualenv==20.35.4 ; python_version >= "3.10" and python_version < "4.0"
wcwidth==0.2.14 ; python_version >= "3.10" and python_version < "4.0"
wheel==0.45.1 ; python_version >= "3.10" and python_version < "4.0"
wrapt==1.17.3 ; python_version >= "3.10" and python_version < "4.0"
xattr==1.2.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "darwin"
wrapt==2.0.0 ; python_version >= "3.10" and python_version < "4.0"
xattr==1.3.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "darwin"
zipp==3.23.0 ; python_version >= "3.10" and python_version < "3.12"
zstandard==0.24.0 ; python_version >= "3.10" and python_version < "4.0"
zstandard==0.25.0 ; python_version >= "3.10" and python_version < "4.0"

View file

@ -52,10 +52,10 @@ commands =
commands =
{[base]pytest} acme certbot certbot-dns-cloudflare certbot-dns-digitalocean certbot-dns-dnsimple certbot-dns-dnsmadeeasy certbot-dns-gehirn certbot-dns-google certbot-dns-linode certbot-dns-luadns certbot-dns-nsone certbot-dns-ovh certbot-dns-rfc2136 certbot-dns-route53 certbot-dns-sakuracloud certbot-nginx certbot-apache
[testenv:py3{,10,11,12,13}]
[testenv:py3{,10,11,12,13,14}]
commands = {[testenv:py]commands}
[testenv:py3.{10,11,12,13}]
[testenv:py3.{10,11,12,13,14}]
commands = {[testenv:py]commands}
[testenv:oldest]