o
    "h                     @  s  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZmZmZmZmZmZ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  d dlm!Z! d dl"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.m/Z/m0Z0m1Z1 d dl-m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z9 d dl:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@mAZAmBZB ddlCmDZD ddlEmFZFmGZGmHZHmIZI ddlJmKZK ddlLmMZM ddlNmOZP ddlNmQZR ddlNmSZT ddlNmUZUmVZV ddlNmWZX ddlYmZZ[ ddlBm\Z\m]Z]m^Z^ ddl_m`Z`maZa dd lbmcZc e$r$d d!ldmeZe ejfd"kr1d d#l"mgZg nd d#lhmgZg ejfd$krFd d%l"miZimjZj nd d&lkmlZl d d%lhmiZimjZj e(d'Zme(d(Zne(d)eoe\Zpeid*Zqegd+Zre,jsjtZtG d,d- d-e[ZZG d.d/ d/eBjuZuG d0d1 d1eBjvZved2d3G d4d5 d5eBjwZxed2d3G d6d7 d7eBjyZzed2d3G d8d9 d9eBj{Z{G d:d; d;e,jBj|Z}etd<Z~d=ed<< dgdBdCZG dDdE dEe&ep ZG dFdG dGeeBjZG dHdI dIeeBjZG dJdK dKeeBjZG dLdM dMeeBjZG dNdO dOee\ eBjZG dPdQ dQee\ eBjZG dRdS dSeeo eBjZG dTdU dUeeo eBjZG dVdW dWeRZQG dXdY dYeTZSG dZd[ d[eXZWG d\d] d]ePZOetd^Zd=ed^< G d_d` d`ZG dadb dbeBjZG dcdd dde@ZG dedf dfe`ZeZdS )h    )annotationsN)AsyncGeneratorAsyncIterator	AwaitableCallable
Collection	CoroutineIterableSequence)Future)AbstractContextManager)	dataclass)partial)IOBase)PathLike)Signals)AddressFamily
SocketKind)TracebackType)IOTYPE_CHECKINGAnyGenericNoReturnTypeVarcastoverload)ErrorOutcomeValue)current_root_taskcurrent_tasknotify_closingwait_readablewait_writable)
SocketType)run_sync   )CapacityLimiterStatisticsEventStatisticsLockStatisticsTaskInfo
WouldBlockabc)claim_worker_thread)BrokenResourceErrorBusyResourceErrorClosedResourceErrorEndOfStream)convert_ipv6_sockaddr)create_memory_object_streamCapacityLimiterEventLock)ResourceGuardSemaphoreStatistics	SemaphoreCancelScope)IPSockAddrTypeUDPPacketTypeUNIXDatagramPacketType)AsyncBackendStrOrBytesPath)MemoryObjectSendStream)FileDescriptorLike)   
   )	ParamSpec)rH      )TypeVarTupleUnpack)BaseExceptionGroupTT_Retval
T_SockAddrPosArgsTPc                   @  s   e Zd Z	d&d'ddZd&d(ddZd)ddZd*ddZd+ddZed,ddZ	e	j
d-ddZ	ed.dd Zed.d!d"Zed.d#d$Zej
d/d%d$ZdS )0r@   Noriginaltrio.CancelScope | Nonekwargsobjectreturnc                 K  
   t | S NrW   __new__)clsrT   rV    r^   H/var/www/html/venv/lib/python3.10/site-packages/anyio/_backends/_trio.pyr\   w   s   
zCancelScope.__new__r   Nonec                 K  s   |p	t jdi || _d S Nr^   )trior@   _CancelScope__original)selfrT   rV   r^   r^   r_   __init__|   s   zCancelScope.__init__c                 C  s   | j   | S rZ   )rc   	__enter__rd   r^   r^   r_   rf      s   
zCancelScope.__enter__exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Noneboolc                 C     | j |||S rZ   )rc   __exit__rd   rh   rj   rl   r^   r^   r_   rp         zCancelScope.__exit__c                 C     | j   d S rZ   )rc   cancelrg   r^   r^   r_   rt         zCancelScope.cancelfloatc                 C     | j jS rZ   rc   deadlinerg   r^   r^   r_   ry         zCancelScope.deadlinevaluec                 C     || j _d S rZ   rx   rd   r{   r^   r^   r_   ry         c                 C  rw   rZ   )rc   cancel_calledrg   r^   r^   r_   r      rz   zCancelScope.cancel_calledc                 C  rw   rZ   )rc   cancelled_caughtrg   r^   r^   r_   r      rz   zCancelScope.cancelled_caughtc                 C  rw   rZ   rc   shieldrg   r^   r^   r_   r      rz   zCancelScope.shieldc                 C  r|   rZ   r   r}   r^   r^   r_   r      r~   rZ   )rT   rU   rV   rW   rX   r@   )rT   rU   rV   r   rX   r`   )rX   r@   rh   ri   rj   rk   rl   rm   rX   rn   rX   r`   rX   rv   r{   rv   rX   r`   rX   rn   )r{   rn   rX   r`   )__name__
__module____qualname__r\   re   rf   rp   rt   propertyry   setterr   r   r   r^   r^   r^   r_   r@   v   s&    


r@   c                   @  sJ   e Zd ZdddZdddZd ddZddd!ddZddd"ddZdS )#	TaskGrouprX   r`   c                 C  s   d| _ tjdd| _d | _d S )NFT)strict_exception_groups)_activerb   open_nursery_nursery_managercancel_scoperg   r^   r^   r_   re      s   
zTaskGroup.__init__c                   s,   d| _ | j I d H | _t| jj| _| S )NT)r   r   
__aenter___nurseryr@   r   rg   r^   r^   r_   r      s
   zTaskGroup.__aenter__rh   ri   rj   rk   rl   rm   rn   c              
     sl   z.z| j |||I d H W W ~~d| _S  ty/ } z|tjd s*tj | d }~ww ~~d| _w )NF   )r   	__aexit__r   rN   splitrb   	Cancelled_create)rd   rh   rj   rl   excr^   r^   r_   r      s   zTaskGroup.__aexit__Nnamefunc,Callable[[Unpack[PosArgsT]], Awaitable[Any]]argsUnpack[PosArgsT]r   rW   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   )r   RuntimeErrorr   
