1
0
mirror of https://github.com/certbot/certbot.git synced 2026-10-23 11:28:56 +03:00

repin to sweep in latest updates (#10748)

The manual changes I made:

- Expand list of allowed types in `crypto_util.verify_signed_payload` to
match return types of
`cryptography.x509.load_pem_x509_certificate.public_key`, which have the
new mldsa and mlkem types. This required updating cryptography to 47,
and updating a couple pins in oldest to match that requirement. We have
other options we could do since we're only using the new version for the
types for now, but since we will certainly need that version soon, let's
just update now. We could also consider casting `public_key` and only
allowing the two specific types we can actually, but this seems fine and
doesn't require breaking changes.
- Revert ruff defaults to pre-16.0.0 version (see #10749)
This commit is contained in:
ohemorange
2026-08-06 10:51:24 -07:00
committed by GitHub
parent 074194c914
commit 41cc88afa1
8 changed files with 120 additions and 107 deletions

View File

@@ -26,7 +26,7 @@ classifiers = [
"Topic :: Security",
]
dependencies = [
"cryptography>=43.0.0",
"cryptography>=47.0.0",
"josepy>=2.0.0",
# PyOpenSSL>=25.0.0 is just needed to satisfy mypy right now so this dependency can probably be
# relaxed to >=24.0.0 if needed.

View File

@@ -29,7 +29,7 @@ install_requires = [
f'acme>={version}',
'ConfigArgParse>=1.5.3',
'configobj>=5.0.6',
'cryptography>=43.0.0',
'cryptography>=47.0.0',
'distro>=1.7.0',
'importlib_metadata>=8.6.1; python_version < "3.10"',
'josepy>=2.0.0',

View File

@@ -25,6 +25,12 @@ from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.asymmetric.dsa import DSAPublicKey
from cryptography.hazmat.primitives.asymmetric.ec import ECDSA
from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurvePublicKey
from cryptography.hazmat.primitives.asymmetric.mldsa import (
MLDSA44PublicKey,
MLDSA65PublicKey,
MLDSA87PublicKey,
)
from cryptography.hazmat.primitives.asymmetric.mlkem import MLKEM768PublicKey, MLKEM1024PublicKey
from cryptography.hazmat.primitives.asymmetric.padding import PKCS1v15
from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicKey
from cryptography.hazmat.primitives.serialization import Encoding
@@ -346,7 +352,9 @@ def verify_renewable_cert_sig(renewable_cert: interfaces.RenewableCert) -> None:
def verify_signed_payload(public_key: Union[DSAPublicKey, 'Ed25519PublicKey', 'Ed448PublicKey',
EllipticCurvePublicKey, RSAPublicKey,
EllipticCurvePublicKey, MLDSA44PublicKey,
MLDSA65PublicKey, MLDSA87PublicKey, MLKEM768PublicKey,
MLKEM1024PublicKey, RSAPublicKey,
'X25519PublicKey', 'X448PublicKey'],
signature: bytes, payload: bytes,
signature_hash_algorithm: hashes.HashAlgorithm) -> None:

View File

@@ -0,0 +1 @@
certbot and its acme library now require cryptography>=47.0.0.

View File

@@ -3,6 +3,9 @@ line-length = 100
extend-exclude = ['tools', 'letstest']
[lint]
# Revert default rules to pre-16.0.0 version. Expanding the list to match the new defaults is
# tracked by https://github.com/certbot/certbot/issues/10749.
select = ["E4", "E7", "E9", "F"]
# Check for PEP 585 style annotations to prevent regressions in
# https://github.com/certbot/certbot/issues/10195
extend-select = ["UP006"]

View File

@@ -1,32 +1,33 @@
# This file was generated by tools/pinning/oldest/repin.sh and can be updated using
# that script.
annotated-types==0.7.0 ; python_version == "3.10"
anyio==4.12.1 ; python_version == "3.10"
annotated-types==0.8.0 ; python_version == "3.10"
anyio==4.14.2 ; python_version == "3.10"
apacheconfig==0.3.2 ; python_version == "3.10"
asn1crypto==0.24.0 ; python_version == "3.10"
ast-serialize==0.6.0 ; python_version == "3.10"
astroid==4.0.4 ; python_version == "3.10"
beautifulsoup4==4.14.3 ; python_version == "3.10"
beautifulsoup4==4.15.0 ; 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==2026.2.25 ; python_version == "3.10"
cffi==1.14.1 ; python_version == "3.10"
certifi==2026.7.22 ; python_version == "3.10"
cffi==2.0.0 ; python_version == "3.10"
chardet==3.0.4 ; python_version == "3.10"
cloudflare==4.0.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.13.4 ; python_version == "3.10"
cryptography==43.0.0 ; python_version == "3.10"
coverage==7.15.3 ; python_version == "3.10"
cryptography==47.0.0 ; python_version == "3.10"
cython==0.29.37 ; python_version == "3.10"
dill==0.4.1 ; python_version == "3.10"
distlib==0.4.0 ; python_version == "3.10"
distlib==0.4.3 ; python_version == "3.10"
distro==1.7.0 ; python_version == "3.10"
dns-lexicon==3.15.1 ; python_version == "3.10"
dnspython==2.6.1 ; python_version == "3.10"
exceptiongroup==1.3.1 ; python_version == "3.10"
execnet==2.1.2 ; python_version == "3.10"
filelock==3.25.0 ; python_version == "3.10"
filelock==3.32.2 ; 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"
@@ -40,67 +41,67 @@ ipaddress==1.0.16 ; python_version == "3.10"
isort==8.0.1 ; python_version == "3.10"
jmespath==0.10.0 ; python_version == "3.10"
josepy==2.2.0 ; python_version == "3.10"
jsonpickle==4.1.1 ; python_version == "3.10"
librt==0.8.1 ; python_version == "3.10" and platform_python_implementation != "PyPy"
jsonpickle==4.1.2 ; python_version == "3.10"
librt==0.13.0 ; python_version == "3.10" and platform_python_implementation != "PyPy"
mccabe==0.7.0 ; python_version == "3.10"
mypy-extensions==1.1.0 ; python_version == "3.10"
mypy==1.19.1 ; python_version == "3.10"
mypy==2.3.0 ; python_version == "3.10"
ndg-httpsclient==0.3.2 ; python_version == "3.10"
oauth2client==4.1.3 ; python_version == "3.10"
packaging==26.0 ; python_version == "3.10"
packaging==26.3 ; python_version == "3.10"
parsedatetime==2.6 ; python_version == "3.10"
pathspec==1.0.4 ; python_version == "3.10"
pathspec==1.1.1 ; python_version == "3.10"
pbr==1.8.0 ; python_version == "3.10"
pip==26.0.1 ; python_version == "3.10"
platformdirs==4.9.2 ; python_version == "3.10"
pip==26.2.1 ; python_version == "3.10"
platformdirs==4.11.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"
pyasn1-modules==0.4.1 ; python_version == "3.10"
pyasn1==0.4.8 ; python_version == "3.10"
pycparser==2.14 ; python_version == "3.10"
pydantic-core==2.41.5 ; python_version == "3.10"
pydantic==2.12.5 ; python_version == "3.10"
pygments==2.19.2 ; python_version == "3.10"
pylint==4.0.5 ; python_version == "3.10"
pyopenssl==25.0.0 ; python_version == "3.10"
pyotp==2.9.0 ; python_version == "3.10"
pydantic-core==2.46.4 ; python_version == "3.10"
pydantic==2.13.4 ; python_version == "3.10"
pygments==2.20.0 ; python_version == "3.10"
pylint==4.0.6 ; python_version == "3.10"
pyopenssl==26.1.0 ; python_version == "3.10"
pyotp==2.10.0 ; python_version == "3.10"
pyparsing==3.0.0 ; python_version == "3.10"
pyrfc3339==1.0 ; python_version == "3.10"
pytest-cov==7.0.0 ; python_version == "3.10"
pytest-cov==7.1.0 ; python_version == "3.10"
pytest-xdist==3.8.0 ; python_version == "3.10"
pytest==9.0.2 ; python_version == "3.10"
pytest==9.1.1 ; 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"
python-discovery==1.1.0 ; python_version == "3.10"
pytz==2026.1.post1 ; python_version == "3.10"
pywin32==311 ; python_version == "3.10" and sys_platform == "win32"
python-discovery==1.5.1 ; python_version == "3.10"
pytz==2026.3.post1 ; python_version == "3.10"
pywin32==312 ; python_version == "3.10" and sys_platform == "win32"
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.15.4 ; python_version == "3.10"
ruff==0.16.1 ; python_version == "3.10"
s3transfer==0.5.2 ; python_version == "3.10"
setuptools==82.0.0 ; python_version == "3.10"
setuptools==83.0.0 ; python_version == "3.10"
six==1.16.0 ; python_version == "3.10"
sniffio==1.3.1 ; python_version == "3.10"
soupsieve==2.8.3 ; python_version == "3.10"
soupsieve==2.9.1 ; python_version == "3.10"
tldextract==5.3.1 ; python_version == "3.10"
tomli==2.4.0 ; python_version == "3.10"
tomlkit==0.14.0 ; python_version == "3.10"
tomli==2.4.1 ; python_version == "3.10"
tomlkit==0.15.1 ; python_version == "3.10"
tox==3.28.0 ; python_version == "3.10"
types-httplib2==0.31.2.20260125 ; python_version == "3.10"
types-httplib2==0.32.0.20260720 ; python_version == "3.10"
types-pyrfc3339==2.0.1.20250825 ; python_version == "3.10"
types-python-dateutil==2.9.0.20260302 ; python_version == "3.10"
types-pywin32==311.0.0.20251008 ; python_version == "3.10"
types-python-dateutil==2.9.0.20260716 ; python_version == "3.10"
types-pywin32==312.0.0.20260724 ; python_version == "3.10"
types-requests==2.31.0.6 ; python_version == "3.10"
types-setuptools==82.0.0.20260210 ; python_version == "3.10"
types-setuptools==83.0.0.20260724 ; python_version == "3.10"
types-urllib3==1.26.25.14 ; python_version == "3.10"
typing-extensions==4.15.0 ; python_version == "3.10"
typing-extensions==4.16.0 ; python_version == "3.10"
typing-inspection==0.4.2 ; python_version == "3.10"
uritemplate==3.0.1 ; python_version == "3.10"
urllib3==1.26.5 ; python_version == "3.10"
uv==0.10.8 ; python_version == "3.10"
virtualenv==21.1.0 ; python_version == "3.10"
wheel==0.46.3 ; python_version == "3.10"
uv==0.12.2 ; python_version == "3.10"
virtualenv==21.7.1 ; python_version == "3.10"
wheel==0.47.0 ; python_version == "3.10"

View File

@@ -57,11 +57,11 @@ asn1crypto = "0.24.0"
# we were already ignoring debian 11 for our boto* versions; this uses the versions from ubuntu 22
boto3 = "1.20.34"
botocore = "1.23.34"
cffi = "1.14.1"
cffi = "2.0.0"
chardet = "3.0.4"
cloudflare = "4.0.0"
configobj = "5.0.6"
cryptography = "43.0.0"
cryptography = "47.0.0"
distro = "1.7.0"
dns-lexicon = "3.15.1"
dnspython = "2.6.1"
@@ -75,7 +75,7 @@ ndg-httpsclient = "0.3.2"
parsedatetime = "2.6"
pbr = "1.8.0"
ply = "3.4"
pyOpenSSL = "25.0.0"
pyOpenSSL = "26.1.0"
pyRFC3339 = "1.0"
pyasn1 = "0.4.8"
pycparser = "2.14"

View File

@@ -6,65 +6,65 @@
# 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"
annotated-types==0.7.0 ; python_version >= "3.10" and python_version < "4.0"
anyio==4.13.0 ; python_version >= "3.10" and python_version < "4.0"
annotated-types==0.8.0 ; python_version >= "3.10" and python_version < "4.0"
anyio==4.14.2 ; 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.1 ; python_version >= "3.10" and python_version < "4.0"
asttokens==3.0.2 ; python_version >= "3.10" and python_version < "4.0"
babel==2.18.0 ; python_version >= "3.10" and python_version < "4.0"
backports-tarfile==1.2.0 ; python_version >= "3.10" and python_version < "3.12"
backports-zstd==1.5.0 ; python_version >= "3.10" and python_version < "3.14"
backports-zstd==1.6.0 ; python_version >= "3.10" and python_version < "3.14"
bcrypt==5.0.0 ; python_version >= "3.10" and python_version < "4.0"
beautifulsoup4==4.15.0 ; python_version >= "3.10" and python_version < "4.0"
boto3==1.43.26 ; python_version >= "3.10" and python_version < "4.0"
botocore==1.43.26 ; python_version >= "3.10" and python_version < "4.0"
boto3==1.43.65 ; python_version >= "3.10" and python_version < "4.0"
botocore==1.43.65 ; python_version >= "3.10" and python_version < "4.0"
build==1.5.0 ; python_version >= "3.10" and python_version < "4.0"
cachecontrol==0.14.4 ; python_version >= "3.10" and python_version < "4.0"
cachetools==7.1.4 ; python_version >= "3.10" and python_version < "4.0"
certifi==2026.5.20 ; python_version >= "3.10" and python_version < "4.0"
cffi==2.0.0 ; python_version >= "3.10" and python_version < "4.0"
charset-normalizer==3.4.7 ; python_version >= "3.10" and python_version < "4.0"
cachetools==7.1.7 ; python_version >= "3.10" and python_version < "4.0"
certifi==2026.7.22 ; python_version >= "3.10" and python_version < "4.0"
cffi==2.1.1 ; python_version >= "3.10" and python_version < "4.0"
charset-normalizer==3.4.9 ; python_version >= "3.10" and python_version < "4.0"
cleo==2.1.0 ; python_version >= "3.10" and python_version < "4.0"
click==8.4.1 ; python_version >= "3.10" and python_version < "4.0"
cloudflare==5.2.0 ; python_version >= "3.10" and python_version < "4.0"
click==8.4.2 ; python_version >= "3.10" and python_version < "4.0"
cloudflare==5.6.0 ; 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.5 ; python_version >= "3.10" and python_version < "4.0"
configobj==5.0.9 ; python_version >= "3.10" and python_version < "4.0"
coverage==7.14.1 ; python_version >= "3.10" and python_version < "4.0"
coverage==7.15.3 ; python_version >= "3.10" and python_version < "4.0"
crashtest==0.4.1 ; python_version >= "3.10" and python_version < "4.0"
cryptography==48.0.1 ; python_version >= "3.10" and python_version < "4.0"
cryptography==50.0.0 ; python_version >= "3.10" and python_version < "4.0"
cython==0.29.37 ; python_version >= "3.10" and python_version <= "3.12"
cython==3.2.5 ; python_version >= "3.13" and python_version < "4.0"
cython==3.2.9 ; python_version >= "3.13" and python_version < "4.0"
decorator==5.3.1 ; 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.1 ; python_version >= "3.10" and python_version < "4.0"
distlib==0.4.2 ; python_version >= "3.10" and python_version < "4.0"
distlib==0.4.3 ; 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.25.2 ; 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"
docutils==0.22.4 ; python_version >= "3.11" and python_version < "4.0"
dulwich==1.2.6 ; python_version >= "3.10" and python_version < "4.0"
dulwich==1.2.12 ; python_version >= "3.10" and python_version < "4.0"
exceptiongroup==1.3.1 ; python_version == "3.10"
execnet==2.1.2 ; 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.3 ; python_version >= "3.10" and python_version < "4.0"
fastjsonschema==2.21.2 ; python_version >= "3.10" and python_version < "4.0"
filelock==3.29.3 ; python_version >= "3.10" and python_version < "4.0"
fastjsonschema==2.22.1 ; python_version >= "3.10" and python_version < "4.0"
filelock==3.32.2 ; python_version >= "3.10" and python_version < "4.0"
findpython==0.8.0 ; python_version >= "3.10" and python_version < "4.0"
google-api-core==2.31.0 ; python_version >= "3.10" and python_version < "4.0"
google-api-python-client==2.197.0 ; python_version >= "3.10" and python_version < "4.0"
google-api-core==2.33.0 ; python_version >= "3.10" and python_version < "4.0"
google-api-python-client==2.198.0 ; python_version >= "3.10" and python_version < "4.0"
google-auth-httplib2==0.4.0 ; python_version >= "3.10" and python_version < "4.0"
google-auth==2.53.0 ; python_version >= "3.10" and python_version < "4.0"
google-auth==2.56.2 ; python_version >= "3.10" and python_version < "4.0"
googleapis-common-protos==1.75.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.31.2 ; python_version >= "3.10" and python_version < "4.0"
httplib2==0.32.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.6.1 ; python_version >= "3.10" and python_version < "4.0"
idna==3.18 ; python_version >= "3.10" and python_version < "4.0"
imagesize==1.5.0 ; python_version >= "3.13" and python_version < "4.0"
imagesize==2.0.0 ; python_version >= "3.10" and python_version <= "3.12"
imagesize==1.5.0 ; python_version >= "3.14" and python_version < "4.0"
imagesize==2.0.0 ; python_version >= "3.10" and python_version < "3.14"
importlib-metadata==9.0.0 ; python_version >= "3.10" and python_version < "3.12"
iniconfig==2.3.0 ; python_version >= "3.10" and python_version < "4.0"
installer==1.0.1 ; python_version >= "3.10" and python_version < "4.0"
@@ -72,11 +72,11 @@ 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.39.0 ; python_version == "3.10"
ipython==9.14.1 ; python_version >= "3.11" and python_version < "4.0"
ipython==9.16.1 ; python_version >= "3.11" 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"
jaraco-context==6.1.2 ; python_version >= "3.10" and python_version < "4.0"
jaraco-functools==4.5.0 ; python_version >= "3.10" and python_version < "4.0"
jaraco-functools==4.6.0 ; python_version >= "3.10" and python_version < "4.0"
jedi==0.20.0 ; 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"
@@ -93,48 +93,48 @@ more-itertools==11.1.0 ; python_version >= "3.10" and python_version < "4.0"
msgpack==1.2.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.5 ; python_version >= "3.10" and python_version < "4.0"
packaging==26.2 ; python_version >= "3.10" and python_version < "4.0"
nh3==0.3.6 ; python_version >= "3.10" and python_version < "4.0"
packaging==26.3 ; python_version >= "3.10" and python_version < "4.0"
paramiko==5.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.7 ; python_version >= "3.10" and python_version < "4.0"
pbs-installer==2026.6.2 ; python_version >= "3.10" and python_version < "4.0"
pbs-installer==2026.7.28 ; 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==26.1.2 ; python_version >= "3.10" and python_version < "4.0"
pip==26.2.1 ; 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.10.0 ; python_version >= "3.10" and python_version < "4.0"
platformdirs==4.11.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.4.0 ; python_version >= "3.10" and python_version < "4.0"
poetry-plugin-export==1.10.0 ; python_version >= "3.10" and python_version < "4.0"
poetry==2.4.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.28.0 ; python_version >= "3.10" and python_version < "4.0"
protobuf==7.35.0 ; python_version >= "3.10" and python_version < "4.0"
psutil==7.2.2 ; python_version >= "3.11" and python_version < "4.0" and sys_platform != "emscripten"
prompt-toolkit==3.0.53 ; python_version >= "3.10" and python_version < "4.0"
proto-plus==1.28.2 ; python_version >= "3.10" and python_version < "4.0"
protobuf==7.35.1 ; python_version >= "3.10" and python_version < "4.0"
psutil==7.2.2 ; python_version >= "3.11" and python_version < "4.0" and sys_platform != "emscripten" and sys_platform != "cygwin"
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.3 ; python_version >= "3.10" and python_version < "4.0"
pyasn1==0.6.4 ; python_version >= "3.10" and python_version < "4.0"
pycparser==3.0 ; python_version >= "3.10" and python_version < "4.0" and implementation_name != "PyPy"
pydantic-core==2.46.4 ; python_version >= "3.10" and python_version < "4.0"
pydantic==2.13.4 ; python_version >= "3.10" and python_version < "4.0"
pygments==2.20.0 ; python_version >= "3.10" and python_version < "4.0"
pylint==3.3.3 ; python_version >= "3.10" and python_version < "4.0"
pynacl==1.6.2 ; python_version >= "3.10" and python_version < "4.0"
pyopenssl==26.2.0 ; python_version >= "3.10" and python_version < "4.0"
pyotp==2.9.0 ; python_version >= "3.10" and python_version < "4.0"
pyopenssl==26.4.0 ; python_version >= "3.10" and python_version < "4.0"
pyotp==2.10.0 ; python_version >= "3.10" and python_version < "4.0"
pyparsing==3.3.2 ; python_version >= "3.10" and python_version < "4.0"
pyproject-api==1.10.1 ; python_version >= "3.10" and python_version < "4.0"
pyproject-api==1.11.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.1.0 ; python_version >= "3.10" and python_version < "4.0"
pytest-cov==7.1.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==9.0.3 ; python_version >= "3.10" and python_version < "4.0"
pytest==9.1.1 ; 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"
python-discovery==1.4.0 ; python_version >= "3.10" and python_version < "4.0"
python-discovery==1.5.1 ; 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==312 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32"
pyyaml==6.0.3 ; python_version >= "3.10" and python_version < "4.0"
@@ -147,17 +147,17 @@ requests==2.34.2 ; python_version >= "3.10" and python_version < "4.0"
rfc3986==2.0.0 ; python_version >= "3.10" and python_version < "4.0"
rich==15.0.0 ; python_version >= "3.10" and python_version < "4.0"
roman-numerals==4.1.0 ; python_version >= "3.11" and python_version < "4.0"
ruff==0.15.16 ; python_version >= "3.10" and python_version < "4.0"
s3transfer==0.18.0 ; python_version >= "3.10" and python_version < "4.0"
ruff==0.16.1 ; python_version >= "3.10" and python_version < "4.0"
s3transfer==0.19.2 ; python_version >= "3.10" and python_version < "4.0"
secretstorage==3.5.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.12.1 ; python_version >= "3.10" and python_version < "4.0"
setuptools==82.0.1 ; python_version >= "3.10" and python_version < "4.0"
setuptools-rust==1.13.0 ; python_version >= "3.10" and python_version < "4.0"
setuptools==83.0.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.1.1 ; python_version >= "3.10" and python_version < "4.0"
soupsieve==2.8.4 ; python_version >= "3.10" and python_version < "4.0"
soupsieve==2.9.1 ; python_version >= "3.10" and python_version < "4.0"
sphinx-rtd-theme==3.1.0 ; python_version >= "3.10" and python_version < "4.0"
sphinx==8.1.3 ; python_version == "3.10"
sphinx==9.0.4 ; python_version == "3.11"
@@ -173,26 +173,26 @@ stack-data==0.6.3 ; python_version >= "3.10" and python_version < "4.0"
tldextract==5.3.1 ; python_version >= "3.10" and python_version < "4.0"
tomli-w==1.2.0 ; python_version >= "3.10" and python_version < "4.0"
tomli==2.4.1 ; python_version == "3.10"
tomlkit==0.15.0 ; python_version >= "3.10" and python_version < "4.0"
tomlkit==0.15.1 ; python_version >= "3.10" and python_version < "4.0"
towncrier==25.8.0 ; python_version >= "3.10" and python_version < "4.0"
tox==4.55.1 ; python_version >= "3.10" and python_version < "4.0"
traitlets==5.15.1 ; python_version >= "3.10" and python_version < "4.0"
tox==4.58.0 ; python_version >= "3.10" and python_version < "4.0"
traitlets==5.16.1 ; python_version >= "3.10" and python_version < "4.0"
trove-classifiers==2026.6.1.19 ; 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.2.20260408 ; python_version >= "3.10" and python_version < "4.0"
twine==7.0.0 ; python_version >= "3.10" and python_version < "4.0"
types-httplib2==0.32.0.20260720 ; 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.20260518 ; python_version >= "3.10" and python_version < "4.0"
types-pywin32==312.0.0.20260609 ; python_version >= "3.10" and python_version < "4.0"
types-requests==2.33.0.20260518 ; python_version >= "3.10" and python_version < "4.0"
types-setuptools==82.0.0.20260518 ; python_version >= "3.10" and python_version < "4.0"
typing-extensions==4.15.0 ; python_version >= "3.10" and python_version < "4.0"
types-python-dateutil==2.9.0.20260716 ; python_version >= "3.10" and python_version < "4.0"
types-pywin32==312.0.0.20260724 ; python_version >= "3.10" and python_version < "4.0"
types-requests==2.33.0.20260712 ; python_version >= "3.10" and python_version < "4.0"
types-setuptools==83.0.0.20260724 ; python_version >= "3.10" and python_version < "4.0"
typing-extensions==4.16.0 ; python_version >= "3.10" and python_version < "4.0"
typing-inspection==0.4.2 ; python_version >= "3.10" and python_version < "4.0"
uritemplate==4.2.0 ; python_version >= "3.10" and python_version < "4.0"
urllib3==2.7.0 ; python_version >= "3.10" and python_version < "4.0"
uv==0.11.20 ; python_version >= "3.10" and python_version < "4.0"
virtualenv==21.4.2 ; python_version >= "3.10" and python_version < "4.0"
wcwidth==0.8.1 ; python_version >= "3.10" and python_version < "4.0"
uv==0.12.2 ; python_version >= "3.10" and python_version < "4.0"
virtualenv==21.7.1 ; python_version >= "3.10" and python_version < "4.0"
wcwidth==0.8.2 ; python_version >= "3.10" and python_version < "4.0"
wheel==0.47.0 ; python_version >= "3.10" and python_version < "4.0"
wrapt==2.2.1 ; python_version >= "3.10" and python_version < "4.0"
wrapt==2.3.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==4.1.0 ; python_version >= "3.10" and python_version < "3.12"