a
    "h h                     @   s&  d Z ddlZddlZddlZddlZeedr6e d7 Z ddlmZ ddlmZ ddlm	Z	 dd	lm
Z
 dd
lmZ ddlmZ ddlmZ dZddedddZd dedddZeedrd!dedddZd"dedddZG dd dejZG dd deejZG dd dZG dd dZdS )#)StreamReaderStreamWriterStreamReaderProtocolopen_connectionstart_server    NAF_UNIX)open_unix_connectionstart_unix_server   )
coroutines)events)
exceptions)format_helpers)	protocols)logger)sleepi   )looplimitc          	         sx   |d u rt  }ntjdtdd t||d}t||d |j fdd| |fi |I d H \}}t| ||}||fS )N[The loop argument is deprecated since Python 3.8, and scheduled for removal in Python 3.10.   
stacklevelr   r   r   c                      s    S N r   protocolr   7/opt/python-3.9.21/usr/lib/python3.9/asyncio/streams.py<lambda>5       z!open_connection.<locals>.<lambda>)	r   get_event_loopwarningswarnDeprecationWarningr   r   create_connectionr   )	hostportr   r   kwdsreader	transport_writerr   r   r   r      s    
r   c                   sN   d u rt  ntjdtdd  fdd}j|||fi |I d H S )Nr   r   r   c                     s   t d} t|  d}|S Nr   r   r   r   r)   r   client_connected_cbr   r   r   r   factoryX   s
    zstart_server.<locals>.factory)r   r!   r"   r#   r$   create_server)r1   r&   r'   r   r   r(   r2   r   r0   r   r   :   s    
r   c                   sv   |d u rt  }ntjdtdd t||d}t||d |j fdd| fi |I d H \}}t| ||}||fS )Nr   r   r   r   r   c                      s    S r   r   r   r   r   r   r   p   r    z&open_unix_connection.<locals>.<lambda>)	r   r!   r"   r#   r$   r   r   Zcreate_unix_connectionr   )pathr   r   r(   r)   r*   r+   r,   r   r   r   r   d   s    
r   c                   sL   d u rt  ntjdtdd  fdd}j||fi |I d H S )Nr   r   r   c                     s   t d} t|  d}|S r-   r.   r/   r0   r   r   r2   ~   s
    z"start_unix_server.<locals>.factory)r   r!   r"   r#   r$   Zcreate_unix_server)r1   r4   r   r   r(   r2   r   r0   r   r	   t   s    
r	   c                   @   s>   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd ZdS )FlowControlMixinNc                 C   s0   |d u rt  | _n|| _d| _d | _d| _d S NF)r   r!   _loop_paused_drain_waiter_connection_lost)selfr   r   r   r   __init__   s    zFlowControlMixin.__init__c                 C   s    d| _ | j rtd|  d S )NTz%r pauses writing)r8   r7   	get_debugr   debugr;   r   r   r   pause_writing   s    
zFlowControlMixin.pause_writingc                 C   sF   d| _ | j rtd|  | j}|d urBd | _| sB|d  d S )NFz%r resumes writing)r8   r7   r=   r   r>   r9   done
set_resultr;   waiterr   r   r   resume_writing   s    
zFlowControlMixin.resume_writingc                 C   sV   d| _ | jsd S | j}|d u r"d S d | _| r4d S |d u rH|d  n
|| d S NT)r:   r8   r9   rA   rB   set_exceptionr;   excrD   r   r   r   connection_lost   s    z FlowControlMixin.connection_lostc                    s<   | j rtd| jsd S | j}| j }|| _|I d H  d S )NzConnection lost)r:   ConnectionResetErrorr8   r9   r7   create_futurerC   r   r   r   _drain_helper   s    
zFlowControlMixin._drain_helperc                 C   s   t d S r   )NotImplementedErrorr;   streamr   r   r   _get_close_waiter   s    z"FlowControlMixin._get_close_waiter)N)	__name__
__module____qualname__r<   r@   rE   rJ   rM   rQ   r   r   r   r   r5      s   

	r5   c                       sb   e Zd ZdZd fdd	Zedd Zdd Z fdd	Zd