start_soonrd   r   r   r   r^   r^   r_   r      s
   zTaskGroup.start_soonCallable[..., Awaitable[Any]]r   c                  s0   | j std| jj|g|R d|iI d H S r   )r   r   r   startr   r^   r^   r_   r      s    zTaskGroup.startr   )rX   r   r   )r   r   r   r   r   rW   rX   r`   )r   r   r   rW   r   rW   rX   r   )r   r   r   re   r   r   r   r   r^   r^   r^   r_   r      s    


r   c                      s2   e Zd ZdddZd fddZdddZ  ZS )BlockingPortalrX   c                 C  rY   rZ   r[   r]   r^   r^   r_   r\         
zBlockingPortal.__new__r`   c                   s   t    tj | _d S rZ   )superre   rb   lowlevelcurrent_trio_token_tokenrg   	__class__r^   r_   re      s   
zBlockingPortal.__init__r   <Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]r   tuple[Unpack[PosArgsT]]rV   dict[str, Any]r   rW   futureFuture[T_Retval]c              	   C  s.   t jjt| jj|d| j||||| jd d S )Nr   )
trio_token)rb   from_threadr&   r   _task_groupr   
_call_funcr   )rd   r   r   rV   r   r   r^   r^   r_   _spawn_task_from_thread   s   
z&BlockingPortal._spawn_task_from_thread)rX   r   r   )r   r   r   r   rV   r   r   rW   r   r   rX   r`   )r   r   r   r\   re   r   __classcell__r^   r^   r   r_   r      s    
r   F)eqc                   @  s,   e Zd ZU ded< dddd	ZdddZdS )ReceiveStreamWrapperztrio.abc.ReceiveStream_streamN	max_bytes
int | NonerX   bytesc              
     sl   z| j |I d H }W n! tjy } zt|jd }~w tjy- } zt|jd }~ww |r4t|S trZ   )r   receive_somerb   r1   	__cause__r/   r   r2   rd   r   datar   r^   r^   r_   receive  s   zReceiveStreamWrapper.receiver`   c                      | j  I d H  d S rZ   r   acloserg   r^   r^   r_   r        zReceiveStreamWrapper.acloserZ   )r   r   rX   r   r   )r   r   r   __annotations__r   r   r^   r^   r^   r_   r     s   
 r   c                   @  s*   e Zd ZU ded< dddZdd	d
ZdS )SendStreamWrapperztrio.abc.SendStreamr   itemr   rX   r`   c              
     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 rZ   )r   send_allrb   r1   r   r/   rd   r   r   r^   r^   r_   send   s   zSendStreamWrapper.sendc                   r   rZ   r   rg   r^   r^   r_   r   (  r   zSendStreamWrapper.acloseNr   r   rX   r`   r   )r   r   r   r   r   r   r^   r^   r^   r_   r     s   
 
r   c                   @  s   e Zd ZU ded< ded< ded< ded< d#d
dZd$ddZd#ddZd#ddZd%ddZe	d$ddZ
e	d&ddZe	d'ddZe	d(ddZe	d(d d!Zd"S ))Processztrio.Process_processabc.ByteSendStream | None_stdinabc.ByteReceiveStream | None_stdout_stderrrX   r`   c                   s   t dd) | jr| j I d H  | jr| j I d H  | jr(| j I d H  W d    n1 s2w   Y  z
|  I d H  W d S  tyi   |   t dd |  I d H  W d     1 scw   Y   w NT)r   )r@   r   r   r   r   waitBaseExceptionkillrg   r^   r^   r_   r   3  s*   
zProcess.acloseintc                      | j  I d H S rZ   )r   r   rg   r^   r^   r_   r   D     zProcess.waitc                 C  rs   rZ   )r   	terminaterg   r^   r^   r_   r   G  ru   zProcess.terminatec                 C  rs   rZ   )r   r   rg   r^   r^   r_   r   J  ru   zProcess.killsignalr   c                 C     | j | d S rZ   )r   send_signal)rd   r   r^   r^   r_   r   M     zProcess.send_signalc                 C  rw   rZ   )r   pidrg   r^   r^   r_   r   P  rz   zProcess.pidr   c                 C  rw   rZ   )r   
returncoderg   r^   r^   r_   r   T  rz   zProcess.returncodec                 C     | j S rZ   )r   rg   r^   r^   r_   stdinX     zProcess.stdinc                 C  r   rZ   )r   rg   r^   r^   r_   stdout\  r   zProcess.stdoutc                 C  r   rZ   )r   rg   r^   r^   r_   stderr`  r   zProcess.stderrNr   rX   r   )r   r   rX   r`   rX   r   )rX   r   )rX   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r^   r^   r^   r_   r   ,  s(   
 




r   c                      s   e Zd Zd fddZ  ZS )_ProcessPoolShutdownInstrumentrX   r`   c                   s   t    d S rZ   )r   	after_runrg   r   r^   r_   r   f  ru   z(_ProcessPoolShutdownInstrument.after_runr   )r   r   r   r   r   r^   r^   r   r_   r   e  s    r   &current_default_worker_process_limiterztrio.lowlevel.RunVarworkersset[abc.Process]rX   r`   c                   s   zt tjI d H  W d S  t jyI   | D ]}|jd u r"|  qtdd | D ]	}| I d H  q+W d    Y d S 1 sAw   Y  Y d S w r   )	rb   sleepmathinfr   r   r   r@   r   )r   processr^   r^   r_   _shutdown_process_poolo  s   
&r   c                   @  sB   e Zd ZdddZdddZedd
dZdddZdddZdS )_TrioSocketMixintrio_socketTrioSocketTyperX   r`   c                 C  s   || _ d| _d S NF)_trio_socket_closedrd   r   r^   r^   r_   re     s   
z_TrioSocketMixin.__init__c                 C  s    | j rt| j dk rtd S Nr   )r   r1   r   filenor/   rg   r^   r^   r_   _check_closed  s
   z_TrioSocketMixin._check_closedsocket.socketc                 C  rw   rZ   )r   _sockrg   r^   r^   r_   _raw_socket  rz   z_TrioSocketMixin._raw_socketc                   s(   | j  dkrd| _| j   d S d S )Nr   T)r   r   r   closerg   r^   r^   r_   r     s
   z_TrioSocketMixin.acloser   r   r   c                 C  s@   t |tjr	t|| j dk r| jrtd t |trt||r   )
isinstancerb   r1   r   r   r   OSErrorr/   rd   r   r^   r^   r_   _convert_socket_error  s   
z&_TrioSocketMixin._convert_socket_errorNr   r   rX   r`   r   )rX   r  )r   r   rX   r   )	r   r   r   re   r   r   r  r   r  r^   r^   r^   r_   r     s    


