o
    i t                     @   sz  U d dl Z d dlZd dl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 d	lmZ d d
lmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d dl,Z,d dl-Z.d dl/m0Z0m1Z1m2Z2 d dl3m4Z5 d dl6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z< ddl=m>Z>m?Z?m@Z@ ddlAmBZB ddlCmDZDmEZEmFZFmGZG ddlCmHZI ddlJmKZK ddlLmMZN ddlLmOZP ddlLmQZQ ddlRmSZT ddl<mUZUmVZV erd dlWmXZX zd dl.mYZZ W n e[y   d dl.m\ZZ d dl]m^Z^m_Z_ Y n	w d dl`m^Z^m_Z_ zeZjaZbW n ecy)   d dl.maZb Y nw e)dZde)d eeeUZfe.jgZge.jYjhZie.jYjjZje.jkZkG d!d" d"eTZSe.jlZme.jYjnZne.jYjoZoe.jYjpZpe.jqZqe.jrZrG d#d$ d$eIe.jsZHG d%d& d&e<jtZtd'dd(d)ed*edf d+eud,evd-e$e.jM d.edf
d/d0Zwd1ed*eed f d+ed.edfd2d3Zxd1ed*edf d+ed.edfd4d5ZyG d6d7 d7e<jzZzed'd8G d9d: d:e<j{Z|ed'd8G d;d< d<e<j}Z~ed'd8G d=d> d>e<jZddd'd?d@e*eeee%e*eeef  f dAevdBe*eee df dCe*eee df dDe*eee df dEe*eeeedf dFe$e"eeeef  dGevd.efdHdIZaG dJdK dKe.j<jZejdLZejedL< dMe&e d.dfdNdOZdMe&e d.dfdPdQZG dRdS dSeef ZG dTdU dUee<jZG dVdW dWee<jZG dXdY dYee<jZG dZd[ d[ee<jZG d\d] d]eeU e<jZG d^d_ d_eeU e<jZ	dd`eedaedbe$eU d.efdcddZdeeed.efdfdgZdhejdbe$eU die$eU djevd.e*eef f
dkdlZe.jjZe.jjZdmejd.dfdndoZdmejd.dfdpdqZG drds dsePZOG dtdu dueNZMejdvZejedv< d.eMfdwdxZG dydz dze>e@ Zd{ed.efd|d}Zd.e;fd~dZd.e!e; fddZd.ed fddZG dd de<jZdS )    N)Future)copy_context)	dataclass)partial)IOBase)PathLike)Signals)TracebackType)IOTYPE_CHECKINGAnyAsyncGenerator	AwaitableCallable
CollectionContextManager	CoroutineDequeDictGenericIterableListMappingNoReturnOptionalSequenceSetTupleTypeTypeVarUnioncast)ErrorOutcomeValue)
SocketType)run_sync   )CapacityLimiterStatisticsEventStatisticsTaskInfoabc)DeprecatedAsyncContextManagerDeprecatedAwaitableTclaim_worker_thread)BrokenResourceErrorBusyResourceErrorClosedResourceErrorEndOfStream)ExceptionGroup)convert_ipv6_sockaddr)CapacityLimiter)Event)ResourceGuard)CancelScope)IPSockAddrTypeUDPPacketType)
TaskStatus)lowlevel)hazmat)wait_readablewait_writable)open_processT_Retval
T_SockAddrc                	   @   s   e Zd Z	ddeej dedd fddZ	ddeej deddfddZ	dd	d
Z
deee  dee dee dee fddZdefddZedefddZejdeddfddZedefddZedefddZejdeddfddZdS )r:   Noriginalkwargsreturnc                 K   
   t | S Nobject__new__)clsrE   rF    rN   P/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/anyio/_backends/_trio.pyrL   h   s   
zCancelScope.__new__c                 K   s   |p	t jdi || _d S )NrN   )trior:   _CancelScope__original)selfrE   rF   rN   rN   rO   __init__m   s   zCancelScope.__init__c                 C   s   | j   | S rI   )rQ   	__enter__rR   rN   rN   rO   rT   r   s   
zCancelScope.__enter__exc_typeexc_valexc_tbc                 C      | j |||S rI   )rQ   __exit__rR   rV   rW   rX   rN   rN   rO   rZ   v      zCancelScope.__exit__c                 C      | j   t| jS rI   )rQ   cancelr-   rU   rN   rN   rO   r^   ~      

