o
    i                     @  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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' d dl(Z)d dl*Z)d dl+m,Z,m-Z-m.Z. d dl*m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z6 d dl7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ ddlAmBZB ddlCmDZDmEZEmFZFmGZG ddlHmIZI ddlJmKZK ddlLmMZN ddlLmOZP ddlLmQZR ddlLmSZSmTZT ddlLmUZV ddlWmXZY ddl@mZZZm[Z[m\Z\ ddl]m^Z^m_Z_ ddl`maZa e rd dlbmcZc ejdd kr+d d!lmeZemfZf nd d"lgmhZh d d!limeZemfZf e%d#Zje%d$Zke%d%eleZZmeed&Zne$d'Zoe)jpjqZqG d(d) d)eYZXG d*d+ d+e@jrZred,d-G d.d/ d/e@jsZted,d-G d0d1 d1e@juZved,d-G d2d3 d3e@jwZwG d4d5 d5e)j@jxZyeqd6Zzd7e{d6< dad<d=Z|G d>d? d?e"em Z}G d@dA dAe}e@j~Z~G dBdC dCe~e@jZG dDdE dEe}e@jZG dFdG dGe}e@jZG dHdI dIe}eZ e@jZG dJdK dKe}eZ e@jZG dLdM dMe}el e@jZG dNdO dOe}el e@jZG dPdQ dQePZOG dRdS dSeRZQG dTdU dUeVZUG dVdW dWeNZMeqdXZd7e{dX< G dYdZ dZZG d[d\ d\e@jZG d]d^ d^e>ZG d_d` d`e^ZeZdS )b    )annotationsN)AsyncGeneratorAsyncIterator	AwaitableCallable
Collection	CoroutineIterableSequence)AbstractContextManager)	dataclass)IOBase)PathLike)Signals)AddressFamily
SocketKind)TracebackType)	IOTYPE_CHECKINGAnyGenericNoReturn	ParamSpecTypeVarcastoverload)ErrorOutcomeValue)current_root_taskcurrent_tasknotify_closingwait_readablewait_writable)
SocketType)run_sync   )CapacityLimiterStatisticsEventStatisticsLockStatisticsRunFinishedError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)      )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dZed.ddZ	e	j
d/d dZ	ed0d!d"Zed0d#d$Zed0d%d&Zej
d1d'd&ZdS )2r@   Noriginaltrio.CancelScope | Nonekwargsobjectreturnc                 K  
   t | S NrU   __new__)clsrR   rT    r\   O/home/kim/smarthome/.venv/lib/python3.10/site-packages/anyio/_backends/_trio.pyrZ   r   s   