r   c                      s>   e Zd Zd fddZddddZdddZdddZ  ZS )SocketStreamr   r   rX   r`   c                   $   t  | td| _td| _d S Nreading from
writing tor   re   r;   _receive_guard_send_guardr   r   r^   r_   re        
zSocketStream.__init__   r   r   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 rZ   )r  r   recvr   r  r2   r   r^   r^   r_   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 rZ   )r  
memoryviewr   r   r   r  )rd   r   view
bytes_sentr   r^   r^   r_   r     s   "zSocketStream.sendc                   s   | j tj d S rZ   )r   shutdownsocketSHUT_WRrg   r^   r^   r_   send_eof  s   zSocketStream.send_eofr	  )r  )r   r   rX   r   r   r   )r   r   r   re   r   r   r  r   r^   r^   r   r_   r
    s
    
r
  c                   @  s    e Zd ZdddZdddZdS )UNIXSocketStreammsglenr   maxfdsrX   tuple[bytes, list[int]]c                   sR  t |tr
|dk rtdt |tr|dk rtdtd}tj I d H  | j? 	 z| j	|t
||j I d H \}}}}W n tyZ } z| | W Y d }~nd }~ww |sa|satnq-W d    n1 smw   Y  |D ].\}	}
}|	t
jks|
t
jkrtd|d|	 d	|
 ||d t|t||j    qt|t|fS )
Nr   z%msglen must be a non-negative integerr   z!maxfds must be a positive integeriTz.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r  r   
ValueErrorarrayrb   r   
checkpointr  r   recvmsgr  CMSG_LENitemsizer   r  r2   
SOL_SOCKET
SCM_RIGHTSr   	frombyteslenlist)rd   r  r  fdsmessageancdataflagsaddrr   
cmsg_level	cmsg_type	cmsg_datar^   r^   r_   receive_fds  sD   
&zUNIXSocketStream.receive_fdsr-  r   r,  Collection[int | IOBase]r`   c                   s   |st d|st dg }|D ]}t|tr|| qt|tr*||  qtd|}tj	 I d H  | j
6 	 z| j|gtjtj|fgI d H  W n tyh } z| | W Y d }~nd }~ww q>W d    d S 1 suw   Y  d S )Nzmessage must not be emptyzfds must not be emptyr   )r!  r  r   appendr   r   r"  rb   r   r#  r  r   sendmsgr  r'  r(  r   r  )rd   r-  r,  filenosfdfdarrayr   r^   r^   r_   send_fds  sB   



"zUNIXSocketStream.send_fdsN)r  r   r  r   rX   r  )r-  r   r,  r5  rX   r`   )r   r   r   r4  r;  r^   r^   r^   r_   r    s    
!r  c                      (   e Zd Zd	 fddZd
ddZ  ZS )TCPSocketListener
raw_socketr  c                   "   t  tj| td| _d S Nzaccepting connections fromr   re   rb   r  from_stdlib_socketr;   _accept_guardrd   r>  r   r^   r_   re        zTCPSocketListener.__init__rX   r
  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   )
rC  r   acceptr   r  
setsockoptr  IPPROTO_TCPTCP_NODELAYr
  rd   r   _addrr   r^   r^   r_   rG  	  s   zTCPSocketListener.acceptr>  r  )rX   r
  r   r   r   re   rG  r   r^   r^   r   r_   r=        r=  c                      r<  )UNIXSocketListenerr>  r  c                   r?  r@  rA  rD  r   r^   r_   re     rE  zUNIXSocketListener.__init__rX   r  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 rZ   )rC  r   rG  r   r  r  rK  r^   r^   r_   rG    s    