zCancelScope.cancelc                 C      | j jS rI   rQ   deadlinerU   rN   rN   rO   rb         zCancelScope.deadlinevaluec                 C      || j _d S rI   ra   rR   rd   rN   rN   rO   rb         c                 C   r`   rI   )rQ   cancel_calledrU   rN   rN   rO   rh      rc   zCancelScope.cancel_calledc                 C   r`   rI   rQ   shieldrU   rN   rN   rO   rj      rc   zCancelScope.shieldc                 C   re   rI   ri   rf   rN   rN   rO   rj      rg   rI   )rG   r:   )__name__
__module____qualname__r   rP   r:   rK   rL   r   rS   rT   r   BaseExceptionr	   boolrZ   r-   r^   propertyfloatrb   setterrh   rj   rN   rN   rN   rO   r:   g   sL    




r:   c                   @   s   e Zd ZdS )r5   N)rk   rl   rm   rN   rN   rN   rO   r5      s    r5   c                	   @   s   e Zd ZdddZdddZdeee  dee d	ee dee	 fd
dZ
dddedededdfddZdddedef dededefddZdS )	TaskGrouprG   Nc                 C   s   d| _ t | _d | _d S NF)_activerP   open_nursery_nursery_managercancel_scoperU   rN   rN   rO   rS      s   

zTaskGroup.__init__c                    s,   d| _ | j I d H | _t| jj| _| S NT)ru   rw   
__aenter___nurseryr:   rx   rU   rN   rN   rO   rz      s
   zTaskGroup.__aenter__rV   rW   rX   c              
      sT   z$z| j |||I d H W W d| _S  tjy% } zt|jd d }~ww d| _w rt   )rw   	__aexit__ru   rP   
MultiErrorr5   
exceptions)rR   rV   rW   rX   excrN   rN   rO   r|      s   zTaskGroup.__aexit__namefuncargsr   c                G   s,   | j std| jj|g|R d|i d S Nz;This task group is not active; no new tasks can be started.r   )ru   RuntimeErrorr{   
start_soonrR   r   r   r   rN   rN   rO   r      s
   zTaskGroup.start_soon.c                   s0   | j std| jj|g|R d|iI d H S r   )ru   r   r{   startr   rN   rN   rO   r      s    zTaskGroup.startrG   N)rG   rs   )rk   rl   rm   rS   rz   r   r   rn   r	   ro   r|   r   rK   r   r   r   rN   rN   rN   rO   rs      s.    



 	
rs   Fcancellablelimiterr   .r   r   r   rG   c                   sD   dt f fdd}t }|tjjd  t|j|||dI d H S )NrG   c                      s4   t d   W  d    S 1 sw   Y  d S )NrP   r/   rN   r   r   rN   rO   wrapper   s   
$z*run_sync_in_worker_thread.<locals>.wrapperr   )rC   r   runsniffiocurrent_async_library_cvarsetr&   )r   r   r   r   r   contextrN   r   rO   run_sync_in_worker_thread   s   
r   fnc                    s8   dt f fdd}t tjjd tj|S )NrG   c               	      sl   d fdd} t  4 I d H }|j|  W d   I d H  d} S 1 I d H s-w   Y  d} S )NrG   c                     s   d}   I d H d S ry   rN   )__tracebackhide__)r   r   retvalrN   rO   inner   s   z5run_async_from_thread.<locals>.wrapper.<locals>.innerTr   )rP   rv   r   r   )r   nr   r   r   r   )r   rO   r      s   z&run_async_from_thread.<locals>.wrapperrP   )rC   r   r   r   r   r   rP   from_thread)r   r   r   rN   r   rO   run_async_from_thread   s   r   c                 G   s$   t jjt j| g|R  }tt|S rI   )rP   r   r&   r   r   r!   rC   )r   r   r   rN   rN   rO   run_sync_from_thread  s   
r   c                       sR   e Zd ZdddZd fddZdeded	eee	f d
e
deddfddZ  ZS )BlockingPortalrG   c                 C   rH   rI   rJ   rM   rN   rN   rO   rL   	     
zBlockingPortal.__new__Nc                    s   t    tj | _d S rI   )superrS   rP   r>   current_trio_token_tokenrU   	__class__rN   rO   rS     s   
zBlockingPortal.__init__r   r   rF   r   futurec              
   C   sH   t  }|tjjd tjj|jt| j	j