zCancelScope.__new__r   Nonec                 K  s   |p	t jdi || _d S Nr\   )trior@   _CancelScope__original)selfrR   rT   r\   r\   r]   __init__w   s   zCancelScope.__init__c                 C  s   | j   | S rX   )ra   	__enter__rb   r\   r\   r]   rd   z   s   
zCancelScope.__enter__exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Noneboolc                 C     | j |||S rX   )ra   __exit__rb   rf   rh   rj   r\   r\   r]   rn   ~      zCancelScope.__exit__reason
str | Nonec                 C     | j | d S rX   )ra   cancel)rb   rq   r\   r\   r]   rt         zCancelScope.cancelfloatc                 C     | j jS rX   ra   deadlinere   r\   r\   r]   ry         zCancelScope.deadlinevaluec                 C     || j _d S rX   rx   rb   r{   r\   r\   r]   ry         c                 C  rw   rX   )ra   cancel_calledre   r\   r\   r]   r      rz   zCancelScope.cancel_calledc                 C  rw   rX   )ra   cancelled_caughtre   r\   r\   r]   r      rz   zCancelScope.cancelled_caughtc                 C  rw   rX   ra   shieldre   r\   r\   r]   r      rz   zCancelScope.shieldc                 C  r|   rX   r   r}   r\   r\   r]   r      r~   rX   )rR   rS   rT   rU   rV   r@   )rR   rS   rT   r   rV   r^   )rV   r@   rf   rg   rh   ri   rj   rk   rV   rl   )rq   rr   rV   r^   rV   rv   r{   rv   rV   r^   rV   rl   )r{   rl   rV   r^   )__name__
__module____qualname__rZ   rc   rd   rn   rt   propertyry   setterr   r   r   r\   r\   r\   r]   r@   q   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 )#	TaskGrouprV   r^   c                 C  s   d| _ tjdd| _d | _d S )NFT)Zstrict_exception_groups)_activer`   Zopen_nursery_nursery_managercancel_scopere   r\   r\   r]   rc      s   
zTaskGroup.__init__c                   s,   d| _ | j I d H | _t| jj| _| S )NT)r   r   
__aenter___nurseryr@   r   re   r\   r\   r]   r      s
   zTaskGroup.__aenter__rf   rg   rh   ri   rj   rk   rl   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   rL   splitr`   	Cancelled_create)rb   rf   rh   rj   excr\   r\   r]   r      s   zTaskGroup.__aexit__N)namefunc,Callable[[Unpack[PosArgsT]], Awaitable[Any]]argsUnpack[PosArgsT]r   rU   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rb   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.startrV   r^   )rV   r   r   )r   r   r   r   r   rU   rV   r^   )r   r   r   rU   r   rU   rV   r   )r   r   r   rc   r   r   r   r   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 | NonerV   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rX   )r   Zreceive_somer`   r1   	__cause__r/   r   r2   rb   r   datar   r\   r\   r]   receive   s   zReceiveStreamWrapper.receiver^   c                      | j  I d H  d S rX   r   aclosere   r\   r\   r]   r         zReceiveStreamWrapper.acloserX   )r   r   rV   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   rV   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 rX   )r   Zsend_allr`   r1   r   r/   rb   r   r   r\   r\   r]   send   s   zSendStreamWrapper.sendc                   r   rX   r   re   r\   r\   r]   r     r   zSendStreamWrapper.acloseNr   r   rV   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_stderrrV   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killre   r\   r\   r]   r     s*   
zProcess.acloseintc                      | j  I d H S rX   )r   r   re   r\   r\   r]   r        zProcess.waitc                 C     | j   d S rX   )r   	terminatere   r\   r\   r]   r   "     zProcess.terminatec                 C  r   rX   )r   r   re   r\   r\   r]   r   %  r   zProcess.killsignalr   c                 C  rs   rX   )r   send_signal)rb   r   r\   r\   r]   r   (  ru   zProcess.send_signalc                 C  rw   rX   )r   pidre   r\   r\   r]   r   +  rz   zProcess.pidr   c                 C  rw   rX   )r   
returncodere   r\   r\   r]   r   /  rz   zProcess.returncodec                 C     | j S rX   )r   re   r\   r\   r]   stdin3     zProcess.stdinc                 C  r   rX   )r   re   r\   r\   r]   stdout7  r   zProcess.stdoutc                 C  r   rX   )r   re   r\   r\   r]   stderr;  r   zProcess.stderrNr   rV   r   )r   r   rV   r^   rV   r   )rV   r   )rV   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 )_ProcessPoolShutdownInstrumentrV   r^   c                   s   t    d S rX   )super	after_runre   	__class__r\   r]   r   A  r   z(_ProcessPoolShutdownInstrument.after_runr   )r   r   r   r   __classcell__r\   r\   r   r]   r   @  s    r   &current_default_worker_process_limiterztrio.lowlevel.RunVarworkersset[abc.Process]rV   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   )	r`   sleepmathinfr   r   r   r@   r   )r   processr\   r\   r]   _shutdown_process_poolJ  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TrioSocketTyperV   r^   c                 C  s   || _ d| _d S NF)_trio_socket_closedrb   r   r\   r\   r]   rc   ]  s   
z_TrioSocketMixin.__init__c                 C  s    | j rt| j dk rtd S Nr   )r   r1   r   filenor/   re   r\   r\   r]   _check_closeda  s
   z_TrioSocketMixin._check_closedsocket.socketc                 C  rw   rX   )r   _sockre   r\   r\   r]   _raw_socketg  rz   z_TrioSocketMixin._raw_socketc                   s(   | j  dkrd| _| j   d S d S )Nr   T)r   r   r   closere   r\   r\   r]   r   k  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   )