zUNIXSocketListener.acceptrM  )rX   r  rN  r^   r^   r   r_   rP    rO  rP  c                      s2   e Zd Zd fddZddd	ZdddZ  ZS )	UDPSocketr   r   rX   r`   c                   r  r  r  r   r   r^   r_   re   $  r  zUDPSocket.__init__tuple[bytes, IPSockAddrType]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   recvfromr3   r   r  rd   r   r0  r   r^   r^   r_   r   )  s   "zUDPSocket.receiver   rB   c                      | 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 rZ   r  r   sendtor   r  r   r^   r^   r_   r   1     "zUDPSocket.sendr	  )rX   rR  )r   rB   rX   r`   r   r   r   re   r   r   r   r^   r^   r   r_   rQ  #      
rQ  c                      2   e Zd Zd fddZddd	ZdddZ  ZS )ConnectedUDPSocketr   r   rX   r`   c                   r  r  r  r   r   r^   r_   re   :  r  zConnectedUDPSocket.__init__r   c                      | 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 rS  r  r   r  r   r  r  r^   r^   r_   r   ?     "zConnectedUDPSocket.receiver   c                      | 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 rZ   r  r   r   r   r  r   r^   r^   r_   r   F  rY  zConnectedUDPSocket.sendr	  rX   r   r   rZ  r^   r^   r   r_   r]  9  s    
r]  c                      r\  )UNIXDatagramSocketr   r   rX   r`   c                   r  r  r  r   r   r^   r_   re   O  r  zUNIXDatagramSocket.__init__rC   c                   s   | j 8 z| jdI d H \}}||fW W  d    S  ty3 } z| | W Y d }~nd }~ww W d    d S 1 s?w   Y  d S rS  )r  r   rT  r   r  rU  r^   r^   r_   r   T  s   "zUNIXDatagramSocket.receiver   c                   rV  rZ   rW  r   r^   r^   r_   r   \  rY  zUNIXDatagramSocket.sendr	  )rX   rC   )r   rC   rX   r`   rZ  r^   r^   r   r_   rd  N  r[  rd  c                      r\  )ConnectedUNIXDatagramSocketr   r   rX   r`   c                   r  r  r  r   r   r^   r_   re   g  r  z$ConnectedUNIXDatagramSocket.__init__r   c                   r^  rS  r_  r  r^   r^   r_   r   l  r`  z#ConnectedUNIXDatagramSocket.receiver   c                   ra  rZ   rb  r   r^   r^   r_   r   s  rY  z ConnectedUNIXDatagramSocket.sendr	  rc  r   rZ  r^   r^   r   r_   re  d  s    
re  c                   @  sH   e Zd ZdddZdddZddd	Zdd
dZdddZdddZdS )r8   rX   c                 C  rY   rZ   r[   r   r^   r^   r_   r\     r   zEvent.__new__r`   c                 C  s   t  | _d S rZ   )rb   r8   _Event__originalrg   r^   r^   r_   re     ru   zEvent.__init__rn   c                 C  
   | j  S rZ   )rf  is_setrg   r^   r^   r_   rh    r   zEvent.is_setc                   r   rZ   )rf  r   rg   r^   r^   r_   r     r   z
Event.waitr)   c                 C  s   | j  }t|jdS )N)tasks_waiting)rf  
statisticsr)   ri  rd   orig_statisticsr^   r^   r_   rj    s   
zEvent.statisticsc                 C  rs   rZ   )rf  setrg   r^   r^   r_   rm    ru   z	Event.setN)rX   r8   r   r   )rX   r)   )	r   r   r   r\   re   rh  r   rj  rm  r^   r^   r^   r_   r8     s    




r8   c                   @  sl   e Zd ZdddddZdddd	d
ZedddZdddZdddZdddZ	dddZ
d ddZdS )!r:   Ffast_acquirero  rn   rX   c                C  rY   rZ   r[   r]   ro  r^   r^   r_   r\     r   zLock.__new__r`   c                C  s   || _ t | _d S rZ   )_fast_acquirerb   r:   _Lock__original)rd   ro  r^   r^   r_   re     s   zLock.__init__r   r   c                 C  s   | j dkr
d| _ d S d S )N)z*attempt to re-acquire an already held Lock)z)Attempted to acquire an already held Lock)r   )r   r^   r^   r_   _convert_runtime_error_msg  s   

zLock._convert_runtime_error_msgc              
     s   | j s"z| j I d H  W d S  ty! } z| |  d }~ww tj I d H  z| j  W d S  tj	yF   | jj
 I d H  Y d S  tyW } z| |  d }~ww rZ   )rq  rr  acquirer   rs  rb   r   checkpoint_if_cancelledacquire_nowaitr,   _lotparkr  r^   r^   r_   rt    s(   

zLock.acquirec              
   C  sJ   z| j   W d S  tjy   td  ty$ } z| |  d }~ww rZ   )rr  rv  rb   r,   r   rs  r  r^   r^   r_   rv    s   
