in mysql-connector-python/lib/mysql/connector/aio/abstracts.py [0:0]
def _validate_tls_versions(self) -> None:
"""Validates the tls_versions option."""
tls_versions = []
tls_version = self._tls_versions
if isinstance(tls_version, str):
if not (tls_version.startswith("[") and tls_version.endswith("]")):
raise AttributeError(
f"tls_versions must be a list, found: '{tls_version}'"
)
tls_vers = tls_version[1:-1].split(",")
for tls_ver in tls_vers:
tls_version = tls_ver.strip()
if tls_version == "":
continue
if tls_version in tls_versions:
raise AttributeError(
DUPLICATED_IN_LIST_ERROR.format(
list="tls_versions", value=tls_version
)
)
tls_versions.append(tls_version)
if tls_vers == ["TLSv1.3"] and not TLS_V1_3_SUPPORTED:
raise AttributeError(
TLS_VER_NO_SUPPORTED.format(tls_version, TLS_VERSIONS)
)
elif isinstance(tls_version, list):
if not tls_version:
raise AttributeError(
"At least one TLS protocol version must be specified in "
"'tls_versions' list"
)
for tls_ver in tls_version:
if tls_ver in tls_versions:
raise AttributeError(
DUPLICATED_IN_LIST_ERROR.format(
list="tls_versions", value=tls_ver
)
)
tls_versions.append(tls_ver)
elif isinstance(tls_version, set):
for tls_ver in tls_version:
tls_versions.append(tls_ver)
else:
raise AttributeError(
"tls_versions should be a list with one or more of versions "
f"in {', '.join(TLS_VERSIONS)}. found: '{tls_versions}'"
)
if not tls_versions:
raise AttributeError(
"At least one TLS protocol version must be specified "
"in 'tls_versions' list when this option is given"
)
use_tls_versions = []
unacceptable_tls_versions = []
invalid_tls_versions = []
for tls_ver in tls_versions:
if tls_ver in TLS_VERSIONS:
use_tls_versions.append(tls_ver)
if tls_ver in UNACCEPTABLE_TLS_VERSIONS:
unacceptable_tls_versions.append(tls_ver)
else:
invalid_tls_versions.append(tls_ver)
if use_tls_versions:
if use_tls_versions == ["TLSv1.3"] and not TLS_V1_3_SUPPORTED:
raise NotSupportedError(
TLS_VER_NO_SUPPORTED.format(tls_version, TLS_VERSIONS)
)
self._tls_versions = use_tls_versions
elif unacceptable_tls_versions:
raise NotSupportedError(
TLS_VERSION_UNACCEPTABLE_ERROR.format(
unacceptable_tls_versions, TLS_VERSIONS
)
)
elif invalid_tls_versions:
raise AttributeError(TLS_VERSION_ERROR.format(tls_ver, TLS_VERSIONS))