isinstancer`   r1   r   r   r   OSErrorr/   rb   r   r\   r\   r]   _convert_socket_errorp  s   
z&_TrioSocketMixin._convert_socket_errorNr   r   rV   r^   r   )rV   r   )r   r   rV   r   )	r   r   r   rc   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   rV   r^   c                   $   t  | td| _td| _d S Nreading from
writing tor   rc   r;   _receive_guard_send_guardr   r   r\   r]   rc   |     
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 rX   )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 rX   )r   
memoryviewr   r   r   r   )rb   r   viewZ
bytes_sentr   r\   r\   r]   r     s   "zSocketStream.sendc                   s   | j tj d S rX   )r   shutdownsocketSHUT_WRre   r\   r\   r]   send_eof  s   zSocketStream.send_eofr   )r   )r   r   rV   r   r   r   )r   r   r   rc   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   maxfdsrV   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arrayr`   lowlevel
checkpointr   r   recvmsgr  CMSG_LENitemsizer   r   r2   
SOL_SOCKET
SCM_RIGHTSr   	frombyteslenlist)rb   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  r`   r  r  r   r   sendmsgr  r  r  r   r   )rb   r  r  ZfilenosfdZfdarrayr   r\   r\   r]   send_fds  sB   



"zUNIXSocketStream.send_fdsN)r  r   r  r   rV   r	  )r  r   r  r   rV   r^   )r   r   r   r  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   rc   r`   r  from_stdlib_socketr;   _accept_guardrb   r'  r   r\   r]   rc        zTCPSocketListener.__init__rV   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   )
r,  r   acceptr   r   
setsockoptr  IPPROTO_TCPTCP_NODELAYr   rb   r   Z_addrr   r\   r\   r]   r0    s   zTCPSocketListener.acceptr'  r   )rV   r   r   r   r   rc   r0  r   r\   r\   r   r]   r&        r&  c                      r%  )UNIXSocketListenerr'  r   c                   r(  r)  r*  r-  r   r\   r]   rc     r.  zUNIXSocketListener.__init__rV   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 rX   )r,  r   r0  r   r   r  r4  r\   r\   r]   r0    s    

zUNIXSocketListener.acceptr5  )rV   r  r6  r\   r\   r   r]   r8    r7  r8  c                      s2   e Zd Zd fddZddd	ZdddZ  ZS )	UDPSocketr   r   rV   r^   c                   r   r   r   r   r   r\   r]   rc     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   rb   r   r  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 rX   r   r   sendtor   r   r   r\   r\   r]   r        "zUDPSocket.sendr   )rV   r:  )r   rB   rV   r^   r   r   r   rc   r   r   r   r\   r\   r   r]   r9        
r9  c                      2   e Zd Zd fddZddd	ZdddZ  ZS )ConnectedUDPSocketr   r   rV   r^   c                   r   r   r   r   r   r\   r]   rc     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 r;  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 rX   r   r   r   r   r   r   r\   r\   r]   r   !  rA  zConnectedUDPSocket.sendr   rV   r   r   rB  r\   r\   r   r]   rE    s    
rE  c                      rD  )UNIXDatagramSocketr   r   rV   r^   c                   r   r   r   r   r   r\   r]   rc   *  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 r;  )r   r   r<  r   r   r=  r\   r\   r]   r   /  s   "zUNIXDatagramSocket.receiver   c                   r>  rX   r?  r   r\   r\   r]   r   7  rA  zUNIXDatagramSocket.sendr   )rV   rC   )r   rC   rV   r^   rB  r\   r\   r   r]   rL  )  rC  rL  c                      rD  )ConnectedUNIXDatagramSocketr   r   rV   r^   c                   r   r   r   r   r   r\   r]   rc   B  r   z$ConnectedUNIXDatagramSocket.__init__r   c                   rF  r;  rG  r   r\   r\   r]   r   G  rH  z#ConnectedUNIXDatagramSocket.receiver   c                   rI  rX   rJ  r   r\   r\   r]   r   N  rA  z ConnectedUNIXDatagramSocket.sendr   rK  r   rB  r\   r\   r   r]   rM  ?  s    
rM  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   rV   c                 C  rW   rX   rY   r[   r\   r\   r]   rZ   \     
zEvent.__new__r^   c                 C  s   t  | _d S rX   )r`   r8   _Event__originalre   r\   r\   r]   rc   _  r   zEvent.__init__rl   c                 C  
   | j  S rX   )rP  is_setre   r\   r\   r]   rR  b  rO  zEvent.is_setc                   r   rX   )rP  r   re   r\   r\   r]   r   e  r   z
Event.waitr(   c                 C  s   | j  }t|jdS )N)tasks_waiting)rP  
statisticsr(   rS  rb   orig_statisticsr\   r\   r]   rT  h  s   
zEvent.statisticsc                 C  r   rX   )rP  setre   r\   r\   r]   rW  l  r   z	Event.setN)rV   r8   r   r   )rV   r(   )	r   r   r   rZ   rc   rR  r   rT  rW  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_acquirerY  rl   rV   c                C  rW   rX   rY   r[   rY  r\   r\   r]   rZ   q  rO  zLock.__new__r^   c                C  s   || _ t | _d S rX   )_fast_acquirer`   r:   _Lock__original)rb   rY  r\   r\   r]   rc   t  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_msgx  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 rX   )r[  r\  acquirer   r]  r`   r  checkpoint_if_cancelledacquire_nowaitr,   _lotparkr   r\   r\   r]   r^  }  s(   

zLock.acquirec              
   C  sJ   z| j   W d S  tjy   td  ty$ } z| |  d }~ww rX   )r\  r`  r`   r,   r   r]  r   r\   r\   r]   r`    s   
