mirror of
https://github.com/certbot/certbot.git
synced 2026-07-31 00:24:51 +02:00
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 11268fd231.
* pin poetry back to avoid extras issue
* repin
* fix new mypy complaints in acme/
This commit is contained in:
@@ -408,7 +408,7 @@ class TLSALPN01Response(KeyAuthorizationChallengeResponse):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
ID_PE_ACME_IDENTIFIER_V1 = b"1.3.6.1.5.5.7.1.30.1"
|
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
|
@property
|
||||||
def h(self) -> bytes:
|
def h(self) -> bytes:
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ from typing import Callable
|
|||||||
from typing import List
|
from typing import List
|
||||||
from typing import Mapping
|
from typing import Mapping
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
from typing import Sequence
|
||||||
from typing import Set
|
from typing import Set
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
from typing import Union
|
from typing import Union
|
||||||
@@ -39,7 +40,9 @@ class _DefaultCertSelection:
|
|||||||
|
|
||||||
def __call__(self, connection: SSL.Connection) -> Optional[Tuple[crypto.PKey, crypto.X509]]:
|
def __call__(self, connection: SSL.Connection) -> Optional[Tuple[crypto.PKey, crypto.X509]]:
|
||||||
server_name = connection.get_servername()
|
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
|
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,
|
method: int = _DEFAULT_SSL_METHOD,
|
||||||
alpn_selection: Optional[Callable[[SSL.Connection, List[bytes]], bytes]] = None,
|
alpn_selection: Optional[Callable[[SSL.Connection, List[bytes]], bytes]] = None,
|
||||||
cert_selection: Optional[Callable[[SSL.Connection],
|
cert_selection: Optional[Callable[[SSL.Connection],
|
||||||
Tuple[crypto.PKey, crypto.X509]]] = None
|
Optional[Tuple[crypto.PKey,
|
||||||
|
crypto.X509]]]] = None
|
||||||
) -> None:
|
) -> None:
|
||||||
self.sock = sock
|
self.sock = sock
|
||||||
self.alpn_selection = alpn_selection
|
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.")
|
raise ValueError("Both cert_selection and certs specified.")
|
||||||
actual_cert_selection: Union[_DefaultCertSelection,
|
actual_cert_selection: Union[_DefaultCertSelection,
|
||||||
Optional[Callable[[SSL.Connection],
|
Optional[Callable[[SSL.Connection],
|
||||||
Tuple[crypto.PKey,
|
Optional[Tuple[crypto.PKey,
|
||||||
crypto.X509]]]] = cert_selection
|
crypto.X509]]]]] = cert_selection
|
||||||
if actual_cert_selection is None:
|
if actual_cert_selection is None:
|
||||||
actual_cert_selection = _DefaultCertSelection(certs if certs else {})
|
actual_cert_selection = _DefaultCertSelection(certs if certs else {})
|
||||||
self.cert_selection = actual_cert_selection
|
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
|
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),
|
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.
|
"""Probe SNI server for SSL certificate.
|
||||||
|
|
||||||
:param bytes name: Byte string to send as the server name in the
|
: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
|
of source interface). See `socket.creation_connection` for more
|
||||||
info. Available only in Python 2.7+.
|
info. Available only in Python 2.7+.
|
||||||
:param alpn_protocols: Protocols to request using ALPN.
|
: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.
|
: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()
|
client_ssl.shutdown()
|
||||||
except SSL.Error as error:
|
except SSL.Error as error:
|
||||||
raise errors.Error(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,
|
def make_csr(private_key_pem: bytes, domains: Optional[Union[Set[str], List[str]]] = None,
|
||||||
|
|||||||
+11
-6
@@ -46,10 +46,12 @@ class TLSServer(socketserver.TCPServer):
|
|||||||
method=self.method))
|
method=self.method))
|
||||||
|
|
||||||
def _cert_selection(self, connection: SSL.Connection
|
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."""
|
"""Callback selecting certificate for connection."""
|
||||||
server_name = connection.get_servername()
|
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:
|
def server_bind(self) -> None:
|
||||||
self._wrap_sock()
|
self._wrap_sock()
|
||||||
@@ -151,7 +153,7 @@ class TLSALPN01Server(TLSServer, ACMEServerMixin):
|
|||||||
|
|
||||||
def __init__(self, server_address: Tuple[str, int],
|
def __init__(self, server_address: Tuple[str, int],
|
||||||
certs: List[Tuple[crypto.PKey, crypto.X509]],
|
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:
|
ipv6: bool = False) -> None:
|
||||||
# We don't need to implement a request handler here because the work
|
# 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
|
# (including logging) is being done by wrapped socket set up in the
|
||||||
@@ -161,7 +163,8 @@ class TLSALPN01Server(TLSServer, ACMEServerMixin):
|
|||||||
ipv6=ipv6)
|
ipv6=ipv6)
|
||||||
self.challenge_certs = challenge_certs
|
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
|
# 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
|
# 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
|
# 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.
|
# handshake in alpn_selection() if ALPN protos are not what we expect.
|
||||||
# [0] https://github.com/openssl/openssl/issues/4952
|
# [0] https://github.com/openssl/openssl/issues/4952
|
||||||
server_name = connection.get_servername()
|
server_name = connection.get_servername()
|
||||||
logger.debug("Serving challenge cert for server name %s", server_name)
|
if server_name:
|
||||||
return self.challenge_certs[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:
|
def _alpn_selection(self, _connection: SSL.Connection, alpn_protos: List[bytes]) -> bytes:
|
||||||
"""Callback to select alpn protocol."""
|
"""Callback to select alpn protocol."""
|
||||||
|
|||||||
@@ -328,12 +328,12 @@ class TLSALPN01ResponseTest(unittest.TestCase):
|
|||||||
mock_gethostbyname.assert_called_once_with('foo.com')
|
mock_gethostbyname.assert_called_once_with('foo.com')
|
||||||
mock_probe_sni.assert_called_once_with(
|
mock_probe_sni.assert_called_once_with(
|
||||||
host=b'127.0.0.1', port=self.response.PORT, name=b'foo.com',
|
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')
|
self.response.probe_cert('foo.com', host='8.8.8.8')
|
||||||
mock_probe_sni.assert_called_with(
|
mock_probe_sni.assert_called_with(
|
||||||
host=b'8.8.8.8', port=mock.ANY, name=b'foo.com',
|
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')
|
@mock.patch('acme.challenges.TLSALPN01Response.probe_cert')
|
||||||
def test_simple_verify_false_on_probe_error(self, mock_probe_cert):
|
def test_simple_verify_false_on_probe_error(self, mock_probe_cert):
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ def assert_equals_world_read_permissions(file1: str, file2: str) -> None:
|
|||||||
mode_file1 = os.stat(file1).st_mode & 0o004
|
mode_file1 = os.stat(file1).st_mode & 0o004
|
||||||
mode_file2 = os.stat(file2).st_mode & 0o004
|
mode_file2 = os.stat(file2).st_mode & 0o004
|
||||||
else:
|
else:
|
||||||
everybody = win32security.ConvertStringSidToSid(EVERYBODY_SID)
|
everybody = win32security.ConvertStringSidToSid(EVERYBODY_SID) # pylint: disable=used-before-assignment
|
||||||
|
|
||||||
security1 = win32security.GetFileSecurity(file1, win32security.DACL_SECURITY_INFORMATION)
|
security1 = win32security.GetFileSecurity(file1, win32security.DACL_SECURITY_INFORMATION)
|
||||||
dacl1 = security1.GetSecurityDescriptorDacl()
|
dacl1 = security1.GetSecurityDescriptorDacl()
|
||||||
@@ -135,7 +135,7 @@ def assert_equals_world_read_permissions(file1: str, file2: str) -> None:
|
|||||||
'TrusteeType': win32security.TRUSTEE_IS_USER,
|
'TrusteeType': win32security.TRUSTEE_IS_USER,
|
||||||
'Identifier': everybody,
|
'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)
|
security2 = win32security.GetFileSecurity(file2, win32security.DACL_SECURITY_INFORMATION)
|
||||||
dacl2 = security2.GetSecurityDescriptorDacl()
|
dacl2 = security2.GetSecurityDescriptorDacl()
|
||||||
|
|||||||
@@ -133,18 +133,9 @@ class ACMEServer:
|
|||||||
acme_xdist['directory_url'] = BOULDER_V2_DIRECTORY_URL
|
acme_xdist['directory_url'] = BOULDER_V2_DIRECTORY_URL
|
||||||
acme_xdist['challtestsrv_url'] = BOULDER_V2_CHALLTESTSRV_URL
|
acme_xdist['challtestsrv_url'] = BOULDER_V2_CHALLTESTSRV_URL
|
||||||
|
|
||||||
acme_xdist['http_port'] = {
|
acme_xdist['http_port'] = dict(zip(nodes, range(5200, 5200 + len(nodes))))
|
||||||
node: port for (node, port) in # pylint: disable=unnecessary-comprehension
|
acme_xdist['https_port'] = dict(zip(nodes, range(5100, 5100 + len(nodes))))
|
||||||
zip(nodes, range(5200, 5200 + len(nodes)))
|
acme_xdist['other_port'] = dict(zip(nodes, range(5300, 5300 + 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)))
|
|
||||||
}
|
|
||||||
|
|
||||||
self.acme_xdist = acme_xdist
|
self.acme_xdist = acme_xdist
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ class Authenticator(dns_common.DNSAuthenticator):
|
|||||||
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.r53 = boto3.client("route53")
|
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:
|
def more_info(self) -> str:
|
||||||
return "Solve a DNS01 challenge using AWS Route53"
|
return "Solve a DNS01 challenge using AWS Route53"
|
||||||
|
|||||||
@@ -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
|
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
|
state that deleting a file opened by a process from another process is not possible with
|
||||||
os.open and io.open.
|
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.
|
condition encountered on Linux is not possible on Windows, leading to a simpler workflow.
|
||||||
"""
|
"""
|
||||||
def acquire(self) -> None:
|
def acquire(self) -> None:
|
||||||
@@ -209,7 +209,7 @@ class _WindowsLockMechanism(_BaseLockMechanism):
|
|||||||
# This "type: ignore" is currently needed because msvcrt methods
|
# This "type: ignore" is currently needed because msvcrt methods
|
||||||
# are only defined on Windows. See
|
# are only defined on Windows. See
|
||||||
# https://github.com/python/typeshed/blob/16ae4c61201cd8b96b8b22cdfb2ab9e89ba5bcf2/stdlib/msvcrt.pyi.
|
# 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:
|
except (IOError, OSError) as err:
|
||||||
if fd:
|
if fd:
|
||||||
os.close(fd)
|
os.close(fd)
|
||||||
@@ -229,7 +229,7 @@ class _WindowsLockMechanism(_BaseLockMechanism):
|
|||||||
# This "type: ignore" is currently needed because msvcrt methods
|
# This "type: ignore" is currently needed because msvcrt methods
|
||||||
# are only defined on Windows. See
|
# are only defined on Windows. See
|
||||||
# https://github.com/python/typeshed/blob/16ae4c61201cd8b96b8b22cdfb2ab9e89ba5bcf2/stdlib/msvcrt.pyi.
|
# 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)
|
os.close(self._fd)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ class AnnotatedChallenge(jose.ImmutableMap):
|
|||||||
|
|
||||||
class KeyAuthorizationAnnotatedChallenge(AnnotatedChallenge):
|
class KeyAuthorizationAnnotatedChallenge(AnnotatedChallenge):
|
||||||
"""Client annotated `KeyAuthorizationChallenge` challenge."""
|
"""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:
|
def response_and_validation(self, *args: Any, **kwargs: Any) -> Any:
|
||||||
"""Generate response and validation."""
|
"""Generate response and validation."""
|
||||||
@@ -57,5 +57,5 @@ class KeyAuthorizationAnnotatedChallenge(AnnotatedChallenge):
|
|||||||
|
|
||||||
class DNS(AnnotatedChallenge):
|
class DNS(AnnotatedChallenge):
|
||||||
"""Client annotated "dns" ACME challenge."""
|
"""Client annotated "dns" ACME challenge."""
|
||||||
__slots__ = ('challb', 'domain')
|
__slots__ = ('challb', 'domain') # pylint: disable=redefined-slots-in-subclass
|
||||||
acme_type = challenges.DNS
|
acme_type = challenges.DNS
|
||||||
|
|||||||
@@ -38,14 +38,12 @@ class _AuthenticatorCallableTestCase(Protocol):
|
|||||||
See
|
See
|
||||||
https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertTrue
|
https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertTrue
|
||||||
"""
|
"""
|
||||||
...
|
|
||||||
|
|
||||||
def assertEqual(self, *unused_args: Any) -> None:
|
def assertEqual(self, *unused_args: Any) -> None:
|
||||||
"""
|
"""
|
||||||
See
|
See
|
||||||
https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertEqual
|
https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertEqual
|
||||||
"""
|
"""
|
||||||
...
|
|
||||||
|
|
||||||
|
|
||||||
class BaseAuthenticatorTest:
|
class BaseAuthenticatorTest:
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ class _LexiconAwareTestCase(Protocol):
|
|||||||
See
|
See
|
||||||
https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaises
|
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.
|
# These classes are intended to be subclassed/mixed in, so not all members are defined.
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ if _USE_DISTRO:
|
|||||||
import distro
|
import distro
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
import distutils.version
|
import distutils.version # pylint: disable=deprecated-module
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -624,7 +624,7 @@ def get_strict_version(normalized: str) -> "distutils.version.StrictVersion":
|
|||||||
"removed in a future release.", DeprecationWarning)
|
"removed in a future release.", DeprecationWarning)
|
||||||
with warnings.catch_warnings():
|
with warnings.catch_warnings():
|
||||||
warnings.simplefilter("ignore", DeprecationWarning)
|
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
|
# strict version ending with "a" and a number designates a pre-release
|
||||||
return distutils.version.StrictVersion(normalized.replace(".dev", "a"))
|
return distutils.version.StrictVersion(normalized.replace(".dev", "a"))
|
||||||
|
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ release = meta['version']
|
|||||||
#
|
#
|
||||||
# This is also used if you do content translation via gettext catalogs.
|
# This is also used if you do content translation via gettext catalogs.
|
||||||
# Usually you set "language" from the command line for these cases.
|
# 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
|
# There are two options for replacing |today|: either, you set today to some
|
||||||
# non-false value, then it is used:
|
# non-false value, then it is used:
|
||||||
|
|||||||
@@ -62,7 +62,14 @@ mock = "*"
|
|||||||
# https://github.com/python-poetry/poetry/issues/1584. This version is required
|
# https://github.com/python-poetry/poetry/issues/1584. This version is required
|
||||||
# here in addition to certbot/setup.py because otherwise the pre-release
|
# here in addition to certbot/setup.py because otherwise the pre-release
|
||||||
# version of poetry will not be installed.
|
# 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
|
# 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
|
# 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
|
# working version. Note: if build dependencies of setuptools-rust break at some
|
||||||
|
|||||||
+138
-137
@@ -7,190 +7,191 @@
|
|||||||
# for more info.
|
# for more info.
|
||||||
alabaster==0.7.12; python_version >= "3.7"
|
alabaster==0.7.12; python_version >= "3.7"
|
||||||
apacheconfig==0.3.2; 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"
|
appdirs==1.4.4; python_version >= "3.7" and python_version < "4.0"
|
||||||
appnope==0.1.2; python_version >= "3.7" and sys_platform == "darwin"
|
appnope==0.1.3; python_version >= "3.7" and sys_platform == "darwin"
|
||||||
astroid==2.9.3; python_version >= "3.7" and python_full_version >= "3.6.2"
|
astroid==2.11.7; python_version >= "3.7"
|
||||||
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"
|
atomicwrites==1.4.1; sys_platform == "win32" and python_version >= "3.7"
|
||||||
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"
|
attrs==22.1.0; python_version >= "3.7"
|
||||||
awscli==1.22.75; python_version >= "3.6"
|
awscli==1.25.40
|
||||||
|
awscli==1.25.40; python_version >= "3.7"
|
||||||
azure-devops==6.0.0b4; 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"
|
backcall==0.2.0; python_version >= "3.7"
|
||||||
bcrypt==3.2.0; python_version >= "3.7"
|
bcrypt==3.2.2; 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"
|
beautifulsoup4==4.11.1; python_version >= "3.7"
|
||||||
bleach==4.1.0; python_version >= "3.7"
|
bleach==5.0.1; python_version >= "3.7"
|
||||||
boto3==1.21.20; python_version >= "3.7"
|
boto3==1.24.40; python_version >= "3.7"
|
||||||
botocore==1.24.20; python_version >= "3.7"
|
botocore==1.27.40; python_version >= "3.7"
|
||||||
cachecontrol==0.12.10; python_version >= "3.7" and python_version < "4.0"
|
cachecontrol==0.12.11; 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"
|
cached-property==1.5.2; 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")
|
cachetools==5.2.0; python_version >= "3.7" and python_version < "4.0"
|
||||||
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"
|
cachy==0.3.0; python_version >= "3.7" and python_version < "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"
|
certifi==2022.6.15; python_version >= "3.7" and python_version < "4" or python_version >= "3.7"
|
||||||
cffi==1.15.0; python_version >= "3.7" or python_version >= "3.7"
|
cffi==1.15.1; python_version >= "3.7"
|
||||||
charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.7"
|
charset-normalizer==2.1.0; python_version >= "3.7" and python_version < "4"
|
||||||
cleo==1.0.0a4; python_version >= "3.7" and python_version < "4.0"
|
cleo==1.0.0a5; python_version >= "3.7" and python_version < "4.0"
|
||||||
cloudflare==2.8.15; python_version >= "3.7"
|
cloudflare==2.9.11; 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"
|
colorama==0.4.4; python_version >= "3.7"
|
||||||
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"
|
configargparse==1.5.3; python_version >= "3.7"
|
||||||
configobj==5.0.6; 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"
|
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"
|
cryptography==37.0.4
|
||||||
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; python_version >= "3.7"
|
||||||
|
cython==0.29.31
|
||||||
decorator==5.1.1; python_version >= "3.7"
|
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"
|
dill==0.3.5.1; python_version >= "3.7"
|
||||||
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"
|
distlib==0.3.5; 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"
|
distro==1.7.0; python_version >= "3.7"
|
||||||
dns-lexicon==3.9.4; python_version >= "3.7" and python_version < "4.0"
|
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"
|
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-compose==1.26.2; 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"
|
docker==4.2.2; 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"
|
dockerpty==0.4.1; 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"
|
docopt==0.6.2; 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"
|
docutils==0.16; python_version >= "3.7"
|
||||||
entrypoints==0.3; python_version >= "3.7" and python_version < "4.0"
|
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"
|
execnet==1.9.0; python_version >= "3.7"
|
||||||
fabric==2.6.0; python_version >= "3.7"
|
fabric==2.7.1; 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"
|
filelock==3.7.1; python_version >= "3.7" or python_version >= "3.7" and python_version < "4.0"
|
||||||
google-api-core==2.7.1; python_version >= "3.7"
|
google-api-core==2.8.2; python_version >= "3.7"
|
||||||
google-api-python-client==2.41.0; 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-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"
|
google-auth==2.9.1; python_version >= "3.7"
|
||||||
googleapis-common-protos==1.55.0; python_version >= "3.7"
|
googleapis-common-protos==1.56.4; 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"
|
html5lib==1.1; python_version >= "3.7" and python_version < "4.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"
|
httplib2==0.20.4; 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"
|
idna==3.3; python_version >= "3.7" and python_version < "4" 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"
|
imagesize==1.4.1; python_version >= "3.7"
|
||||||
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"
|
importlib-metadata==1.7.0; python_version >= "3.7" and python_version < "3.8"
|
||||||
iniconfig==1.1.1; python_version >= "3.7"
|
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"
|
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"
|
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"
|
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"
|
jeepney==0.8.0; 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"
|
jinja2==3.1.2; 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"
|
jmespath==1.0.1; python_version >= "3.7"
|
||||||
josepy==1.13.0; python_version >= "3.7"
|
josepy==1.13.0; python_version >= "3.7"
|
||||||
jsonlines==3.0.0; python_version >= "3.7"
|
jsonlines==3.1.0; python_version >= "3.7"
|
||||||
jsonpickle==2.1.0; python_version >= "3.7"
|
jsonpickle==2.2.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"
|
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"
|
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
|
lockfile==0.12.2
|
||||||
markupsafe==2.1.1; python_version >= "3.7"
|
markupsafe==2.1.1; python_version >= "3.7"
|
||||||
matplotlib-inline==0.1.3; 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"
|
mccabe==0.7.0; python_version >= "3.7"
|
||||||
mock==4.0.3; python_version >= "3.6"
|
mock==4.0.3
|
||||||
msgpack==1.0.3; python_version >= "3.7" and python_version < "4.0"
|
msgpack==1.0.4; python_version >= "3.7" and python_version < "4.0"
|
||||||
msrest==0.6.21; python_version >= "3.7"
|
msrest==0.6.21; python_version >= "3.7"
|
||||||
mypy-extensions==0.4.3; 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"
|
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"
|
oauthlib==3.2.0; python_version >= "3.7"
|
||||||
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"
|
packaging==20.9; python_version >= "3.7"
|
||||||
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"
|
paramiko==2.11.0; python_version >= "3.7"
|
||||||
parsedatetime==2.6; python_version >= "3.7"
|
parsedatetime==2.6; python_version >= "3.7"
|
||||||
parso==0.8.3; python_version >= "3.7"
|
parso==0.8.3; python_version >= "3.7"
|
||||||
pathlib2==2.3.7.post1; 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"
|
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"
|
pickleshare==0.7.5; python_version >= "3.7"
|
||||||
pip==22.0.4; python_version >= "3.7"
|
pip==22.2.1; python_version >= "3.7"
|
||||||
pkginfo==1.8.2; python_version >= "3.7" and python_version < "4.0" or 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.1; python_version >= "3.7" and python_full_version >= "3.6.2"
|
platformdirs==2.5.2; python_version >= "3.7"
|
||||||
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"
|
pluggy==1.0.0; python_version >= "3.7"
|
||||||
ply==3.11; 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-core==1.1.0a7
|
||||||
poetry==1.2.0a2; python_version >= "3.6" and python_version < "4.0"
|
poetry==1.2.0a2
|
||||||
prompt-toolkit==3.0.28; python_version >= "3.7" and python_full_version >= "3.6.2"
|
prompt-toolkit==3.0.30; python_version >= "3.7"
|
||||||
protobuf==3.19.4; 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"
|
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"
|
py==1.11.0; 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-modules==0.2.8; python_version >= "3.7"
|
||||||
pyasn1==0.4.8; python_version >= "3.7" and python_version < "4" or python_version >= "3.7"
|
pyasn1==0.4.8; 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"
|
pycparser==2.21; python_version >= "3.7"
|
||||||
pygithub==1.55; python_version >= "3.7"
|
pygments==2.12.0; python_version >= "3.7"
|
||||||
pygments==2.11.2; python_version >= "3.7"
|
|
||||||
pyjwt==2.3.0; python_version >= "3.7"
|
|
||||||
pylev==1.4.0; python_version >= "3.7" and python_version < "4.0"
|
pylev==1.4.0; python_version >= "3.7" and python_version < "4.0"
|
||||||
pylint==2.12.2; python_full_version >= "3.6.2"
|
pylint==2.13.9
|
||||||
pynacl==1.5.0; python_version >= "3.7" or python_version >= "3.7"
|
pylint==2.13.9; python_version >= "3.7"
|
||||||
|
pynacl==1.5.0; python_version >= "3.7"
|
||||||
pynsist==2.7; python_version >= "3.7"
|
pynsist==2.7; python_version >= "3.7"
|
||||||
pyopenssl==22.0.0; 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"
|
pyparsing==3.0.9; python_version >= "3.7"
|
||||||
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")
|
pypiwin32==223; sys_platform == "win32" and python_version >= "3.7"
|
||||||
pyrfc3339==1.1; 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"
|
pyrsistent==0.18.1; python_version >= "3.7"
|
||||||
pytest-cov==3.0.0; python_version >= "3.7" or python_version >= "3.7"
|
pytest-cov==3.0.0; python_version >= "3.7"
|
||||||
pytest-forked==1.4.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-xdist==2.5.0; python_version >= "3.7"
|
||||||
pytest==7.1.0; python_version >= "3.7" or python_version >= "3.7"
|
pytest==7.1.2; python_version >= "3.7"
|
||||||
python-augeas==1.1.0; 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-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"
|
python-dotenv==0.20.0; 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"
|
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-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")
|
pywin32==304; sys_platform == "win32" 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"
|
pyyaml==5.4.1; python_version >= "3.7"
|
||||||
readme-renderer==34.0; python_version >= "3.7"
|
readme-renderer==35.0; python_version >= "3.7"
|
||||||
requests-download==0.1.2; 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-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-oauthlib==1.3.1; python_version >= "3.7"
|
||||||
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-toolbelt==0.9.1; 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==2.28.1; python_version >= "3.7" and python_version < "4"
|
||||||
rfc3986==2.0.0; python_version >= "3.7"
|
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")
|
rsa==4.7.2; python_version >= "3.7" and python_version < "4"
|
||||||
s3transfer==0.5.2; python_version >= "3.7"
|
s3transfer==0.6.0; python_version >= "3.7"
|
||||||
secretstorage==3.3.1; python_version >= "3.7" and python_version < "4.0" and sys_platform == "linux"
|
secretstorage==3.3.2; python_version >= "3.7" and python_version < "4.0" and sys_platform == "linux"
|
||||||
semantic-version==2.9.0; python_version >= "3.6"
|
semantic-version==2.10.0; python_version >= "3.7"
|
||||||
setuptools-rust==1.1.2; python_version >= "3.6"
|
setuptools-rust==1.4.1
|
||||||
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"
|
setuptools==63.2.0; python_version >= "3.7"
|
||||||
shellingham==1.4.0; python_version >= "3.7" and python_version < "4.0"
|
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"
|
snowballstemmer==2.2.0; python_version >= "3.7"
|
||||||
soupsieve==2.3.1; python_full_version > "3.0.0" and python_version >= "3.7"
|
soupsieve==2.3.2.post1; 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-rtd-theme==1.0.0; python_version >= "3.7"
|
||||||
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"
|
sphinx==4.3.2; python_version >= "3.7"
|
||||||
sphinxcontrib-applehelp==1.0.2; python_version >= "3.7"
|
sphinxcontrib-applehelp==1.0.2; python_version >= "3.7"
|
||||||
sphinxcontrib-devhelp==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-htmlhelp==2.0.0; python_version >= "3.7"
|
||||||
sphinxcontrib-jsmath==1.0.1; python_version >= "3.7"
|
sphinxcontrib-jsmath==1.0.1; python_version >= "3.7"
|
||||||
sphinxcontrib-qthelp==1.0.3; python_version >= "3.7"
|
sphinxcontrib-qthelp==1.0.3; python_version >= "3.7"
|
||||||
sphinxcontrib-serializinghtml==1.1.5; 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"
|
texttable==1.6.4; python_version >= "3.7"
|
||||||
tldextract==3.2.0; python_version >= "3.7" and python_version < "4.0"
|
tldextract==3.3.1; 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"
|
toml==0.10.2; python_version >= "3.7"
|
||||||
tomli==2.0.1; python_version >= "3.7" or 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.10.0; python_version >= "3.7" and python_version < "4.0"
|
tomlkit==0.11.1; 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"
|
tox==3.25.1; python_version >= "3.7"
|
||||||
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"
|
tqdm==4.64.0; python_version >= "3.7"
|
||||||
traitlets==5.1.1; python_version >= "3.7"
|
traitlets==5.3.0; python_version >= "3.7"
|
||||||
twine==3.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"
|
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.18; python_version >= "3.7"
|
types-cryptography==3.3.21; python_version >= "3.7"
|
||||||
types-mock==4.0.11; python_version >= "3.7"
|
types-mock==4.0.15; python_version >= "3.7"
|
||||||
types-pyopenssl==22.0.0; python_version >= "3.7"
|
types-pyopenssl==22.0.9; python_version >= "3.7"
|
||||||
types-pyrfc3339==1.1.1; python_version >= "3.7"
|
types-pyrfc3339==1.1.1; python_version >= "3.7"
|
||||||
types-python-dateutil==2.8.9; python_version >= "3.7"
|
types-python-dateutil==2.8.19; python_version >= "3.7"
|
||||||
types-pytz==2021.3.5; python_version >= "3.7"
|
types-pytz==2022.1.2; python_version >= "3.7"
|
||||||
types-requests==2.27.12; python_version >= "3.7"
|
types-requests==2.28.5; python_version >= "3.7"
|
||||||
types-setuptools==57.4.10; python_version >= "3.7"
|
types-setuptools==63.2.2; python_version >= "3.7"
|
||||||
types-six==1.16.12; python_version >= "3.7"
|
types-six==1.16.18; python_version >= "3.7"
|
||||||
types-urllib3==1.26.11; python_version >= "3.7"
|
types-urllib3==1.26.17; 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"
|
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"
|
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"
|
urllib3==1.26.11; python_version >= "3.7" and python_version < "4"
|
||||||
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"
|
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" and python_full_version >= "3.6.2"
|
wcwidth==0.2.5; python_version >= "3.7"
|
||||||
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"
|
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" 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"
|
websocket-client==0.59.0; 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"
|
wheel==0.37.1; python_version >= "3.7"
|
||||||
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"
|
wrapt==1.14.1; python_version >= "3.7"
|
||||||
yarg==0.1.9; 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"
|
zipp==3.8.1; python_version >= "3.7" and python_version < "3.8"
|
||||||
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.component==5.0.1; 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.event==4.5.0; 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.hookable==5.1.0; 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"
|
zope.interface==5.4.0; python_version >= "3.7"
|
||||||
|
|||||||
Reference in New Issue
Block a user