|d| j||||| jd d S )NrP   r   )
trio_token)r   r   r   r   r   rP   r   r&   r   _task_groupr   
_call_funcr   )rR   r   r   rF   r   r   r   rN   rN   rO   _spawn_task_from_thread  s   
z&BlockingPortal._spawn_task_from_thread)rG   r   r   )rk   rl   rm   rL   rS   r   tupler   strr   rK   r   r   __classcell__rN   rN   r   rO   r     s     

r   )eqc                   @   s<   e Zd ZU ejjed< d	dee de	fddZ
d
ddZdS )ReceiveStreamWrapper_streamN	max_bytesrG   c              
      sh   z| j |I d H }W n! tjy } zt|jd }~w tjy- } zt|jd }~ww |r2|S trI   )r   receive_somerP   r3   	__cause__r1   r4   rR   r   datar   rN   rN   rO   receive/  s   zReceiveStreamWrapper.receivec                       | j  I d H  d S rI   r   acloserU   rN   rN   rO   r   <     zReceiveStreamWrapper.acloserI   r   )rk   rl   rm   rP   r+   ReceiveStream__annotations__r   intbytesr   r   rN   rN   rN   rO   r   +  s   
 r   c                   @   s6   e Zd ZU ejjed< deddfddZd	ddZ	dS )
SendStreamWrapperr   itemrG   Nc              
      s^   z| j |I d H  W d S  tjy } zt|jd }~w tjy. } zt|jd }~ww rI   )r   send_allrP   r3   r   r1   rR   r   r   rN   rN   rO   sendD  s   zSendStreamWrapper.sendc                    r   rI   r   rU   rN   rN   rO   r   L  r   zSendStreamWrapper.acloser   )
rk   rl   rm   rP   r+   
SendStreamr   r   r   r   rN   rN   rN   rO   r   @  s   
 r   c                   @   s   e Zd ZU ejed< eej ed< eej	 ed< eej	 ed< dddZ
defd	d
ZdddZdddZdeddfddZedefddZedee fddZedeej fddZedeej	 fddZedeej	 fddZdS )Process_process_stdin_stdout_stderrrG   Nc                    sV   | j r| j  I d H  | jr| j I d H  | jr"| j I d H  |  I d H  d S rI   )r   r   r   r   waitrU   rN   rN   rO   r   W  s   zProcess.aclosec                       | j  I d H S rI   )r   r   rU   rN   rN   rO   r   a     zProcess.waitc                 C      | j   d S rI   )r   	terminaterU   rN   rN   rO   r   d     zProcess.terminatec                 C   r   rI   )r   killrU   rN   rN   rO   r   g  r   zProcess.killsignalc                 C   s   | j | d S rI   )r   send_signal)rR   r   rN   rN   rO   r   j  s   zProcess.send_signalc                 C   r`   rI   )r   pidrU   rN   rN   rO   r   m  rc   zProcess.pidc                 C   r`   rI   )r   
returncoderU   rN   rN   rO   r   q  rc   zProcess.returncodec                 C      | j S rI   )r   rU   rN   rN   rO   stdinu     zProcess.stdinc                 C   r   rI   )r   rU   rN   rN   rO   stdouty  r   zProcess.stdoutc                 C   r   rI   )r   rU   rN   rN   rO   stderr}  r   zProcess.stderrr   )rk   rl   rm   rP   r   r   r   r+   ByteSendStreamByteReceiveStreamr   r   r   r   r   r   r   rp   r   r   r   r   r   rN   rN   rN   rO   r   P  s(   
 




r   )cwdenvstart_new_sessioncommandshellr   r   r   r   r   r   c             
      sj   t | |||||||dI d H }|jrt|jnd }	|jr"t|jnd }