d Z	dd Z
dd Zdd Z  ZS )r   Nc                    sn   t  j|d |d ur,t|| _|j| _nd | _|d ur@|| _d| _d | _d | _	|| _
d| _| j | _d S )Nr   F)superr<   weakrefref_stream_reader_wr_source_traceback_strong_reader_reject_connection_stream_writer
_transport_client_connected_cb	_over_sslr7   rL   _closed)r;   Zstream_readerr1   r   	__class__r   r   r<      s    
zStreamReaderProtocol.__init__c                 C   s   | j d u rd S |   S r   )rX   r?   r   r   r   _stream_reader   s    
z#StreamReaderProtocol._stream_readerc                 C   s   | j r6ddi}| jr| j|d< | j| |  d S || _| j}|d urT|| |dd u| _	| j
d urt|| || j| _| 
|| j}t|r| j| d | _d S )NmessagezpAn open stream was garbage collected prior to establishing network connection; call "stream.close()" explicitly.Zsource_tracebackZ
sslcontext)r[   rY   r7   Zcall_exception_handlerabortr]   rc   set_transportget_extra_infor_   r^   r   r\   r   ZiscoroutineZcreate_taskrZ   )r;   r*   contextr)   resr   r   r   connection_made   s0    



z$StreamReaderProtocol.connection_madec                    sx   | j }|d ur*|d u r |  n
|| | j sV|d u rJ| jd  n| j| t | d | _d | _	d | _
d S r   )rc   feed_eofrG   r`   rA   rB   rU   rJ   rX   r\   r]   )r;   rI   r)   ra   r   r   rJ   
  s    


z$StreamReaderProtocol.connection_lostc                 C   s   | j }|d ur|| d S r   )rc   	feed_data)r;   datar)   r   r   r   data_received  s    z"StreamReaderProtocol.data_receivedc                 C   s$   | j }|d ur|  | jr dS dS )NFT)rc   rk   r_   )r;   r)   r   r   r   eof_received   s    z!StreamReaderProtocol.eof_receivedc                 C   s   | j S r   )r`   rO   r   r   r   rQ   +  s    z&StreamReaderProtocol._get_close_waiterc                 C   s"   | j }| r| s|  d S r   )r`   rA   	cancelled	exception)r;   closedr   r   r   __del__.  s    zStreamReaderProtocol.__del__)NN)rR   rS   rT   rY   r<   propertyrc   rj   rJ   rn   ro   rQ   rs   __classcell__r   r   ra   r   r      s   	
r   c                   @   sr   e Zd Zdd Zdd Zedd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd ZdddZdd ZdS )r   c                 C   s4   || _ || _|| _|| _| j | _| jd  d S r   )r]   	_protocol_readerr7   rL   Z_complete_futrB   )r;   r*   r   r)   r   r   r   r   r<   @  s    zStreamWriter.__init__c                 C   s@   | j jd| jg}| jd ur0|d| j dd|S )N
transport=zreader=<{}> )rb   rR   r]   rw   appendformatjoinr;   infor   r   r   __repr__J  s    
zStreamWriter.__repr__c                 C   s   | j S r   r]   r?   r   r   r   r*   P  s    zStreamWriter.transportc                 C   s   | j | d S r   )r]   writer;   rm   r   r   r   r   T  s    zStreamWriter.writec                 C   s   | j | d S r   )r]   
writelinesr   r   r   r   r   W  s    zStreamWriter.writelinesc                 C   s
   | j  S r   )r]   	write_eofr?   r   r   r   r   Z  s    zStreamWriter.write_eofc                 C   s
   | j  S r   )r]   can_write_eofr?   r   r   r   r   ]  s    zStreamWriter.can_write_eofc                 C   s
   | j  S r   )r]   closer?   r   r   r   r   `  s    zStreamWriter.closec                 C   s
   | j  S r   )r]   
is_closingr?   r   r   r   r   c  s    zStreamWriter.is_closingc                    s   | j | I d H  d S r   )rv   rQ   r?   r   r   r   wait_closedf  s    zStreamWriter.wait_closedNc                 C   s   | j ||S r   )r]   rg   )r;   namedefaultr   r   r   rg   i  s    zStreamWriter.get_extra_infoc                    sL   | j d ur | j  }|d ur || j r8tdI d H  | j I d H  d S )Nr   )rw   rq   r]   r   r   rv   rM   )r;   rI   r   r   r   drainl  s    



zStreamWriter.drain)N)rR   rS   rT   r<   r   rt   r*   r   r   r   r   r   r   r   rg   r   r   r   r   r   r   6  s   



r   c                   @   s   e Zd ZdZedfddZdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zd&ddZd'ddZd d! Zd"d# Zd$d% ZdS )(r   Nc                 C   sv   |dkrt d|| _|d u r*t | _n|| _t | _d| _d | _d | _	d | _
d| _| j rrttd| _d S )Nr   zLimit cannot be <= 0Fr
   )
ValueError_limitr   r!   r7   	bytearray_buffer_eof_waiter
_exceptionr]   r8   r=   r   extract_stacksys	_getframerY   )r;   r   r   r   r   r   r<     s     
zStreamReader.__init__c                 C   s   dg}| j r"|t| j  d | jr2|d | jtkrN|d| j  | jrf|d| j | jr~|d| j | jr|d| j | j	r|d d	
d
|S )Nr   z byteseofzlimit=zwaiter=z
exception=rx   Zpausedry   rz   )r   r{   lenr   r   _DEFAULT_LIMITr   r   r]   r8   r|   r}   r~   r   r   r   r     s     


zStreamReader.__repr__c                 C   s   | j S r   )r   r?   r   r   r   rq     s    zStreamReader.exceptionc                 C   s0   || _ | j}|d ur,d | _| s,|| d S r   )r   r   rp   rG   rH   r   r   r   rG     s    zStreamReader.set_exceptionc                 C   s*   | j }|d ur&d | _ | s&|d  d S r   )r   rp   rB   rC   r   r   r   _wakeup_waiter  s
    zStreamReader._wakeup_waiterc                 C   s
   || _ d S r   r   )r;   r*   r   r   r   rf     s    zStreamReader.set_transportc                 C   s*   | j r&t| j| jkr&d| _ | j  d S r6   )r8   r   r   r   r]   resume_readingr?   r   r   r   _maybe_resume_transport  s    z$StreamReader._maybe_resume_transportc                 C   s   d| _ |   d S rF   )r   r   r?   r   r   r   rk     s    zStreamReader.feed_eofc                 C   s   | j o| j S r   )r   r   r?   r   r   r   at_eof  s    zStreamReader.at_eofc                 C   sr   |sd S | j | |   | jd urn| jsnt| j d| j krnz| j  W n tyf   d | _Y n0 d| _d S )Nr   T)	r   extendr   r]   r8   r   r   Zpause_readingrN   r   r   r   r   rl     s    
zStreamReader.feed_datac                    s^   | j d urt| d| jr.d| _| j  | j | _ z| j I d H  W d | _ nd | _ 0 d S )NzF() called while another coroutine is already waiting for incoming dataF)r   RuntimeErrorr8   r]   r   r7   rL   )r;   	func_namer   r   r   _wait_for_data  s    	

zStreamReader._wait_for_datac              
      s   d}t |}z| |I d H }W n tjyL } z|jW  Y d }~S d }~0  tjy } zP| j||jr| jd |j| = n
| j	  | 
  t|jd W Y d }~n
d }~0 0 |S )N   
r   )r   	readuntilr   IncompleteReadErrorpartialLimitOverrunErrorr   
startswithconsumedclearr   r   args)r;   sepseplenlineer   r   r   readline	  s    
$zStreamReader.readliner   c                    s   t |}|dkrtd| jd ur(| jd}t | j}|| |kr|| j||}|dkrZq|d | }|| jkr|td|| jrt	| j}| j
  t|d | dI d H  q,|| jkrtd|| jd ||  }| jd || = |   t	|S )Nr   z,Separator should be at least one-byte stringr
   z2Separator is not found, and chunk exceed the limitr   z2Separator is found, but chunk is longer than limit)r   r   r   r   findr   r   r   r   bytesr   r   r   r   )r;   	separatorr   offsetbuflenZisepchunkr   r   r   r   (  s<    





zStreamReader.readuntilr   c                    s   | j d ur| j |dkrdS |dk rVg }| | jI d H }|s@qL|| q(d|S | jsr| jsr| dI d H  t| jd | }| jd |= | 	  |S )Nr   r    read)
r   r   r   r{   r}   r   r   r   r   r   )r;   nZblocksblockrm   r   r   r   r     s"    

zStreamReader.readc                    s   |dk rt d| jd ur | j|dkr,dS t| j|k rr| jr`t| j}| j  t||| 	dI d H  q,t| j|krt| j}| j  nt| jd | }| jd |= | 
  |S )Nr   z*readexactly size can not be less than zeror    readexactly)r   r   r   r   r   r   r   r   r   r   r   )r;   r   Z
incompleterm   r   r   r   r     s&    



zStreamReader.readexactlyc                 C   s   | S r   r   r?   r   r   r   	__aiter__  s    zStreamReader.__aiter__c                    s   |   I d H }|dkrt|S )Nr    )r   StopAsyncIteration)r;   valr   r   r   	__anext__  s    zStreamReader.__anext__)r   )r   )rR   rS   rT   rY   r   r<   r   rq   rG   r   rf   r   rk   r   rl   r   r   r   r   r   r   r   r   r   r   r   r     s$   	
[
2)r   )NN)NN)N)N)__all__socketr   r"   rV   hasattr r   r   r   r   r   logr   Ztasksr   r   r   r   r   r	   Protocolr5   r   r   r   r   r   r   r   <module>   s>   
!'
DkP