zLock.acquire_nowaitc                 C  rg  rZ   )rr  lockedrg   r^   r^   r_   ry    r   zLock.lockedc                 C  rs   rZ   )rr  releaserg   r^   r^   r_   rz    ru   zLock.releaser*   c                 C  s.   | j  }|jrt|jnd }t|j||jS rZ   )rr  rj  ownerTrioTaskInfor*   ry  ri  )rd   rl  r{  r^   r^   r_   rj    s
   

zLock.statisticsNro  rn   rX   r:   )ro  rn   rX   r`   )r   r   rX   r`   r   r   )rX   r*   )r   r   r   r\   re   staticmethodrs  rt  rv  ry  rz  rj  r^   r^   r^   r_   r:     s    


	
r:   c                      s|   e Zd ZddddddZdddd fddZdddZdddZed ddZed!ddZ	dddZ
d"ddZ  ZS )#r>   NF	max_valuero  initial_valuer   r  r   ro  rn   rX   c                C  rY   rZ   r[   r]   r  r  ro  r^   r^   r_   r\     s   
zSemaphore.__new__r`   c                  s&   t  j|||d tj||d| _d S )Nr  )r  )r   re   rb   r>   _Semaphore__original)rd   r  r  ro  r   r^   r_   re     s   zSemaphore.__init__c                   sf   | j s| j I d H  d S tj I d H  z| j  W d S  tjy2   | jj	 I d H  Y d S w rZ   )
rq  r  rt  rb   r   ru  rv  r,   rw  rx  rg   r^   r^   r_   rt    s   zSemaphore.acquirec                 C  s(   z| j   W d S  tjy   td w rZ   )r  rv  rb   r,   rg   r^   r^   r_   rv    s
   zSemaphore.acquire_nowaitc                 C  rw   rZ   )r  r  rg   r^   r^   r_   r    rz   zSemaphore.max_valuec                 C  rw   rZ   )r  r{   rg   r^   r^   r_   r{     rz   zSemaphore.valuec                 C  rs   rZ   )r  rz  rg   r^   r^   r_   rz    ru   zSemaphore.releaser<   c                 C  s   | j  }t|jS rZ   )r  rj  r<   ri  rk  r^   r^   r_   rj    s   

zSemaphore.statistics)r  r   r  r   ro  rn   rX   r>   )r  r   r  r   ro  rn   rX   r`   r   r   r   )rX   r<   )r   r   r   r\   re   rt  rv  r   r  r{   rz  rj  r   r^   r^   r   r_   r>     s    



r>   c                   @  s   e Zd Z	d2ddd3dd	Z	d2ddd4ddZd5ddZd6ddZed7ddZej	d8ddZed9ddZ
ed7dd Zd5d!d"Zd:d%d&Zd5d'd(Zd:d)d*Zd5d+d,Zd:d-d.Zd;d0d1ZdS )<r6   NrT   total_tokensfloat | NonerT   trio.CapacityLimiter | NonerX   c                C  rY   rZ   r[   )r]   r  rT   r^   r^   r_   r\     s   
zCapacityLimiter.__new__r`   c                C  s.   |d ur	|| _ d S |d usJ t|| _ d S rZ   )_CapacityLimiter__originalrb   r6   )rd   r  rT   r^   r^   r_   re     s   
zCapacityLimiter.__init__c                   r   rZ   )r  r   rg   r^   r^   r_   r     r   zCapacityLimiter.__aenter__rh   ri   rj   rk   rl   rm   c                   s   | j |||I d H  d S rZ   )r  r   rq   r^   r^   r_   r     s   zCapacityLimiter.__aexit__rv   c                 C  rw   rZ   r  r  rg   r^   r^   r_   r  #  rz   zCapacityLimiter.total_tokensr{   c                 C  r|   rZ   r  r}   r^   r^   r_   r  '  r~   r   c                 C  rw   rZ   )r  borrowed_tokensrg   r^   r^   r_   r  +  rz   zCapacityLimiter.borrowed_tokensc                 C  rw   rZ   )r  available_tokensrg   r^   r^   r_   r  /  rz   z CapacityLimiter.available_tokensc                 C  rs   rZ   )r  rv  rg   r^   r^   r_   rv  3  ru   zCapacityLimiter.acquire_nowaitborrowerrW   c                 C  r   rZ   )r  acquire_on_behalf_of_nowaitrd   r  r^   r^   r_   r  6  r   z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   r   rZ   )r  rt  rg   r^   r^   r_   rt  9  r   zCapacityLimiter.acquirec                   s   | j |I d H  d S rZ   )r  acquire_on_behalf_ofr  r^   r^   r_   r  <  s   z$CapacityLimiter.acquire_on_behalf_ofc                 C  rg  rZ   )r  rz  rg   r^   r^   r_   rz  ?  r   zCapacityLimiter.releasec                 C  s   | j |S rZ   )r  release_on_behalf_ofr  r^   r^   r_   r  B  s   z$CapacityLimiter.release_on_behalf_ofr(   c                 C  s&   | j  }t|j|jt|j|jdS )N)r  r  	borrowersri  )r  rj  r(   r  r  tupler  ri  )rd   origr^   r^   r_   rj  E  s   
zCapacityLimiter.statisticsrZ   )r  r  rT   r  rX   r6   )r  r  rT   r  rX   r`   r   )rh   ri   rj   rk   rl   rm   rX   r`   r   r   r   )r  rW   rX   r`   )rX   r(   )r   r   r   r\   re   r   r   r   r  r   r  r  rv  r  rt  r  rz  r  rj  r^   r^   r^   r_   r6     s4    








r6   _capacity_limiter_wrapperc                   @  sH   e Zd ZU ded< dddZddd	ZdddZdddZdddZdS )_SignalReceiverzAsyncIterator[int]	_iteratorsignalstuple[Signals, ...]c                 C  s
   || _ d S rZ   )_signals)rd   r  r^   r^   r_   re   Z  r   z_SignalReceiver.__init__rX   c                 C  s   t j| j | _| j | _| S rZ   )rb   open_signal_receiverr  _cmrf   r  rg   r^   r^   r_   rf   ]  s   z_SignalReceiver.__enter__rh   ri   rj   rk   rl   rm   bool | Nonec                 C  ro   rZ   )r  rp   rq   r^   r^   r_   rp   b  rr   z_SignalReceiver.__exit__c                 C  s   | S rZ   r^   rg   r^   r^   r_   	__aiter__j  s   z_SignalReceiver.__aiter__r   c                   s   | j  I d H }t|S rZ   )r  	__anext__r   )rd   signumr^   r^   r_   r  m  s   z_SignalReceiver.__anext__N)r  r  )rX   r  )rh   ri   rj   rk   rl   rm   rX   r  )rX   r   )	r   r   r   r   re   rf   rp   r  r  r^   r^   r^   r_   r  W  s   
 