zLock.acquire_nowaitc                 C  rQ  rX   )r\  lockedre   r\   r\   r]   rc    rO  zLock.lockedc                 C  r   rX   )r\  releasere   r\   r\   r]   rd    r   zLock.releaser)   c                 C  s.   | j  }|jrt|jnd }t|j||jS rX   )r\  rT  ownerTrioTaskInfor)   rc  rS  )rb   rV  re  r\   r\   r]   rT    s
   

zLock.statisticsNrY  rl   rV   r:   )rY  rl   rV   r^   )r   r   rV   r^   r   r   )rV   r)   )r   r   r   rZ   rc   staticmethodr]  r^  r`  rc  rd  rT  r\   r\   r\   r]   r:   p  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_valuerY  initial_valuer   rj  r   rY  rl   rV   c                C  rW   rX   rY   r[   rk  rj  rY  r\   r\   r]   rZ     s   
zSemaphore.__new__r^   c                  s&   t  j|||d tj||d| _d S )Nri  )rj  )r   rc   r`   r>   _Semaphore__original)rb   rk  rj  rY  r   r\   r]   rc     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 rX   )
r[  rm  r^  r`   r  r_  r`  r,   ra  rb  re   r\   r\   r]   r^    s   zSemaphore.acquirec                 C  s(   z| j   W d S  tjy   td w rX   )rm  r`  r`   r,   re   r\   r\   r]   r`    s
   zSemaphore.acquire_nowaitc                 C  rw   rX   )rm  rj  re   r\   r\   r]   rj    rz   zSemaphore.max_valuec                 C  rw   rX   )rm  r{   re   r\   r\   r]   r{     rz   zSemaphore.valuec                 C  r   rX   )rm  rd  re   r\   r\   r]   rd    r   zSemaphore.releaser<   c                 C  s   | j  }t|jS rX   )rm  rT  r<   rS  rU  r\   r\   r]   rT    s   

zSemaphore.statistics)rk  r   rj  r   rY  rl   rV   r>   )rk  r   rj  r   rY  rl   rV   r^   r   r   r   )rV   r<   )r   r   r   rZ   rc   r^  r`  r   rj  r{   rd  rT  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rR   total_tokensfloat | NonerR   trio.CapacityLimiter | NonerV   c                C  rW   rX   rY   )r[   ro  rR   r\   r\   r]   rZ     s   
zCapacityLimiter.__new__r^   c                C  s.   |d ur	|| _ d S |d usJ t|| _ d S rX   )_CapacityLimiter__originalr`   r6   )rb   ro  rR   r\   r\   r]   rc     s   
zCapacityLimiter.__init__c                   r   rX   )rr  r   re   r\   r\   r]   r     r   zCapacityLimiter.__aenter__rf   rg   rh   ri   rj   rk   c                   s   | j |||I d H  d S rX   )rr  r   ro   r\   r\   r]   r     s   zCapacityLimiter.__aexit__rv   c                 C  rw   rX   rr  ro  re   r\   r\   r]   ro    rz   zCapacityLimiter.total_tokensr{   c                 C  r|   rX   rs  r}   r\   r\   r]   ro    r~   r   c                 C  rw   rX   )rr  borrowed_tokensre   r\   r\   r]   rt    rz   zCapacityLimiter.borrowed_tokensc                 C  rw   rX   )rr  available_tokensre   r\   r\   r]   ru  
  rz   z CapacityLimiter.available_tokensc                 C  r   rX   )rr  r`  re   r\   r\   r]   r`    r   zCapacityLimiter.acquire_nowaitborrowerrU   c                 C  rs   rX   )rr  acquire_on_behalf_of_nowaitrb   rv  r\   r\   r]   rw    ru   z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   r   rX   )rr  r^  re   r\   r\   r]   r^    r   zCapacityLimiter.acquirec                   s   | j |I d H  d S rX   )rr  acquire_on_behalf_ofrx  r\   r\   r]   ry    s   z$CapacityLimiter.acquire_on_behalf_ofc                 C  rQ  rX   )rr  rd  re   r\   r\   r]   rd    rO  zCapacityLimiter.releasec                 C  s   | j |S rX   )rr  release_on_behalf_ofrx  r\   r\   r]   rz    s   z$CapacityLimiter.release_on_behalf_ofr'   c                 C  s&   | j  }t|j|jt|j|jdS )N)rt  ro  	borrowersrS  )rr  rT  r'   rt  ro  tupler{  rS  )rb   origr\   r\   r]   rT     s   
zCapacityLimiter.statisticsrX   )ro  rp  rR   rq  rV   r6   )ro  rp  rR   rq  rV   r^   r   )rf   rg   rh   ri   rj   rk   rV   r^   r   r   r   )rv  rU   rV   r^   )rV   r'   )r   r   r   rZ   rc   r   r   r   ro  r   rt  ru  r`  rw  r^  ry  rd  rz  rT  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 rX   )_signals)rb   r  r\   r\   r]   rc   5  rO  z_SignalReceiver.__init__rV   c                 C  s   t j| j | _| j | _| S rX   )r`   open_signal_receiverr  _cmrd   r  re   r\   r\   r]   rd   8  s   z_SignalReceiver.__enter__rf   rg   rh   ri   rj   rk   bool | Nonec                 C  rm   rX   )r  rn   ro   r\   r\   r]   rn   =  rp   z_SignalReceiver.__exit__c                 C  s   | S rX   r\   re   r\   r\   r]   	__aiter__E  s   z_SignalReceiver.__aiter__r   c                   s   | j  I d H }t|S rX   )r  	__anext__r   )rb   signumr\   r\   r]   r  H  s   z_SignalReceiver.__anext__N)r  r  )rV   r  )rf   rg   rh   ri   rj   rk   rV   r  )rV   r   )	r   r   r   r   rc   rd   rn   r  r  r\   r\   r\   r]   r  2  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   rV   r^   c                 K  s$   ddl m} | | _d | _|| _d S )Nr   )Queue)queuer  _call_queue_send_stream_options)rb   r  r  r\   r\   r]   rc   S  s   
zTestRunner.__init__rf   rg   rh   ri   rj   types.TracebackType | Nonec                 C  s<   | j r| j   | j d ur| j   | j d usd S d S d S rX   )r  r   r  getro   r\   r\   r]   rn   Z  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 r/  )r4   r  r   r!  r   r   )rb   Zreceive_streamcorooutcome_holderretvalr   r\   r\   r]   _run_tests_and_fixturese  s   "z"TestRunner._run_tests_and_fixturesoutcomerU   c                 C  s
   d | _ d S rX   )r  )rb   r  r\   r\   r]   _main_task_finishedp  rO  zTestRunner._main_task_finishedr    Callable[P, Awaitable[T_Retval]]r   P.argsrT   P.kwargsrN   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)Zrun_sync_soon_threadsafeZdone_callbackr   )r  r`   r  Zstart_guest_runr  r  putr  r  r  Zsend_nowaitunwrap)rb   r   r   rT   r  r\   r\   r]   _call_in_runner_tasks  s$   


