Вы можете создать фиктивный SSLContext, который возвращает сокет, который выглядит как SSLSocket
from socket import socket
class NonSSLContext():
def wrap_socket(self, sock, *_, **__):
sock.__class__ = NonSSLSocket
return sock
class NonSSLSocket(socket):
__slots__ = ()
def do_handshake(self):
pass
def unwrap(self):
self.__class__ = socket
return self
, который можно использовать как (например)
from ssl import SSLContext
encrypted_context = SSLContext(...
non_encrypted_context = NonSSLContext(...
context = encrypted_context if encrypt else non_encrypted_context
socket = ...
ssl_socket = context.wrap_socket(sock, ...
...
ssl_sock.do_handshake()
...