|jr,t|jnd }t||	|
|S )N)r   r   r   r   r   r   r   )trio_open_processr   r   r   r   r   r   )r   r   r   r   r   r   r   r   processstdin_streamstdout_streamstderr_streamrN   rN   rO   rB     s   
rB   c                       s   e Zd Zd fddZ  ZS )_ProcessPoolShutdownInstrumentrG   Nc                    s   t    d S rI   )r   	after_runrU   r   rN   rO   r     r   z(_ProcessPoolShutdownInstrument.after_runr   )rk   rl   rm   r   r   rN   rN   r   rO   r     s    r   &current_default_worker_process_limiterworkersc                    s   zt tjI d H  W d S  tjyH   | D ]}|jd u r!|  qtdd | D ]	}| I d H  q*W d    Y d S 1 s@w   Y  Y d S w )NT)rj   )	sleepmathinfrP   	Cancelledr   r   r:   r   )r   r   rN   rN   rO   _shutdown_process_pool  s   
&r   c                 C   s   t jt|  d S rI   )rP   r>   spawn_system_taskr   )r   rN   rN   rO   #setup_process_pool_exit_at_shutdown  s   r   c                   @   sX   e Zd ZdeddfddZdddZedejfdd	Zdd
dZ	de
ddfddZdS )_TrioSocketMixintrio_socketrG   Nc                 C   s   || _ d| _d S rt   )_trio_socket_closedrR   r   rN   rN   rO   rS     s   
z_TrioSocketMixin.__init__c                 C   s    | j rt| j dk rtd S Nr   )r   r3   r   filenor1   rU   rN   rN   rO   _check_closed  s
   z_TrioSocketMixin._check_closedc                 C   r`   rI   )r   _sockrU   rN   rN   rO   _raw_socket  rc   z_TrioSocketMixin._raw_socketc                    s(   | j  dkrd| _| j   d S d S )Nr   T)r   r   r   closerU   rN   rN   rO   r     s
   z_TrioSocketMixin.acloser   r   c                 C   s@   t |tjr	t|| j dk r| jrtd t |trt||r   )
isinstancerP   r3   r   r   r   OSErrorr1   rR   r   rN   rN   rO   _convert_socket_error  s   
z&_TrioSocketMixin._convert_socket_errorr   )rk   rl   rm   TrioSocketTyperS   r   rp   socketr   r   rn   r   rN   rN   rN   rO   r     s    

r   c                       sV   e Zd Zdeddf fddZddedefdd	Zd
eddfddZdddZ	  Z
S )SocketStreamr   rG   Nc                    $   t  | td| _td| _d S Nreading from
writing tor   rS   r9   _receive_guard_send_guardr   r   rN   rO   rS        
zSocketStream.__init__   r   c                    s~   | j 1 z| j|I d H }W n ty' } z| | W Y d }~nd }~ww |r3|W  d    S t1 s8w   Y  d S rI   )r  r   recvrn   r   r4   r   rN   rN   rO   r     s   	zSocketStream.receiver   c                    s   | j B t|}|r>z| j|I d H }W n ty- } z| | W Y d }~nd }~ww ||d  }|sW d    d S W d    d S 1 sIw   Y  d S rI   )r	  
memoryviewr   r   rn   r   )rR   r   view
bytes_sentr   rN   rN   rO   r     s   "zSocketStream.sendc                    s   | j tj d S rI   )r   shutdownr  SHUT_WRrU   rN   rN   rO   send_eof  s   zSocketStream.send_eof)r  r   )rk   rl   rm   r   rS   r   r   r   r   r  r   rN   rN   r   rO   r    s
    r  c                	   @   sP   e Zd Zdededeeee f fddZdedee	ee
f  ddfd	d
ZdS )UNIXSocketStreammsglenmaxfdsrG   c                    sN  t |tr
|dk rtdt |tr|dk rtdtd}t I d H  | j? 	 z| j|t	||j
 I d H \}}}}W n tyX } z| | W Y d }~nd }~ww |s_|s_tnq+W d    n1 skw   Y  |D ].\}	}
}|	tjks|
tjkrtd|d|	 d	|
 ||d t|t||j
    qr|t|fS )
Nr   z%msglen must be a non-negative integer   z!maxfds must be a positive integeriTz.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r   r   
ValueErrorarray
checkpointr  r   recvmsgr  CMSG_LENitemsizern   r   r4   
SOL_SOCKET
SCM_RIGHTSr   	frombyteslenlist)rR   r  r  fdsmessageancdataflagsaddrr   
cmsg_level	cmsg_type	cmsg_datarN   rN   rO   receive_fds  sD   
&zUNIXSocketStream.receive_fdsr$  r#  Nc                    s   |st d|st dg }|D ]}t|tr|| qt|tr*||  qtd|}t I d H  | j6 	 z| j	
|gtjtj|fgI d H  W n tyf } z| | W Y d }~nd }~ww q<W d    d S 1 ssw   Y  d S )Nzmessage must not be emptyzfds must not be emptyr  )r  r   r   appendr   r   r  r  r	  r   sendmsgr  r  r  rn   r   )rR   r$  r#  filenosfdfdarrayr   rN   rN   rO   send_fds   sB   



"zUNIXSocketStream.send_fds)rk   rl   rm   r   r   r   r   r+  r   r    r   r1  rN   rN   rN   rO   r    s    "!r  c                       2   e Zd Zdejf fddZdefddZ  ZS )TCPSocketListener
raw_socketc                    "   t  tj| td| _d S Nzaccepting connections fromr   rS   rP   r  from_stdlib_socketr9   _accept_guardrR   r4  r   rN   rO   rS   D     zTCPSocketListener.__init__rG   c                    s   | j , z| j I d H \}}W n ty( } z| | W Y d }~nd }~ww W d    n1 s3w   Y  |tjtjd t	|S )Nr  )
r9  r   acceptrn   r   
setsockoptr  IPPROTO_TCPTCP_NODELAYr  rR   r   _addrr   rN   rN   rO   r<  H  s   zTCPSocketListener.accept)rk   rl   rm   r  rS   r  r<  r   rN   rN   r   rO   r3  C      r3  c                       r2  )UNIXSocketListenerr4  c                    r5  r6  r7  r:  r   rN   rO   rS   T  r;  zUNIXSocketListener.__init__rG   c                    s   | j 9 z| j I d H \}}W n ty( } z| | W Y d }~nd }~ww W d    t|S W d    t|S 1 s@w   Y  t|S rI   )r9  r   r<  rn   r   r  r@  rN   rN   rO   r<  X  s    

zUNIXSocketListener.accept)rk   rl   rm   r  rS   r  r<  r   rN   rN   r   rO   rC  S  rB  rC  c                       sN   e Zd Zdeddf fddZdeeef fddZde	ddfd	d
Z
  ZS )	UDPSocketr   rG   Nc                    r  r  r  r   r   rN   rO   rS   c  r
  zUDPSocket.__init__c                    s   | j : z| jdI d H \}}|t|fW W  d    S  ty5 } z| | W Y d }~nd }~ww W d    d S 1 sAw   Y  d S Nr  )r  r   recvfromr6   rn   r   )rR   r   r'  r   rN   rN   rO   r   h  s   "zUDPSocket.receiver   c                    s   | j 4 z| jj| I d H  W n ty' } z| | W Y d }~nd }~ww W d    d S W d    d S 1 s;w   Y  d S rI   )r	  r   sendtorn   r   r   rN   rN   rO   r   p     "zUDPSocket.send)rk   rl   rm   r   rS   r   r   r;   r   r<   r   r   rN   rN   r   rO   rD  b  s    rD  c                       sF   e Zd Zdeddf fddZdefddZdeddfd	d
Z  ZS )ConnectedUDPSocketr   rG   Nc                    r  r  r  r   r   rN   rO   rS   y  r
  zConnectedUDPSocket.__init__c                    s   | j 2 z| jdI d H W W  d    S  ty- } z| | W Y d }~nd }~ww W d    d S 1 s9w   Y  d S rE  )r  r   r  rn   r   r   rN   rN   rO   r   ~  s   "zConnectedUDPSocket.receiver   c                    s   | j 4 z| j|I d H  W n ty' } z| | W Y d }~nd }~ww W d    d S W d    d S 1 s;w   Y  d S rI   )r	  r   r   rn   r   r   rN   rN   rO   r     rH  zConnectedUDPSocket.send)	rk   rl   rm   r   rS   r   r   r   r   rN   rN   r   rO   rI  x  s    rI  hostportlocal_addressc                    s   d| v rt jnt j}tj  |}|t jt jd |r$||I d H  z|| |fI d H  W t|S  t	y?   |
   w )N:r  )r  AF_INET6AF_INETrP   r=  r>  r?  bindconnectrn   r   r  )rJ  rK  rL  familyr   rN   rN   rO   connect_tcp  s   rS  pathc                    sD   t jtj}z|| I d H  W t|S  ty!   |   w rI   )rP   r  AF_UNIXrQ  rn   r   r  )rT  r   rN   rN   rO   connect_unix  s   rV  rR  remote_address
reuse_portc                    sb   t jj| tjd}|r|tjtjd |r||I d H  |r-||I d H  t|S t	|S )N)rR  typer  )
rP   r  
SOCK_DGRAMr=  r  SO_REUSEPORTrP  rQ  rI  rD  )rR  rL  rW  rX  r   rN   rN   rO   create_udp_socket  s   r\  sockc              
      Z   z
t | I d H  W d S  tjy  } zt |jd d }~w tjy,   tdd w )Nr  )r@   rP   r3   with_traceback__traceback__r2   r]  r   rN   rN   rO   wait_socket_readable     
rb  c              
      r^  )Nr  )rA   rP   r3   r_  r`  r2   ra  rN   rN   rO   wait_socket_writable  rc  rd  c                   @   sT   e Zd ZdddZdddZdefddZdd	d