zTestRunner._call_in_runner_taskfixture_func,Callable[..., AsyncGenerator[T_Retval, Any]]dict[str, Any]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   )rb   r  rT   ZasyncgenZ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 rX   r  )rb   r  rT   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 rX   r  )rb   r  rT   r\   r\   r]   run_test  s   zTestRunner.run_testN)r  r   rV   r^   )rf   rg   rh   ri   rj   r  rV   r^   r   )r  rU   rV   r^   )r   r  r   r  rT   r  rV   rN   )r  r  rT   r  rV   r  )r  r  rT   r  rV   rN   )r  r  rT   r  rV   r^   )r   r   r   rc   rn   r  r  r  r  r  r  r\   r\   r\   r]   r  R  s    






r  c                      r%  )rf  tasktrio.lowlevel.Taskc                   sH   d }|j r|j jrt|j j}t t|||j|j t|| _	d S rX   )
Zparent_nurseryZparent_taskidr   rc   r   r  weakrefproxy_task)rb   r  Z	parent_idr   r\   r]   rc     s
   zTrioTaskInfo.__init__rV   rl   c                 C  s"   z| j jjW S  ty   Y dS w r   )r  Z_cancel_statusZeffectively_cancelledReferenceErrorre   r\   r\   r]   has_pending_cancellation  s
   z%TrioTaskInfo.has_pending_cancellation)r  r  r   )r   r   r   rc   r  r   r\   r\   r   r]   rf    s    rf  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ddUdVZeddYdZZe	3dddadbZeddfdgZeddkdlZeddmdnZeddtduZee ddydzZ!ee dd|dzZ!edddz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Z/edddZ0edddZ1edddZ2edddZ3d3S )TrioBackendr   1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r   tuple[Unpack[PosArgsT]]rT   r  r  rV   rN   c                 C  s   t j|g|R  S rX   )r`   run)r[   r   r   rT   r  r\   r\   r]   r    s   zTrioBackend.runrU   c                 C  s
   t j S rX   )r`   r  Zcurrent_trio_tokenrN  r\   r\   r]   current_token     
