From 087cb4d1f44b61f8647f9de22bc66a0e6d0ed883 Mon Sep 17 00:00:00 2001 From: Brad Warren Date: Wed, 4 Dec 2024 14:55:20 -0800 Subject: [PATCH] remove python 3.8 support (#10077) fixes https://github.com/certbot/certbot/issues/10035. you can compare this to the PR that did this for python 3.7 at https://github.com/certbot/certbot/pull/9792 i agree with erica's comment at https://github.com/certbot/certbot/issues/10035#issuecomment-2452212686, but felt this PR was already getting pretty large so i did that in a second PR at https://github.com/certbot/certbot/pull/10076 --- .../templates/jobs/extended-tests-jobs.yml | 7 +- .../templates/jobs/standard-tests-jobs.yml | 10 +- acme/acme/__init__.py | 8 - acme/setup.py | 3 +- certbot-apache/setup.py | 3 +- certbot-ci/setup.py | 3 +- certbot-compatibility-test/Dockerfile | 2 +- certbot-compatibility-test/setup.py | 3 +- certbot-dns-cloudflare/setup.py | 3 +- certbot-dns-digitalocean/setup.py | 3 +- certbot-dns-dnsimple/setup.py | 3 +- certbot-dns-dnsmadeeasy/setup.py | 3 +- certbot-dns-gehirn/setup.py | 3 +- certbot-dns-google/setup.py | 3 +- certbot-dns-linode/setup.py | 3 +- certbot-dns-luadns/setup.py | 3 +- certbot-dns-nsone/setup.py | 3 +- certbot-dns-ovh/setup.py | 3 +- certbot-dns-rfc2136/setup.py | 8 +- certbot-dns-route53/setup.py | 3 +- certbot-dns-sakuracloud/setup.py | 3 +- certbot-nginx/setup.py | 3 +- certbot/CHANGELOG.md | 2 + certbot/certbot/__init__.py | 9 - certbot/certbot/_internal/main.py | 4 - .../_internal/tests/compat/filesystem_test.py | 4 - certbot/certbot/_internal/tests/hook_test.py | 2 - certbot/certbot/compat/filesystem.py | 35 +- certbot/setup.py | 3 +- letstest/setup.py | 3 +- pytest.ini | 15 +- tools/oldest_constraints.txt | 192 +++++----- tools/pinning/current/pyproject.toml | 2 +- tools/pinning/oldest/pyproject.toml | 4 +- tools/requirements.txt | 359 +++++++++--------- tools/venv.py | 2 +- tox.ini | 2 +- windows-installer/setup.py | 3 +- 38 files changed, 329 insertions(+), 398 deletions(-) diff --git a/.azure-pipelines/templates/jobs/extended-tests-jobs.yml b/.azure-pipelines/templates/jobs/extended-tests-jobs.yml index c2779a076..4a804a362 100644 --- a/.azure-pipelines/templates/jobs/extended-tests-jobs.yml +++ b/.azure-pipelines/templates/jobs/extended-tests-jobs.yml @@ -20,14 +20,11 @@ jobs: 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: - PYTHON_VERSION: 3.8 + PYTHON_VERSION: 3.9 TOXENV: integration-certbot-oldest linux-integration-nginx-oldest: - PYTHON_VERSION: 3.8 + PYTHON_VERSION: 3.9 TOXENV: integration-nginx-oldest - linux-py38-integration: - PYTHON_VERSION: 3.8 - TOXENV: integration linux-py39-integration: PYTHON_VERSION: 3.9 TOXENV: integration diff --git a/.azure-pipelines/templates/jobs/standard-tests-jobs.yml b/.azure-pipelines/templates/jobs/standard-tests-jobs.yml index e1474b152..e53d1cce1 100644 --- a/.azure-pipelines/templates/jobs/standard-tests-jobs.yml +++ b/.azure-pipelines/templates/jobs/standard-tests-jobs.yml @@ -12,13 +12,13 @@ jobs: PIP_USE_PEP517: "true" linux-oldest: IMAGE_NAME: ubuntu-22.04 - PYTHON_VERSION: 3.8 + PYTHON_VERSION: 3.9 TOXENV: oldest - linux-py38: + linux-py39: # linux unit tests with the oldest python we support IMAGE_NAME: ubuntu-22.04 - PYTHON_VERSION: 3.8 - TOXENV: py38 + PYTHON_VERSION: 3.9 + TOXENV: py39 linux-cover: # linux unit+cover tests with the newest python we support IMAGE_NAME: ubuntu-22.04 @@ -47,6 +47,6 @@ jobs: - template: ../steps/tox-steps.yml - job: test_sphinx_builds pool: - vmImage: ubuntu-20.04 + vmImage: ubuntu-22.04 steps: - template: ../steps/sphinx-steps.yml diff --git a/acme/acme/__init__.py b/acme/acme/__init__.py index 51034a301..1e21b5896 100644 --- a/acme/acme/__init__.py +++ b/acme/acme/__init__.py @@ -6,7 +6,6 @@ This module is an implementation of the `ACME protocol`_. """ import sys -import warnings # This code exists to keep backwards compatibility with people using acme.jose # before it became the standalone josepy package. @@ -20,10 +19,3 @@ for mod in list(sys.modules): # preserved (acme.jose.* is josepy.*) if mod == 'josepy' or mod.startswith('josepy.'): sys.modules['acme.' + mod.replace('josepy', 'jose', 1)] = sys.modules[mod] - -if sys.version_info[:2] == (3, 8): - warnings.warn( - "Python 3.8 support will be dropped in the next planned release of " - "acme. Please upgrade your Python version.", - PendingDeprecationWarning, - ) # pragma: no cover diff --git a/acme/setup.py b/acme/setup.py index 9ebab871c..c060b6e98 100644 --- a/acme/setup.py +++ b/acme/setup.py @@ -45,14 +45,13 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-apache/setup.py b/certbot-apache/setup.py index b3a8be95e..a40b8bdf6 100644 --- a/certbot-apache/setup.py +++ b/certbot-apache/setup.py @@ -29,7 +29,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -38,7 +38,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-ci/setup.py b/certbot-ci/setup.py index 1404cdc02..c76e636c2 100644 --- a/certbot-ci/setup.py +++ b/certbot-ci/setup.py @@ -33,14 +33,13 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 3 - Alpha', 'Intended Audience :: Developers', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-compatibility-test/Dockerfile b/certbot-compatibility-test/Dockerfile index 091ab5f85..34a530979 100644 --- a/certbot-compatibility-test/Dockerfile +++ b/certbot-compatibility-test/Dockerfile @@ -1,4 +1,4 @@ -FROM docker.io/python:3.8-buster +FROM docker.io/python:3.11-buster LABEL maintainer="Brad Warren " # This does not include the dependencies needed to build cryptography. See diff --git a/certbot-compatibility-test/setup.py b/certbot-compatibility-test/setup.py index eb597c966..0fa927d60 100644 --- a/certbot-compatibility-test/setup.py +++ b/certbot-compatibility-test/setup.py @@ -18,14 +18,13 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 3 - Alpha', 'Intended Audience :: Developers', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-dns-cloudflare/setup.py b/certbot-dns-cloudflare/setup.py index 54cb11033..75479c7d1 100644 --- a/certbot-dns-cloudflare/setup.py +++ b/certbot-dns-cloudflare/setup.py @@ -40,7 +40,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -49,7 +49,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-dns-digitalocean/setup.py b/certbot-dns-digitalocean/setup.py index 05752d63b..6c32cfdb8 100644 --- a/certbot-dns-digitalocean/setup.py +++ b/certbot-dns-digitalocean/setup.py @@ -38,7 +38,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -47,7 +47,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-dns-dnsimple/setup.py b/certbot-dns-dnsimple/setup.py index 364f894e6..356b60a93 100644 --- a/certbot-dns-dnsimple/setup.py +++ b/certbot-dns-dnsimple/setup.py @@ -40,7 +40,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -49,7 +49,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-dns-dnsmadeeasy/setup.py b/certbot-dns-dnsmadeeasy/setup.py index 1b697e76e..f48ced6cb 100644 --- a/certbot-dns-dnsmadeeasy/setup.py +++ b/certbot-dns-dnsmadeeasy/setup.py @@ -38,7 +38,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -47,7 +47,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-dns-gehirn/setup.py b/certbot-dns-gehirn/setup.py index 9b9f09d07..2a983ac9f 100644 --- a/certbot-dns-gehirn/setup.py +++ b/certbot-dns-gehirn/setup.py @@ -38,7 +38,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -47,7 +47,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-dns-google/setup.py b/certbot-dns-google/setup.py index bbf78fb8e..4e9bceec6 100644 --- a/certbot-dns-google/setup.py +++ b/certbot-dns-google/setup.py @@ -39,7 +39,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -48,7 +48,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-dns-linode/setup.py b/certbot-dns-linode/setup.py index 35958f408..bc98297f7 100644 --- a/certbot-dns-linode/setup.py +++ b/certbot-dns-linode/setup.py @@ -38,7 +38,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -47,7 +47,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-dns-luadns/setup.py b/certbot-dns-luadns/setup.py index 8c807af4e..b9911bc44 100644 --- a/certbot-dns-luadns/setup.py +++ b/certbot-dns-luadns/setup.py @@ -38,7 +38,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -47,7 +47,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-dns-nsone/setup.py b/certbot-dns-nsone/setup.py index 3de90ded3..a9aa75c92 100644 --- a/certbot-dns-nsone/setup.py +++ b/certbot-dns-nsone/setup.py @@ -38,7 +38,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -47,7 +47,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-dns-ovh/setup.py b/certbot-dns-ovh/setup.py index cea8ffb71..03b451f65 100644 --- a/certbot-dns-ovh/setup.py +++ b/certbot-dns-ovh/setup.py @@ -38,7 +38,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -47,7 +47,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-dns-rfc2136/setup.py b/certbot-dns-rfc2136/setup.py index 3d763382a..f75c8aa7d 100644 --- a/certbot-dns-rfc2136/setup.py +++ b/certbot-dns-rfc2136/setup.py @@ -7,7 +7,10 @@ from setuptools import setup version = '3.1.0.dev0' install_requires = [ - 'dnspython>=1.15.0', + # This version was chosen because it is the version packaged in RHEL 9 and Debian unstable. It + # is possible this requirement could be relaxed to allow for an even older version of dnspython + # if necessary. + 'dnspython>=2.6.1', ] if os.environ.get('SNAP_BUILD'): @@ -38,7 +41,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -47,7 +50,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-dns-route53/setup.py b/certbot-dns-route53/setup.py index ad3ecc2f3..f187c947d 100644 --- a/certbot-dns-route53/setup.py +++ b/certbot-dns-route53/setup.py @@ -38,7 +38,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -47,7 +47,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-dns-sakuracloud/setup.py b/certbot-dns-sakuracloud/setup.py index af158fffc..5fe15004d 100644 --- a/certbot-dns-sakuracloud/setup.py +++ b/certbot-dns-sakuracloud/setup.py @@ -38,7 +38,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -47,7 +47,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot-nginx/setup.py b/certbot-nginx/setup.py index 43a21db94..fb3e075f0 100644 --- a/certbot-nginx/setup.py +++ b/certbot-nginx/setup.py @@ -27,7 +27,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Plugins', @@ -36,7 +36,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/certbot/CHANGELOG.md b/certbot/CHANGELOG.md index f20ce3839..b903a4d92 100644 --- a/certbot/CHANGELOG.md +++ b/certbot/CHANGELOG.md @@ -10,6 +10,8 @@ Certbot adheres to [Semantic Versioning](https://semver.org/). ### Changed +* Python 3.8 support was removed. +* certbot-dns-rfc2136's minimum required version of dnspython is now 2.6.1. * Updated our Docker images to be based on Alpine Linux 3.20. * Our runtime dependency on setuptools has been dropped from all Certbot components. diff --git a/certbot/certbot/__init__.py b/certbot/certbot/__init__.py index 01e12b3a6..5d408af20 100644 --- a/certbot/certbot/__init__.py +++ b/certbot/certbot/__init__.py @@ -1,13 +1,4 @@ """Certbot client.""" -import sys -import warnings # version number like 1.2.3a0, must have at least 2 parts, like 1.2 __version__ = '3.1.0.dev0' - -if sys.version_info[:2] == (3, 8): - warnings.warn( - "Python 3.8 support will be dropped in the next planned release of " - "certbot. Please upgrade your Python version.", - PendingDeprecationWarning, - ) # pragma: no cover diff --git a/certbot/certbot/_internal/main.py b/certbot/certbot/_internal/main.py index 107443b5f..2fa80e364 100644 --- a/certbot/certbot/_internal/main.py +++ b/certbot/certbot/_internal/main.py @@ -1866,10 +1866,6 @@ def main(cli_args: Optional[List[str]] = None) -> Optional[Union[str, int]]: if config.func != plugins_cmd: # pylint: disable=comparison-with-callable raise - if sys.version_info[:2] == (3, 8): - logger.warning("Python 3.8 support will be dropped in the next planned release " - "of Certbot - please upgrade your Python version.") - with make_displayer(config) as displayer: display_obj.set_display(displayer) diff --git a/certbot/certbot/_internal/tests/compat/filesystem_test.py b/certbot/certbot/_internal/tests/compat/filesystem_test.py index 303fbe92b..8004282d4 100644 --- a/certbot/certbot/_internal/tests/compat/filesystem_test.py +++ b/certbot/certbot/_internal/tests/compat/filesystem_test.py @@ -631,10 +631,6 @@ class ReadlinkTest(unittest.TestCase): @unittest.skipIf(POSIX_MODE, reason='Tests specific to Windows') @mock.patch("certbot.compat.filesystem.os.readlink") def test_normal_path_windows(self, mock_readlink): - # Python <3.8 - mock_readlink.return_value = "C:\\short\\path" - assert filesystem.readlink("dummy") == "C:\\short\\path" - # Python >=3.8 (os.readlink always returns the extended form) mock_readlink.return_value = "\\\\?\\C:\\short\\path" assert filesystem.readlink("dummy") == "C:\\short\\path" diff --git a/certbot/certbot/_internal/tests/hook_test.py b/certbot/certbot/_internal/tests/hook_test.py index 7581a9d44..798f2ac83 100644 --- a/certbot/certbot/_internal/tests/hook_test.py +++ b/certbot/certbot/_internal/tests/hook_test.py @@ -218,7 +218,6 @@ class PostHookTest(HookTest): assert not self._call_with_mock_execute(self.config, []).called assert not self._get_eventually() - @unittest.skipIf(pyver_lt(3, 8), "Python 3.8+ required for this test.") def test_renew_env(self): self.config.verb = "certonly" args = self._call_with_mock_execute(self.config, ["success.org"]).call_args @@ -308,7 +307,6 @@ class RunSavedPostHooksTest(HookTest): mock_execute = self._call_with_mock_execute_and_eventually([], []) mock_execute.assert_called_once_with("post-hook", self.eventually[0], env=mock.ANY) - @unittest.skipIf(pyver_lt(3, 8), "Python 3.8+ required for this test.") def test_env(self): self.eventually = ["foo"] mock_execute = self._call_with_mock_execute_and_eventually(["success.org"], ["failed.org"]) diff --git a/certbot/certbot/compat/filesystem.py b/certbot/certbot/compat/filesystem.py index 13fc44098..44a5cd68b 100644 --- a/certbot/certbot/compat/filesystem.py +++ b/certbot/certbot/compat/filesystem.py @@ -5,11 +5,9 @@ from contextlib import contextmanager import errno import os # pylint: disable=os-module-forbidden import stat -import sys from typing import Any from typing import Dict from typing import Generator -from typing import List from typing import Optional try: @@ -370,27 +368,14 @@ def realpath(file_path: str) -> str: """ original_path = file_path - # Since Python 3.8, os.path.realpath also resolves symlinks on Windows. - if POSIX_MODE or sys.version_info >= (3, 8): - path = os.path.realpath(file_path) - if os.path.islink(path): - # If path returned by realpath is still a link, it means that it failed to - # resolve the symlink because of a loop. - # See realpath code: https://github.com/python/cpython/blob/master/Lib/posixpath.py - raise RuntimeError('Error, link {0} is a loop!'.format(original_path)) - return path - - inspected_paths: List[str] = [] - while os.path.islink(file_path): - link_path = file_path - file_path = os.readlink(file_path) - if not os.path.isabs(file_path): - file_path = os.path.join(os.path.dirname(link_path), file_path) - if file_path in inspected_paths: - raise RuntimeError('Error, link {0} is a loop!'.format(original_path)) - inspected_paths.append(file_path) - - return os.path.abspath(file_path) + # os.path.realpath also resolves symlinks + path = os.path.realpath(file_path) + if os.path.islink(path): + # If path returned by realpath is still a link, it means that it failed to + # resolve the symlink because of a loop. + # See realpath code: https://github.com/python/cpython/blob/master/Lib/posixpath.py + raise RuntimeError('Error, link {0} is a loop!'.format(original_path)) + return path def readlink(link_path: str) -> str: @@ -404,11 +389,11 @@ def readlink(link_path: str) -> str: """ path = os.readlink(link_path) - if POSIX_MODE or not path.startswith('\\\\?\\'): + if POSIX_MODE: return path # At this point, we know we are on Windows and that the path returned uses - # the extended form which is done for all paths in Python 3.8+ + # the extended form which begins with the prefix \\?\ # Max length of a normal path is 260 characters on Windows, including the non printable # termination character "". The termination character is not included in Python diff --git a/certbot/setup.py b/certbot/setup.py index 27070bd91..aed96120f 100644 --- a/certbot/setup.py +++ b/certbot/setup.py @@ -99,7 +99,7 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Console', @@ -109,7 +109,6 @@ setup( 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/letstest/setup.py b/letstest/setup.py index 4f0720d45..6bb84b6e0 100644 --- a/letstest/setup.py +++ b/letstest/setup.py @@ -9,14 +9,13 @@ setup( author='Certbot Project', author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/pytest.ini b/pytest.ini index 55c8435fd..433033e53 100644 --- a/pytest.ini +++ b/pytest.ini @@ -11,27 +11,22 @@ # we release breaking changes. # # The current warnings being ignored are: -# 1) A deprecation warning is raised in dnspython==1.15.0 in the oldest tests for -# certbot-dns-rfc2136. -# 2) pytest-cov uses deprecated functionality in pytest-xdist, to be resolved by +# 1) pytest-cov uses deprecated functionality in pytest-xdist, to be resolved by # https://github.com/pytest-dev/pytest-cov/issues/557. -# 3) requests-toolbelt<0.10.1 can cause this warning to be raised during our +# 2) requests-toolbelt<0.10.1 can cause this warning to be raised during our # unit tests. This warning should be ignored until our (transitive) # dependency on requests-toolbelt is removed or our pinned version can be # updated. -# 4) Ignore DeprecationWarning for datetime.utcfromtimestamp() triggered +# 3) Ignore DeprecationWarning for datetime.utcfromtimestamp() triggered # from dateutil. See https://github.com/dateutil/dateutil/issues/1314. -# 5) Ignoring this allows us to continue to update pyOpenSSL (one of our crypto +# 4) Ignoring this allows us to continue to update pyOpenSSL (one of our crypto # dependencies) until https://github.com/certbot/certbot/issues/9828 is resolved. -# 6) Similarly to 6), CSR support is deprecated in pyOpenSSL since 24.2, we silence +# 5) Similarly to 6), CSR support is deprecated in pyOpenSSL since 24.2, we silence # the warning until https://github.com/certbot/certbot/issues/9992 is resolved. -# 7) Ignore our own PendingDeprecationWarning about Python 3.8 soon to be dropped. filterwarnings = error - ignore:decodestring\(\) is a deprecated alias:DeprecationWarning:dns ignore:.*rsyncdir:DeprecationWarning ignore:'urllib3.contrib.pyopenssl:DeprecationWarning:requests_toolbelt ignore:.*datetime.utcfromtimestamp\(\) is deprecated:DeprecationWarning:dateutil ignore:X509Extension support in pyOpenSSL is deprecated:DeprecationWarning ignore:CSR support in pyOpenSSL is deprecated:DeprecationWarning - ignore:Python 3.8 support will be dropped:PendingDeprecationWarning diff --git a/tools/oldest_constraints.txt b/tools/oldest_constraints.txt index 03d267b17..92189b9ce 100644 --- a/tools/oldest_constraints.txt +++ b/tools/oldest_constraints.txt @@ -1,98 +1,98 @@ # This file was generated by tools/pinning/oldest/repin.sh and can be updated using # that script. -apacheconfig==0.3.2 ; python_version >= "3.8" and python_version < "3.9" -asn1crypto==0.24.0 ; python_version >= "3.8" and python_version < "3.9" -astroid==3.2.4 ; python_version >= "3.8" and python_version < "3.9" -beautifulsoup4==4.12.3 ; python_version >= "3.8" and python_version < "3.9" -boto3==1.15.15 ; python_version >= "3.8" and python_version < "3.9" -botocore==1.18.15 ; python_version >= "3.8" and python_version < "3.9" -cachetools==5.5.0 ; python_version >= "3.8" and python_version < "3.9" -certifi==2024.8.30 ; python_version >= "3.8" and python_version < "3.9" -cffi==1.12.3 ; python_version >= "3.8" and python_version < "3.9" -chardet==3.0.4 ; python_version >= "3.8" and python_version < "3.9" -cloudflare==1.5.1 ; python_version >= "3.8" and python_version < "3.9" -colorama==0.4.6 ; python_version >= "3.8" and python_version < "3.9" and sys_platform == "win32" -configargparse==1.5.3 ; python_version >= "3.8" and python_version < "3.9" -configobj==5.0.6 ; python_version >= "3.8" and python_version < "3.9" -coverage==7.6.1 ; python_version >= "3.8" and python_version < "3.9" -cryptography==3.2.1 ; python_version >= "3.8" and python_version < "3.9" -cython==0.29.37 ; python_version >= "3.8" and python_version < "3.9" -dill==0.3.9 ; python_version >= "3.8" and python_version < "3.9" -distlib==0.3.9 ; 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.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.2.2 ; python_version >= "3.8" and python_version < "3.9" -execnet==2.1.1 ; python_version >= "3.8" and python_version < "3.9" -filelock==3.16.1 ; python_version >= "3.8" and python_version < "3.9" -funcsigs==0.4 ; python_version >= "3.8" and python_version < "3.9" -future==1.0.0 ; python_version >= "3.8" and python_version < "3.9" -google-api-python-client==1.6.5 ; python_version >= "3.8" and python_version < "3.9" -google-auth==2.16.0 ; python_version >= "3.8" and python_version < "3.9" -httplib2==0.9.2 ; python_version >= "3.8" and python_version < "3.9" -idna==2.6 ; python_version >= "3.8" and python_version < "3.9" -importlib-metadata==4.6.4 ; python_version >= "3.8" and python_version < "3.9" -importlib-resources==6.4.5 ; python_version >= "3.8" and python_version < "3.9" -iniconfig==2.0.0 ; python_version >= "3.8" and python_version < "3.9" -ipaddress==1.0.16 ; python_version >= "3.8" and python_version < "3.9" -isort==5.13.2 ; python_version >= "3.8" and python_version < "3.9" -jmespath==0.10.0 ; python_version >= "3.8" and python_version < "3.9" -josepy==1.14.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.13.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==24.2 ; python_version >= "3.8" and python_version < "3.9" -parsedatetime==2.4 ; python_version >= "3.8" and python_version < "3.9" -pbr==1.8.0 ; python_version >= "3.8" and python_version < "3.9" -pip==24.3.1 ; python_version >= "3.8" and python_version < "3.9" -platformdirs==4.3.6 ; python_version >= "3.8" and python_version < "3.9" -pluggy==1.5.0 ; python_version >= "3.8" and python_version < "3.9" -ply==3.4 ; python_version >= "3.8" and python_version < "3.9" -py==1.11.0 ; python_version >= "3.8" and python_version < "3.9" -pyasn1-modules==0.4.1 ; python_version >= "3.8" and python_version < "3.9" -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.2.7 ; 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==5.0.0 ; python_version >= "3.8" and python_version < "3.9" -pytest-xdist==3.6.1 ; python_version >= "3.8" and python_version < "3.9" -pytest==8.3.4 ; python_version >= "3.8" and python_version < "3.9" -python-augeas==0.5.0 ; python_version >= "3.8" and python_version < "3.9" -python-dateutil==2.9.0.post0 ; python_version >= "3.8" and python_version < "3.9" -python-digitalocean==1.11 ; python_version >= "3.8" and python_version < "3.9" -pytz==2019.3 ; python_version >= "3.8" and python_version < "3.9" -pywin32==308 ; python_version >= "3.8" and python_version < "3.9" and sys_platform == "win32" -pyyaml==6.0.2 ; python_version >= "3.8" and python_version < "3.9" -requests-file==2.1.0 ; python_version >= "3.8" and python_version < "3.9" -requests==2.20.0 ; python_version >= "3.8" and python_version < "3.9" -rsa==4.9 ; python_version >= "3.8" and python_version < "3.9" -s3transfer==0.3.7 ; python_version >= "3.8" and python_version < "3.9" -setuptools==75.3.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.6 ; python_version >= "3.8" and python_version < "3.9" -tldextract==5.1.2 ; python_version >= "3.8" and python_version < "3.9" -tomli==2.2.1 ; python_version >= "3.8" and python_version < "3.9" -tomlkit==0.13.2 ; python_version >= "3.8" and python_version < "3.9" -tox==1.9.2 ; python_version >= "3.8" and python_version < "3.9" -types-cryptography==3.3.23.2 ; python_version >= "3.8" and python_version < "3.9" -types-httplib2==0.22.0.20240310 ; python_version >= "3.8" and python_version < "3.9" -types-pyopenssl==23.0.0.0 ; python_version >= "3.8" and python_version < "3.9" -types-pyrfc3339==2.0.1.20241107 ; python_version >= "3.8" and python_version < "3.9" -types-python-dateutil==2.9.0.20241003 ; python_version >= "3.8" and python_version < "3.9" -types-pytz==2024.2.0.20241003 ; python_version >= "3.8" and python_version < "3.9" -types-pywin32==308.0.0.20241128 ; python_version >= "3.8" and python_version < "3.9" -types-requests==2.31.0.6 ; python_version >= "3.8" and python_version < "3.9" -types-setuptools==75.6.0.20241126 ; python_version >= "3.8" and python_version < "3.9" -types-urllib3==1.26.25.14 ; python_version >= "3.8" and python_version < "3.9" -typing-extensions==4.12.2 ; python_version >= "3.8" and python_version < "3.9" -uritemplate==3.0.1 ; python_version >= "3.8" and python_version < "3.9" -urllib3==1.24.2 ; python_version >= "3.8" and python_version < "3.9" -virtualenv==20.28.0 ; python_version >= "3.8" and python_version < "3.9" -wheel==0.45.1 ; python_version >= "3.8" and python_version < "3.9" -zipp==3.20.2 ; python_version >= "3.8" and python_version < "3.9" +apacheconfig==0.3.2 ; python_version >= "3.9" and python_version < "3.10" +asn1crypto==0.24.0 ; python_version >= "3.9" and python_version < "3.10" +astroid==3.3.5 ; python_version >= "3.9" and python_version < "3.10" +beautifulsoup4==4.12.3 ; python_version >= "3.9" and python_version < "3.10" +boto3==1.15.15 ; python_version >= "3.9" and python_version < "3.10" +botocore==1.18.15 ; python_version >= "3.9" and python_version < "3.10" +cachetools==5.5.0 ; python_version >= "3.9" and python_version < "3.10" +certifi==2024.8.30 ; python_version >= "3.9" and python_version < "3.10" +cffi==1.12.3 ; python_version >= "3.9" and python_version < "3.10" +chardet==3.0.4 ; python_version >= "3.9" and python_version < "3.10" +cloudflare==1.5.1 ; python_version >= "3.9" and python_version < "3.10" +colorama==0.4.6 ; python_version >= "3.9" and python_version < "3.10" and sys_platform == "win32" +configargparse==1.5.3 ; python_version >= "3.9" and python_version < "3.10" +configobj==5.0.6 ; python_version >= "3.9" and python_version < "3.10" +coverage==7.6.8 ; python_version >= "3.9" and python_version < "3.10" +cryptography==3.2.1 ; python_version >= "3.9" and python_version < "3.10" +cython==0.29.37 ; python_version >= "3.9" and python_version < "3.10" +dill==0.3.9 ; python_version >= "3.9" and python_version < "3.10" +distlib==0.3.9 ; python_version >= "3.9" and python_version < "3.10" +distro==1.0.1 ; python_version >= "3.9" and python_version < "3.10" +dns-lexicon==3.15.1 ; python_version >= "3.9" and python_version < "3.10" +dnspython==2.6.1 ; python_version >= "3.9" and python_version < "3.10" +exceptiongroup==1.2.2 ; python_version >= "3.9" and python_version < "3.10" +execnet==2.1.1 ; python_version >= "3.9" and python_version < "3.10" +filelock==3.16.1 ; python_version >= "3.9" and python_version < "3.10" +funcsigs==0.4 ; python_version >= "3.9" and python_version < "3.10" +future==1.0.0 ; python_version >= "3.9" and python_version < "3.10" +google-api-python-client==1.6.5 ; python_version >= "3.9" and python_version < "3.10" +google-auth==2.16.0 ; python_version >= "3.9" and python_version < "3.10" +httplib2==0.9.2 ; python_version >= "3.9" and python_version < "3.10" +idna==2.6 ; python_version >= "3.9" and python_version < "3.10" +importlib-metadata==4.6.4 ; python_version >= "3.9" and python_version < "3.10" +importlib-resources==6.4.5 ; python_version >= "3.9" and python_version < "3.10" +iniconfig==2.0.0 ; python_version >= "3.9" and python_version < "3.10" +ipaddress==1.0.16 ; python_version >= "3.9" and python_version < "3.10" +isort==5.13.2 ; python_version >= "3.9" and python_version < "3.10" +jmespath==0.10.0 ; python_version >= "3.9" and python_version < "3.10" +josepy==1.14.0 ; python_version >= "3.9" and python_version < "3.10" +logger==1.4 ; python_version >= "3.9" and python_version < "3.10" +mccabe==0.7.0 ; python_version >= "3.9" and python_version < "3.10" +mypy-extensions==1.0.0 ; python_version >= "3.9" and python_version < "3.10" +mypy==1.13.0 ; python_version >= "3.9" and python_version < "3.10" +ndg-httpsclient==0.3.2 ; python_version >= "3.9" and python_version < "3.10" +oauth2client==4.1.3 ; python_version >= "3.9" and python_version < "3.10" +packaging==24.2 ; python_version >= "3.9" and python_version < "3.10" +parsedatetime==2.4 ; python_version >= "3.9" and python_version < "3.10" +pbr==1.8.0 ; python_version >= "3.9" and python_version < "3.10" +pip==24.3.1 ; python_version >= "3.9" and python_version < "3.10" +platformdirs==4.3.6 ; python_version >= "3.9" and python_version < "3.10" +pluggy==1.5.0 ; python_version >= "3.9" and python_version < "3.10" +ply==3.4 ; python_version >= "3.9" and python_version < "3.10" +py==1.11.0 ; python_version >= "3.9" and python_version < "3.10" +pyasn1-modules==0.4.1 ; python_version >= "3.9" and python_version < "3.10" +pyasn1==0.4.8 ; python_version >= "3.9" and python_version < "3.10" +pycparser==2.14 ; python_version >= "3.9" and python_version < "3.10" +pylint==3.3.2 ; python_version >= "3.9" and python_version < "3.10" +pyopenssl==17.5.0 ; python_version >= "3.9" and python_version < "3.10" +pyotp==2.9.0 ; python_version >= "3.9" and python_version < "3.10" +pyparsing==2.2.1 ; python_version >= "3.9" and python_version < "3.10" +pyrfc3339==1.0 ; python_version >= "3.9" and python_version < "3.10" +pytest-cov==6.0.0 ; python_version >= "3.9" and python_version < "3.10" +pytest-xdist==3.6.1 ; python_version >= "3.9" and python_version < "3.10" +pytest==8.3.4 ; python_version >= "3.9" and python_version < "3.10" +python-augeas==0.5.0 ; python_version >= "3.9" and python_version < "3.10" +python-dateutil==2.9.0.post0 ; python_version >= "3.9" and python_version < "3.10" +python-digitalocean==1.11 ; python_version >= "3.9" and python_version < "3.10" +pytz==2019.3 ; python_version >= "3.9" and python_version < "3.10" +pywin32==308 ; python_version >= "3.9" and python_version < "3.10" and sys_platform == "win32" +pyyaml==6.0.2 ; python_version >= "3.9" and python_version < "3.10" +requests-file==2.1.0 ; python_version >= "3.9" and python_version < "3.10" +requests==2.20.0 ; python_version >= "3.9" and python_version < "3.10" +rsa==4.9 ; python_version >= "3.9" and python_version < "3.10" +s3transfer==0.3.7 ; python_version >= "3.9" and python_version < "3.10" +setuptools==75.6.0 ; python_version >= "3.9" and python_version < "3.10" +six==1.11.0 ; python_version >= "3.9" and python_version < "3.10" +soupsieve==2.6 ; python_version >= "3.9" and python_version < "3.10" +tldextract==5.1.3 ; python_version >= "3.9" and python_version < "3.10" +tomli==2.2.1 ; python_version >= "3.9" and python_version < "3.10" +tomlkit==0.13.2 ; python_version >= "3.9" and python_version < "3.10" +tox==1.9.2 ; python_version >= "3.9" and python_version < "3.10" +types-cryptography==3.3.23.2 ; python_version >= "3.9" and python_version < "3.10" +types-httplib2==0.22.0.20240310 ; python_version >= "3.9" and python_version < "3.10" +types-pyopenssl==23.0.0.0 ; python_version >= "3.9" and python_version < "3.10" +types-pyrfc3339==2.0.1.20241107 ; python_version >= "3.9" and python_version < "3.10" +types-python-dateutil==2.9.0.20241003 ; python_version >= "3.9" and python_version < "3.10" +types-pytz==2024.2.0.20241003 ; python_version >= "3.9" and python_version < "3.10" +types-pywin32==308.0.0.20241128 ; python_version >= "3.9" and python_version < "3.10" +types-requests==2.31.0.6 ; python_version >= "3.9" and python_version < "3.10" +types-setuptools==75.6.0.20241126 ; python_version >= "3.9" and python_version < "3.10" +types-urllib3==1.26.25.14 ; python_version >= "3.9" and python_version < "3.10" +typing-extensions==4.12.2 ; python_version >= "3.9" and python_version < "3.10" +uritemplate==3.0.1 ; python_version >= "3.9" and python_version < "3.10" +urllib3==1.24.2 ; python_version >= "3.9" and python_version < "3.10" +virtualenv==20.28.0 ; python_version >= "3.9" and python_version < "3.10" +wheel==0.45.1 ; python_version >= "3.9" and python_version < "3.10" +zipp==3.21.0 ; python_version >= "3.9" and python_version < "3.10" diff --git a/tools/pinning/current/pyproject.toml b/tools/pinning/current/pyproject.toml index d711e3ffc..ae7df57a9 100644 --- a/tools/pinning/current/pyproject.toml +++ b/tools/pinning/current/pyproject.toml @@ -6,7 +6,7 @@ authors = ["Certbot Project"] license = "Apache License 2.0" [tool.poetry.dependencies] -python = "^3.8" +python = "^3.9" # workaround for: https://github.com/python-poetry/poetry-plugin-export/issues/183 urllib3 = ">=1.25.4,<1.27" diff --git a/tools/pinning/oldest/pyproject.toml b/tools/pinning/oldest/pyproject.toml index 15761d683..91b314707 100644 --- a/tools/pinning/oldest/pyproject.toml +++ b/tools/pinning/oldest/pyproject.toml @@ -10,7 +10,7 @@ license = "Apache License 2.0" [tool.poetry.dependencies] # The Python version here should be kept in sync with the one used in our # oldest tests in tox.ini. -python = "<3.9 >= 3.8" +python = "<3.10 >= 3.9" # Local dependencies # Any local packages that have dependencies on other local packages must be @@ -55,7 +55,7 @@ configobj = "5.0.6" cryptography = "3.2.1" distro = "1.0.1" dns-lexicon = "3.15.1" -dnspython = "1.15.0" +dnspython = "2.6.1" funcsigs = "0.4" google-api-python-client = "1.6.5" google-auth = "2.16.0" diff --git a/tools/requirements.txt b/tools/requirements.txt index 2d86f31a2..de89b212e 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -5,184 +5,181 @@ # requirements.txt so that is scanned by GitHub. See # https://docs.github.com/en/github/visualizing-repository-data-with-graphs/about-the-dependency-graph#supported-package-ecosystems # for more info. -alabaster==0.7.13 ; python_version >= "3.8" and python_version < "4.0" -apacheconfig==0.3.2 ; python_version >= "3.8" and python_version < "4.0" -appnope==0.1.4 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "darwin" -astroid==3.0.3 ; python_version >= "3.8" and python_version < "4.0" -asttokens==2.4.1 ; python_version >= "3.8" and python_version < "4.0" -attrs==24.2.0 ; python_version >= "3.8" and python_version < "4.0" -azure-core==1.32.0 ; python_version >= "3.8" and python_version < "4.0" -azure-devops==7.1.0b4 ; python_version >= "3.8" and python_version < "4.0" -babel==2.16.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.2.0 ; python_version >= "3.8" and python_version < "4.0" -beautifulsoup4==4.12.3 ; python_version >= "3.8" and python_version < "4.0" -boto3==1.35.53 ; python_version >= "3.8" and python_version < "4.0" -botocore==1.35.53 ; python_version >= "3.8" and python_version < "4.0" -build==1.2.2.post1 ; python_version >= "3.8" and python_version < "4.0" -cachecontrol==0.14.0 ; python_version >= "3.8" and python_version < "4.0" -cachetools==5.5.0 ; python_version >= "3.8" and python_version < "4.0" -certifi==2024.8.30 ; python_version >= "3.8" and python_version < "4.0" -cffi==1.17.1 ; python_version >= "3.8" and python_version < "4.0" -chardet==5.2.0 ; python_version >= "3.8" and python_version < "4.0" -charset-normalizer==3.4.0 ; python_version >= "3.8" and python_version < "4.0" -cleo==2.1.0 ; python_version >= "3.8" and python_version < "4.0" -cloudflare==2.19.4 ; python_version >= "3.8" and python_version < "4.0" -colorama==0.4.6 ; python_version >= "3.8" and python_version < "4.0" -configargparse==1.7 ; python_version >= "3.8" and python_version < "4.0" -configobj==5.0.9 ; python_version >= "3.8" and python_version < "4.0" -coverage==7.6.1 ; python_version >= "3.8" and python_version < "4.0" -crashtest==0.4.1 ; python_version >= "3.8" and python_version < "4.0" -cryptography==43.0.3 ; python_version >= "3.8" and python_version < "4.0" -cython==0.29.37 ; python_version >= "3.8" and python_version < "4.0" -decorator==5.1.1 ; python_version >= "3.8" and python_version < "4.0" -deprecated==1.2.14 ; python_version >= "3.8" and python_version < "4.0" -dill==0.3.9 ; python_version >= "3.8" and python_version < "4.0" -distlib==0.3.9 ; python_version >= "3.8" and python_version < "4.0" -distro==1.9.0 ; python_version >= "3.8" and python_version < "4.0" -dns-lexicon==3.18.0 ; python_version >= "3.8" and python_version < "4.0" -dnspython==2.6.1 ; python_version >= "3.8" and python_version < "4.0" -docutils==0.20.1 ; python_version >= "3.8" and python_version < "4.0" -dulwich==0.21.7 ; python_version >= "3.8" and python_version < "4.0" -exceptiongroup==1.2.2 ; python_version >= "3.8" and python_version < "3.11" -execnet==2.1.1 ; python_version >= "3.8" and python_version < "4.0" -executing==2.1.0 ; python_version >= "3.8" and python_version < "4.0" -fabric==3.2.2 ; python_version >= "3.8" and python_version < "4.0" -fastjsonschema==2.20.0 ; python_version >= "3.8" and python_version < "4.0" -filelock==3.16.1 ; python_version >= "3.8" and python_version < "4.0" -google-api-core==2.22.0 ; python_version >= "3.8" and python_version < "4.0" -google-api-python-client==2.151.0 ; python_version >= "3.8" and python_version < "4.0" -google-auth-httplib2==0.2.0 ; python_version >= "3.8" and python_version < "4.0" -google-auth==2.35.0 ; python_version >= "3.8" and python_version < "4.0" -googleapis-common-protos==1.65.0 ; python_version >= "3.8" and python_version < "4.0" -httplib2==0.22.0 ; python_version >= "3.8" and python_version < "4.0" -idna==3.10 ; python_version >= "3.8" and python_version < "4.0" -imagesize==1.4.1 ; python_version >= "3.8" and python_version < "4.0" -importlib-metadata==8.5.0 ; python_version >= "3.8" and python_version < "4.0" -importlib-resources==6.4.5 ; python_version >= "3.8" and python_version < "4.0" -iniconfig==2.0.0 ; python_version >= "3.8" and python_version < "4.0" -installer==0.7.0 ; python_version >= "3.8" and python_version < "4.0" -invoke==2.2.0 ; python_version >= "3.8" and python_version < "4.0" -ipdb==0.13.13 ; python_version >= "3.8" and python_version < "4.0" -ipython==8.12.3 ; python_version >= "3.8" and python_version < "4.0" -isodate==0.7.2 ; python_version >= "3.8" and python_version < "4.0" -isort==5.13.2 ; python_version >= "3.8" and python_version < "4.0" -jaraco-classes==3.4.0 ; python_version >= "3.8" and python_version < "4.0" -jedi==0.19.1 ; python_version >= "3.8" and python_version < "4.0" -jeepney==0.8.0 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "linux" -jinja2==3.1.4 ; python_version >= "3.8" and python_version < "4.0" -jmespath==1.0.1 ; python_version >= "3.8" and python_version < "4.0" -josepy==1.14.0 ; python_version >= "3.8" and python_version < "4.0" -jsonlines==4.0.0 ; python_version >= "3.8" and python_version < "4.0" -jsonpickle==3.3.0 ; python_version >= "3.8" and python_version < "4.0" -keyring==24.3.1 ; python_version >= "3.8" and python_version < "4.0" -markdown-it-py==3.0.0 ; python_version >= "3.8" and python_version < "4.0" -markupsafe==2.1.5 ; python_version >= "3.8" and python_version < "4.0" -matplotlib-inline==0.1.7 ; python_version >= "3.8" and python_version < "4.0" -mccabe==0.7.0 ; python_version >= "3.8" and python_version < "4.0" -mdurl==0.1.2 ; python_version >= "3.8" and python_version < "4.0" -more-itertools==10.5.0 ; python_version >= "3.8" and python_version < "4.0" -msgpack==1.1.0 ; 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.9.0 ; python_version >= "3.8" and python_version < "4.0" -nh3==0.2.18 ; python_version >= "3.8" and python_version < "4.0" -oauthlib==3.2.2 ; python_version >= "3.8" and python_version < "4.0" -packaging==24.1 ; python_version >= "3.8" and python_version < "4.0" -paramiko==3.5.0 ; python_version >= "3.8" and python_version < "4.0" -parsedatetime==2.6 ; python_version >= "3.8" and python_version < "4.0" -parso==0.8.4 ; python_version >= "3.8" and python_version < "4.0" -pexpect==4.9.0 ; python_version >= "3.8" and python_version < "4.0" -pickleshare==0.7.5 ; python_version >= "3.8" and python_version < "4.0" -pip==24.3.1 ; python_version >= "3.8" and python_version < "4.0" -pkginfo==1.10.0 ; python_version >= "3.8" and python_version < "4.0" -platformdirs==4.3.6 ; python_version >= "3.8" and python_version < "4.0" -pluggy==1.5.0 ; python_version >= "3.8" and python_version < "4.0" -ply==3.11 ; python_version >= "3.8" and python_version < "4.0" -poetry-core==1.9.1 ; python_version >= "3.8" and python_version < "4.0" -poetry-plugin-export==1.8.0 ; python_version >= "3.8" and python_version < "4.0" -poetry==1.8.4 ; python_version >= "3.8" and python_version < "4.0" -prompt-toolkit==3.0.48 ; python_version >= "3.8" and python_version < "4.0" -proto-plus==1.25.0 ; python_version >= "3.8" and python_version < "4.0" -protobuf==5.28.3 ; python_version >= "3.8" and python_version < "4.0" -ptyprocess==0.7.0 ; python_version >= "3.8" and python_version < "4.0" -pure-eval==0.2.3 ; python_version >= "3.8" and python_version < "4.0" -pyasn1-modules==0.4.1 ; python_version >= "3.8" and python_version < "4.0" -pyasn1==0.6.1 ; python_version >= "3.8" and python_version < "4.0" -pycparser==2.22 ; python_version >= "3.8" and python_version < "4.0" -pygments==2.18.0 ; python_version >= "3.8" and python_version < "4.0" -pylint==3.0.2 ; python_version >= "3.8" and python_version < "4.0" -pynacl==1.5.0 ; python_version >= "3.8" and python_version < "4.0" -pynsist==2.7 ; python_version >= "3.8" and python_version < "4.0" -pyopenssl==24.2.1 ; python_version >= "3.8" and python_version < "4.0" -pyotp==2.9.0 ; python_version >= "3.8" and python_version < "4.0" -pyparsing==3.1.4 ; python_version >= "3.8" and python_version < "4.0" -pyproject-api==1.8.0 ; python_version >= "3.8" and python_version < "4.0" -pyproject-hooks==1.2.0 ; python_version >= "3.8" and python_version < "4.0" -pyrfc3339==1.1 ; python_version >= "3.8" and python_version < "4.0" -pytest-cov==5.0.0 ; python_version >= "3.8" and python_version < "4.0" -pytest-xdist==3.6.1 ; python_version >= "3.8" and python_version < "4.0" -pytest==8.3.3 ; python_version >= "3.8" and python_version < "4.0" -python-augeas==1.1.0 ; python_version >= "3.8" and python_version < "4.0" -python-dateutil==2.9.0.post0 ; python_version >= "3.8" and python_version < "4.0" -python-digitalocean==1.17.0 ; python_version >= "3.8" and python_version < "4.0" -pytz==2024.2 ; python_version >= "3.8" and python_version < "4.0" -pywin32-ctypes==0.2.3 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32" -pywin32==308 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32" -pyyaml==6.0.2 ; python_version >= "3.8" and python_version < "4.0" -rapidfuzz==3.9.7 ; python_version >= "3.8" and python_version < "4.0" -readme-renderer==43.0 ; python_version >= "3.8" and python_version < "4.0" -requests-download==0.1.2 ; python_version >= "3.8" and python_version < "4.0" -requests-file==2.1.0 ; python_version >= "3.8" and python_version < "4.0" -requests-oauthlib==2.0.0 ; python_version >= "3.8" and python_version < "4.0" -requests-toolbelt==1.0.0 ; python_version >= "3.8" and python_version < "4.0" -requests==2.32.3 ; python_version >= "3.8" and python_version < "4.0" -rfc3986==2.0.0 ; python_version >= "3.8" and python_version < "4.0" -rich==13.9.3 ; python_version >= "3.8" and python_version < "4.0" -rsa==4.9 ; python_version >= "3.8" and python_version < "4" -s3transfer==0.10.3 ; 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" -semantic-version==2.10.0 ; python_version >= "3.8" and python_version < "4.0" -setuptools-rust==1.10.2 ; python_version >= "3.8" and python_version < "4.0" -setuptools==75.3.0 ; python_version >= "3.8" and python_version < "4.0" -shellingham==1.5.4 ; python_version >= "3.8" and python_version < "4.0" -six==1.16.0 ; python_version >= "3.8" and python_version < "4.0" -snowballstemmer==2.2.0 ; python_version >= "3.8" and python_version < "4.0" -soupsieve==2.6 ; python_version >= "3.8" and python_version < "4.0" -sphinx-rtd-theme==3.0.1 ; python_version >= "3.8" and python_version < "4.0" -sphinx==7.1.2 ; python_version >= "3.8" and python_version < "4.0" -sphinxcontrib-applehelp==1.0.4 ; python_version >= "3.8" and python_version < "4.0" -sphinxcontrib-devhelp==1.0.2 ; python_version >= "3.8" and python_version < "4.0" -sphinxcontrib-htmlhelp==2.0.1 ; python_version >= "3.8" and python_version < "4.0" -sphinxcontrib-jquery==4.1 ; python_version >= "3.8" and python_version < "4.0" -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==5.1.2 ; python_version >= "3.8" and python_version < "4.0" -tomli==2.0.2 ; python_version >= "3.8" and python_full_version <= "3.11.0a6" -tomlkit==0.13.2 ; python_version >= "3.8" and python_version < "4.0" -tox==4.23.2 ; python_version >= "3.8" and python_version < "4.0" -traitlets==5.14.3 ; python_version >= "3.8" and python_version < "4.0" -trove-classifiers==2024.10.21.16 ; python_version >= "3.8" and python_version < "4.0" -twine==5.1.1 ; python_version >= "3.8" and python_version < "4.0" -types-cffi==1.16.0.20240331 ; python_version >= "3.8" and python_version < "4.0" -types-httplib2==0.22.0.20240310 ; python_version >= "3.8" and python_version < "4.0" -types-pyopenssl==24.1.0.20240722 ; python_version >= "3.8" and python_version < "4.0" -types-pyrfc3339==1.1.1.5 ; python_version >= "3.8" and python_version < "4.0" -types-python-dateutil==2.9.0.20241003 ; python_version >= "3.8" and python_version < "4.0" -types-pytz==2024.2.0.20241003 ; python_version >= "3.8" and python_version < "4.0" -types-pywin32==308.0.0.20241029 ; python_version >= "3.8" and python_version < "4.0" -types-requests==2.31.0.6 ; python_version >= "3.8" and python_version < "4.0" -types-setuptools==75.2.0.20241025 ; python_version >= "3.8" and python_version < "4.0" -types-urllib3==1.26.25.14 ; python_version >= "3.8" and python_version < "4.0" -typing-extensions==4.12.2 ; python_version >= "3.8" and python_version < "4.0" -uritemplate==4.1.1 ; python_version >= "3.8" and python_version < "4.0" -urllib3==1.26.20 ; python_version >= "3.8" and python_version < "4.0" -virtualenv==20.27.1 ; python_version >= "3.8" and python_version < "4.0" -wcwidth==0.2.13 ; python_version >= "3.8" and python_version < "4.0" -wheel==0.44.0 ; python_version >= "3.8" and python_version < "4.0" -wrapt==1.16.0 ; python_version >= "3.8" and python_version < "4.0" -xattr==1.1.0 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "darwin" -yarg==0.1.10 ; python_version >= "3.8" and python_version < "4.0" -zipp==3.20.2 ; python_version >= "3.8" and python_version < "4.0" +alabaster==0.7.16 ; python_version >= "3.9" and python_version < "4.0" +apacheconfig==0.3.2 ; python_version >= "3.9" and python_version < "4.0" +astroid==3.0.3 ; python_version >= "3.9" and python_version < "4.0" +asttokens==2.4.1 ; python_version >= "3.9" and python_version < "4.0" +attrs==24.2.0 ; python_version >= "3.9" and python_version < "4.0" +azure-core==1.32.0 ; python_version >= "3.9" and python_version < "4.0" +azure-devops==7.1.0b4 ; python_version >= "3.9" and python_version < "4.0" +babel==2.16.0 ; python_version >= "3.9" and python_version < "4.0" +bcrypt==4.2.1 ; python_version >= "3.9" and python_version < "4.0" +beautifulsoup4==4.12.3 ; python_version >= "3.9" and python_version < "4.0" +boto3==1.35.69 ; python_version >= "3.9" and python_version < "4.0" +botocore==1.35.69 ; python_version >= "3.9" and python_version < "4.0" +build==1.2.2.post1 ; python_version >= "3.9" and python_version < "4.0" +cachecontrol==0.14.1 ; python_version >= "3.9" and python_version < "4.0" +cachetools==5.5.0 ; python_version >= "3.9" and python_version < "4.0" +certifi==2024.8.30 ; python_version >= "3.9" and python_version < "4.0" +cffi==1.17.1 ; python_version >= "3.9" and python_version < "4.0" +chardet==5.2.0 ; python_version >= "3.9" and python_version < "4.0" +charset-normalizer==3.4.0 ; python_version >= "3.9" and python_version < "4.0" +cleo==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +cloudflare==2.19.4 ; python_version >= "3.9" and python_version < "4.0" +colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" +configargparse==1.7 ; python_version >= "3.9" and python_version < "4.0" +configobj==5.0.9 ; python_version >= "3.9" and python_version < "4.0" +coverage==7.6.8 ; python_version >= "3.9" and python_version < "4.0" +crashtest==0.4.1 ; python_version >= "3.9" and python_version < "4.0" +cryptography==43.0.3 ; python_version >= "3.9" and python_version < "4.0" +cython==0.29.37 ; python_version >= "3.9" and python_version < "4.0" +decorator==5.1.1 ; python_version >= "3.9" and python_version < "4.0" +deprecated==1.2.15 ; python_version >= "3.9" and python_version < "4.0" +dill==0.3.9 ; python_version >= "3.9" and python_version < "4.0" +distlib==0.3.9 ; python_version >= "3.9" and python_version < "4.0" +distro==1.9.0 ; python_version >= "3.9" and python_version < "4.0" +dns-lexicon==3.18.0 ; python_version >= "3.9" and python_version < "4.0" +dnspython==2.7.0 ; python_version >= "3.9" and python_version < "4.0" +docutils==0.21.2 ; python_version >= "3.9" and python_version < "4.0" +dulwich==0.21.7 ; python_version >= "3.9" and python_version < "4.0" +exceptiongroup==1.2.2 ; python_version >= "3.9" and python_version < "3.11" +execnet==2.1.1 ; python_version >= "3.9" and python_version < "4.0" +executing==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +fabric==3.2.2 ; python_version >= "3.9" and python_version < "4.0" +fastjsonschema==2.20.0 ; python_version >= "3.9" and python_version < "4.0" +filelock==3.16.1 ; python_version >= "3.9" and python_version < "4.0" +google-api-core==2.23.0 ; python_version >= "3.9" and python_version < "4.0" +google-api-python-client==2.154.0 ; python_version >= "3.9" and python_version < "4.0" +google-auth-httplib2==0.2.0 ; python_version >= "3.9" and python_version < "4.0" +google-auth==2.36.0 ; python_version >= "3.9" and python_version < "4.0" +googleapis-common-protos==1.66.0 ; python_version >= "3.9" and python_version < "4.0" +httplib2==0.22.0 ; python_version >= "3.9" and python_version < "4.0" +idna==3.10 ; python_version >= "3.9" and python_version < "4.0" +imagesize==1.4.1 ; python_version >= "3.9" and python_version < "4.0" +importlib-metadata==8.5.0 ; python_version >= "3.9" and python_version < "4.0" +importlib-resources==6.4.5 ; python_version >= "3.9" and python_version < "4.0" +iniconfig==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +installer==0.7.0 ; python_version >= "3.9" and python_version < "4.0" +invoke==2.2.0 ; python_version >= "3.9" and python_version < "4.0" +ipdb==0.13.13 ; python_version >= "3.9" and python_version < "4.0" +ipython==8.18.1 ; python_version >= "3.9" and python_version < "4.0" +isodate==0.7.2 ; python_version >= "3.9" and python_version < "4.0" +isort==5.13.2 ; python_version >= "3.9" and python_version < "4.0" +jaraco-classes==3.4.0 ; python_version >= "3.9" and python_version < "4.0" +jedi==0.19.2 ; python_version >= "3.9" and python_version < "4.0" +jeepney==0.8.0 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "linux" +jinja2==3.1.4 ; python_version >= "3.9" and python_version < "4.0" +jmespath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" +josepy==1.14.0 ; python_version >= "3.9" and python_version < "4.0" +jsonlines==4.0.0 ; python_version >= "3.9" and python_version < "4.0" +jsonpickle==4.0.0 ; python_version >= "3.9" and python_version < "4.0" +keyring==24.3.1 ; python_version >= "3.9" and python_version < "4.0" +markdown-it-py==3.0.0 ; python_version >= "3.9" and python_version < "4.0" +markupsafe==3.0.2 ; python_version >= "3.9" and python_version < "4.0" +matplotlib-inline==0.1.7 ; python_version >= "3.9" and python_version < "4.0" +mccabe==0.7.0 ; python_version >= "3.9" and python_version < "4.0" +mdurl==0.1.2 ; python_version >= "3.9" and python_version < "4.0" +more-itertools==10.5.0 ; python_version >= "3.9" and python_version < "4.0" +msgpack==1.1.0 ; python_version >= "3.9" and python_version < "4.0" +msrest==0.7.1 ; python_version >= "3.9" and python_version < "4.0" +mypy-extensions==1.0.0 ; python_version >= "3.9" and python_version < "4.0" +mypy==1.9.0 ; python_version >= "3.9" and python_version < "4.0" +nh3==0.2.18 ; python_version >= "3.9" and python_version < "4.0" +oauthlib==3.2.2 ; python_version >= "3.9" and python_version < "4.0" +packaging==24.2 ; python_version >= "3.9" and python_version < "4.0" +paramiko==3.5.0 ; python_version >= "3.9" and python_version < "4.0" +parsedatetime==2.6 ; python_version >= "3.9" and python_version < "4.0" +parso==0.8.4 ; python_version >= "3.9" and python_version < "4.0" +pexpect==4.9.0 ; python_version >= "3.9" and python_version < "4.0" +pip==24.3.1 ; python_version >= "3.9" and python_version < "4.0" +pkginfo==1.10.0 ; python_version >= "3.9" and python_version < "4.0" +platformdirs==4.3.6 ; python_version >= "3.9" and python_version < "4.0" +pluggy==1.5.0 ; python_version >= "3.9" and python_version < "4.0" +ply==3.11 ; python_version >= "3.9" and python_version < "4.0" +poetry-core==1.9.1 ; python_version >= "3.9" and python_version < "4.0" +poetry-plugin-export==1.8.0 ; python_version >= "3.9" and python_version < "4.0" +poetry==1.8.4 ; python_version >= "3.9" and python_version < "4.0" +prompt-toolkit==3.0.48 ; python_version >= "3.9" and python_version < "4.0" +proto-plus==1.25.0 ; python_version >= "3.9" and python_version < "4.0" +protobuf==5.28.3 ; python_version >= "3.9" and python_version < "4.0" +ptyprocess==0.7.0 ; python_version >= "3.9" and python_version < "4.0" +pure-eval==0.2.3 ; python_version >= "3.9" and python_version < "4.0" +pyasn1-modules==0.4.1 ; python_version >= "3.9" and python_version < "4.0" +pyasn1==0.6.1 ; python_version >= "3.9" and python_version < "4.0" +pycparser==2.22 ; python_version >= "3.9" and python_version < "4.0" +pygments==2.18.0 ; python_version >= "3.9" and python_version < "4.0" +pylint==3.0.2 ; python_version >= "3.9" and python_version < "4.0" +pynacl==1.5.0 ; python_version >= "3.9" and python_version < "4.0" +pynsist==2.7 ; python_version >= "3.9" and python_version < "4.0" +pyopenssl==24.2.1 ; python_version >= "3.9" and python_version < "4.0" +pyotp==2.9.0 ; python_version >= "3.9" and python_version < "4.0" +pyparsing==3.2.0 ; python_version >= "3.9" and python_version < "4.0" +pyproject-api==1.8.0 ; python_version >= "3.9" and python_version < "4.0" +pyproject-hooks==1.2.0 ; python_version >= "3.9" and python_version < "4.0" +pyrfc3339==2.0.1 ; python_version >= "3.9" and python_version < "4.0" +pytest-cov==6.0.0 ; python_version >= "3.9" and python_version < "4.0" +pytest-xdist==3.6.1 ; python_version >= "3.9" and python_version < "4.0" +pytest==8.3.3 ; python_version >= "3.9" and python_version < "4.0" +python-augeas==1.1.0 ; python_version >= "3.9" and python_version < "4.0" +python-dateutil==2.9.0.post0 ; python_version >= "3.9" and python_version < "4.0" +python-digitalocean==1.17.0 ; python_version >= "3.9" and python_version < "4.0" +pytz==2024.2 ; python_version >= "3.9" and python_version < "4.0" +pywin32-ctypes==0.2.3 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" +pywin32==308 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" +pyyaml==6.0.2 ; python_version >= "3.9" and python_version < "4.0" +rapidfuzz==3.10.1 ; python_version >= "3.9" and python_version < "4.0" +readme-renderer==44.0 ; python_version >= "3.9" and python_version < "4.0" +requests-download==0.1.2 ; python_version >= "3.9" and python_version < "4.0" +requests-file==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +requests-oauthlib==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +requests-toolbelt==1.0.0 ; python_version >= "3.9" and python_version < "4.0" +requests==2.32.3 ; python_version >= "3.9" and python_version < "4.0" +rfc3986==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +rich==13.9.4 ; python_version >= "3.9" and python_version < "4.0" +rsa==4.9 ; python_version >= "3.9" and python_version < "4" +s3transfer==0.10.4 ; python_version >= "3.9" and python_version < "4.0" +secretstorage==3.3.3 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "linux" +semantic-version==2.10.0 ; python_version >= "3.9" and python_version < "4.0" +setuptools-rust==1.10.2 ; python_version >= "3.9" and python_version < "4.0" +setuptools==75.6.0 ; python_version >= "3.9" and python_version < "4.0" +shellingham==1.5.4 ; python_version >= "3.9" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.9" and python_version < "4.0" +snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "4.0" +soupsieve==2.6 ; python_version >= "3.9" and python_version < "4.0" +sphinx-rtd-theme==3.0.2 ; python_version >= "3.9" and python_version < "4.0" +sphinx==7.4.7 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-applehelp==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-devhelp==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-htmlhelp==2.1.0 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-jquery==4.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-qthelp==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +sphinxcontrib-serializinghtml==2.0.0 ; python_version >= "3.9" and python_version < "4.0" +stack-data==0.6.3 ; python_version >= "3.9" and python_version < "4.0" +tldextract==5.1.3 ; python_version >= "3.9" and python_version < "4.0" +tomli==2.1.0 ; python_version >= "3.9" and python_full_version <= "3.11.0a6" +tomlkit==0.13.2 ; python_version >= "3.9" and python_version < "4.0" +tox==4.23.2 ; python_version >= "3.9" and python_version < "4.0" +traitlets==5.14.3 ; python_version >= "3.9" and python_version < "4.0" +trove-classifiers==2024.10.21.16 ; python_version >= "3.9" and python_version < "4.0" +twine==5.1.1 ; python_version >= "3.9" and python_version < "4.0" +types-cffi==1.16.0.20240331 ; python_version >= "3.9" and python_version < "4.0" +types-httplib2==0.22.0.20240310 ; python_version >= "3.9" and python_version < "4.0" +types-pyopenssl==24.1.0.20240722 ; python_version >= "3.9" and python_version < "4.0" +types-pyrfc3339==2.0.1.20241107 ; python_version >= "3.9" and python_version < "4.0" +types-python-dateutil==2.9.0.20241003 ; python_version >= "3.9" and python_version < "4.0" +types-pytz==2024.2.0.20241003 ; python_version >= "3.9" and python_version < "4.0" +types-pywin32==308.0.0.20241121 ; python_version >= "3.9" and python_version < "4.0" +types-requests==2.31.0.6 ; python_version >= "3.9" and python_version < "4.0" +types-setuptools==75.5.0.20241122 ; python_version >= "3.9" and python_version < "4.0" +types-urllib3==1.26.25.14 ; python_version >= "3.9" and python_version < "4.0" +typing-extensions==4.12.2 ; python_version >= "3.9" and python_version < "4.0" +uritemplate==4.1.1 ; python_version >= "3.9" and python_version < "4.0" +urllib3==1.26.20 ; python_version >= "3.9" and python_version < "4.0" +virtualenv==20.27.1 ; python_version >= "3.9" and python_version < "4.0" +wcwidth==0.2.13 ; python_version >= "3.9" and python_version < "4.0" +wheel==0.45.1 ; python_version >= "3.9" and python_version < "4.0" +wrapt==1.17.0 ; python_version >= "3.9" and python_version < "4.0" +xattr==1.1.0 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "darwin" +yarg==0.1.10 ; python_version >= "3.9" and python_version < "4.0" +zipp==3.21.0 ; python_version >= "3.9" and python_version < "4.0" diff --git a/tools/venv.py b/tools/venv.py index 8a3650678..4044258ef 100755 --- a/tools/venv.py +++ b/tools/venv.py @@ -117,7 +117,7 @@ def _check_version(version_str): version = (int(search.group(1)), int(search.group(2))) - if version >= (3, 8): + if version >= (3, 9): return True print('Incompatible python version for Certbot found: {0}'.format(version_str)) diff --git a/tox.ini b/tox.ini index 7fa72525a..bd5462fdb 100644 --- a/tox.ini +++ b/tox.ini @@ -63,7 +63,7 @@ commands = {[testenv:py]commands} # # This version should be kept in sync with the one declared in # tools/pinning/oldest/pyproject.toml. -basepython = python3.8 +basepython = python3.9 setenv = CERTBOT_OLDEST=1 commands = {[testenv:py]commands} diff --git a/windows-installer/setup.py b/windows-installer/setup.py index 0e09546c7..62d8e4323 100644 --- a/windows-installer/setup.py +++ b/windows-installer/setup.py @@ -11,14 +11,13 @@ setup( author="Certbot Project", author_email='certbot-dev@eff.org', license='Apache License 2.0', - python_requires='>=3.8', + python_requires='>=3.9', classifiers=[ 'Development Status :: 4 - Beta', 'Intended Audience :: Developers', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11',