Update Lexicon requirements to stabilize certbot-dns-ovh behavior
diff --git a/certbot-ci/certbot_integration_tests/utils/misc.py b/certbot-ci/certbot_integration_tests/utils/misc.py
index 8260ccf5e58..dfeda4cda5b 100644
--- a/certbot-ci/certbot_integration_tests/utils/misc.py
+++ b/certbot-ci/certbot_integration_tests/utils/misc.py
@@ -52,10 +52,10 @@ def _suppress_x509_verification_warnings() -> None:
         urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
     except ImportError:
         # Handle old versions of request with vendorized urllib3
-        # pylint: disable=no-member
-        from requests.packages.urllib3.exceptions import InsecureRequestWarning
-        requests.packages.urllib3.disable_warnings(  # type: ignore[attr-defined]
-            InsecureRequestWarning)
+        # pylint: disable=no-member,line-too-long
+        from requests.packages.urllib3.exceptions import InsecureRequestWarning  # type: ignore[import-untyped]
+        requests.packages.urllib3.disable_warnings(InsecureRequestWarning)  # type: ignore[attr-defined]
+        # pylint: enable=no-member,line-too-long
 
 
 def check_until_timeout(url: str, attempts: int = 30) -> None:
diff --git a/certbot-ci/setup.py b/certbot-ci/setup.py
index 2cb8308c115..81feeb7cfef 100644
--- a/certbot-ci/setup.py
+++ b/certbot-ci/setup.py
@@ -21,7 +21,7 @@
     'pytz>=2019.3',
     'requests',
     'setuptools',