ZdefddZ	de
fddZdS )r8   rG   c                 C   rH   rI   rJ   r   rN   rN   rO   rL     r   zEvent.__new__Nc                 C   s   t  | _d S rI   )rP   r8   _Event__originalrU   rN   rN   rO   rS     r   zEvent.__init__c                 C   
   | j  S rI   )re  is_setrU   rN   rN   rO   rg    r   zEvent.is_setc                    r   rI   )re  r   rU   rN   rN   rO   r     r   z
Event.waitc                 C   s   | j  }t|jdS )N)tasks_waiting)re  
statisticsr)   rh  )rR   orig_statisticsrN   rN   rO   ri    s   
zEvent.statisticsc                 C   r]   rI   )re  r   r-   rU   rN   rN   rO   r     r_   z	Event.set)rG   r8   r   )rk   rl   rm   rL   rS   ro   rg  r   r)   ri  r-   r   rN   rN   rN   rO   r8     s    


r8   c                	   @   s0  e Zd Zdededd fddZdddedeej ddfd	d
Z	d)ddZ
deee  dee dee dee fddZedefddZejdeddfddZedefddZedefddZdefddZdedefddZd)dd Zdeddfd!d"Zd)d#d$Zdeddfd%d&Zdefd'd(ZdS )*r7   r   rF   rG   c                 O   rH   rI   rJ   )rM   r   rF   rN   rN   rO   rL     r   zCapacityLimiter.__new__NrE   rE   c                G   s   |pt j| | _d S rI   )rP   r7   _CapacityLimiter__original)rR   rE   r   rN   rN   rO   rS     s   zCapacityLimiter.__init__c                    r   rI   )rl  rz   rU   rN   rN   rO   rz     r   zCapacityLimiter.__aenter__rV   rW   rX   c                    s   | j |||I d H S rI   )rl  r|   r[   rN   rN   rO   r|     s   zCapacityLimiter.__aexit__c                 C   r`   rI   rl  total_tokensrU   rN   rN   rO   rn    rc   zCapacityLimiter.total_tokensrd   c                 C   re   rI   rm  rf   rN   rN   rO   rn    rg   c                 C   r`   rI   )rl  borrowed_tokensrU   rN   rN   rO   ro    rc   zCapacityLimiter.borrowed_tokensc                 C   r`   rI   )rl  available_tokensrU   rN   rN   rO   rp    rc   z CapacityLimiter.available_tokensc                 C   r]   rI   )rl  acquire_nowaitr-   rU   rN   rN   rO   rq    r_   zCapacityLimiter.acquire_nowaitborrowerc                 C   s   | j | t| jS rI   )rl  acquire_on_behalf_of_nowaitr-   rR   rr  rN   rN   rO   rs    s   
z+CapacityLimiter.acquire_on_behalf_of_nowaitc                    r   rI   )rl  acquirerU   rN   rN   rO   ru    r   zCapacityLimiter.acquirec                    s   | j |I d H  d S rI   )rl  acquire_on_behalf_ofrt  rN   rN   rO   rv    s   z$CapacityLimiter.acquire_on_behalf_ofc                 C   rf  rI   )rl  releaserU   rN   rN   rO   rw  "  r   zCapacityLimiter.releasec                 C   s   | j |S rI   )rl  release_on_behalf_ofrt  rN   rN   rO   rx  %  s   z$CapacityLimiter.release_on_behalf_ofc                 C   s"   | j  }t|j|j|j|jdS )N)ro  rn  	borrowersrh  )rl  ri  r(   ro  rn  ry  rh  )rR   origrN   rN   rO   ri  (  s   
zCapacityLimiter.statisticsr   ) rk   rl   rm   rK   rL   r   r   rP   r7   rS   rz   r   rn   r	   ro   r|   rp   rq   rn  rr   r   ro  rp  r-   rq  rs  ru  rv  rw  rx  r(   ri  rN   rN   rN   rO   r7     sF    





r7   _capacity_limiter_wrapperc                  C   s<   zt  W S  ty   ttj d} t |  |  Y S w )Nrk  )r{  getLookupErrorr7   rP   	to_threadcurrent_default_thread_limiterr   )r   rN   rN   rO   r  5  s   

