Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/certbot/certbot.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralexzorin <alex@zorin.id.au>2022-07-29 03:26:12 +0300
committerGitHub <noreply@github.com>2022-07-29 03:26:12 +0300
commit42a4d30267c731b80fe73c1d38add046d0bd0899 (patch)
tree7badc467c3ec6f1a11584cbc7c11e9afed875f1e
parente9e7a69c7bb5cdac8215692d4bda9a661c0189c1 (diff)
deps: remove pyjwt dependency (#9337)
* deps: remove pyjwt dependency * pinning: strip extras from dependencies `poetry export` outputs in requirements.txt format, which is now apparently producing "dep[extra]==...". We are using this output as the constraints file for pip and pip's new resolver does not permit extras in the constraints file. This change filters out the extras specifiers. * repin current dependencies * fix new pylint complaints * silence lint about distutils.version We have already deprecated the function and it'll be removed in 2.0. * docs: set sphinx language to 'en' this is emitting a warning and failing the build * Revert "pinning: strip extras from dependencies" This reverts commit 11268fd23160ac53fd8dad7a2ff15e453678e159. * pin poetry back to avoid extras issue * repin * fix new mypy complaints in acme/
-rw-r--r--acme/acme/challenges.py2
-rw-r--r--acme/acme/crypto_util.py20
-rw-r--r--acme/acme/standalone.py17
-rw-r--r--acme/tests/challenges_test.py4
-rw-r--r--certbot-ci/certbot_integration_tests/certbot_tests/assertions.py4
-rwxr-xr-xcertbot-ci/certbot_integration_tests/utils/acme_server.py15
-rw-r--r--certbot-dns-route53/certbot_dns_route53/_internal/dns_route53.py3
-rw-r--r--certbot/certbot/_internal/lock.py6
-rw-r--r--certbot/certbot/achallenges.py4
-rw-r--r--certbot/certbot/plugins/dns_test_common.py2
-rw-r--r--certbot/certbot/plugins/dns_test_common_lexicon.py1
-rw-r--r--certbot/certbot/util.py4
-rw-r--r--certbot/docs/conf.py2
-rw-r--r--tools/pinning/current/pyproject.toml9
-rw-r--r--tools/requirements.txt275
15 files changed, 188 insertions, 180 deletions
diff --git a/acme/acme/challenges.py b/acme/acme/challenges.py
index 9000b370a..91c3e6f24 100644
--- a/acme/acme/challenges.py
+++ b/acme/acme/challenges.py
@@ -408,7 +408,7 @@ class TLSALPN01Response(KeyAuthorizationChallengeResponse):
"""
ID_PE_ACME_IDENTIFIER_V1 = b"1.3.6.1.5.5.7.1.30.1"
- ACME_TLS_1_PROTOCOL = "acme-tls/1"
+ ACME_TLS_1_PROTOCOL = b"acme-tls/1"
@property
def h(self) -> bytes:
diff --git a/acme/acme/crypto_util.py b/acme/acme/crypto_util.py
index 956366469..754f70e46 100644
--- a/acme/acme/crypto_util.py
+++ b/acme/acme/crypto_util.py
@@ -11,6 +11,7 @@ from typing import Callable
from typing import List
from typing import Mapping
from typing import Optional
+from typing import Sequence
from typing import Set
from typing import Tuple
from typing import Union
@@ -39,7 +40,9 @@ class _DefaultCertSelection:
def __call__(self, connection: SSL.Connection) -> Optional[Tuple[crypto.PKey, crypto.X509]]:
server_name = connection.get_servername()
- return self.certs.get(server_name, None)
+ if server_name:
+ return self.certs.get(server_name, None)
+ return None # pragma: no cover
class SSLSocket: # pylint: disable=too-few-public-methods
@@ -60,7 +63,8 @@ class SSLSocket: # pylint: disable=too-few-public-methods
method: int = _DEFAULT_SSL_METHOD,
alpn_selection: Optional[Callable[[SSL.Connection, List[bytes]], bytes]] = None,
cert_selection: Optional[Callable[[SSL.Connection],
- Tuple[crypto.PKey, crypto.X509]]] = None
+ Optional[Tuple[crypto.PKey,
+ crypto.X509]]]] = None
) -> None:
self.sock = sock
self.alpn_selection = alpn_selection
@@ -71,8 +75,8 @@ class SSLSocket: # pylint: disable=too-few-public-methods
raise ValueError("Both cert_selection and certs specified.")
actual_cert_selection: Union[_DefaultCertSelection,
Optional[Callable[[SSL.Connection],
- Tuple[crypto.PKey,
- crypto.X509]]]] = cert_selection
+ Optional[Tuple[crypto.PKey,
+ crypto.X509]]]]] = cert_selection
if actual_cert_selection is None:
actual_cert_selection = _DefaultCertSelection(certs if certs else {})
self.cert_selection = actual_cert_selection
@@ -157,7 +161,7 @@ class SSLSocket: # pylint: disable=too-few-public-methods
def probe_sni(name: bytes, host: bytes, port: int = 443, timeout: int = 300, # pylint: disable=too-many-arguments
method: int = _DEFAULT_SSL_METHOD, source_address: Tuple[str, int] = ('', 0),
- alpn_protocols: Optional[List[str]] = None) -> crypto.X509:
+ alpn_protocols: Optional[Sequence[bytes]] = None) -> crypto.X509:
"""Probe SNI server for SSL certificate.
:param bytes name: Byte string to send as the server name in the
@@ -170,7 +174,7 @@ def probe_sni(name: bytes, host: bytes, port: int = 443, timeout: int = 300, #
of source interface). See `socket.creation_connection` for more
info. Available only in Python 2.7+.
:param alpn_protocols: Protocols to request using ALPN.
- :type alpn_protocols: `list` of `str`
+ :type alpn_protocols: `Sequence` of `bytes`
:raises acme.errors.Error: In case of any problems.
@@ -207,7 +211,9 @@ def probe_sni(name: bytes, host: bytes, port: int = 443, timeout: int = 300, #
client_ssl.shutdown()
except SSL.Error as error:
raise errors.Error(error)
- return client_ssl.get_peer_certificate()
+ cert = client_ssl.get_peer_certificate()
+ assert cert # Appease mypy. We would have crashed out by now if there was no certificate.
+ return cert
def make_csr(private_key_pem: bytes, domains: Optional[Union[Set[str], List[str]]] = None,
diff --git a/acme/acme/standalone.py b/acme/acme/standalone.py
index a23f6d603..62174813f 100644
--- a/acme/acme/standalone.py
+++ b/acme/acme/standalone.py
@@ -46,10 +46,12 @@ class TLSServer(socketserver.TCPServer):
method=self.method))
def _cert_selection(self, connection: SSL.Connection
- ) -> Tuple[crypto.PKey, crypto.X509]: # pragma: no cover
+ ) -> Optional[Tuple[crypto.PKey, crypto.X509]]: # pragma: no cover
"""Callback selecting certificate for connection."""
server_name = connection.get_servername()
- return self.certs.get(server_name, None)
+ if server_name:
+ return self.certs.get(server_name, None)
+ return None
def server_bind(self) -> None:
self._wrap_sock()
@@ -151,7 +153,7 @@ class TLSALPN01Server(TLSServer, ACMEServerMixin):
def __init__(self, server_address: Tuple[str, int],
certs: List[Tuple[crypto.PKey, crypto.X509]],
- challenge_certs: Mapping[str, Tuple[crypto.PKey, crypto.X509]],
+ challenge_certs: Mapping[bytes, Tuple[crypto.PKey, crypto.X509]],
ipv6: bool = False) -> None:
# We don't need to implement a request handler here because the work
# (including logging) is being done by wrapped socket set up in the
@@ -161,7 +163,8 @@ class TLSALPN01Server(TLSServer, ACMEServerMixin):
ipv6=ipv6)
self.challenge_certs = challenge_certs
- def _cert_selection(self, connection: SSL.Connection) -> Tuple[crypto.PKey, crypto.X509]:
+ def _cert_selection(self, connection: SSL.Connection) -> Optional[Tuple[crypto.PKey,
+ crypto.X509]]:
# TODO: We would like to serve challenge cert only if asked for it via
# ALPN. To do this, we need to retrieve the list of protos from client
# hello, but this is currently impossible with openssl [0], and ALPN
@@ -170,8 +173,10 @@ class TLSALPN01Server(TLSServer, ACMEServerMixin):
# handshake in alpn_selection() if ALPN protos are not what we expect.
# [0] https://github.com/openssl/openssl/issues/4952
server_name = connection.get_servername()
- logger.debug("Serving challenge cert for server name %s", server_name)
- return self.challenge_certs[server_name]
+ if server_name:
+ logger.debug("Serving challenge cert for server name %s", server_name)
+ return self.challenge_certs[server_name]
+ return None # pragma: no cover
def _alpn_selection(self, _connection: SSL.Connection, alpn_protos: List[bytes]) -> bytes:
"""Callback to select alpn protocol."""
diff --git a/acme/tests/challenges_test.py b/acme/tests/challenges_test.py
index d7815a6c3..36cd1e376 100644
--- a/acme/tests/challenges_test.py
+++ b/acme/tests/challenges_test.py
@@ -328,12 +328,12 @@ class TLSALPN01ResponseTest(unittest.TestCase):
mock_gethostbyname.assert_called_once_with('foo.com')
mock_probe_sni.assert_called_once_with(
host=b'127.0.0.1', port=self.response.PORT, name=b'foo.com',
- alpn_protocols=['acme-tls/1'])
+ alpn_protocols=[b'acme-tls/1'])
self.response.probe_cert('foo.com', host='8.8.8.8')
mock_probe_sni.assert_called_with(
host=b'8.8.8.8', port=mock.ANY, name=b'foo.com',
- alpn_protocols=['acme-tls/1'])
+ alpn_protocols=[b'acme-tls/1'])
@mock.patch('acme.challenges.TLSALPN01Response.probe_cert')
def test_simple_verify_false_on_probe_error(self, mock_probe_cert):
diff --git a/certbot-ci/certbot_integration_tests/certbot_tests/assertions.py b/certbot-ci/certbot_integration_tests/certbot_tests/assertions.py
index 3650f64f0..3563b30af 100644
--- a/certbot-ci/certbot_integration_tests/certbot_tests/assertions.py
+++ b/certbot-ci/certbot_integration_tests/certbot_tests/assertions.py
@@ -125,7 +125,7 @@ def assert_equals_world_read_permissions(file1: str, file2: str) -> None:
mode_file1 = os.stat(file1).st_mode & 0o004
mode_file2 = os.stat(file2).st_mode & 0o004
else:
- everybody = win32security.ConvertStringSidToSid(EVERYBODY_SID)
+ everybody = win32security.ConvertStringSidToSid(EVERYBODY_SID) # pylint: disable=used-before-assignment
security1 = win32security.GetFileSecurity(file1, win32security.DACL_SECURITY_INFORMATION)
dacl1 = security1.GetSecurityDescriptorDacl()
@@ -135,7 +135,7 @@ def assert_equals_world_read_permissions(file1: str, file2: str) -> None:
'TrusteeType': win32security.TRUSTEE_IS_USER,
'Identifier': everybody,
})
- mode_file1 = mode_file1 & ntsecuritycon.FILE_GENERIC_READ
+ mode_file1 = mode_file1 & ntsecuritycon.FILE_GENERIC_READ # pylint: disable=used-before-assignment
security2 = win32security.GetFileSecurity(file2, win32security.DACL_SECURITY_INFORMATION)
dacl2 = security2.GetSecurityDescriptorDacl()
diff --git a/certbot-ci/certbot_integration_tests/utils/acme_server.py b/certbot-ci/certbot_integration_tests/utils/acme_server.py
index 9e56e3036..8994d0ef0 100755
--- a/certbot-ci/certbot_integration_tests/utils/acme_server.py
+++ b/certbot-ci/certbot_integration_tests/utils/acme_server.py
@@ -133,18 +133,9 @@ class ACMEServer:
acme_xdist['directory_url'] = BOULDER_V2_DIRECTORY_URL
acme_xdist['challtestsrv_url'] = BOULDER_V2_CHALLTESTSRV_URL
- acme_xdist['http_port'] = {
- node: port for (node, port) in # pylint: disable=unnecessary-comprehension
- zip(nodes, range(5200, 5200 + len(nodes)))
- }
- acme_xdist['https_port'] = {
- node: port for (node, port) in # pylint: disable=unnecessary-comprehension
- zip(nodes, range(5100, 5100 + len(nodes)))
- }
- acme_xdist['other_port'] = {
- node: port for (node, port) in # pylint: disable=unnecessary-comprehension
- zip(nodes, range(5300, 5300 + len(nodes)))
- }
+ acme_xdist['http_port'] = dict(zip(nodes, range(5200, 5200 + len(nodes))))
+ acme_xdist['https_port'] = dict(zip(nodes, range(5100, 5100 + len(nodes))))
+ acme_xdist['other_port'] = dict(zip(nodes, range(5300, 5300 + len(nodes))))
self.acme_xdist = acme_xdist
diff --git a/certbot-dns-route53/certbot_dns_route53/_internal/dns_route53.py b/certbot-dns-route53/certbot_dns_route53/_internal/dns_route53.py
index cbe22271f..fc2fe5821 100644
--- a/certbot-dns-route53/certbot_dns_route53/_internal/dns_route53.py
+++ b/certbot-dns-route53/certbot_dns_route53/_internal/dns_route53.py
@@ -38,7 +38,8 @@ class Authenticator(dns_common.DNSAuthenticator):
def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)
self.r53 = boto3.client("route53")
- self._resource_records: DefaultDict[str, List[Dict[str, str]]] = collections.defaultdict(list)
+ self._resource_records: DefaultDict[str, List[Dict[str, str]]] = \
+ collections.defaultdict(list)
def more_info(self) -> str:
return "Solve a DNS01 challenge using AWS Route53"
diff --git a/certbot/certbot/_internal/lock.py b/certbot/certbot/_internal/lock.py
index 95c44856f..960be4346 100644
--- a/certbot/certbot/_internal/lock.py
+++ b/certbot/certbot/_internal/lock.py
@@ -194,7 +194,7 @@ class _WindowsLockMechanism(_BaseLockMechanism):
low level APIs, and Python does not do it. As of Python 3.7 and below, Python developers
state that deleting a file opened by a process from another process is not possible with
os.open and io.open.
- Consequently, mscvrt.locking is sufficient to obtain an effective lock, and the race
+ Consequently, msvcrt.locking is sufficient to obtain an effective lock, and the race
condition encountered on Linux is not possible on Windows, leading to a simpler workflow.
"""
def acquire(self) -> None:
@@ -209,7 +209,7 @@ class _WindowsLockMechanism(_BaseLockMechanism):
# This "type: ignore" is currently needed because msvcrt methods
# are only defined on Windows. See
# https://github.com/python/typeshed/blob/16ae4c61201cd8b96b8b22cdfb2ab9e89ba5bcf2/stdlib/msvcrt.pyi.
- msvcrt.locking(fd, msvcrt.LK_NBLCK, 1) # type: ignore
+ msvcrt.locking(fd, msvcrt.LK_NBLCK, 1) # type: ignore # pylint: disable=used-before-assignment
except (IOError, OSError) as err:
if fd:
os.close(fd)
@@ -229,7 +229,7 @@ class _WindowsLockMechanism(_BaseLockMechanism):
# This "type: ignore" is currently needed because msvcrt methods
# are only defined on Windows. See
# https://github.com/python/typeshed/blob/16ae4c61201cd8b96b8b22cdfb2ab9e89ba5bcf2/stdlib/msvcrt.pyi.
- msvcrt.locking(self._fd, msvcrt.LK_UNLCK, 1) # type: ignore
+ msvcrt.locking(self._fd, msvcrt.LK_UNLCK, 1) # type: ignore # pylint: disable=used-before-assignment
os.close(self._fd)
try:
diff --git a/certbot/certbot/achallenges.py b/certbot/certbot/achallenges.py
index 73666825c..081fa1c46 100644
--- a/certbot/certbot/achallenges.py
+++ b/certbot/certbot/achallenges.py
@@ -47,7 +47,7 @@ class AnnotatedChallenge(jose.ImmutableMap):
class KeyAuthorizationAnnotatedChallenge(AnnotatedChallenge):
"""Client annotated `KeyAuthorizationChallenge` challenge."""
- __slots__ = ('challb', 'domain', 'account_key')
+ __slots__ = ('challb', 'domain', 'account_key') # pylint: disable=redefined-slots-in-subclass
def response_and_validation(self, *args: Any, **kwargs: Any) -> Any:
"""Generate response and validation."""
@@ -57,5 +57,5 @@ class KeyAuthorizationAnnotatedChallenge(AnnotatedChallenge):
class DNS(AnnotatedChallenge):
"""Client annotated "dns" ACME challenge."""
- __slots__ = ('challb', 'domain')
+ __slots__ = ('challb', 'domain') # pylint: disable=redefined-slots-in-subclass
acme_type = challenges.DNS
diff --git a/certbot/certbot/plugins/dns_test_common.py b/certbot/certbot/plugins/dns_test_common.py
index ae8a69b79..a2ab84dcb 100644
--- a/certbot/certbot/plugins/dns_test_common.py
+++ b/certbot/certbot/plugins/dns_test_common.py
@@ -38,14 +38,12 @@ class _AuthenticatorCallableTestCase(Protocol):
See
https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertTrue
"""
- ...
def assertEqual(self, *unused_args: Any) -> None:
"""
See
https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertEqual
"""
- ...
class BaseAuthenticatorTest:
diff --git a/certbot/certbot/plugins/dns_test_common_lexicon.py b/certbot/certbot/plugins/dns_test_common_lexicon.py
index 7d844d133..01f4c6d61 100644
--- a/certbot/certbot/plugins/dns_test_common_lexicon.py
+++ b/certbot/certbot/plugins/dns_test_common_lexicon.py
@@ -57,7 +57,6 @@ class _LexiconAwareTestCase(Protocol):
See
https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaises
"""
- ...
# These classes are intended to be subclassed/mixed in, so not all members are defined.
diff --git a/certbot/certbot/util.py b/certbot/certbot/util.py
index 242dfef5a..9a6c5de78 100644
--- a/certbot/certbot/util.py
+++ b/certbot/certbot/util.py
@@ -34,7 +34,7 @@ if _USE_DISTRO:
import distro
if TYPE_CHECKING:
- import distutils.version
+ import distutils.version # pylint: disable=deprecated-module
logger = logging.getLogger(__name__)
@@ -624,7 +624,7 @@ def get_strict_version(normalized: str) -> "distutils.version.StrictVersion":
"removed in a future release.", DeprecationWarning)
with warnings.catch_warnings():
warnings.simplefilter("ignore", DeprecationWarning)
- import distutils.version
+ import distutils.version # pylint: disable=deprecated-module
# strict version ending with "a" and a number designates a pre-release
return distutils.version.StrictVersion(normalized.replace(".dev", "a"))
diff --git a/certbot/docs/conf.py b/certbot/docs/conf.py
index 08bb3705a..de9e287fc 100644
--- a/certbot/docs/conf.py
+++ b/certbot/docs/conf.py
@@ -84,7 +84,7 @@ release = meta['version']
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
-language = None
+language = 'en'
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
diff --git a/tools/pinning/current/pyproject.toml b/tools/pinning/current/pyproject.toml
index b5959bc20..95b236c10 100644
--- a/tools/pinning/current/pyproject.toml
+++ b/tools/pinning/current/pyproject.toml
@@ -62,7 +62,14 @@ mock = "*"
# https://github.com/python-poetry/poetry/issues/1584. This version is required
# here in addition to certbot/setup.py because otherwise the pre-release
# version of poetry will not be installed.
-poetry = ">=1.2.0a1"
+#
+# Additionally, newer versions of poetry/poetry-core include package extras
+# (e.g. "docker[ssh]") in its `poetry export` output which is valid for
+# requirements files, but not constraints files. We are currently using that
+# output as constraints so let's also pin back poetry and poetry-core until we
+# have a better workaround.
+poetry = "1.2.0a2"
+poetry-core = "1.1.0a7"
# setuptools-rust is a build dependency of cryptography, and since we don't have
# a great way of pinning build dependencies, we simply list it here to ensure a
# working version. Note: if build dependencies of setuptools-rust break at some
diff --git a/tools/requirements.txt b/tools/requirements.txt
index d57f3a600..0bc823444 100644
--- a/tools/requirements.txt
+++ b/tools/requirements.txt
@@ -7,190 +7,191 @@
# for more info.
alabaster==0.7.12; python_version >= "3.7"
apacheconfig==0.3.2; python_version >= "3.7"
-appdirs==1.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.4.0"
-appnope==0.1.2; python_version >= "3.7" and sys_platform == "darwin"
-astroid==2.9.3; python_version >= "3.7" and python_full_version >= "3.6.2"
-atomicwrites==1.4.0; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.4.0"
-attrs==21.4.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
-awscli==1.22.75; python_version >= "3.6"
+appdirs==1.4.4; python_version >= "3.7" and python_version < "4.0"
+appnope==0.1.3; python_version >= "3.7" and sys_platform == "darwin"
+astroid==2.11.7; python_version >= "3.7"
+atomicwrites==1.4.1; sys_platform == "win32" and python_version >= "3.7"
+attrs==22.1.0; python_version >= "3.7"
+awscli==1.25.40
+awscli==1.25.40; python_version >= "3.7"
azure-devops==6.0.0b4; python_version >= "3.7"
-babel==2.9.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.4.0"
+babel==2.10.3; python_version >= "3.7"
backcall==0.2.0; python_version >= "3.7"
-bcrypt==3.2.0; python_version >= "3.7"
-beautifulsoup4==4.10.0; python_full_version > "3.0.0" and python_version >= "3.7" or python_version >= "3.7" and python_version < "4.0" and python_full_version > "3.0.0"
-bleach==4.1.0; python_version >= "3.7"
-boto3==1.21.20; python_version >= "3.7"
-botocore==1.24.20; python_version >= "3.7"
-cachecontrol==0.12.10; python_version >= "3.7" and python_version < "4.0"
-cached-property==1.5.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
-cachetools==5.0.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7")
-cachy==0.3.0; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.4.0"
-certifi==2021.10.8; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7" or python_version >= "3.7"
-cffi==1.15.0; python_version >= "3.7" or python_version >= "3.7"
-charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.7"
-cleo==1.0.0a4; python_version >= "3.7" and python_version < "4.0"
-cloudflare==2.8.15; python_version >= "3.7"
-colorama==0.4.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" or sys_platform == "win32" and python_full_version >= "3.6.2" and python_version >= "3.7" or python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" or python_full_version >= "3.5.0" and python_version >= "3.7" and sys_platform == "win32" or python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or python_version >= "3.7" and python_full_version >= "3.5.0" and platform_system == "Windows"
-configargparse==1.5.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
+bcrypt==3.2.2; python_version >= "3.7"
+beautifulsoup4==4.11.1; python_version >= "3.7"
+bleach==5.0.1; python_version >= "3.7"
+boto3==1.24.40; python_version >= "3.7"
+botocore==1.27.40; python_version >= "3.7"
+cachecontrol==0.12.11; python_version >= "3.7" and python_version < "4.0"
+cached-property==1.5.2; python_version >= "3.7"
+cachetools==5.2.0; python_version >= "3.7" and python_version < "4.0"
+cachy==0.3.0; python_version >= "3.7" and python_version < "4.0"
+certifi==2022.6.15; python_version >= "3.7" and python_version < "4" or python_version >= "3.7"
+cffi==1.15.1; python_version >= "3.7"
+charset-normalizer==2.1.0; python_version >= "3.7" and python_version < "4"
+cleo==1.0.0a5; python_version >= "3.7" and python_version < "4.0"
+cloudflare==2.9.11; python_version >= "3.7"
+colorama==0.4.4; python_version >= "3.7"
+configargparse==1.5.3; python_version >= "3.7"
configobj==5.0.6; python_version >= "3.7"
-coverage==6.3.2; python_version >= "3.7" or python_version >= "3.7"
+coverage==6.4.2; python_version >= "3.7"
crashtest==0.3.1; python_version >= "3.7" and python_version < "4.0"
-cryptography==36.0.2; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7" or python_version >= "3.7" and python_version < "4.0" and sys_platform == "linux"
-cython==0.29.28; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0")
+cryptography==37.0.4
+cryptography==37.0.4; python_version >= "3.7"
+cython==0.29.31
decorator==5.1.1; python_version >= "3.7"
-deprecated==1.2.13; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.4.0"
-distlib==0.3.4; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.4.0" or python_version >= "3.7"
-distro==1.7.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" or python_version >= "3.7"
-dns-lexicon==3.9.4; python_version >= "3.7" and python_version < "4.0"
+dill==0.3.5.1; python_version >= "3.7"
+distlib==0.3.5; python_version >= "3.7"
+distro==1.7.0; python_version >= "3.7"
+dns-lexicon==3.11.1; python_version >= "3.7" and python_version < "4.0"
dnspython==2.2.1; python_version >= "3.7" and python_version < "4.0"
-docker-compose==1.26.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
-docker==4.2.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
-dockerpty==0.4.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
-docopt==0.6.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
-docutils==0.15.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7" or python_version >= "3.7" and python_full_version >= "3.4.0"
+docker-compose==1.26.2; python_version >= "3.7"
+docker==4.2.2; python_version >= "3.7"
+dockerpty==0.4.1; python_version >= "3.7"
+docopt==0.6.2; python_version >= "3.7"
+docutils==0.16; python_version >= "3.7"
entrypoints==0.3; python_version >= "3.7" and python_version < "4.0"
-execnet==1.9.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
-fabric==2.6.0; python_version >= "3.7"
-filelock==3.6.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.5.0" or python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.4.0" or python_version >= "3.7" and python_version < "4.0"
-google-api-core==2.7.1; python_version >= "3.7"
-google-api-python-client==2.41.0; python_version >= "3.7"
+execnet==1.9.0; python_version >= "3.7"
+fabric==2.7.1; python_version >= "3.7"
+filelock==3.7.1; python_version >= "3.7" or python_version >= "3.7" and python_version < "4.0"
+google-api-core==2.8.2; python_version >= "3.7"
+google-api-python-client==2.55.0; python_version >= "3.7"
google-auth-httplib2==0.1.0; python_version >= "3.7"
-google-auth==2.6.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
-googleapis-common-protos==1.55.0; python_version >= "3.7"
-html5lib==1.1; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.5.0"
-httplib2==0.20.4; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
-idna==3.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7" or python_version >= "3.7" and python_version < "4.0"
-imagesize==1.3.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.4.0"
-importlib-metadata==1.7.0; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.8" or python_version >= "3.7" and python_version < "3.8" and python_full_version >= "3.5.0"
+google-auth==2.9.1; python_version >= "3.7"
+googleapis-common-protos==1.56.4; python_version >= "3.7"
+html5lib==1.1; python_version >= "3.7" and python_version < "4.0"
+httplib2==0.20.4; python_version >= "3.7"
+idna==3.3; python_version >= "3.7" and python_version < "4" or python_version >= "3.7" and python_version < "4.0"
+imagesize==1.4.1; python_version >= "3.7"
+importlib-metadata==1.7.0; python_version >= "3.7" and python_version < "3.8"
iniconfig==1.1.1; python_version >= "3.7"
-invoke==1.6.0; python_version >= "3.7"
+invoke==1.7.1; python_version >= "3.7"
ipdb==0.13.9; python_version >= "3.7"
-ipython==7.32.0; python_version >= "3.7"
+ipython==7.34.0; python_version >= "3.7"
isodate==0.6.1; python_version >= "3.7"
-isort==5.10.1; python_full_version >= "3.6.2" and python_version < "4.0" and python_version >= "3.7"
+isort==5.10.1; python_version >= "3.7" and python_version < "4.0"
jedi==0.18.1; python_version >= "3.7"
-jeepney==0.7.1; python_version >= "3.7" and python_version < "4.0" and sys_platform == "linux"
-jinja2==3.0.3; python_version >= "3.7" or python_version >= "3.7"
-jmespath==0.10.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7"
+jeepney==0.8.0; python_version >= "3.7" and python_version < "4.0" and sys_platform == "linux"
+jinja2==3.1.2; python_version >= "3.7"
+jmespath==1.0.1; python_version >= "3.7"
josepy==1.13.0; python_version >= "3.7"
-jsonlines==3.0.0; python_version >= "3.7"
-jsonpickle==2.1.0; python_version >= "3.7"
-jsonschema==3.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
+jsonlines==3.1.0; python_version >= "3.7"
+jsonpickle==2.2.0; python_version >= "3.7"
+jsonschema==3.2.0; python_version >= "3.7"
keyring==22.3.0; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7"
-lazy-object-proxy==1.7.1; python_version >= "3.7" and python_full_version >= "3.6.2"
+lazy-object-proxy==1.7.1; python_version >= "3.7"
lockfile==0.12.2
markupsafe==2.1.1; python_version >= "3.7"
matplotlib-inline==0.1.3; python_version >= "3.7"
-mccabe==0.6.1; python_version >= "3.7" and python_full_version >= "3.6.2"
-mock==4.0.3; python_version >= "3.6"
-msgpack==1.0.3; python_version >= "3.7" and python_version < "4.0"
+mccabe==0.7.0; python_version >= "3.7"
+mock==4.0.3
+msgpack==1.0.4; python_version >= "3.7" and python_version < "4.0"
msrest==0.6.21; python_version >= "3.7"
mypy-extensions==0.4.3; python_version >= "3.7"
-mypy==0.941; python_version >= "3.7"
+mypy==0.971; python_version >= "3.7"
oauth2client==4.1.3; python_version >= "3.7"
-oauthlib==3.2.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.4.0"
-packaging==20.9; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.4.0" or python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" or python_version >= "3.7" and python_full_version >= "3.5.0"
-paramiko==2.10.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" or python_version >= "3.7"
+oauthlib==3.2.0; python_version >= "3.7"
+packaging==20.9; python_version >= "3.7"
+paramiko==2.11.0; python_version >= "3.7"
parsedatetime==2.6; python_version >= "3.7"
parso==0.8.3; python_version >= "3.7"
pathlib2==2.3.7.post1; python_version >= "3.7"
pexpect==4.8.0; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7" and sys_platform != "win32"
pickleshare==0.7.5; python_version >= "3.7"
-pip==22.0.4; python_version >= "3.7"
-pkginfo==1.8.2; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7"
-platformdirs==2.5.1; python_version >= "3.7" and python_full_version >= "3.6.2"
-pluggy==1.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.5.0" or python_version >= "3.7"
+pip==22.2.1; python_version >= "3.7"
+pkginfo==1.8.3; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7"
+platformdirs==2.5.2; python_version >= "3.7"
+pluggy==1.0.0; python_version >= "3.7"
ply==3.11; python_version >= "3.7"
-poetry-core==1.1.0a7; python_version >= "3.7" and python_version < "4.0"
-poetry==1.2.0a2; python_version >= "3.6" and python_version < "4.0"
-prompt-toolkit==3.0.28; python_version >= "3.7" and python_full_version >= "3.6.2"
-protobuf==3.19.4; python_version >= "3.7"
+poetry-core==1.1.0a7
+poetry==1.2.0a2
+prompt-toolkit==3.0.30; python_version >= "3.7"
+protobuf==4.21.4; python_version >= "3.7"
ptyprocess==0.7.0; python_version >= "3.7" and python_version < "4.0"
-py==1.11.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
-pyasn1-modules==0.2.8; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7" or python_version >= "3.7"
-pyasn1==0.4.8; python_version >= "3.7" and python_version < "4" or python_version >= "3.7"
-pycparser==2.21; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
-pygithub==1.55; python_version >= "3.7"
-pygments==2.11.2; python_version >= "3.7"
-pyjwt==2.3.0; python_version >= "3.7"
+py==1.11.0; python_version >= "3.7"
+pyasn1-modules==0.2.8; python_version >= "3.7"
+pyasn1==0.4.8; python_version >= "3.7"
+pycparser==2.21; python_version >= "3.7"
+pygments==2.12.0; python_version >= "3.7"
pylev==1.4.0; python_version >= "3.7" and python_version < "4.0"
-pylint==2.12.2; python_full_version >= "3.6.2"
-pynacl==1.5.0; python_version >= "3.7" or python_version >= "3.7"
+pylint==2.13.9
+pylint==2.13.9; python_version >= "3.7"
+pynacl==1.5.0; python_version >= "3.7"
pynsist==2.7; python_version >= "3.7"
pyopenssl==22.0.0; python_version >= "3.7"
-pyparsing==3.0.7; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" or python_version >= "3.7" or python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.4.0"
-pypiwin32==223; sys_platform == "win32" and python_version >= "3.6" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7")
+pyparsing==3.0.9; python_version >= "3.7"
+pypiwin32==223; sys_platform == "win32" and python_version >= "3.7"
pyrfc3339==1.1; python_version >= "3.7"
-pyrsistent==0.18.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
-pytest-cov==3.0.0; python_version >= "3.7" or python_version >= "3.7"
+pyrsistent==0.18.1; python_version >= "3.7"
+pytest-cov==3.0.0; python_version >= "3.7"
pytest-forked==1.4.0; python_version >= "3.7"
-pytest-xdist==2.5.0; python_version >= "3.7" or python_version >= "3.7"
-pytest==7.1.0; python_version >= "3.7" or python_version >= "3.7"
+pytest-xdist==2.5.0; python_version >= "3.7"
+pytest==7.1.2; python_version >= "3.7"
python-augeas==1.1.0; python_version >= "3.7"
-python-dateutil==2.8.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7"
+python-dateutil==2.8.2; python_version >= "3.7"
python-digitalocean==1.17.0; python_version >= "3.7"
-python-dotenv==0.19.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
-pytz==2021.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.4.0" or python_version >= "3.7"
+python-dotenv==0.20.0; python_version >= "3.7"
+pytz==2022.1; python_version >= "3.7"
pywin32-ctypes==0.2.0; python_version >= "3.7" and python_version < "4.0" and sys_platform == "win32"
-pywin32==303; sys_platform == "win32" and python_version >= "3.7" or sys_platform == "win32" and python_version >= "3.6" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7")
-pyyaml==5.4.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7" or python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.6.0"
-readme-renderer==34.0; python_version >= "3.7"
+pywin32==304; sys_platform == "win32" and python_version >= "3.7"
+pyyaml==5.4.1; python_version >= "3.7"
+readme-renderer==35.0; python_version >= "3.7"
requests-download==0.1.2; python_version >= "3.7"
requests-file==1.5.1; python_version >= "3.7" and python_version < "4.0"
-requests-oauthlib==1.3.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.4.0"
-requests-toolbelt==0.9.1; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7" or python_version >= "3.7"
-requests==2.27.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7" or python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.6.0"
+requests-oauthlib==1.3.1; python_version >= "3.7"
+requests-toolbelt==0.9.1; python_version >= "3.7"
+requests==2.28.1; python_version >= "3.7" and python_version < "4"
rfc3986==2.0.0; python_version >= "3.7"
-rsa==4.7.2; python_version >= "3.7" and python_version < "4" or python_version >= "3.5" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7")
-s3transfer==0.5.2; python_version >= "3.7"
-secretstorage==3.3.1; python_version >= "3.7" and python_version < "4.0" and sys_platform == "linux"
-semantic-version==2.9.0; python_version >= "3.6"
-setuptools-rust==1.1.2; python_version >= "3.6"
-setuptools==60.9.3; python_version >= "3.7" or python_version >= "3.7" or python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" or python_version >= "3.7" and python_full_version >= "3.6.2" or python_full_version >= "3.4.0" and python_version >= "3.7"
+rsa==4.7.2; python_version >= "3.7" and python_version < "4"
+s3transfer==0.6.0; python_version >= "3.7"
+secretstorage==3.3.2; python_version >= "3.7" and python_version < "4.0" and sys_platform == "linux"
+semantic-version==2.10.0; python_version >= "3.7"
+setuptools-rust==1.4.1
+setuptools==63.2.0; python_version >= "3.7"
shellingham==1.4.0; python_version >= "3.7" and python_version < "4.0"
-six==1.16.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" or python_full_version >= "3.3.0" and python_version >= "3.7" or python_version >= "3.7" and python_full_version >= "3.5.0" or python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.5.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.4.0" or python_full_version >= "3.6.0" and python_version >= "3.7" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.3.0"
+six==1.16.0; python_version >= "3.7"
snowballstemmer==2.2.0; python_version >= "3.7"
-soupsieve==2.3.1; python_full_version > "3.0.0" and python_version >= "3.7"
-sphinx-rtd-theme==1.0.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.4.0"
-sphinx==4.3.2; python_version >= "3.7" or python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.4.0"
+soupsieve==2.3.2.post1; python_version >= "3.7"
+sphinx-rtd-theme==1.0.0; python_version >= "3.7"
+sphinx==4.3.2; python_version >= "3.7"
sphinxcontrib-applehelp==1.0.2; python_version >= "3.7"
sphinxcontrib-devhelp==1.0.2; python_version >= "3.7"
sphinxcontrib-htmlhelp==2.0.0; python_version >= "3.7"
sphinxcontrib-jsmath==1.0.1; python_version >= "3.7"
sphinxcontrib-qthelp==1.0.3; python_version >= "3.7"
sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.7"
-texttable==1.6.4; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
-tldextract==3.2.0; python_version >= "3.7" and python_version < "4.0"
-toml==0.10.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.3.0" or python_version >= "3.7" and python_full_version >= "3.6.2" or python_version >= "3.7" and python_full_version >= "3.5.0"
-tomli==2.0.1; python_version >= "3.7" or python_version >= "3.7"
-tomlkit==0.10.0; python_version >= "3.7" and python_version < "4.0"
-tox==3.24.5; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.5.0"
-tqdm==4.63.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.4.0"
-traitlets==5.1.1; python_version >= "3.7"
+texttable==1.6.4; python_version >= "3.7"
+tldextract==3.3.1; python_version >= "3.7" and python_version < "4.0"
+toml==0.10.2; python_version >= "3.7"
+tomli==2.0.1; python_version < "3.11" and python_version >= "3.7" or python_full_version <= "3.11.0a6" and python_version >= "3.7" or python_version >= "3.7"
+tomlkit==0.11.1; python_version >= "3.7" and python_version < "4.0"
+tox==3.25.1; python_version >= "3.7"
+tqdm==4.64.0; python_version >= "3.7"
+traitlets==5.3.0; python_version >= "3.7"
twine==3.3.0; python_version >= "3.7"
-typed-ast==1.5.2; python_version >= "3.7" and python_version < "3.8" or implementation_name == "cpython" and python_version < "3.8" and python_version >= "3.7" and python_full_version >= "3.6.2"
-types-cryptography==3.3.18; python_version >= "3.7"
-types-mock==4.0.11; python_version >= "3.7"
-types-pyopenssl==22.0.0; python_version >= "3.7"
+typed-ast==1.5.4; python_version >= "3.7" and python_version < "3.8" or implementation_name == "cpython" and python_version < "3.8" and python_version >= "3.7"
+types-cryptography==3.3.21; python_version >= "3.7"
+types-mock==4.0.15; python_version >= "3.7"
+types-pyopenssl==22.0.9; python_version >= "3.7"
types-pyrfc3339==1.1.1; python_version >= "3.7"
-types-python-dateutil==2.8.9; python_version >= "3.7"
-types-pytz==2021.3.5; python_version >= "3.7"
-types-requests==2.27.12; python_version >= "3.7"
-types-setuptools==57.4.10; python_version >= "3.7"
-types-six==1.16.12; python_version >= "3.7"
-types-urllib3==1.26.11; python_version >= "3.7"
-typing-extensions==4.1.1; python_version >= "3.7" or python_version >= "3.6" or python_version < "3.10" and python_full_version >= "3.6.2" and python_version >= "3.7" or python_version < "3.8" and python_version >= "3.7"
+types-python-dateutil==2.8.19; python_version >= "3.7"
+types-pytz==2022.1.2; python_version >= "3.7"
+types-requests==2.28.5; python_version >= "3.7"
+types-setuptools==63.2.2; python_version >= "3.7"
+types-six==1.16.18; python_version >= "3.7"
+types-urllib3==1.26.17; python_version >= "3.7"
+typing-extensions==4.3.0; python_version >= "3.7" or python_version < "3.10" and python_version >= "3.7" or python_version < "3.8" and python_version >= "3.7"
uritemplate==4.1.1; python_version >= "3.7"
-urllib3==1.26.8; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.7"
-virtualenv==20.4.4; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.4.0" or python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.5.0"
-wcwidth==0.2.5; python_version >= "3.7" and python_full_version >= "3.6.2"
-webencodings==0.5.1; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.5.0" or python_version >= "3.7"
-websocket-client==0.59.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" or python_full_version >= "3.5.0" and python_version >= "3.7"
-wheel==0.37.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.5.0"
-wrapt==1.13.3; python_version >= "3.7" and python_full_version < "3.0.0" or python_version >= "3.7" and python_full_version >= "3.5.0" or python_version >= "3.7" and python_full_version >= "3.6.2"
+urllib3==1.26.11; python_version >= "3.7" and python_version < "4"
+virtualenv==20.4.4; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7"
+wcwidth==0.2.5; python_version >= "3.7"
+webencodings==0.5.1; python_version >= "3.7" and python_version < "4.0" or python_version >= "3.7"
+websocket-client==0.59.0; python_version >= "3.7"
+wheel==0.37.1; python_version >= "3.7"
+wrapt==1.14.1; python_version >= "3.7"
yarg==0.1.9; python_version >= "3.7"
-zipp==3.7.0; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "3.8" or python_version >= "3.7" and python_version < "3.8" and python_full_version >= "3.5.0"
-zope.component==5.0.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
-zope.event==4.5.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
-zope.hookable==5.1.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
-zope.interface==5.4.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
+zipp==3.8.1; python_version >= "3.7" and python_version < "3.8"
+zope.component==5.0.1; python_version >= "3.7"
+zope.event==4.5.0; python_version >= "3.7"
+zope.hookable==5.1.0; python_version >= "3.7"
+zope.interface==5.4.0; python_version >= "3.7"