-    'types-python-dateutil'
+    'types-python-dateutil',
 ]
 
 setup(
diff --git a/certbot-dns-ovh/setup.py b/certbot-dns-ovh/setup.py
index e4c615f3f0e..e3fe41d8287 100644
--- a/certbot-dns-ovh/setup.py
+++ b/certbot-dns-ovh/setup.py
@@ -7,7 +7,7 @@
 version = '2.8.0.dev0'
 
 install_requires = [
-    'dns-lexicon>=3.14.1',
+    'dns-lexicon>=3.15.1',
     'setuptools>=41.6.0',
 ]
 
diff --git a/certbot/CHANGELOG.md b/certbot/CHANGELOG.md
index 92ceba3fb3b..900948fc635 100644
--- a/certbot/CHANGELOG.md
+++ b/certbot/CHANGELOG.md
@@ -14,6 +14,7 @@ Certbot adheres to [Semantic Versioning](https://semver.org/).
 
 ### Fixed
 
+* `certbot-dns-ovh` plugin now requires `lexicon>=3.15.1` to ensure a consistent behavior with OVH APIs.
 * Fixed a bug where argument sources weren't correctly detected in abbreviated
   arguments, short arguments, and some other circumstances
 
diff --git a/tools/oldest_constraints.txt b/tools/oldest_constraints.txt
index d667873d48c..2f09901a159 100644
--- a/tools/oldest_constraints.txt
+++ b/tools/oldest_constraints.txt
@@ -20,7 +20,7 @@ cython==0.29.36 ; python_version >= "3.8" and python_version < "3.9"
 dill==0.3.7 ; python_version >= "3.8" and python_version < "3.9"
 distlib==0.3.7 ; python_version >= "3.8" and python_version < "3.9"
 distro==1.0.1 ; python_version >= "3.8" and python_version < "3.9"
-dns-lexicon==3.14.1 ; python_version >= "3.8" and python_version < "3.9"
+dns-lexicon==3.15.1 ; python_version >= "3.8" and python_version < "3.9"
 dnspython==1.15.0 ; python_version >= "3.8" and python_version < "3.9"
 exceptiongroup==1.1.3 ; python_version >= "3.8" and python_version < "3.9"
 execnet==2.0.2 ; python_version >= "3.8" and python_version < "3.9"
@@ -41,7 +41,7 @@ josepy==1.13.0 ; python_version >= "3.8" and python_version < "3.9"
 logger==1.4 ; python_version >= "3.8" and python_version < "3.9"
 mccabe==0.7.0 ; python_version >= "3.8" and python_version < "3.9"
 mypy-extensions==1.0.0 ; python_version >= "3.8" and python_version < "3.9"
-mypy==1.5.1 ; python_version >= "3.8" and python_version < "3.9"
+mypy==1.6.0 ; python_version >= "3.8" and python_version < "3.9"
 ndg-httpsclient==0.3.2 ; python_version >= "3.8" and python_version < "3.9"
 oauth2client==4.1.3 ; python_version >= "3.8" and python_version < "3.9"
 packaging==23.2 ; python_version >= "3.8" and python_version < "3.9"
@@ -57,6 +57,7 @@ pyasn1==0.4.8 ; python_version >= "3.8" and python_version < "3.9"
 pycparser==2.14 ; python_version >= "3.8" and python_version < "3.9"
 pylint==3.0.1 ; python_version >= "3.8" and python_version < "3.9"
 pyopenssl==17.5.0 ; python_version >= "3.8" and python_version < "3.9"
+pyotp==2.9.0 ; python_version >= "3.8" and python_version < "3.9"
 pyparsing==2.2.1 ; python_version >= "3.8" and python_version < "3.9"
 pyrfc3339==1.0 ; python_version >= "3.8" and python_version < "3.9"
 pytest-cov==4.1.0 ; python_version >= "3.8" and python_version < "3.9"
@@ -75,7 +76,7 @@ s3transfer==0.3.7 ; python_version >= "3.8" and python_version < "3.9"
 setuptools==41.6.0 ; python_version >= "3.8" and python_version < "3.9"
 six==1.11.0 ; python_version >= "3.8" and python_version < "3.9"
 soupsieve==2.5 ; python_version >= "3.8" and python_version < "3.9"
-tldextract==3.6.0 ; python_version >= "3.8" and python_version < "3.9"
+tldextract==5.0.0 ; python_version >= "3.8" and python_version < "3.9"
 tomli==2.0.1 ; python_version >= "3.8" and python_version < "3.9"
 tomlkit==0.12.1 ; python_version >= "3.8" and python_version < "3.9"
 tox==1.9.2 ; python_version >= "3.8" and python_version < "3.9"
diff --git a/tools/pinning/oldest/pyproject.toml b/tools/pinning/oldest/pyproject.toml
index 302014ae595..1a4d7d71f38 100644
--- a/tools/pinning/oldest/pyproject.toml
+++ b/tools/pinning/oldest/pyproject.toml
@@ -54,7 +54,7 @@ cloudflare = "1.5.1"
 configobj = "5.0.6"
 cryptography = "3.2.1"
 distro = "1.0.1"
-dns-lexicon = "3.14.1"
+dns-lexicon = "3.15.1"
 dnspython = "1.15.0"
 funcsigs = "0.4"
 google-api-python-client = "1.6.5"
diff --git a/tools/requirements.txt b/tools/requirements.txt
index af906a4ba21..1ed0ca0ee78 100644
--- a/tools/requirements.txt
+++ b/tools/requirements.txt
@@ -17,8 +17,8 @@ babel==2.13.0 ; python_version >= "3.8" and python_version < "4.0"
 backcall==0.2.0 ; python_version >= "3.8" and python_version < "4.0"
 bcrypt==4.0.1 ; python_version >= "3.8" and python_version < "4.0"
 beautifulsoup4==4.12.2 ; python_version >= "3.8" and python_version < "4.0"
-boto3==1.28.62 ; python_version >= "3.8" and python_version < "4.0"
-botocore==1.31.62 ; python_version >= "3.8" and python_version < "4.0"
+boto3==1.28.63 ; python_version >= "3.8" and python_version < "4.0"
+botocore==1.31.63 ; python_version >= "3.8" and python_version < "4.0"
 cachecontrol==0.12.14 ; python_version >= "3.8" and python_version < "4.0"
 cachetools==5.3.1 ; python_version >= "3.8" and python_version < "4.0"
 cachy==0.3.0 ; python_version >= "3.8" and python_version < "4.0"
@@ -39,7 +39,7 @@ deprecated==1.2.14 ; python_version >= "3.8" and python_version < "4.0"
 dill==0.3.7 ; python_version >= "3.8" and python_version < "4.0"
 distlib==0.3.7 ; python_version >= "3.8" and python_version < "4.0"
 distro==1.8.0 ; python_version >= "3.8" and python_version < "4.0"
-dns-lexicon==3.15.0 ; python_version >= "3.8" and python_version < "4.0"
+dns-lexicon==3.15.1 ; python_version >= "3.8" and python_version < "4.0"
 dnspython==2.4.2 ; python_version >= "3.8" and python_version < "4.0"
 docutils==0.18.1 ; python_version >= "3.8" and python_version < "4.0"
 dulwich==0.20.50 ; python_version >= "3.8" and python_version < "4.0"
@@ -49,10 +49,10 @@ executing==2.0.0 ; python_version >= "3.8" and python_version < "4.0"
 fabric==3.2.2 ; python_version >= "3.8" and python_version < "4.0"
 filelock==3.12.4 ; python_version >= "3.8" and python_version < "4.0"
 google-api-core==2.12.0 ; python_version >= "3.8" and python_version < "4.0"
-google-api-python-client==2.102.0 ; python_version >= "3.8" and python_version < "4.0"
+google-api-python-client==2.103.0 ; python_version >= "3.8" and python_version < "4.0"
 google-auth-httplib2==0.1.1 ; python_version >= "3.8" and python_version < "4.0"
 google-auth==2.23.3 ; python_version >= "3.8" and python_version < "4.0"
-googleapis-common-protos==1.60.0 ; python_version >= "3.8" and python_version < "4.0"
+googleapis-common-protos==1.61.0 ; python_version >= "3.8" and python_version < "4.0"
 html5lib==1.1 ; python_version >= "3.8" and python_version < "4.0"
 httplib2==0.22.0 ; python_version >= "3.8" and python_version < "4.0"
 idna==3.4 ; python_version >= "3.8" and python_version < "4.0"
@@ -87,7 +87,7 @@ more-itertools==10.1.0 ; python_version >= "3.8" and python_version < "4.0"
 msgpack==1.0.7 ; python_version >= "3.8" and python_version < "4.0"
 msrest==0.7.1 ; python_version >= "3.8" and python_version < "4.0"
 mypy-extensions==1.0.0 ; python_version >= "3.8" and python_version < "4.0"
-mypy==1.5.1 ; python_version >= "3.8" and python_version < "4.0"
+mypy==1.6.0 ; python_version >= "3.8" and python_version < "4.0"
 nh3==0.2.14 ; python_version >= "3.8" and python_version < "4.0"
 oauthlib==3.2.2 ; python_version >= "3.8" and python_version < "4.0"
 packaging==23.2 ; python_version >= "3.8" and python_version < "4.0"
@@ -141,7 +141,7 @@ requests-toolbelt==0.9.1 ; python_version >= "3.8" and python_version < "4.0"
 requests==2.31.0 ; python_version >= "3.8" and python_version < "4.0"
 rfc3986==2.0.0 ; python_version >= "3.8" and python_version < "4.0"
 rich==13.6.0 ; python_version >= "3.8" and python_version < "4.0"
-rpds-py==0.10.4 ; python_version >= "3.8" and python_version < "4.0"
+rpds-py==0.10.6 ; python_version >= "3.8" and python_version < "4.0"
 rsa==4.9 ; python_version >= "3.8" and python_version < "4"
 s3transfer==0.7.0 ; python_version >= "3.8" and python_version < "4.0"
 secretstorage==3.3.3 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "linux"
@@ -162,7 +162,7 @@ sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.8" and python_version < "4.0"
 sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.8" and python_version < "4.0"
 sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.8" and python_version < "4.0"
 stack-data==0.6.3 ; python_version >= "3.8" and python_version < "4.0"
-tldextract==3.6.0 ; python_version >= "3.8" and python_version < "4.0"
+tldextract==5.0.0 ; python_version >= "3.8" and python_version < "4.0"
 tomli==2.0.1 ; python_version >= "3.8" and python_full_version <= "3.11.0a6"
 tomlkit==0.12.1 ; python_version >= "3.8" and python_version < "4.0"
 tox==3.28.0 ; python_version >= "3.8" and python_version < "4.0"

Fixes #9799

You can see in the issue the reasoning to raise the minimum version of Lexicon to 3.15.1 for certbot-dns-ovh.