zTrioBackend.current_tokenrv   c                 C     t  S rX   )r`   current_timerN  r\   r\   r]   r    rz   zTrioBackend.current_timetype[BaseException]c                 C  s   t jS rX   )r`   r   rN  r\   r\   r]   cancelled_exception_class  r   z%TrioBackend.cancelled_exception_classr^   c                      t j I d H  d S rX   )r`   r  r  rN  r\   r\   r]   r       zTrioBackend.checkpointc                   r  rX   )r`   r  r_  rN  r\   r\   r]   r_    r  z#TrioBackend.checkpoint_if_cancelledc                   r  rX   )r`   r  cancel_shielded_checkpointrN  r\   r\   r]   r    r  z&TrioBackend.cancel_shielded_checkpointdelayc                   s   t |I d H  d S rX   )r`   r   )r[   r  r\   r\   r]   r     r  zTrioBackend.sleepFry   r   ry   r   rl   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  rX   )r`   current_effective_deadlinerN  r\   r\   r]   r    rz   z&TrioBackend.current_effective_deadlineabc.TaskGroupc                 C     t  S rX   )r   rN  r\   r\   r]   create_task_group  r   zTrioBackend.create_task_group	abc.Eventc                 C  r  rX   r7   rN  r\   r\   r]   create_event  r   zTrioBackend.create_eventrY  r:   c                C  s
   t |dS )NrX  r9   rZ  r\   r\   r]   create_lock  r  zTrioBackend.create_lockNri  rk  r   rj  r   abc.Semaphorec                C  s   t |||dS )Nri  r=   rl  r\   r\   r]   create_semaphore  s   zTrioBackend.create_semaphorero  r6   c                 C     t |S rX   r5   )r[   ro  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 )NrV   rN   c                     s6   t t   W  d    S 1 sw   Y  d S rX   )r.   r  r\   r   r   tokenr\   r]   wrapper  s   $z6TrioBackend.run_sync_in_worker_thread.<locals>.wrapper)r  r  )rV   rN   )r  r  r%   r   r`   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 rX   )r`   from_threadcheck_cancelledrN  r\   r\   r]   r       zTrioBackend.check_cancelledr  c                 C  >   t d|}ztjj|g|R d|iW S  tjy   td w Nztrio.lowlevel.TrioToken | None