r  c                   @  s\   e Zd Zd,ddZd-ddZd.ddZd/ddZd0ddZd1d"d#Zd2d%d&Z	d3d)d*Z
d+S )4
TestRunneroptionsr   rX   r`   c                 K  s$   ddl m} | | _d | _|| _d S )Nr   )Queue)queuer  _call_queue_send_stream_options)rd   r  r  r^   r^   r_   re   x  s   
zTestRunner.__init__rh   ri   rj   rk   rl   types.TracebackType | Nonec                 C  s<   | j r| j   | j d ur| j   | j d usd S d S d S rZ   )r  r  r  getrq   r^   r^   r_   rp     s   

zTestRunner.__exit__c                   s   t d\| _}|= |2 z03 d H W \}}z|I d H }W n ty5 } z|t| W Y d }~qd }~ww |t| q6 W d    d S 1 sJw   Y  d S rF  )r4   r  r   r6  r   r   )rd   receive_streamcorooutcome_holderretvalr   r^   r^   r_   _run_tests_and_fixtures  s   "z"TestRunner._run_tests_and_fixturesoutcomerW   c                 C  s
   d | _ d S rZ   )r  )rd   r  r^   r^   r_   _main_task_finished  r   zTestRunner._main_task_finishedr    Callable[P, Awaitable[T_Retval]]r   P.argsrV   P.kwargsrP   c                 O  s   | j d u r'tjj| jf| jj| jd| j | j d u r'| j	   | j d u sg }| j 
||i ||f |s@| j	   |r8|d  S )N)run_sync_soon_threadsafedone_callbackr   )r  rb   r   start_guest_runr  r  putr  r  r  send_nowaitunwrap)rd   r   r   rV   r  r^   r^   r_   _call_in_runner_task  s$   


zTestRunner._call_in_runner_taskfixture_func,Callable[..., AsyncGenerator[T_Retval, Any]]r   Iterable[T_Retval]c                 c  s`    |di |}|  |jd }|V  z	|  |jd  W n
 ty%   Y d S w |  |j td)Nz$Async generator fixture did not stopr^   )r  asendStopAsyncIterationr   r   )rd   r  rV   asyncgenfixturevaluer^   r^   r_   run_asyncgen_fixture  s   zTestRunner.run_asyncgen_fixture,Callable[..., Coroutine[Any, Any, T_Retval]]c                 C  s   | j |fi |S rZ   r  )rd   r  rV   r^   r^   r_   run_fixture  s   zTestRunner.run_fixture	test_func'Callable[..., Coroutine[Any, Any, Any]]c                 C  s   | j |fi | d S rZ   r  )rd   r  rV   r^   r^   r_   run_test  s   zTestRunner.run_testN)r  r   rX   r`   )rh   ri   rj   rk   rl   r  rX   r`   r   )r  rW   rX   r`   )r   r  r   r  rV   r  rX   rP   )r  r  rV   r   rX   r  )r  r  rV   r   rX   rP   )r  r  rV   r   rX   r`   )r   r   r   re   rp   r  r  r  r  r  r  r^   r^   r^   r_   r  w  s    






r  c                      r<  )r|  tasktrio.lowlevel.Taskc                   sH   d }|j r|j jrt|j j}t t|||j|j t|| _	d S rZ   )
parent_nurseryparent_taskidr   re   r   r  weakrefproxy_task)rd   r  	parent_idr   r^   r_   re     s
   zTrioTaskInfo.__init__rX   rn   c                 C  s"   z| j jjW S  ty   Y dS w r   )r  _cancel_statuseffectively_cancelledReferenceErrorrg   r^   r^   r_   has_pending_cancellation  s
   z%TrioTaskInfo.has_pending_cancellation)r  r  r   )r   r   r   re   r  r   r^   r^   r   r_   r|    s    r|  c                   @  s  e Zd Zedd
dZedddZedddZedddZedddZedddZ	edddZ
edddZeejdd dd%d&Zedd'd(Zedd*d+Zedd-d.Zedd1d2Zed3dd4dd:d;Zedd>d?Ze		3dddDdEZeddFdGZeddIdJZeddKdLZeddNdOZeddXdYZedd\d]Ze	3dddddeZeddidjZeddndoZeddpdqZeddwdxZ ee!dd|d}Z"ee!ddd}Z"eddd}Z"eddddddddZ#e	ddddZ$edddZ%edddZ&edddZ'edddZ(edddZ)edddZ*edddZ+edddZ,edddZ-edddZ.edddZ/edddZ0edddZ1edddZ2edddZ3edddZ4d3S )TrioBackendr   1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r   r   rV   r   r  rX   rP   c                 C  s   t j|g|R  S rZ   )rb   run)r]   r   r   rV   r  r^   r^   r_   r    s   zTrioBackend.runrW   c                 C  s
   t j S rZ   )rb   r   r   r   r^   r^   r_   current_token     
