
    in                     N   d Z ddgZddlZddlZddlZ	 ddlZn# e$ r dZY nw xY wddlmZm	Z	m
Z
mZ ere                    d            G d dej                  Z G d	 dej        j                  Z	 dd
ddededede	deej        ef         f
dZde
de	de	dej        fdZdS )z
Utilities.	to_threadopen_connection    N)TYPE_CHECKINGAnyCallableTupleStreamWriterc                   ,    e Zd ZdZdej        ddfdZdS )StreamReaderProtocolzExtends asyncio.streams.StreamReaderProtocol for adding start_tls().

    The ``start_tls()`` is based on ``asyncio.streams.StreamWriter`` introduced
    in Python 3.11. It provides the same functionality for older Python versions.
    writerreturnNc                 h    |j         }|| _        || _        |                    d          du| _        dS )zQReplace stream writer.

        Args:
            writer: Stream Writer.
        
sslcontextN)	transport_stream_writer
_transportget_extra_info	_over_ssl)selfr   r   s      S/var/www/cyber-strat/venv/lib/python3.11/site-packages/mysql/connector/aio/utils.py_replace_writerz$StreamReaderProtocol._replace_writer:   s9     $	$#"11,??tK    )__name__
__module____qualname____doc__asyncior	   r    r   r   r   r   3   sK         	Lg&: 	Lt 	L 	L 	L 	L 	L 	Lr   r   c            	       <    e Zd ZdZddddej        dededdfdZdS )	r	   zExtends asyncio.streams.StreamWriter for adding start_tls().

    The ``start_tls()`` is based on ``asyncio.streams.StreamWriter`` introduced
    in Python 3.11. It provides the same functionality for older Python versions.
    N)server_hostnamessl_handshake_timeoutssl_contextr    r!   r   c                   K   | j         j        du}| j         }|                                  d{V  | j                            | j        |||||           d{V }|| _        |                    |            dS )zUpgrade an existing stream-based connection to TLS.

        Args:
            ssl_context: Configured SSL context.
            server_hostname: Server host name.
            ssl_handshake_timeout: SSL handshake timeout.
        N)server_sider    r!   )	_protocol_client_connected_cbdrain_loop	start_tlsr   r   )r   r"   r    r!   r$   protocolnew_transports          r   r)   zStreamWriter.start_tlsM   s       n9E>jjll"j22O#+"7 3 
 
 
 
 
 
 
 
  	 	  &&&&&r   )	r   r   r   r   ssl
SSLContextstrintr)   r   r   r   r	   r	   F   sl           $%)' ' '^' 	'
  #' 
' ' ' ' ' 'r   i   )limithostportr0   kwdsr   c                   	K   t          j                    }t           j                            ||          }t	          ||          	 |j        	fd| |fi | d{V \  }}t          |	||          }||fS )a  A wrapper for create_connection() returning a (reader, writer) pair.

    This function is based on ``asyncio.streams.open_connection`` and adds a custom
    stream reader.

    MySQL expects TLS negotiation to happen in the middle of a TCP connection, not at
    the start.
    This function in conjunction with ``_StreamReaderProtocol`` and ``_StreamWriter``
    allows the TLS negotiation on an existing connection.

    Args:
        host: Server host name.
        port: Server port.
        limit: The buffer size limit used by the returned ``StreamReader`` instance.
               By default the limit is set to 64 KiB.

    Returns:
        tuple: Returns a pair of reader and writer objects that are instances of
               ``StreamReader`` and ``StreamWriter`` classes.
    )r0   loop)r5   c                       S )Nr   )r*   s   r   <lambda>z!open_connection.<locals>.<lambda>   s     r   N)r   get_running_loopstreamsStreamReaderr   create_connectionr	   )
r1   r2   r0   r3   r5   readerr   _r   r*   s
            @r   r   r   m   s      . #%%D_))D)AAF#F666H//0@0@0@0@$UUPTUUUUUUUULIq)Xvt<<F6>r   funcargskwargsc                    K   t          j                    }t          j                    }t	          j        |j        | g|R i |}|                    d|           d{V S )aQ  Asynchronously run function ``func`` in a separate thread.

    This function is based on ``asyncio.to_thread()`` introduced in Python 3.9, which
    provides the same functionality for older Python versions.

    Returns:
        coroutine: A coroutine that can be awaited to get the eventual result of
                   ``func``.
    N)r   r8   contextvarscopy_context	functoolspartialrunrun_in_executor)r>   r?   r@   r5   ctx	func_calls         r   r   r      sp       #%%D

"
$
$C!#'4A$AAA&AAI%%dI666666666r   )NN)r   __all__r   rB   rD   r,   ImportErrortypingr   r   r   r   appendr   r9   r	   r.   r/   r:   r   Futurer   r   r   r   <module>rO      s  @  )
*         JJJJ   
CCC 7 6 6 6 6 6 6 6 6 6 6 6 #NN>"""L L L L L77 L L L&$' $' $' $' $'7?/ $' $' $'P #'8=  
25GJ
7-.   >7( 73 7# 7'. 7 7 7 7 7 7s    ##