trio_token)r   r`   r  r  r*   r[   r   r   r  r  r\   r\   r]   run_async_from_thread     
z!TrioBackend.run_async_from_threadc                 C  r  r  )r   r`   r  r%   r*   r  r\   r\   r]   run_sync_from_thread+  r  z TrioBackend.run_sync_from_thread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   rV   strc                 S  s"   t | }t|tr|S t |S rX   )osfspathr   r  fsdecode)r   Z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   rV   r  )r   r  r   r   r`   r  open_processr   r   r   r   r   r   )
r[   r  r   r   r   rT   r   Zstdin_streamZstdout_streamZstderr_streamr\   r  r]   r  8  s6   

		zTrioBackend.open_processr   r   c                 C  s   t jt| d S rX   )r`   r  Zspawn_system_taskr   )r[   r   r\   r\   r]   #setup_process_pool_exit_at_shutdowna  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_INETr`   r1  r2  r3  bindconnectr   r   r   )r[   r  r  r  familyr   r\   r\   r]   connect_tcpe  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 rX   )r`   r  AF_UNIXr  r   r   r  )r[   r  r   r\   r\   r]   connect_unixw  s   zTrioBackend.connect_unixsockr   abc.SocketListenerc                 C  r  rX   r&  r[   r   r\   r\   r]   create_tcp_listener  rz   zTrioBackend.create_tcp_listenerc                 C  r  rX   )r8  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   )
r`   r  
SOCK_DGRAMr1  r  SO_REUSEPORTr  r  rE  r9  )r[   r  r  r  r  r   r\   r\   r]   create_udp_socket  s   zTrioBackend.create_udp_socketr'  remote_pathabc.UNIXDatagramSocketc                      d S rX   r\   r[   r'  r  r\   r\   r]   create_unix_datagram_socket     z'TrioBackend.create_unix_datagram_socketabc.ConnectedUNIXDatagramSocketc                   r  rX   r\   r  r\   r\   r]   r    r  str | bytes | None8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocketc                   s2   t j|}|r||I d H  t|S t|S rX   )r`   r  r+  r  rM  rL  )r[   r'  r  r   r\   r\   r]   r    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 rX   )r`   r  getaddrinfo)r[   r  r  r  r
  r  r  r\   r\   r]   r    s   zTrioBackend.getaddrinfosockaddrrA   tuple[str, str]c                   s   t j||I d H S rX   )r`   r  getnameinfo)r[   r  r  r\   r\   r]   r     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"   r`   r1   with_traceback__traceback__r0   r[   r!  r   r\   r\   r]   r"        
zTrioBackend.wait_readablec              
     r"  )Nr   )r#   r`   r1   r#  r$  r0   r%  r\   r\   r]   r#     r&  zTrioBackend.wait_writablec                 C  s   t | d S rX   )r!   )r[   r!  r\   r\   r]   r!     r~   zTrioBackend.notify_closingc                   s
   t |S rX   r  r  r\   r\   r]   wrap_listener_socket  s   z TrioBackend.wrap_listener_socketc                      t j|}t|S rX   )r`   r  r+  r   r[   r   Z	trio_sockr\   r\   r]   wrap_stream_socket     zTrioBackend.wrap_stream_socketr  c                   r(  rX   )r`   r  r+  r  r)  r\   r\   r]   wrap_unix_stream_socket  r+  z#TrioBackend.wrap_unix_stream_socketr9  c                   r(  rX   )r`   r  r+  r9  r)  r\   r\   r]   wrap_udp_socket  r+  zTrioBackend.wrap_udp_socketrE  c                   r(  rX   )r`   r  r+  rE  r)  r\   r\   r]   wrap_connected_udp_socket  r+  z%TrioBackend.wrap_connected_udp_socketrL  c                   r(  rX   )r`   r  r+  rL  r)  r\   r\   r]   wrap_unix_datagram_socket  r+  z%TrioBackend.wrap_unix_datagram_socketrM  c                   r(  rX   )r`   r  r+  rM  r)  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 )Nrn  )r~  r  LookupErrorr6   r`   Z	to_threadcurrent_default_thread_limiterrW  )r[   r  r\   r\   r]   r2    s   