r  c                	   @   sZ   e Zd Zdee fddZdefddZdeee	  dee	 d	ee
 dee fd
dZdS )_SignalReceivercmc                 C   s
   || _ d S rI   )_cm)rR   r  rN   rN   rO   rS   F  r   z_SignalReceiver.__init__rG   c                 C   rf  rI   )r  rT   rU   rN   rN   rO   rT   I  r   z_SignalReceiver.__enter__rV   rW   rX   c                 C   rY   rI   )r  rZ   r[   rN   rN   rO   rZ   L  r\   z_SignalReceiver.__exit__N)rk   rl   rm   r   r.   rS   rT   r   r   rn   r	   ro   rZ   rN   rN   rN   rO   r  E  s    
r  signalsc                  G   s   t j|  }t|S rI   )rP   open_signal_receiverr  )r  r  rN   rN   rO   r  U  s   
r  c                  C   s<   t  } d }| jr| jjrt| jj}tt| || j| jS rI   )trio_lowlevelcurrent_taskparent_nurseryparent_taskidr*   r   coro)task	parent_idrN   rN   rO   get_current_task_  s
   r  c               	   C   s~   t  } tt| d | j| jg}| j}|r=g }|D ]}|jD ]}|tt|t|j	|j|j |
|j qq|}|s|S rI   )r  current_root_taskr*   r  r   r  child_nurserieschild_tasksr,  r  extend)	root_task
task_infos	nurseriesnew_nurseriesnurseryr  rN   rN   rO   get_running_tasksi  s   
r  c                  C   s   dd l } | j S r   )trio.testingtestingwait_all_tasks_blocked)rP   rN   rN   rO   r  {  s   
r  c                   @   s2  e Zd ZdeddfddZdddZded	ee f d
e	de
ddfddZdeddfddZdejfddZded	ee f d
ededefddZdddZded	eeef f deeef dee fddZded	eeeef f deeef defddZded	eeeef f deeef ddfddZdS ) 
TestRunneroptionsrG   Nc                 K   s>   ddl m} ddlm} | | _| | _d | _d | _|| _d S )Nr   )deque)Queue)	collectionsr  queuer  _call_queue_result_queue_stop_eventr{   _options)rR   r  r  r  rN   rN   rO   rS     s   
zTestRunner.__init__c              	      s`   t  | _t  4 I d H | _| j I d H  W d   I d H  d S 1 I d H s)w   Y  d S rI   )rP   r8   r  rv   r{   r   rU   rN   rN   rO   
_trio_main  s
   
.zTestRunner._trio_mainr   .r   rF   c              
      sf   z||i |I d H }W n t y( } z| jt| W Y d }~d S d }~ww | jt| d S rI   )rn   r  r,  r"   r$   )rR   r   r   rF   r   r   rN   rN   rO   r     s   zTestRunner._call_funcoutcomec                 C   s
   d | _ d S rI   )r{   )rR   r  rN   rN   rO   _main_task_finished  r   zTestRunner._main_task_finishedc                 C   sT   | j d u r'tjj| jf| jj| jd| j | j d u r'| j	   | j d u s| j S )N)run_sync_soon_threadsafedone_callback)
r{   rP   r>   start_guest_runr  r  putr  r  r|  rU   rN   rN   rO   _get_nursery  s   


zTestRunner._get_nurseryc                 O   s@   |   | j||| | js| j   | jr| j }| S rI   )r  r   r   r  r  r|  popunwrap)rR   r   r   rF   r  rN   rN   rO   _call  s   
zTestRunner._callc                 C   s<   | j r| j   | jd ur| j   | jd usd S d S d S rI   )r  r   r{   r  r|  rU   rN   rN   rO   r     s   

zTestRunner.closefixture_funcc                 #   sB    d fddt  fdd}|V    d S )	Ntask_statusr=   rG   c                    sx    di }| d I d H }| |  I d H  z
| d I d H  W n
 ty0   Y d S w | I d H  td)Nz$Async generator fixture did not stoprN   )asendstartedr   StopAsyncIterationr   r   )r  agenr   )r  rF   teardown_eventrN   rO   fixture_runner  s   
z7TestRunner.run_asyncgen_fixture.<locals>.fixture_runnerc                      s      S rI   )r  r   rN   )r  rR   rN   rO   <lambda>  s    z1TestRunner.run_asyncgen_fixture.<locals>.<lambda>)r  r=   rG   N)rP   r8   r  r   )rR   r  rF   fixture_valuerN   )r  r  rF   rR   r  rO   run_asyncgen_fixture  s   zTestRunner.run_asyncgen_fixturec                 C   s   | j |fi |S rI   r  )rR   r  rF   rN   rN   rO   run_fixture  s   zTestRunner.run_fixture	test_funcc                 C   s   | j |fi | d S rI   r  )rR   r  rF   rN   rN   rO   run_test  s   zTestRunner.run_testr   )rk   rl   rm   r   rS   r  r   r   rK   r   dictr   r  rP   Nurseryr  rC   r  r   r   r   r   r   r  r   r  r  rN   rN   rN   rO   r    sZ    











r  rI   )r  r   r  concurrent.futuresr   contextvarsr   dataclassesr   	functoolsr   ior   osr   r   r   typesr	   typingr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r   trio.from_threadrP   r  r"   r#   r$   trio.socketr%   r   trio.to_threadr&    r(   r)   r*   r+   _core._compatr,   r-   r.   _core._eventloopr0   _core._exceptionsr1   r2   r3   r4   r5   BaseExceptionGroup_core._socketsr6   _core._synchronizationr7   BaseCapacityLimiterr8   	BaseEventr9   _core._tasksr:   BaseCancelScoper;   r<   trio_typingr=   r>   r  ImportErrorr?   trio.hazmatr@   rA   trio.lowlevelrB   r   AttributeErrorrC   r   rD   r   r   current_tokenRunVarr   r   CancelledErrorr  checkpoint_if_cancelledcancel_shielded_checkpointcurrent_effective_deadlinecurrent_timer}   rs   rK   ro   r   r   r   r   r   r   r   r   r   r   r   
Instrumentr   r   r   r   r   r   r  r  SocketListenerr3  rC  rD  rI  rS  rV  AddressFamilyr\  getaddrinfogetnameinforb  rd  r{  r  r  r  r  r  r  r  rN   rN   rN   rO   <module>   s8  
 h
04


#8	

	!E


	B

