in elastic_transport/_models.py [0:0]
def __post_init__(self) -> None:
if not isinstance(self.headers, HttpHeaders) or not self.headers.frozen:
self.headers = HttpHeaders(self.headers).freeze()
if self.scheme != self.scheme.lower():
raise ValueError("'scheme' must be lowercase")
if "[" in self.host or "]" in self.host:
raise ValueError("'host' must not have square braces")
if self.port < 0:
raise ValueError("'port' must be a positive integer")
if self.connections_per_node <= 0:
raise ValueError("'connections_per_node' must be a positive integer")
if self.path_prefix:
self.path_prefix = (
("/" + self.path_prefix.strip("/")) if self.path_prefix else ""
)
tls_options = [
"ca_certs",
"client_cert",
"client_key",
"ssl_assert_hostname",
"ssl_assert_fingerprint",
"ssl_context",
]
# Disallow setting TLS options on non-HTTPS connections.
if self.scheme != "https":
if any(getattr(self, attr) is not None for attr in tls_options):
raise ValueError("TLS options require scheme to be 'https'")
elif self.scheme == "https":
# It's not valid to set 'ssl_context' and any other
# TLS option, the SSLContext object must be configured
# the way the user wants already.
def tls_option_filter(attr: object) -> bool:
return (
isinstance(attr, str)
and attr not in ("ssl_context", "ssl_assert_fingerprint")
and getattr(self, attr) is not None
)
if self.ssl_context is not None and any(
filter(
tls_option_filter,
tls_options,
)
):
raise ValueError(
"The 'ssl_context' option can't be combined with other TLS options"
)