zTrioBackend.current_tokenrv   c                 C     t  S rZ   )rb   current_timer   r^   r^   r_   r    rz   zTrioBackend.current_timetype[BaseException]c                 C  s   t jS rZ   )rb   r   r   r^   r^   r_   cancelled_exception_class  r   z%TrioBackend.cancelled_exception_classr`   c                      t j I d H  d S rZ   )rb   r   r#  r   r^   r^   r_   r#       zTrioBackend.checkpointc                   r  rZ   )rb   r   ru  r   r^   r^   r_   ru    r  z#TrioBackend.checkpoint_if_cancelledc                   r  rZ   )rb   r   cancel_shielded_checkpointr   r^   r^   r_   r    r  z&TrioBackend.cancel_shielded_checkpointdelayc                   s   t |I d H  d S rZ   )rb   r   )r]   r  r^   r^   r_   r     r  zTrioBackend.sleepFry   r   ry   r   rn   abc.CancelScopec                C  s   t ||dS )Nr  r?   )r]   ry   r   r^   r^   r_   create_cancel_scope  s   zTrioBackend.create_cancel_scopec                 C  r  rZ   )rb   current_effective_deadliner   r^   r^   r_   r    rz   z&TrioBackend.current_effective_deadlineabc.TaskGroupc                 C     t  S rZ   )r   r   r^   r^   r_   create_task_group  r   zTrioBackend.create_task_group	abc.Eventc                 C  r  rZ   r7   r   r^   r^   r_   create_event  r   zTrioBackend.create_eventro  r:   c                C  s
   t |dS )Nrn  r9   rp  r^   r^   r_   create_lock  r  zTrioBackend.create_lockNr  r  r   r  r   abc.Semaphorec                C  s   t |||dS )Nr  r=   r  r^   r^   r_   create_semaphore  s   zTrioBackend.create_semaphorer  r6   c                 C     t |S rZ   r5   )r]   r  r^   r^   r_   create_capacity_limiter'  rz   z#TrioBackend.create_capacity_limiter&Callable[[Unpack[PosArgsT]], T_Retval]abandon_on_cancellimiterabc.CapacityLimiter | Nonec                   s8   d fdd}t  t||ttj|dI d H S )NrX   rP   c                     s6   t t   W  d    S 1 sw   Y  d S rZ   )r.   r  r^   r   r   tokenr^   r_   wrapper3  s   $z6TrioBackend.run_sync_in_worker_thread.<locals>.wrapper)r  r  )rX   rP   )r  r  r&   r   rb   r6   )r]   r   r   r  r  r  r^   r  r_   run_sync_in_worker_thread+  s   
z%TrioBackend.run_sync_in_worker_threadc                 C  s   t j  d S rZ   )rb   r   check_cancelledr   r^   r^   r_   r  >     zTrioBackend.check_cancelledr  c                 C     t jj|g|R  S rZ   )rb   r   r  r]   r   r   r  r^   r^   r_   run_async_from_threadB     z!TrioBackend.run_async_from_threadc                 C  r  rZ   )rb   r   r&   r  r^   r^   r_   run_sync_from_threadK  r  z TrioBackend.run_sync_from_threadabc.BlockingPortalc                 C  r  rZ   )r   r   r^   r^   r_   create_blocking_portalT  r   z"TrioBackend.create_blocking_portalcommand)StrOrBytesPath | Sequence[StrOrBytesPath]r   int | IO[Any] | Noner   r   r   r   c          
        s   ddd t |tttfr#tjj |f|||dd|I d H }ntjj fd	d
|D f|||dd|I d H }|jrDt|jnd }|j	rNt
|j	nd }|jrXt
|jnd }	t||||	S )Nr   rE   rX   strc                 S  s"   t | }t|tr|S t |S rZ   )osfspathr  r  fsdecode)r   str_or_bytesr^   r^   r_   convert_itemb  s   


z.TrioBackend.open_process.<locals>.convert_itemT)r   r   r   shellc                   s   g | ]} |qS r^   r^   ).0r   r	  r^   r_   
<listcomp>t  s    z,TrioBackend.open_process.<locals>.<listcomp>F)r   rE   rX   r  )r  r  r   r   rb   r   open_processr   r   r   r   r   r   )
r]   r  r   r   r   rV   r   stdin_streamstdout_streamstderr_streamr^   r  r_   r  X  s6   

		zTrioBackend.open_processr   r   c                 C  s   t jt| d S rZ   )rb   r   spawn_system_taskr   )r]   r   r^   r^   r_   #setup_process_pool_exit_at_shutdown  s   z/TrioBackend.setup_process_pool_exit_at_shutdownhostr  portlocal_addressIPSockAddrType | Noner
  c                   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_INETrb   rH  rI  rJ  bindconnectr   r  r
  )r]   r  r  r  familyr   r^   r^   r_   connect_tcp  s   zTrioBackend.connect_tcppathstr | bytesabc.UNIXSocketStreamc                   sD   t jtj}z||I d H  W t|S  ty!   |   w rZ   )rb   r  AF_UNIXr  r   r  r  )r]   r  r   r^   r^   r_   connect_unix  s   zTrioBackend.connect_unixsockr  abc.SocketListenerc                 C  r  rZ   r=  r]   r$  r^   r^   r_   create_tcp_listener  rz   zTrioBackend.create_tcp_listenerc                 C  r  rZ   )rP  r'  r^   r^   r_   create_unix_listener  rz   z TrioBackend.create_unix_listenerr  socket.AddressFamilyremote_address
reuse_portUDPSocket | ConnectedUDPSocketc                   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)r  typer   )
rb   r  
SOCK_DGRAMrH  r'  SO_REUSEPORTr  r  r]  rQ  )r]   r  r  r+  r,  r   r^   r^   r_   create_udp_socket  s   zTrioBackend.create_udp_socketr>  remote_pathabc.UNIXDatagramSocketc                      d S rZ   r^   r]   r>  r2  r^   r^   r_   create_unix_datagram_socket     z'TrioBackend.create_unix_datagram_socketabc.ConnectedUNIXDatagramSocketc                   r4  rZ   r^   r5  r^   r^   r_   r6    r7  str | bytes | None8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocketc                   s2   t j|}|r||I d H  t|S t|S rZ   )rb   r  rB  r  re  rd  )r]   r>  r2  r   r^   r^   r_   r6    s   r   )r  r.  protor/  bytes | str | Nonestr | int | Noneint | AddressFamilyr.  int | SocketKindr;  r/  uSequence[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]]c                  s   t j||||||I d H S rZ   )rb   r  getaddrinfo)r]   r  r  r  r.  r;  r/  r^   r^   r_   rA    s   zTrioBackend.getaddrinfosockaddrrA   tuple[str, str]c                   s   t j||I d H S rZ   )rb   r  getnameinfo)r]   rB  r/  r^   r^   r_   rD    s   zTrioBackend.getnameinfoobjrG   c              
     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#   rb   r1   with_traceback__traceback__r0   r]   rE  r   r^   r^   r_   r#        
zTrioBackend.wait_readablec              
     rF  )Nr  )r$   rb   r1   rG  rH  r0   rI  r^   r^   r_   r$     rJ  zTrioBackend.wait_writablec                 C  s   t | d S rZ   )r"   )r]   rE  r^   r^   r_   r"     r~   zTrioBackend.notify_closingc                   s
   t |S rZ   r&  r'  r^   r^   r_   wrap_listener_socket	  s   z TrioBackend.wrap_listener_socketc                      t j|}t|S rZ   )rb   r  rB  r
  r]   r$  	trio_sockr^   r^   r_   wrap_stream_socket     zTrioBackend.wrap_stream_socketr  c                   rL  rZ   )rb   r  rB  r  rM  r^   r^   r_   wrap_unix_stream_socket  rP  z#TrioBackend.wrap_unix_stream_socketrQ  c                   rL  rZ   )rb   r  rB  rQ  rM  r^   r^   r_   wrap_udp_socket  rP  zTrioBackend.wrap_udp_socketr]  c                   rL  rZ   )rb   r  rB  r]  rM  r^   r^   r_   wrap_connected_udp_socket  rP  z%TrioBackend.wrap_connected_udp_socketrd  c                   rL  rZ   )rb   r  rB  rd  rM  r^   r^   r_   wrap_unix_datagram_socket!  rP  z%TrioBackend.wrap_unix_datagram_socketre  c                   rL  rZ   )rb   r  rB  re  rM  r^   r^   r_   #wrap_connected_unix_datagram_socket&  s   z/TrioBackend.wrap_connected_unix_datagram_socketc                 C  s<   zt  W S  ty   ttj d}t | | Y S w )Nr  )r  r  LookupErrorr6   rb   	to_threadcurrent_default_thread_limiterrm  )r]   r  r^   r^   r_   rX  -  s   

z*TrioBackend.current_default_thread_limiterr  r   .AbstractContextManager[AsyncIterator[Signals]]c                 G  r  rZ   )r  )r]   r  r^   r^   r_   r  8  s   z TrioBackend.open_signal_receiverr+   c                 C  s   t  }t|S rZ   )r!   r|  )r]   r  r^   r^   r_   get_current_task>  s   zTrioBackend.get_current_taskSequence[TaskInfo]c                 C  sb   t  }|sJ t|g}|j}|r/g }|D ]}|jD ]}|t| ||j qq|}|s|S rZ   )r    r|  child_nurserieschild_tasksr6  extend)r]   	root_task
task_infos	nurseriesnew_nurseriesnurseryr  r^   r^   r_   get_running_tasksC  s   

	zTrioBackend.get_running_tasksc                   s   ddl m} | I d H  d S )Nr   )wait_all_tasks_blocked)trio.testingre  )r]   re  r^   r^   r_   re  T  s   z"TrioBackend.wait_all_tasks_blockedr  c                 C  s   t di |S ra   )r  )r]   r  r^   r^   r_   create_test_runnerZ  r  zTrioBackend.create_test_runner)
r   r  r   r   rV   r   r  r   rX   rP   )rX   rW   r   )rX   r  r   )r  rv   rX   r`   )ry   rv   r   rn   rX   r  )rX   r  )rX   r  r}  )r  r   r  r   ro  rn   rX   r  )r  rv   rX   r6   )FN)
r   r  r   r   r  rn   r  r  rX   rP   )r   r  r   r   r  rW   rX   rP   )r   r  r   r   r  rW   rX   rP   )rX   r  )r  r  r   r  r   r  r   r  rV   r   rX   r   r   r   rX   r`   rZ   )r  r  r  r   r  r  rX   r
  )r  r   rX   r!  )r$  r  rX   r%  )
r  r*  r  r  r+  r  r,  rn   rX   r-  )r>  r  r2  r`   rX   r3  )r>  r  r2  r   rX   r8  )r>  r  r2  r9  rX   r:  )r  r<  r  r=  r  r>  r.  r?  r;  r   r/  r   rX   r@  )r   )rB  rA   r/  r   rX   rC  )rE  rG   rX   r`   )r$  r  rX   r
  )r$  r  rX   r  )r$  r  rX   rQ  )r$  r  rX   r]  )r$  r  rX   rd  )r$  r  rX   re  )rX   r6   )r  r   rX   rY  )rX   r+   )rX   r[  )r  r   rX   r  )5r   r   r   classmethodr  r  r  r  r#  ru  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r#  r(  r)  r1  r   r6  rA  rD  r#   r$   r"   rK  rO  rQ  rR  rS  rT  rU  rX  r  rZ  rd  re  rg  r^   r^   r^   r_   r    s    		(

r  rh  )
__future__r   r"  r   r  r  systypesr  collections.abcr   r   r   r   r   r   r	   r
   concurrent.futuresr   
contextlibr   dataclassesr   	functoolsr   ior   r   r   r   r   r   r   typingr   r   r   r   r   r   r   r   trio.from_threadrb   trio.lowlevelr  r   r   r   r    r!   r"   r#   r$   trio.socketr%   r   trio.to_threadr&    r(   r)   r*   r+   r,   r-   _core._eventloopr.   _core._exceptionsr/   r0   r1   r2   _core._socketsr3   _core._streamsr4   _core._synchronizationr6   BaseCapacityLimiterr8   	BaseEventr:   BaseLockr;   r<   r>   BaseSemaphore_core._tasksr@   BaseCancelScoperA   rB   rC   abc._eventlooprD   rE   streams.memoryrF   	_typeshedrG   version_inforJ   typing_extensionsrL   rM   exceptiongrouprN   rO   rP   r  rQ   rR   rS   r   RunVarr   r   ByteReceiveStreamr   ByteSendStreamr   r   
Instrumentr   r   r   r   r   r
  r  SocketListenerr=  rP  rQ  r]  rd  re  r  r  r  r|  r  backend_classr^   r^   r^   r_   <module>   s    (
( 6; 8
!C

86L W   