diff --git a/.pylintrc b/.pylintrc index 05f34fb1f..e37ba1fc7 100644 --- a/.pylintrc +++ b/.pylintrc @@ -524,7 +524,7 @@ ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace, # List of module names for which member attributes should not be checked # (useful for modules/projects where namespaces are manipulated during runtime # and thus existing member attributes cannot be deduced by static analysis -ignored-modules=pkg_resources,confargparse,argparse +ignored-modules=confargparse,argparse # Show a hint with possible names when a member name was not found. The aspect # of finding the hint is based on edit distance. diff --git a/certbot-dns-dnsimple/certbot_dns_dnsimple/_internal/tests/dns_dnsimple_test.py b/certbot-dns-dnsimple/certbot_dns_dnsimple/_internal/tests/dns_dnsimple_test.py index ff299ad49..e0d389be1 100644 --- a/certbot-dns-dnsimple/certbot_dns_dnsimple/_internal/tests/dns_dnsimple_test.py +++ b/certbot-dns-dnsimple/certbot_dns_dnsimple/_internal/tests/dns_dnsimple_test.py @@ -3,6 +3,7 @@ from unittest import mock import sys import pytest +from requests import Response from requests.exceptions import HTTPError from certbot.compat import os @@ -16,7 +17,7 @@ TOKEN = 'foo' class AuthenticatorTest(test_util.TempDirTestCase, dns_test_common_lexicon.BaseLexiconDNSAuthenticatorTest): - LOGIN_ERROR = HTTPError('401 Client Error: Unauthorized for url: ...') + LOGIN_ERROR = HTTPError('401 Client Error: Unauthorized for url: ...', response=Response()) def setUp(self): super().setUp() diff --git a/certbot-dns-dnsmadeeasy/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py b/certbot-dns-dnsmadeeasy/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py index 286e65ed9..4adb70643 100644 --- a/certbot-dns-dnsmadeeasy/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py +++ b/certbot-dns-dnsmadeeasy/certbot_dns_dnsmadeeasy/_internal/tests/dns_dnsmadeeasy_test.py @@ -4,6 +4,7 @@ import sys from unittest import mock import pytest +from requests import Response from requests.exceptions import HTTPError from certbot.compat import os @@ -19,8 +20,8 @@ SECRET_KEY = 'bar' class AuthenticatorTest(test_util.TempDirTestCase, dns_test_common_lexicon.BaseLexiconDNSAuthenticatorTest): - DOMAIN_NOT_FOUND = HTTPError(f'404 Client Error: Not Found for url: {DOMAIN}.') - LOGIN_ERROR = HTTPError(f'403 Client Error: Forbidden for url: {DOMAIN}.') + DOMAIN_NOT_FOUND = HTTPError(f'404 Client Error: Not Found for url: {DOMAIN}.', response=Response()) + LOGIN_ERROR = HTTPError(f'403 Client Error: Forbidden for url: {DOMAIN}.', response=Response()) def setUp(self): super().setUp() diff --git a/certbot-dns-gehirn/certbot_dns_gehirn/_internal/tests/dns_gehirn_test.py b/certbot-dns-gehirn/certbot_dns_gehirn/_internal/tests/dns_gehirn_test.py index 3d082049d..331059a60 100644 --- a/certbot-dns-gehirn/certbot_dns_gehirn/_internal/tests/dns_gehirn_test.py +++ b/certbot-dns-gehirn/certbot_dns_gehirn/_internal/tests/dns_gehirn_test.py @@ -1,10 +1,10 @@ """Tests for certbot_dns_gehirn._internal.dns_gehirn.""" import sys -import unittest from unittest import mock import pytest +from requests import Response from requests.exceptions import HTTPError from certbot.compat import os @@ -20,8 +20,8 @@ API_SECRET = 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw' class AuthenticatorTest(test_util.TempDirTestCase, dns_test_common_lexicon.BaseLexiconDNSAuthenticatorTest): - DOMAIN_NOT_FOUND = HTTPError(f'404 Client Error: Not Found for url: {DOMAIN}.') - LOGIN_ERROR = HTTPError(f'401 Client Error: Unauthorized for url: {DOMAIN}.') + DOMAIN_NOT_FOUND = HTTPError(f'404 Client Error: Not Found for url: {DOMAIN}.', response=Response()) + LOGIN_ERROR = HTTPError(f'401 Client Error: Unauthorized for url: {DOMAIN}.', response=Response()) def setUp(self): super().setUp() diff --git a/certbot-dns-luadns/certbot_dns_luadns/_internal/tests/dns_luadns_test.py b/certbot-dns-luadns/certbot_dns_luadns/_internal/tests/dns_luadns_test.py index 0b424e860..890616b5e 100644 --- a/certbot-dns-luadns/certbot_dns_luadns/_internal/tests/dns_luadns_test.py +++ b/certbot-dns-luadns/certbot_dns_luadns/_internal/tests/dns_luadns_test.py @@ -3,6 +3,7 @@ import sys from unittest import mock import pytest +from requests import Response from requests.exceptions import HTTPError from certbot.compat import os @@ -17,7 +18,7 @@ TOKEN = 'foo' class AuthenticatorTest(test_util.TempDirTestCase, dns_test_common_lexicon.BaseLexiconDNSAuthenticatorTest): - LOGIN_ERROR = HTTPError("401 Client Error: Unauthorized for url: ...") + LOGIN_ERROR = HTTPError("401 Client Error: Unauthorized for url: ...", response=Response()) def setUp(self): super().setUp() diff --git a/certbot-dns-nsone/certbot_dns_nsone/_internal/tests/dns_nsone_test.py b/certbot-dns-nsone/certbot_dns_nsone/_internal/tests/dns_nsone_test.py index ae0ff4c21..3f6e7e7c7 100644 --- a/certbot-dns-nsone/certbot_dns_nsone/_internal/tests/dns_nsone_test.py +++ b/certbot-dns-nsone/certbot_dns_nsone/_internal/tests/dns_nsone_test.py @@ -3,6 +3,7 @@ import sys from unittest import mock import pytest +from requests import Response from requests.exceptions import HTTPError from certbot.compat import os @@ -17,8 +18,8 @@ API_KEY = 'foo' class AuthenticatorTest(test_util.TempDirTestCase, dns_test_common_lexicon.BaseLexiconDNSAuthenticatorTest): - DOMAIN_NOT_FOUND = HTTPError(f'404 Client Error: Not Found for url: {DOMAIN}.') - LOGIN_ERROR = HTTPError(f'401 Client Error: Unauthorized for url: {DOMAIN}.') + DOMAIN_NOT_FOUND = HTTPError(f'404 Client Error: Not Found for url: {DOMAIN}.', response=Response()) + LOGIN_ERROR = HTTPError(f'401 Client Error: Unauthorized for url: {DOMAIN}.', response=Response()) def setUp(self): super().setUp() diff --git a/certbot-dns-ovh/certbot_dns_ovh/_internal/tests/dns_ovh_test.py b/certbot-dns-ovh/certbot_dns_ovh/_internal/tests/dns_ovh_test.py index 2b054a304..fab307d4f 100644 --- a/certbot-dns-ovh/certbot_dns_ovh/_internal/tests/dns_ovh_test.py +++ b/certbot-dns-ovh/certbot_dns_ovh/_internal/tests/dns_ovh_test.py @@ -3,6 +3,7 @@ from unittest import mock import sys import pytest +from requests import Response from requests.exceptions import HTTPError from certbot.compat import os @@ -20,7 +21,7 @@ class AuthenticatorTest(test_util.TempDirTestCase, dns_test_common_lexicon.BaseLexiconDNSAuthenticatorTest): DOMAIN_NOT_FOUND = Exception('Domain example.com not found') - LOGIN_ERROR = HTTPError('403 Client Error: Forbidden for url: https://eu.api.ovh.com/1.0/...') + LOGIN_ERROR = HTTPError('403 Client Error: Forbidden for url: https://eu.api.ovh.com/1.0/...', response=Response()) def setUp(self): super().setUp() diff --git a/certbot-dns-sakuracloud/certbot_dns_sakuracloud/_internal/tests/dns_sakuracloud_test.py b/certbot-dns-sakuracloud/certbot_dns_sakuracloud/_internal/tests/dns_sakuracloud_test.py index e7e0b108e..44a36b9e0 100644 --- a/certbot-dns-sakuracloud/certbot_dns_sakuracloud/_internal/tests/dns_sakuracloud_test.py +++ b/certbot-dns-sakuracloud/certbot_dns_sakuracloud/_internal/tests/dns_sakuracloud_test.py @@ -3,6 +3,7 @@ import sys from unittest import mock import pytest +from requests import Response from requests.exceptions import HTTPError from certbot.compat import os @@ -18,8 +19,8 @@ API_SECRET = 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw' class AuthenticatorTest(test_util.TempDirTestCase, dns_test_common_lexicon.BaseLexiconDNSAuthenticatorTest): - DOMAIN_NOT_FOUND = HTTPError(f'404 Client Error: Not Found for url: {DOMAIN}.') - LOGIN_ERROR = HTTPError(f'401 Client Error: Unauthorized for url: {DOMAIN}.') + DOMAIN_NOT_FOUND = HTTPError(f'404 Client Error: Not Found for url: {DOMAIN}.', response=Response()) + LOGIN_ERROR = HTTPError(f'401 Client Error: Unauthorized for url: {DOMAIN}.', response=Response()) def setUp(self): super().setUp() diff --git a/certbot/certbot/plugins/dns_common_lexicon.py b/certbot/certbot/plugins/dns_common_lexicon.py index d61534a10..6e07e6dc4 100644 --- a/certbot/certbot/plugins/dns_common_lexicon.py +++ b/certbot/certbot/plugins/dns_common_lexicon.py @@ -30,9 +30,9 @@ try: from lexicon.config import ConfigResolver from lexicon.interfaces import Provider except ImportError: # pragma: no cover - Client = None - ConfigResolver = None - Provider = None + Client = None # type: ignore + ConfigResolver = None # type: ignore + Provider = None # type: ignore logger = logging.getLogger(__name__) @@ -148,19 +148,18 @@ def build_lexicon_config(lexicon_provider_name: str, .. deprecated:: 2.7.0 Please use certbot.plugins.dns_common_lexicon.LexiconDNSAuthenticator instead. """ - config: Union[ConfigResolver, Dict[str, Any]] = {'provider_name': lexicon_provider_name} - config.update(lexicon_options) - if not ConfigResolver: + config_dict: Dict[str, Any] = {'provider_name': lexicon_provider_name} + config_dict.update(lexicon_options) + if ConfigResolver is None: # Lexicon 2.x - config.update(provider_options) + config_dict.update(provider_options) + return config_dict else: # Lexicon 3.x provider_config: Dict[str, Any] = {} provider_config.update(provider_options) - config[lexicon_provider_name] = provider_config - config = ConfigResolver().with_dict(config).with_env() - - return config + config_dict[lexicon_provider_name] = provider_config + return ConfigResolver().with_dict(config_dict).with_env() class LexiconDNSAuthenticator(dns_common.DNSAuthenticator): diff --git a/certbot/certbot/plugins/dns_test_common_lexicon.py b/certbot/certbot/plugins/dns_test_common_lexicon.py index f1de1b76e..451acbb05 100644 --- a/certbot/certbot/plugins/dns_test_common_lexicon.py +++ b/certbot/certbot/plugins/dns_test_common_lexicon.py @@ -13,6 +13,7 @@ from unittest.mock import MagicMock import warnings import josepy as jose +from requests import Response from requests.exceptions import HTTPError from requests.exceptions import RequestException @@ -37,8 +38,8 @@ KEY = jose.JWKRSA.load(test_util.load_vector("rsa512_key.pem")) DOMAIN_NOT_FOUND = Exception('No domain found') GENERIC_ERROR = RequestException -LOGIN_ERROR = HTTPError('400 Client Error: ...') -UNKNOWN_LOGIN_ERROR = HTTPError('500 Surprise! Error: ...') +LOGIN_ERROR = HTTPError('400 Client Error: ...', response=Response()) +UNKNOWN_LOGIN_ERROR = HTTPError('500 Surprise! Error: ...', response=Response()) class _AuthenticatorCallableLexiconTestCase(_AuthenticatorCallableTestCase, Protocol): diff --git a/certbot/docs/contributing.rst b/certbot/docs/contributing.rst index 296ccf2fb..e808330b0 100644 --- a/certbot/docs/contributing.rst +++ b/certbot/docs/contributing.rst @@ -352,8 +352,8 @@ users install it system-wide with `pip install`. Note that this will only work for users who have Certbot installed from OS packages or via pip. -.. _`setuptools entry points`: - https://setuptools.readthedocs.io/en/latest/pkg_resources.html#entry-points +.. _`importlib.metadata entry points`: + https://importlib-metadata.readthedocs.io/en/latest/using.html#entry-points Writing your own plugin snap ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/pytest.ini b/pytest.ini index ea038151c..c5f274e68 100644 --- a/pytest.ini +++ b/pytest.ini @@ -21,17 +21,11 @@ # updated. # 4) Ignore our own PendingDeprecationWarning about update_symlinks soon to be dropped. # See https://github.com/certbot/certbot/issues/6284. -# 5) Ignore pkg_resources.declare_namespace used in a large number of Google's Python -# libs. e.g. https://github.com/googleapis/google-auth-library-python/issues/1229. -# It is also is used in sphinxcontrib-devhelp 1.0.2 which as of writing this -# is the latest version of that library. See -# https://github.com/sphinx-doc/sphinxcontrib-devhelp/blob/1.0.2/setup.py#L69. -# 6) Ignore DeprecationWarning from using pkg_resources API -# 7) Ignore our own PendingDeprecationWarning about Python 3.7 soon to be dropped. -# 8) Ignore DeprecationWarning for datetime.utcfromtimestamp() triggered +# 5) Ignore our own PendingDeprecationWarning about Python 3.7 soon to be dropped. +# 6) Ignore DeprecationWarning for datetime.utcfromtimestamp() triggered # when importing the pytz.tzinfo module # https://github.com/stub42/pytz/issues/105 -# 9) Boto3 is dropping support for Python 3.7 by end of 2023. Let's ignore the associated +# 7) Boto3 is dropping support for Python 3.7 by end of 2023. Let's ignore the associated # deprecation warning since we will also drop Python 3.7 soon. filterwarnings = error @@ -39,8 +33,6 @@ filterwarnings = ignore:.*rsyncdir:DeprecationWarning ignore:'urllib3.contrib.pyopenssl:DeprecationWarning:requests_toolbelt ignore:update_symlinks is deprecated:PendingDeprecationWarning - ignore:.*declare_namespace\(':DeprecationWarning - ignore:pkg_resources is deprecated as an API:DeprecationWarning ignore:Python 3.7 support will be dropped:PendingDeprecationWarning ignore:.*datetime.utcfromtimestamp\(\) is deprecated:DeprecationWarning:pytz.tzinfo ignore:Boto3 will no longer support Python 3.7 diff --git a/tools/oldest_constraints.txt b/tools/oldest_constraints.txt index 9cdff4f24..bc2ecc0d2 100644 --- a/tools/oldest_constraints.txt +++ b/tools/oldest_constraints.txt @@ -3,7 +3,7 @@ apacheconfig==0.3.2 ; python_version >= "3.7" and python_version < "3.8" appdirs==1.4.4 ; python_version >= "3.7" and python_version < "3.8" asn1crypto==0.24.0 ; python_version >= "3.7" and python_version < "3.8" -astroid==2.15.6 ; python_full_version >= "3.7.2" and python_version < "3.8" +astroid==2.15.8 ; python_full_version >= "3.7.2" and python_version < "3.8" beautifulsoup4==4.12.2 ; python_version >= "3.7" and python_version < "3.8" boto3==1.15.15 ; python_version >= "3.7" and python_version < "3.8" botocore==1.18.15 ; python_version >= "3.7" and python_version < "3.8" @@ -12,7 +12,7 @@ certifi==2023.7.22 ; python_version >= "3.7" and python_version < "3.8" cffi==1.11.5 ; python_version >= "3.7" and python_version < "3.8" chardet==3.0.4 ; python_version >= "3.7" and python_version < "3.8" cloudflare==1.5.1 ; python_version >= "3.7" and python_version < "3.8" -colorama==0.4.6 ; python_version < "3.8" and sys_platform == "win32" and python_version >= "3.7" +colorama==0.4.6 ; python_version >= "3.7" and python_version < "3.8" and sys_platform == "win32" configargparse==1.5.3 ; python_version >= "3.7" and python_version < "3.8" configobj==5.0.6 ; python_version >= "3.7" and python_version < "3.8" coverage==7.2.7 ; python_version >= "3.7" and python_version < "3.8" @@ -46,18 +46,18 @@ mypy-extensions==1.0.0 ; python_version >= "3.7" and python_version < "3.8" mypy==1.4.1 ; python_version >= "3.7" and python_version < "3.8" ndg-httpsclient==0.3.2 ; python_version >= "3.7" and python_version < "3.8" oauth2client==4.1.3 ; python_version >= "3.7" and python_version < "3.8" -packaging==23.1 ; python_version >= "3.7" and python_version < "3.8" +packaging==23.2 ; python_version >= "3.7" and python_version < "3.8" parsedatetime==2.4 ; python_version >= "3.7" and python_version < "3.8" pbr==1.8.0 ; python_version >= "3.7" and python_version < "3.8" pip==23.2.1 ; python_version >= "3.7" and python_version < "3.8" -platformdirs==3.10.0 ; python_full_version >= "3.7.2" and python_version < "3.8" +platformdirs==3.11.0 ; python_full_version >= "3.7.2" and python_version < "3.8" pluggy==1.2.0 ; python_version >= "3.7" and python_version < "3.8" ply==3.4 ; python_version >= "3.7" and python_version < "3.8" py==1.11.0 ; python_version >= "3.7" and python_version < "3.8" pyasn1-modules==0.3.0 ; python_version >= "3.7" and python_version < "3.8" pyasn1==0.4.8 ; python_version >= "3.7" and python_version < "3.8" pycparser==2.14 ; python_version >= "3.7" and python_version < "3.8" -pylint==2.17.5 ; python_full_version >= "3.7.2" and python_version < "3.8" +pylint==2.17.7 ; python_full_version >= "3.7.2" and python_version < "3.8" pyopenssl==17.5.0 ; python_version >= "3.7" and python_version < "3.8" pyparsing==2.2.1 ; python_version >= "3.7" and python_version < "3.8" pyrfc3339==1.0 ; python_version >= "3.7" and python_version < "3.8" @@ -77,23 +77,23 @@ s3transfer==0.3.7 ; python_version >= "3.7" and python_version < "3.8" setuptools==41.6.0 ; python_version >= "3.7" and python_version < "3.8" six==1.11.0 ; python_version >= "3.7" and python_version < "3.8" soupsieve==2.4.1 ; python_version >= "3.7" and python_version < "3.8" -tldextract==3.5.0 ; python_version >= "3.7" and python_version < "3.8" -tomli==2.0.1 ; python_version < "3.8" and python_version >= "3.7" +tldextract==4.0.0 ; python_version >= "3.7" and python_version < "3.8" +tomli==2.0.1 ; python_version >= "3.7" and python_version < "3.8" tomlkit==0.12.1 ; python_full_version >= "3.7.2" and python_version < "3.8" tox==1.9.2 ; python_version >= "3.7" and python_version < "3.8" -typed-ast==1.5.5 ; python_version < "3.8" and python_version >= "3.7" +typed-ast==1.5.5 ; python_version >= "3.7" and python_version < "3.8" types-cryptography==3.3.23.2 ; python_version >= "3.7" and python_version < "3.8" types-httplib2==0.22.0.2 ; python_version >= "3.7" and python_version < "3.8" types-pyopenssl==23.0.0.0 ; python_version >= "3.7" and python_version < "3.8" types-pyrfc3339==1.1.1.5 ; python_version >= "3.7" and python_version < "3.8" types-python-dateutil==2.8.19.14 ; python_version >= "3.7" and python_version < "3.8" -types-pytz==2023.3.0.1 ; python_version >= "3.7" and python_version < "3.8" +types-pytz==2023.3.1.1 ; python_version >= "3.7" and python_version < "3.8" types-pywin32==306.0.0.4 ; python_version >= "3.7" and python_version < "3.8" -types-requests==2.31.0.2 ; python_version >= "3.7" and python_version < "3.8" +types-requests==2.31.0.6 ; python_version >= "3.7" and python_version < "3.8" types-setuptools==68.2.0.0 ; python_version >= "3.7" and python_version < "3.8" types-six==1.16.21.9 ; python_version >= "3.7" and python_version < "3.8" types-urllib3==1.26.25.14 ; python_version >= "3.7" and python_version < "3.8" -typing-extensions==4.7.1 ; python_version < "3.8" and python_version >= "3.7" +typing-extensions==4.7.1 ; python_version >= "3.7" and python_version < "3.8" uritemplate==3.0.1 ; python_version >= "3.7" and python_version < "3.8" urllib3==1.24.2 ; python_version >= "3.7" and python_version < "3.8" virtualenv==20.4.7 ; python_version >= "3.7" and python_version < "3.8" diff --git a/tools/pinning/current/pyproject.toml b/tools/pinning/current/pyproject.toml index 44d5dc9d1..94958f2b4 100644 --- a/tools/pinning/current/pyproject.toml +++ b/tools/pinning/current/pyproject.toml @@ -70,11 +70,6 @@ cryptography = "!= 37.0.3" # https://github.com/python-poetry/poetry-plugin-export/issues/168 is resolved. poetry = "<1.3.0" -# setuptools 67.5.0 deprecated pkg_resources which we still use. Let's pin it -# back until this is fixed. Doing this work is being tracked by -# https://github.com/certbot/certbot/issues/9606. -setuptools = "<67.5.0" - [tool.poetry.dev-dependencies] [build-system] diff --git a/tools/requirements.txt b/tools/requirements.txt index be328117e..e9daa1e56 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -18,8 +18,8 @@ backports-cached-property==1.0.2 ; python_version >= "3.7" and python_version < bcrypt==4.0.1 ; python_version >= "3.7" and python_version < "4.0" beautifulsoup4==4.12.2 ; python_version >= "3.7" and python_version < "4.0" bleach==6.0.0 ; python_version >= "3.7" and python_version < "4.0" -boto3==1.28.60 ; python_version >= "3.7" and python_version < "4.0" -botocore==1.31.60 ; python_version >= "3.7" and python_version < "4.0" +boto3==1.28.62 ; python_version >= "3.7" and python_version < "4.0" +botocore==1.31.62 ; python_version >= "3.7" and python_version < "4.0" cachecontrol==0.12.14 ; python_version >= "3.7" and python_version < "4.0" cachetools==5.3.1 ; python_version >= "3.7" and python_version < "4.0" cachy==0.3.0 ; python_version >= "3.7" and python_version < "4.0" @@ -28,7 +28,7 @@ cffi==1.15.1 ; python_version >= "3.7" and python_version < "4.0" charset-normalizer==3.3.0 ; python_version >= "3.7" and python_version < "4.0" cleo==1.0.0a5 ; python_version >= "3.7" and python_version < "4.0" cloudflare==2.12.4 ; python_version >= "3.7" and python_version < "4.0" -colorama==0.4.6 ; python_version < "4.0" and sys_platform == "win32" and python_version >= "3.7" or python_version >= "3.7" and python_version < "4.0" and platform_system == "Windows" +colorama==0.4.6 ; python_version >= "3.7" and python_version < "4.0" and (sys_platform == "win32" or platform_system == "Windows") configargparse==1.7 ; python_version >= "3.7" and python_version < "4.0" configobj==5.0.8 ; python_version >= "3.7" and python_version < "4.0" coverage==7.2.7 ; python_version >= "3.7" and python_version < "4.0" @@ -40,7 +40,7 @@ deprecated==1.2.14 ; python_version >= "3.7" and python_version < "4.0" dill==0.3.7 ; python_full_version >= "3.7.2" and python_version < "4.0" distlib==0.3.7 ; python_version >= "3.7" and python_version < "4.0" distro==1.8.0 ; python_version >= "3.7" and python_version < "4.0" -dns-lexicon==3.14.1 ; python_version >= "3.7" and python_version < "4.0" +dns-lexicon==3.15.0 ; python_version >= "3.7" and python_version < "4.0" dnspython==2.3.0 ; python_version >= "3.7" and python_version < "4.0" docutils==0.18.1 ; python_version >= "3.7" and python_version < "4.0" dulwich==0.20.50 ; python_version >= "3.7" and python_version < "4.0" @@ -49,16 +49,16 @@ execnet==2.0.2 ; python_version >= "3.7" and python_version < "4.0" fabric==3.2.2 ; python_version >= "3.7" and python_version < "4.0" filelock==3.12.2 ; python_version >= "3.7" and python_version < "4.0" google-api-core==2.12.0 ; python_version >= "3.7" and python_version < "4.0" -google-api-python-client==2.102.0 ; python_version >= "3.7" and python_version < "4.0" +google-api-python-client==2.103.0 ; python_version >= "3.7" and python_version < "4.0" google-auth-httplib2==0.1.1 ; python_version >= "3.7" and python_version < "4.0" -google-auth==2.23.2 ; python_version >= "3.7" and python_version < "4.0" +google-auth==2.23.3 ; python_version >= "3.7" and python_version < "4.0" googleapis-common-protos==1.60.0 ; python_version >= "3.7" and python_version < "4.0" html5lib==1.1 ; python_version >= "3.7" and python_version < "4.0" httplib2==0.22.0 ; python_version >= "3.7" and python_version < "4.0" idna==3.4 ; python_version >= "3.7" and python_version < "4.0" imagesize==1.4.1 ; python_version >= "3.7" and python_version < "4.0" importlib-metadata==4.13.0 ; python_version >= "3.7" and python_version < "4.0" -importlib-resources==5.12.0 ; python_version >= "3.7" and python_version < "4.0" +importlib-resources==5.12.0 ; python_version >= "3.7" and python_version < "3.9" iniconfig==2.0.0 ; python_version >= "3.7" and python_version < "4.0" invoke==2.2.0 ; python_version >= "3.7" and python_version < "4.0" ipdb==0.13.13 ; python_version >= "3.7" and python_version < "4.0" @@ -97,7 +97,7 @@ pickleshare==0.7.5 ; python_version >= "3.7" and python_version < "4.0" pip==23.2.1 ; python_version >= "3.7" and python_version < "4.0" pkginfo==1.9.6 ; python_version >= "3.7" and python_version < "4.0" pkgutil-resolve-name==1.3.10 ; python_version >= "3.7" and python_version < "3.9" -platformdirs==2.6.2 ; python_version < "4.0" and python_version >= "3.7" +platformdirs==2.6.2 ; python_version >= "3.7" and python_version < "4.0" pluggy==1.2.0 ; python_version >= "3.7" and python_version < "4.0" ply==3.11 ; python_version >= "3.7" and python_version < "4.0" poetry-core==1.3.2 ; python_version >= "3.7" and python_version < "4.0" @@ -116,6 +116,7 @@ pylint==2.15.5 ; python_full_version >= "3.7.2" and python_version < "4.0" pynacl==1.5.0 ; python_version >= "3.7" and python_version < "4.0" pynsist==2.7 ; python_version >= "3.7" and python_version < "4.0" pyopenssl==23.2.0 ; python_version >= "3.7" and python_version < "4.0" +pyotp==2.9.0 ; python_version >= "3.7" and python_version < "4.0" pyparsing==3.1.1 ; python_version >= "3.7" and python_version < "4.0" pyrfc3339==1.1 ; python_version >= "3.7" and python_version < "4.0" pyrsistent==0.19.3 ; python_version >= "3.7" and python_version < "4.0" @@ -142,7 +143,7 @@ s3transfer==0.7.0 ; python_version >= "3.7" and python_version < "4.0" secretstorage==3.3.3 ; python_version >= "3.7" and python_version < "4.0" and sys_platform == "linux" semantic-version==2.10.0 ; python_version >= "3.7" and python_version < "4.0" setuptools-rust==1.7.0 ; python_version >= "3.7" and python_version < "4.0" -setuptools==67.4.0 ; python_version >= "3.7" and python_version < "4.0" +setuptools==68.0.0 ; python_version >= "3.7" and python_version < "4.0" shellingham==1.5.3 ; python_version >= "3.7" and python_version < "4.0" six==1.16.0 ; python_version >= "3.7" and python_version < "4.0" snowballstemmer==2.2.0 ; python_version >= "3.7" and python_version < "4.0" @@ -156,20 +157,20 @@ sphinxcontrib-jquery==4.1 ; python_version >= "3.7" and python_version < "4.0" sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.7" and python_version < "4.0" sphinxcontrib-qthelp==1.0.3 ; python_version >= "3.7" and python_version < "4.0" sphinxcontrib-serializinghtml==1.1.5 ; python_version >= "3.7" and python_version < "4.0" -tldextract==3.6.0 ; python_version >= "3.7" and python_version < "4.0" -tomli==2.0.1 ; python_version >= "3.7" and python_full_version <= "3.11.0a6" -tomlkit==0.12.1 ; python_version < "4.0" and python_version >= "3.7" +tldextract==4.0.0 ; python_version >= "3.7" and python_version < "4.0" +tomli==2.0.1 ; python_version >= "3.7" and python_version < "3.11" +tomlkit==0.12.1 ; python_version >= "3.7" and python_version < "4.0" tox==3.28.0 ; python_version >= "3.7" and python_version < "4.0" traitlets==5.9.0 ; python_version >= "3.7" and python_version < "4.0" twine==4.0.2 ; python_version >= "3.7" and python_version < "4.0" -typed-ast==1.5.5 ; python_version < "3.8" and python_version >= "3.7" +typed-ast==1.5.5 ; python_version >= "3.7" and python_version < "3.8" types-httplib2==0.22.0.2 ; python_version >= "3.7" and python_version < "4.0" types-pyopenssl==23.2.0.2 ; python_version >= "3.7" and python_version < "4.0" types-pyrfc3339==1.1.1.5 ; python_version >= "3.7" and python_version < "4.0" types-python-dateutil==2.8.19.14 ; python_version >= "3.7" and python_version < "4.0" types-pytz==2023.3.1.1 ; python_version >= "3.7" and python_version < "4.0" types-pywin32==306.0.0.4 ; python_version >= "3.7" and python_version < "4.0" -types-requests==2.31.0.2 ; python_version >= "3.7" and python_version < "4.0" +types-requests==2.31.0.6 ; python_version >= "3.7" and python_version < "4.0" types-setuptools==68.2.0.0 ; python_version >= "3.7" and python_version < "4.0" types-six==1.16.21.9 ; python_version >= "3.7" and python_version < "4.0" types-urllib3==1.26.25.14 ; python_version >= "3.7" and python_version < "4.0" @@ -180,7 +181,7 @@ virtualenv==20.21.1 ; python_version >= "3.7" and python_version < "4.0" wcwidth==0.2.8 ; python_version >= "3.7" and python_version < "4.0" webencodings==0.5.1 ; python_version >= "3.7" and python_version < "4.0" wheel==0.41.2 ; python_version >= "3.7" and python_version < "4.0" -wrapt==1.15.0 ; python_version < "4.0" and python_version >= "3.7" +wrapt==1.15.0 ; python_version >= "3.7" and python_version < "4.0" xattr==0.9.9 ; python_version >= "3.7" and python_version < "4.0" and sys_platform == "darwin" yarg==0.1.9 ; python_version >= "3.7" and python_version < "4.0" zipp==3.15.0 ; python_version >= "3.7" and python_version < "4.0"