z*TrioBackend.current_default_thread_limiterr  r   .AbstractContextManager[AsyncIterator[Signals]]c                 G  r  rX   )r  )r[   r  r\   r\   r]   r    s   z TrioBackend.open_signal_receiverr+   c                 C  s   t  }t|S rX   )r    rf  )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 rX   )r   rf  Zchild_nurseriesZchild_tasksr!  extend)r[   Z	root_taskZ
task_infosZ	nurseriesZnew_nurseriesZnurseryr  r\   r\   r]   get_running_tasks#  s   

	zTrioBackend.get_running_tasksc                   s   ddl m} | I d H  d S )Nr   )wait_all_tasks_blocked)Ztrio.testingr8  )r[   r8  r\   r\   r]   r8  4  s   z"TrioBackend.wait_all_tasks_blockedr  c                 C  s   t di |S r_   )r  )r[   r  r\   r\   r]   create_test_runner:  r  zTrioBackend.create_test_runner)
r   r  r   r  rT   r  r  r  rV   rN   )rV   rU   r   )rV   r  r   )r  rv   rV   r^   )ry   rv   r   rl   rV   r  )rV   r  )rV   r  rg  )rk  r   rj  r   rY  rl   rV   r  )ro  rv   rV   r6   )FN)
r   r  r   r  r  rl   r  r  rV   rN   )r   r  r   r  r  rU   rV   rN   )r   r  r   r  r  rU   rV   rN   )r  r  r   r  r   r  r   r  rT   r   rV   r   r   r   rV   r^   rX   )r  r  r  r   r  r  rV   r   )r  r  rV   r  )r   r   rV   r  )
r  r  r  r  r  r  r  rl   rV   r	  )r'  r   r  r^   rV   r  )r'  r   r  r  rV   r  )r'  r   r  r  rV   r  )r  r  r  r  r  r  r
  r  r  r   r  r   rV   r  )r   )r  rA   r  r   rV   r  )r!  rG   rV   r^   )r   r   rV   r   )r   r   rV   r  )r   r   rV   r9  )r   r   rV   rE  )r   r   rV   rL  )r   r   rV   rM  )rV   r6   )r  r   rV   r3  )rV   r+   )rV   r5  )r  r  rV   r  )4r   r   r   classmethodr  r  r  r  r  r_  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r   r"   r#   r!   r'  r*  r,  r-  r.  r/  r0  r2  r  r4  r7  r8  r9  r\   r\   r\   r]   r    s    		(

r  r:  )
__future__r   r  r   r  r  systypesr  collections.abcr   r   r   r   r   r   r	   r
   
contextlibr   dataclassesr   ior   r   r   r   r   r   r   typingr   r   r   r   r   r   r   r   r   Ztrio.from_threadr`   Ztrio.lowlevelr  r   r   r   r   r    r!   r"   r#   Ztrio.socketr$   r   Ztrio.to_threadr%    r'   r(   r)   r*   r+   r,   r-   Z_core._eventloopr.   Z_core._exceptionsr/   r0   r1   r2   Z_core._socketsr3   Z_core._streamsr4   Z_core._synchronizationr6   ZBaseCapacityLimiterr8   Z	BaseEventr:   ZBaseLockr;   r<   r>   ZBaseSemaphoreZ_core._tasksr@   ZBaseCancelScoperA   rB   rC   Zabc._eventlooprD   rE   Zstreams.memoryrF   Z	_typeshedrG   version_inforJ   rK   ZexceptiongrouprL   Ztyping_extensionsrM   rN   r  rO   rP   rQ   r  ZRunVarr   ZByteReceiveStreamr   ZByteSendStreamr   r   Z
Instrumentr   r   r   r   r   r   r  ZSocketListenerr&  r8  r9  rE  rL  rM  r~  r  r  rf  r  Zbackend_classr\   r\   r\   r]   <module>   s    (
,$	6;8
!C

86L X   