Best Python code snippet using localstack_python
generic_proxy.py
Source:generic_proxy.py  
...362class DuplexSocket(ssl.SSLSocket):363    """Simple duplex socket wrapper that allows serving HTTP/HTTPS over the same port."""364    def accept(self):365        newsock, addr = socket.socket.accept(self)366        if DuplexSocket.is_ssl_socket(newsock) is not False:367            newsock = self.context.wrap_socket(368                newsock,369                do_handshake_on_connect=self.do_handshake_on_connect,370                suppress_ragged_eofs=self.suppress_ragged_eofs,371                server_side=True,372            )373        return newsock, addr374    @staticmethod375    def is_ssl_socket(newsock):376        """Returns True/False if the socket uses SSL or not, or None if the status cannot be determined"""377        def peek_ssl_header():378            peek_bytes = 5379            first_bytes = newsock.recv(peek_bytes, socket.MSG_PEEK)380            if len(first_bytes or "") != peek_bytes:381                return382            first_byte = first_bytes[0]383            return first_byte < 32 or first_byte >= 127384        try:385            return peek_ssl_header()386        except Exception:387            # Fix for "[Errno 11] Resource temporarily unavailable" - This can388            #   happen if we're using a non-blocking socket in a blocking thread.389            newsock.setblocking(1)390            newsock.settimeout(1)391            try:392                return peek_ssl_header()393            except Exception:394                return False395# set globally defined SSL socket implementation class396ssl.SSLContext.sslsocket_class = DuplexSocket397class GenericProxy(object):398    # TODO: move methods to different class?399    @classmethod400    def create_ssl_cert(cls, serial_number=None):401        cert_pem_file = get_cert_pem_file_path()402        return generate_ssl_cert(cert_pem_file, serial_number=serial_number)403    @classmethod404    def get_flask_ssl_context(cls, serial_number=None):405        if config.USE_SSL:406            _, cert_file_name, key_file_name = cls.create_ssl_cert(serial_number=serial_number)407            return cert_file_name, key_file_name408        return None409async def _accept_connection2(self, protocol_factory, conn, extra, sslcontext, *args, **kwargs):410    is_ssl_socket = DuplexSocket.is_ssl_socket(conn)411    if is_ssl_socket is False:412        sslcontext = None413    result = await _accept_connection2_orig(414        self, protocol_factory, conn, extra, sslcontext, *args, **kwargs415    )416    return result417# patch asyncio server to accept SSL and non-SSL traffic over same port418if hasattr(BaseSelectorEventLoop, "_accept_connection2") and not hasattr(419    BaseSelectorEventLoop, "_ls_patched"420):421    _accept_connection2_orig = BaseSelectorEventLoop._accept_connection2422    BaseSelectorEventLoop._accept_connection2 = _accept_connection2423    BaseSelectorEventLoop._ls_patched = True424def get_cert_pem_file_path():...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
