a
    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$rHd d!ldmeZe ejfd"krbd d#l"mgZg nd d#lhmgZg ejfd$krd 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<< d>d?d@dAdBZG dCdD dDe&ep ZG dEdF dFeeBjZG dGdH dHeeBjZG dIdJ dJeeBjZG dKdL dLeeBjZG dMdN dNee\ eBjZG dOdP dPee\ eBjZG dQdR dReeo eBjZG dSdT dTeeo eBjZG dUdV dVeRZQG dWdX dXeTZSG dYdZ dZeXZWG d[d\ d\ePZOetd]Zd=ed]< G d^d_ d_ZG d`da daeBjZG dbdc dce@ZG ddde dee`ZeZdS )f    )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 dddZd$ddddd	d
Zd dddZdddddddZddddZeddddZ	e	j
dddddZ	eddddZeddddZeddd d!Zej
dddd"d!ZdS )%r@   Nztrio.CancelScope | Noneobject)originalkwargsreturnc                 K  s
   t | S NrT   __new__)clsrU   rV    r\   Q/var/www/html/assistant/venv/lib/python3.9/site-packages/anyio/_backends/_trio.pyrZ   w   s    zCancelScope.__new__r   Nonec                 K  s   |pt jf i || _d S rX   )trior@   _CancelScope__original)selfrU   rV   r\   r\   r]   __init__|   s    zCancelScope.__init__rW   c                 C  s   | j   | S rX   )r`   	__enter__ra   r\   r\   r]   rd      s    
zCancelScope.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Noneboolexc_typeexc_valexc_tbrW   c                 C  s   | j |||S rX   )r`   __exit__ra   rk   rl   rm   r\   r\   r]   rn      s    zCancelScope.__exit__c                 C  s   | j   d S rX   )r`   cancelre   r\   r\   r]   rp      s    zCancelScope.cancelfloatc                 C  s   | j jS rX   r`   deadlinere   r\   r\   r]   rs      s    zCancelScope.deadlinevaluerW   c                 C  s   || j _d S rX   rr   ra   ru   r\   r\   r]   rs      s    c                 C  s   | j jS rX   )r`   cancel_calledre   r\   r\   r]   rw      s    zCancelScope.cancel_calledc                 C  s   | j jS rX   )r`   cancelled_caughtre   r\   r\   r]   rx      s    zCancelScope.cancelled_caughtc                 C  s   | j jS rX   r`   shieldre   r\   r\   r]   rz      s    zCancelScope.shieldc                 C  s   || j _d S rX   ry   rv   r\   r\   r]   rz      s    )N)N)__name__
__module____qualname__rZ   rb   rd   rn   rp   propertyrs   setterrw   rx   rz   r\   r\   r\   r]   r@   v   s$    r@   c                   @  sp   e Zd ZddddZd dddZddd	d
dddZdddddddddZdddddddddZdS )	TaskGroupr^   rc   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]   rb      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   c              
     s   zvz$| j |||I d H W W ~~d| _S  tyh } z*|tjd sRtj | W Y d }~n
d }~0 0 W ~~d| _n~~d| _0 d S )NF   )r   	__aexit__r   rN   splitr_   	Cancelled_create)ra   rk   rl   rm   excr\   r\   r]   r      s    zTaskGroup.__aexit__Nnamez,Callable[[Unpack[PosArgsT]], Awaitable[Any]]zUnpack[PosArgsT]rT   )funcargsr   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ra   r   r   r   r\   r\   r]   r      s
    zTaskGroup.start_soonzCallable[..., Awaitable[Any]]r   c                  s.   | 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)r{   r|   r}   rb   r   r   r   r   r\   r\   r\   r]   r      s   r   c                      sH   e Zd Zd dddZdd fddZddd	d
dddddZ  ZS )BlockingPortalrc   c                 C  s
   t | S rX   rY   r[   r\   r\   r]   rZ      s    zBlockingPortal.__new__r^   c                   s   t    tj | _d S rX   )superrb   r_   lowlevelcurrent_trio_token_tokenre   	__class__r\   r]   rb      s    
zBlockingPortal.__init__z<Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]tuple[Unpack[PosArgsT]]dict[str, Any]rT   zFuture[T_Retval])r   r   rV   r   futurerW   c              	   C  s.   t jjt| jj|d| j||||| jd d S )Nr   )Z
trio_token)r_   from_threadr&   r   Z_task_groupr   Z
_call_funcr   )ra   r   r   rV   r   r   r\   r\   r]   _spawn_task_from_thread   s    z&BlockingPortal._spawn_task_from_thread)r{   r|   r}   rZ   rb   r   __classcell__r\   r\   r   r]   r      s   r   F)eqc                   @  s6   e Zd ZU ded< ddddddZd	d
ddZdS )ReceiveStreamWrapperztrio.abc.ReceiveStream_streamN
int | Nonebytes	max_bytesrW   c              
     s   z| j |I d H }W nZ tjyD } zt|jW Y d }~n6d }~0  tjyp } zt|jW Y d }~n
d }~0 0 |r~t|S td S rX   )r   Zreceive_somer_   r1   	__cause__r/   r   r2   ra   r   datar   r\   r\   r]   receive  s    zReceiveStreamWrapper.receiver^   rc   c                   s   | j  I d H  d S rX   r   aclosere   r\   r\   r]   r     s    zReceiveStreamWrapper.aclose)N)r{   r|   r}   __annotations__r   r   r\   r\   r\   r]   r     s   
r   c                   @  s4   e Zd ZU ded< dddddZddd	d
ZdS )SendStreamWrapperztrio.abc.SendStreamr   r   r^   itemrW   c              
     sv   z| j |I d H  W nZ tjyD } zt|jW Y d }~n6d }~0  tjyp } zt|jW Y d }~n
d }~0 0 d S rX   )r   Zsend_allr_   r1   r   r/   ra   r   r   r\   r\   r]   send   s    zSendStreamWrapper.sendrc   c                   s   | j  I d H  d S rX   r   re   r\   r\   r]   r   (  s    zSendStreamWrapper.acloseN)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
dZdd	ddZdd	ddZdd	ddZdddddZe	dd	ddZ
e	dd	ddZe	dd	ddZe	dd	ddZe	dd	d d!Zd"S )#Processztrio.Process_processzabc.ByteSendStream | None_stdinzabc.ByteReceiveStream | None_stdout_stderrr^   rc   c                   s   t ddR | jr"| j I d H  | jr8| j I d H  | jrN| j I d H  W d    n1 sb0    Y  z|  I d H  W nT ty   |   t dd |  I d H  W d    n1 s0    Y   Y n0 d S NT)rz   )r@   r   r   r   r   waitBaseExceptionkillre   r\   r\   r]   r   3  s    .,zProcess.acloseintc                   s   | j  I d H S rX   )r   r   re   r\   r\   r]   r   D  s    zProcess.waitc                 C  s   | j   d S rX   )r   	terminatere   r\   r\   r]   r   G  s    zProcess.terminatec                 C  s   | j   d S rX   )r   r   re   r\   r\   r]   r   J  s    zProcess.killr   )signalrW   c                 C  s   | j | d S rX   )r   send_signal)ra   r   r\   r\   r]   r   M  s    zProcess.send_signalc                 C  s   | j jS rX   )r   pidre   r\   r\   r]   r   P  s    zProcess.pidr   c                 C  s   | j jS rX   )r   
returncodere   r\   r\   r]   r   T  s    zProcess.returncodec                 C  s   | j S rX   )r   re   r\   r\   r]   stdinX  s    zProcess.stdinc                 C  s   | j S rX   )r   re   r\   r\   r]   stdout\  s    zProcess.stdoutc                 C  s   | j S rX   )r   re   r\   r\   r]   stderr`  s    zProcess.stderrN)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d fddZ  ZS )_ProcessPoolShutdownInstrumentr^   rc   c                   s   t    d S rX   )r   	after_runre   r   r\   r]   r   f  s    z(_ProcessPoolShutdownInstrument.after_run)r{   r|   r}   r   r   r\   r\   r   r]   r   e  s   r   &current_default_worker_process_limiterztrio.lowlevel.RunVarset[abc.Process]r^   workersrW   c                   s   zt tjI d H  W nr t jy   | D ]}|jd u r*|  q*tdd( | D ]}| I d H  qRW d    n1 sz0    Y  Y n0 d S r   )	r_   sleepmathinfr   r   r   r@   r   )r   processr\   r\   r]   _shutdown_process_poolo  s    

r   c                   @  sZ   e Zd ZdddddZddddZed	dd
dZddddZdddddZdS )_TrioSocketMixinTrioSocketTyper^   trio_socketrW   c                 C  s   || _ d| _d S NF)_trio_socket_closedra   r   r\   r\   r]   rb     s    z_TrioSocketMixin.__init__rc   c                 C  s    | j r
t| j dk rtd S Nr   )r   r1   r   filenor/   re   r\   r\   r]   _check_closed  s    z_TrioSocketMixin._check_closedsocket.socketc                 C  s   | j jS rX   )r   _sockre   r\   r\   r]   _raw_socket  s    z_TrioSocketMixin._raw_socketc                   s"   | j  dkrd| _| j   d S )Nr   T)r   r   r   closere   r\   r\   r]   r     s    z_TrioSocketMixin.acloser   r   r   rW   c                 C  sJ   t |tjrt|n2| j dk r0| jr0td nt |trBt|n|d S r   )
isinstancer_   r1   r   r   r   OSErrorr/   ra   r   r\   r\   r]   _convert_socket_error  s    
z&_TrioSocketMixin._convert_socket_errorN)	r{   r|   r}   rb   r   r~   r   r   r   r\   r\   r\   r]   r     s   r   c                      sT   e Zd Zddd fddZdddd	d
dZdddddZddddZ  ZS )SocketStreamr   r^   r   c                   s$   t  | td| _td| _d S Nreading from
writing tor   rb   r;   _receive_guard_send_guardr   r   r\   r]   rb     s    
zSocketStream.__init__   r   r   r   c                   s   | j p z| j|I d H }W n. tyL } z| | W Y d }~n
d }~0 0 |rd|W  d    S tW d    n1 s|0    Y  d S rX   )r   r   recvr   r   r2   r   r\   r\   r]   r     s     zSocketStream.receiver   c                   s   | j p t|}|rhz| j|I d H }W n. tyX } z| | W Y d }~n
d }~0 0 ||d  }qW d    n1 s|0    Y  d S rX   )r   
memoryviewr   r   r   r   )ra   r   viewZ
bytes_sentr   r\   r\   r]   r     s     zSocketStream.sendrc   c                   s   | j tj d S rX   )r   shutdownsocketSHUT_WRre   r\   r\   r]   send_eof  s    zSocketStream.send_eof)r   )r{   r|   r}   rb   r   r   r   r   r\   r\   r   r]   r     s   r   c                   @  s0   e Zd ZddddddZdddd	d
dZdS )UNIXSocketStreamr   ztuple[bytes, list[int]])msglenmaxfdsrW   c                   sR  t |tr|dk rtdt |tr,|dk r4tdtd}tj I d H  | j| z,| j	|t
||j I d H \}}}}W n. ty } z| | W Y d }~qVd }~0 0 |s|stqqVW d    n1 s0    Y  |D ]`\}	}
}|	t
jks|
t
jkr td|d|	 d|
 ||d t|t||j    q|t|fS )	Nr   z%msglen must be a non-negative integerr   z!maxfds must be a positive integeriz.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r   r   
ValueErrorarrayr_   r   
checkpointr   r   recvmsgr   CMSG_LENitemsizer   r   r2   
SOL_SOCKET
SCM_RIGHTSr   	frombyteslenlist)ra   r   r   fdsmessageancdataflagsaddrr   
cmsg_level	cmsg_type	cmsg_datar\   r\   r]   receive_fds  s6    
 "&zUNIXSocketStream.receive_fdsr   zCollection[int | IOBase]r^   )r  r  rW   c                   s   |st d|st dg }|D ]2}t|tr:|| q t|tr ||  q td|}tj	 I d H  | j
l z*| j|gtjtj|fgI d H  W qW qx ty } z| | W Y d }~qxd }~0 0 qxW d    n1 s0    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   )ra   r  r  ZfilenosfdZfdarrayr   r\   r\   r]   send_fds  s2    



zUNIXSocketStream.send_fdsN)r{   r|   r}   r  r  r\   r\   r\   r]   r     s   !r   c                      s0   e Zd Zdd fddZddddZ  ZS )	TCPSocketListenerr   
raw_socketc                   s"   t  tj| td| _d S Nzaccepting connections fromr   rb   r_   r   from_stdlib_socketr;   _accept_guardra   r  r   r\   r]   rb     s    zTCPSocketListener.__init__r   rc   c                   s   | j X z| j I d H \}}W n. tyN } z| | W Y d }~n
d }~0 0 W d    n1 sd0    Y  |tjtjd t	|S Nr   )
r  r   acceptr   r   
setsockoptr   IPPROTO_TCPTCP_NODELAYr   ra   r   Z_addrr   r\   r\   r]   r  	  s    >zTCPSocketListener.acceptr{   r|   r}   rb   r  r   r\   r\   r   r]   r    s   r  c                      s0   e Zd Zdd fddZddddZ  ZS )	UNIXSocketListenerr   r  c                   s"   t  tj| td| _d S r  r  r  r   r\   r]   rb     s    zUNIXSocketListener.__init__r   rc   c                   sv   | j X z| j I d H \}}W n. tyN } z| | W Y d }~n
d }~0 0 W d    n1 sd0    Y  t|S rX   )r  r   r  r   r   r   r  r\   r\   r]   r    s    >zUNIXSocketListener.acceptr   r\   r\   r   r]   r!    s   r!  c                      sB   e Zd Zddd fddZdddd	Zd
ddddZ  ZS )	UDPSocketr   r^   r   c                   s$   t  | td| _td| _d S r   r   r   r   r\   r]   rb   $  s    
zUDPSocket.__init__ztuple[bytes, IPSockAddrType]rc   c                   s   | j r z2| jdI d H \}}|t|fW W  d    S  tyh } z| | W Y d }~n
d }~0 0 W d    n1 s~0    Y  d S Nr   )r   r   recvfromr3   r   r   ra   r   r	  r   r\   r\   r]   r   )  s    zUDPSocket.receiverB   r   c                   sp   | j V z| jj| I d H  W n. tyL } z| | W Y d }~n
d }~0 0 W d    n1 sb0    Y  d S rX   r   r   sendtor   r   r   r\   r\   r]   r   1  s
    zUDPSocket.sendr{   r|   r}   rb   r   r   r   r\   r\   r   r]   r"  #  s   r"  c                      sB   e Zd Zddd fddZdddd	Zddd
ddZ  ZS )ConnectedUDPSocketr   r^   r   c                   s$   t  | td| _td| _d S r   r   r   r   r\   r]   rb   :  s    
zConnectedUDPSocket.__init__r   rc   c                   s|   | j b z"| jdI d H W W  d    S  tyX } z| | W Y d }~n
d }~0 0 W d    n1 sn0    Y  d S r#  r   r   r   r   r   r   r\   r\   r]   r   ?  s
    "zConnectedUDPSocket.receiver   c                   sp   | j V z| j|I d H  W n. tyL } z| | W Y d }~n
d }~0 0 W d    n1 sb0    Y  d S rX   r   r   r   r   r   r   r\   r\   r]   r   F  s
    zConnectedUDPSocket.sendr(  r\   r\   r   r]   r)  9  s   r)  c                      sB   e Zd Zddd fddZdddd	Zddd
ddZ  ZS )UNIXDatagramSocketr   r^   r   c                   s$   t  | td| _td| _d S r   r   r   r   r\   r]   rb   O  s    
zUNIXDatagramSocket.__init__rC   rc   c                   s   | j n z.| jdI d H \}}||fW W  d    S  tyd } z| | W Y d }~n
d }~0 0 W d    n1 sz0    Y  d S r#  )r   r   r$  r   r   r%  r\   r\   r]   r   T  s    zUNIXDatagramSocket.receiver   c                   sp   | j V z| jj| I d H  W n. tyL } z| | W Y d }~n
d }~0 0 W d    n1 sb0    Y  d S rX   r&  r   r\   r\   r]   r   \  s
    zUNIXDatagramSocket.sendr(  r\   r\   r   r]   r,  N  s   r,  c                      sB   e Zd Zddd fddZdddd	Zddd
ddZ  ZS )ConnectedUNIXDatagramSocketr   r^   r   c                   s$   t  | td| _td| _d S r   r   r   r   r\   r]   rb   g  s    
z$ConnectedUNIXDatagramSocket.__init__r   rc   c                   s|   | j b z"| jdI d H W W  d    S  tyX } z| | W Y d }~n
d }~0 0 W d    n1 sn0    Y  d S r#  r*  r   r\   r\   r]   r   l  s
    "z#ConnectedUNIXDatagramSocket.receiver   c                   sp   | j V z| j|I d H  W n. tyL } z| | W Y d }~n
d }~0 0 W d    n1 sb0    Y  d S rX   r+  r   r\   r\   r]   r   s  s
    z ConnectedUNIXDatagramSocket.sendr(  r\   r\   r   r]   r-  d  s   r-  c                   @  s`   e Zd Zd dddZddddZdddd	Zddd
dZddddZddddZdS )r8   rc   c                 C  s
   t | S rX   rY   r   r\   r\   r]   rZ     s    zEvent.__new__r^   c                 C  s   t  | _d S rX   )r_   r8   _Event__originalre   r\   r\   r]   rb     s    zEvent.__init__ri   c                 C  s
   | j  S rX   )r.  is_setre   r\   r\   r]   r/    s    zEvent.is_setc                   s   | j  I d H S rX   )r.  r   re   r\   r\   r]   r     s    z
Event.waitr)   c                 C  s   | j  }t|jdS )N)tasks_waiting)r.  
statisticsr)   r0  ra   orig_statisticsr\   r\   r]   r1    s    
zEvent.statisticsc                 C  s   | j   d S rX   )r.  setre   r\   r\   r]   r4    s    z	Event.setN)	r{   r|   r}   rZ   rb   r/  r   r1  r4  r\   r\   r\   r]   r8     s   r8   c                   @  s   e Zd Zdddd dddZddddddd	Zed
ddddZddddZddddZddddZ	ddddZ
ddddZdS )r:   Ffast_acquireri   r6  rW   c                C  s
   t | S rX   rY   r[   r6  r\   r\   r]   rZ     s    zLock.__new__r^   c                C  s   || _ t | _d S rX   )_fast_acquirer_   r:   _Lock__original)ra   r6  r\   r\   r]   rb     s    zLock.__init__r   r   c                 C  s   | j dkrd| _ 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_msgrc   c              
     s   | j sPz| j I d H  W n0 tyJ } z| |  W Y d }~n
d }~0 0 d S tj I d H  z| j  W nT tj	y   | jj
 I d H  Y n0 ty } z| |  W Y d }~n
d }~0 0 d S rX   )r9  r:  acquirer   r;  r_   r   checkpoint_if_cancelledacquire_nowaitr,   _lotparkr   r\   r\   r]   r<    s    

zLock.acquirec              
   C  s\   z| j   W nH tjy(   td Y n0 tyV } z| |  W Y d }~n
d }~0 0 d S rX   )r:  r>  r_   r,   r   r;  r   r\   r\   r]   r>    s    

zLock.acquire_nowaitc                 C  s
   | j  S rX   )r:  lockedre   r\   r\   r]   rA    s    zLock.lockedc                 C  s   | j   d S rX   )r:  releasere   r\   r\   r]   rB    s    zLock.releaser*   c                 C  s.   | j  }|jrt|jnd }t|j||jS rX   )r:  r1  ownerTrioTaskInfor*   rA  r0  )ra   r3  rC  r\   r\   r]   r1    s
    

zLock.statisticsN)r{   r|   r}   rZ   rb   staticmethodr;  r<  r>  rA  rB  r1  r\   r\   r\   r]   r:     s   	r:   c                      s   e Zd Zddddddd ddd	Zddddddd
d fddZd
dddZd
dddZeddddZeddddZ	d
dddZ
ddddZ  ZS )r>   NF	max_valuer6  r   r   ri   initial_valuerG  r6  rW   c                C  s
   t | S rX   rY   r[   rI  rG  r6  r\   r\   r]   rZ     s    zSemaphore.__new__r^   c                  s&   t  j|||d tj||d| _d S )NrF  )rG  )r   rb   r_   r>   _Semaphore__original)ra   rI  rG  r6  r   r\   r]   rb     s    zSemaphore.__init__rc   c                   sd   | j s| j I d H  d S tj I d H  z| j  W n& tjy^   | jj	 I d H  Y n0 d S rX   )
r9  rK  r<  r_   r   r=  r>  r,   r?  r@  re   r\   r\   r]   r<    s    zSemaphore.acquirec                 C  s.   z| j   W n tjy(   td Y n0 d S rX   )rK  r>  r_   r,   re   r\   r\   r]   r>    s    zSemaphore.acquire_nowaitc                 C  s   | j jS rX   )rK  rG  re   r\   r\   r]   rG    s    zSemaphore.max_valuec                 C  s   | j jS rX   )rK  ru   re   r\   r\   r]   ru     s    zSemaphore.valuec                 C  s   | j   d S rX   )rK  rB  re   r\   r\   r]   rB    s    zSemaphore.releaser<   c                 C  s   | j  }t|jS rX   )rK  r1  r<   r0  r2  r\   r\   r]   r1    s    
zSemaphore.statistics)r{   r|   r}   rZ   rb   r<  r>  r~   rG  ru   rB  r1  r   r\   r\   r   r]   r>     s   
r>   c                   @  s  e Zd Zd/ddddd dddZd0ddddddd	d
ZddddZdddddddZeddddZej	dddddZeddddZ
eddddZddddZd dd!d"d#Zddd$d%Zd dd!d&d'Zddd(d)Zd dd!d*d+Zd,dd-d.ZdS )1r6   NrU   zfloat | Noneztrio.CapacityLimiter | None)total_tokensrU   rW   c                C  s
   t | S rX   rY   )r[   rM  rU   r\   r\   r]   rZ     s    zCapacityLimiter.__new__r^   c                C  s,   |d ur|| _ n|d usJ t|| _ d S rX   )_CapacityLimiter__originalr_   r6   )ra   rM  rU   r\   r\   r]   rb     s    zCapacityLimiter.__init__rc   c                   s   | j  I d H S rX   )rN  r   re   r\   r\   r]   r     s    zCapacityLimiter.__aenter__rf   rg   rh   rj   c                   s   | j |||I d H  d S rX   )rN  r   ro   r\   r\   r]   r     s    zCapacityLimiter.__aexit__rq   c                 C  s   | j jS rX   rN  rM  re   r\   r\   r]   rM  #  s    zCapacityLimiter.total_tokensrt   c                 C  s   || j _d S rX   rO  rv   r\   r\   r]   rM  '  s    r   c                 C  s   | j jS rX   )rN  borrowed_tokensre   r\   r\   r]   rP  +  s    zCapacityLimiter.borrowed_tokensc                 C  s   | j jS rX   )rN  available_tokensre   r\   r\   r]   rQ  /  s    z CapacityLimiter.available_tokensc                 C  s   | j   d S rX   )rN  r>  re   r\   r\   r]   r>  3  s    zCapacityLimiter.acquire_nowaitrT   )borrowerrW   c                 C  s   | j | d S rX   )rN  acquire_on_behalf_of_nowaitra   rR  r\   r\   r]   rS  6  s    z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   s   | j  I d H  d S rX   )rN  r<  re   r\   r\   r]   r<  9  s    zCapacityLimiter.acquirec                   s   | j |I d H  d S rX   )rN  acquire_on_behalf_ofrT  r\   r\   r]   rU  <  s    z$CapacityLimiter.acquire_on_behalf_ofc                 C  s
   | j  S rX   )rN  rB  re   r\   r\   r]   rB  ?  s    zCapacityLimiter.releasec                 C  s   | j |S rX   )rN  release_on_behalf_ofrT  r\   r\   r]   rV  B  s    z$CapacityLimiter.release_on_behalf_ofr(   c                 C  s&   | j  }t|j|jt|j|jdS )N)rP  rM  	borrowersr0  )rN  r1  r(   rP  rM  tuplerW  r0  )ra   origr\   r\   r]   r1  E  s    
zCapacityLimiter.statistics)N)N)r{   r|   r}   rZ   rb   r   r   r~   rM  r   rP  rQ  r>  rS  r<  rU  rB  rV  r1  r\   r\   r\   r]   r6     s2    
 r6   _capacity_limiter_wrapperc                   @  sb   e Zd ZU ded< ddddZd ddd	Zd
ddddddZd dddZddddZdS )_SignalReceiverzAsyncIterator[int]	_iteratorztuple[Signals, ...])signalsc                 C  s
   || _ d S rX   )_signals)ra   r]  r\   r\   r]   rb   Z  s    z_SignalReceiver.__init__rc   c                 C  s   t j| j | _| j | _| S rX   )r_   open_signal_receiverr^  _cmrd   r\  re   r\   r\   r]   rd   ]  s    z_SignalReceiver.__enter__rf   rg   rh   zbool | Nonerj   c                 C  s   | j |||S rX   )r`  rn   ro   r\   r\   r]   rn   b  s    z_SignalReceiver.__exit__c                 C  s   | S rX   r\   re   r\   r\   r]   	__aiter__j  s    z_SignalReceiver.__aiter__r   c                   s   | j  I d H }t|S rX   )r\  	__anext__r   )ra   signumr\   r\   r]   rb  m  s    z_SignalReceiver.__anext__N)	r{   r|   r}   r   rb   rd   rn   ra  rb  r\   r\   r\   r]   r[  W  s   
r[  c                   @  s   e Zd ZdddddZddddd	d
dZddddZdddddZdddddddZddddddZd dddd!d"Z	d#ddd$d%d&Z
d'S )(
TestRunnerr   r^   optionsrW   c                 K  s$   ddl m} | | _d | _|| _d S )Nr   )Queue)queuerg  _call_queue_send_stream_options)ra   rf  rg  r\   r\   r]   rb   x  s    zTestRunner.__init__rf   rg   ztypes.TracebackType | Nonerj   c                 C  s,   | j r(| j   | j d ur(| j   qd S rX   )rj  r   ri  getro   r\   r\   r]   rn     s    

zTestRunner.__exit__rc   c                   s   t d\| _}|x |2 z`3 d H W \}}z|I d H }W n2 tyh } z|t| W Y d }~qd }~0 0 |t| q6 W d    n1 s0    Y  d S r  )r4   rj  r   r  r   r   )ra   Zreceive_streamcorooutcome_holderretvalr   r\   r\   r]   _run_tests_and_fixtures  s    $z"TestRunner._run_tests_and_fixturesrT   )outcomerW   c                 C  s
   d | _ d S rX   )rj  )ra   rq  r\   r\   r]   _main_task_finished  s    zTestRunner._main_task_finishedz Callable[P, Awaitable[T_Retval]]zP.argszP.kwargsrP   )r   r   rV   rW   c                 O  s   | j d u rFtjj| jf| jj| jd| j | j d u rF| j	   q.g }| j 
||i ||f |sv| j	   qd|d  S )N)Zrun_sync_soon_threadsafeZdone_callbackr   )rj  r_   r   Zstart_guest_runrp  ri  putrr  rk  rl  Zsend_nowaitunwrap)ra   r   r   rV   rn  r\   r\   r]   _call_in_runner_task  s     

zTestRunner._call_in_runner_taskz,Callable[..., AsyncGenerator[T_Retval, Any]]r   zIterable[T_Retval])fixture_funcrV   rW   c                 c  s`   |f i |}|  |jd }|V  z|  |jd  W n tyF   Y n0 |  |j tdd S )Nz$Async generator fixture did not stop)ru  asendStopAsyncIterationr   r   )ra   rv  rV   ZasyncgenZfixturevaluer\   r\   r]   run_asyncgen_fixture  s    zTestRunner.run_asyncgen_fixturez,Callable[..., Coroutine[Any, Any, T_Retval]]c                 C  s   | j |fi |S rX   ru  )ra   rv  rV   r\   r\   r]   run_fixture  s    zTestRunner.run_fixturez'Callable[..., Coroutine[Any, Any, Any]])	test_funcrV   rW   c                 C  s   | j |fi | d S rX   rz  )ra   r|  rV   r\   r\   r]   run_test  s    zTestRunner.run_testN)r{   r|   r}   rb   rn   rp  rr  ru  ry  r{  r}  r\   r\   r\   r]   rd  w  s   rd  c                      s0   e Zd Zdd fddZddddZ  ZS )	rD  ztrio.lowlevel.Task)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   rb   r   rm  weakrefproxy_task)ra   r~  Z	parent_idr   r\   r]   rb     s
    zTrioTaskInfo.__init__ri   rc   c                 C  s&   z| j jjW S  ty    Y dS 0 d S r   )r  Z_cancel_statusZeffectively_cancelledReferenceErrorre   r\   r\   r]   has_pending_cancellation  s    z%TrioTaskInfo.has_pending_cancellation)r{   r|   r}   rb   r  r   r\   r\   r   r]   rD    s   rD  c                
   @  s  e Zd ZeddddddddZedd	d
dZedd	ddZedd	ddZedd	ddZedd	ddZ	edd	ddZ
edddddZeejdddddd d!d"Zedd	d#d$Zed%d	d&d'Zed(d	d)d*Zedd+d,d-d.Zed/dd0d1d2dd3d4d5d6Zedd7d8d9d:Zedd;ddd<dd=d>d?Zedd	d@dAZedddddBdCdDZed;ddddBdEdFZedGd	dHdIZedJdKdKdKdLdMdNdOdPZedQddRdSdTZeddUd1dVdWdXdYdZZed[d\d]d^d_Zed`dadbdcddZed`dadbdedfZedgdVdVddhdidjdkZ ee!d`ddldmdndoZ"ee!d`d[dpdmdqdoZ"ed`drdsdmdtdoZ"edududududvdwdxdydzd1d1d{d|d}d~Z#eddd1ddddZ$edddddZ%edddddZ&edddddZ'ed`dadbddZ(ed`dWdbddZ)ed`ddbddZ*ed`ddbddZ+ed`ddbddZ,ed`ddbddZ-ed`ddbddZ.ed7d	ddZ/edddddZ0edd	ddZ1edd	ddZ2edd	ddZ3edddddZ4d/S )TrioBackendz1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r   r   rP   )r   r   rV   rf  rW   c                 C  s   t j|g|R  S rX   )r_   run)r[   r   r   rV   rf  r\   r\   r]   r    s    zTrioBackend.runrT   rc   c                 C  s
   t j S rX   )r_   r   r   r   r\   r\   r]   current_token  s    zTrioBackend.current_tokenrq   c                 C  s   t  S rX   )r_   current_timer   r\   r\   r]   r    s    zTrioBackend.current_timeztype[BaseException]c                 C  s   t jS rX   )r_   r   r   r\   r\   r]   cancelled_exception_class  s    z%TrioBackend.cancelled_exception_classr^   c                   s   t j I d H  d S rX   )r_   r   r   r   r\   r\   r]   r     s    zTrioBackend.checkpointc                   s   t j I d H  d S rX   )r_   r   r=  r   r\   r\   r]   r=    s    z#TrioBackend.checkpoint_if_cancelledc                   s   t j I d H  d S rX   )r_   r   cancel_shielded_checkpointr   r\   r\   r]   r    s    z&TrioBackend.cancel_shielded_checkpoint)delayrW   c                   s   t |I d H  d S rX   )r_   r   )r[   r  r\   r\   r]   r     s    zTrioBackend.sleepFrs   rz   ri   zabc.CancelScope)rs   rz   rW   c                C  s   t ||dS )Nr  r?   )r[   rs   rz   r\   r\   r]   create_cancel_scope  s    zTrioBackend.create_cancel_scopec                 C  s   t  S rX   )r_   current_effective_deadliner   r\   r\   r]   r    s    z&TrioBackend.current_effective_deadlinezabc.TaskGroupc                 C  s   t  S rX   )r   r   r\   r\   r]   create_task_group  s    zTrioBackend.create_task_groupz	abc.Eventc                 C  s   t  S rX   r7   r   r\   r\   r]   create_event  s    zTrioBackend.create_eventr:   r7  c                C  s
   t |dS )Nr5  r9   r8  r\   r\   r]   create_lock  s    zTrioBackend.create_lockNrF  r   r   zabc.SemaphorerH  c                C  s   t |||dS )NrF  r=   rJ  r\   r\   r]   create_semaphore  s    zTrioBackend.create_semaphorer6   )rM  rW   c                 C  s   t |S rX   r5   )r[   rM  r\   r\   r]   create_capacity_limiter'  s    z#TrioBackend.create_capacity_limiterz&Callable[[Unpack[PosArgsT]], T_Retval]zabc.CapacityLimiter | None)r   r   abandon_on_cancellimiterrW   c                   s:   dd fdd}t  t||ttj|dI d H S )NrP   rc   c                     s6   t t   W  d    S 1 s(0    Y  d S rX   )r.   r  r\   r   r   tokenr\   r]   wrapper3  s    z6TrioBackend.run_sync_in_worker_thread.<locals>.wrapper)r  r  )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_   r   check_cancelledr   r\   r\   r]   r  >  s    zTrioBackend.check_cancelled)r   r   r  rW   c                 C  s   t jj|g|R  S rX   )r_   r   r  r[   r   r   r  r\   r\   r]   run_async_from_threadB  s    z!TrioBackend.run_async_from_threadc                 C  s   t jj|g|R  S rX   )r_   r   r&   r  r\   r\   r]   run_sync_from_threadK  s    z TrioBackend.run_sync_from_threadzabc.BlockingPortalc                 C  s   t  S rX   )r   r   r\   r\   r]   create_blocking_portalT  s    z"TrioBackend.create_blocking_portalz)StrOrBytesPath | Sequence[StrOrBytesPath]zint | IO[Any] | Noner   r   )commandr   r   r   rV   rW   c          
        s   ddddd t |tttfrJtjj |f|||dd|I d H }n2tjj fdd	|D f|||d
d|I d H }|jrt|jnd }|j	rt
|j	nd }|jrt
|jnd }	t||||	S )NrE   strr   c                 S  s&   t | }t|tr|S t |S d 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      z,TrioBackend.open_process.<locals>.<listcomp>F)r   r  r   r   r_   r   open_processr   r   r   r   r   r   )
r[   r  r   r   r   rV   r   Zstdin_streamZstdout_streamZstderr_streamr\   r  r]   r  X  s4    
		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_shutdown  s    z/TrioBackend.setup_process_pool_exit_at_shutdownr  zIPSockAddrType | Noner   )hostportlocal_addressrW   c                   s   d|v rt jnt j}tj  |}|t jt jd |rF||I d H  z|||fI d H  W n t	yz   |
   Y n0 t|S )N:r   )r   AF_INET6AF_INETr_   r  r  r  bindconnectr   r   r   )r[   r  r  r  familyr   r\   r\   r]   connect_tcp  s    zTrioBackend.connect_tcpzstr | byteszabc.UNIXSocketStream)pathrW   c                   sH   t jtj}z||I d H  W n ty>   |   Y n0 t|S rX   )r_   r   AF_UNIXr  r   r   r   )r[   r  r   r\   r\   r]   connect_unix  s    zTrioBackend.connect_unixr   zabc.SocketListener)sockrW   c                 C  s   t |S rX   r  r[   r  r\   r\   r]   create_tcp_listener  s    zTrioBackend.create_tcp_listenerc                 C  s   t |S rX   )r!  r  r\   r\   r]   create_unix_listener  s    z TrioBackend.create_unix_listenerzsocket.AddressFamilyzUDPSocket | ConnectedUDPSocket)r  r  remote_address
reuse_portrW   c                   sd   t jj|tjd}|r(|tjtjd |r<||I d H  |rX||I d H  t|S t	|S d S )N)r  typer   )
r_   r   
SOCK_DGRAMr  r   SO_REUSEPORTr  r  r)  r"  )r[   r  r  r  r  r   r\   r\   r]   create_udp_socket  s    zTrioBackend.create_udp_socketzabc.UNIXDatagramSocket)r  remote_pathrW   c                   s   d S rX   r\   r[   r  r  r\   r\   r]   create_unix_datagram_socket  s    z'TrioBackend.create_unix_datagram_socketzabc.ConnectedUNIXDatagramSocketc                   s   d S rX   r\   r  r\   r\   r]   r    s    zstr | bytes | Nonez8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocketc                   s4   t j|}|r(||I d H  t|S t|S d S rX   )r_   r   r  r  r-  r,  )r[   r  r  r   r\   r\   r]   r    s
    r   )r  r  protor  zbytes | str | Nonezstr | int | Nonezint | AddressFamilyzint | SocketKindzuSequence[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]])r  r  r  r  r  r  rW   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.getaddrinforA   ztuple[str, str])sockaddrr  rW   c                   s   t j||I d H S rX   )r_   r   getnameinfo)r[   r  r  r\   r\   r]   r    s    zTrioBackend.getnameinforG   )objrW   c              
     sj   zt |I d H  W nR tjyH } zt |jd W Y d }~n&d }~0  tjyd   tdd Y n0 d S )Nr   )r#   r_   r1   with_traceback__traceback__r0   r[   r  r   r\   r\   r]   r#     s    $zTrioBackend.wait_readablec              
     sj   zt |I d H  W nR tjyH } zt |jd W Y d }~n&d }~0  tjyd   tdd Y n0 d S )Nr   )r$   r_   r1   r  r  r0   r  r\   r\   r]   r$     s    $zTrioBackend.wait_writablec                 C  s   t | d S rX   )r"   )r[   r  r\   r\   r]   r"     s    zTrioBackend.notify_closingc                   s   t |S rX   r  r  r\   r\   r]   wrap_listener_socket	  s    z TrioBackend.wrap_listener_socketc                   s   t j|}t|S rX   )r_   r   r  r   r[   r  Z	trio_sockr\   r\   r]   wrap_stream_socket  s    zTrioBackend.wrap_stream_socketr   c                   s   t j|}t|S rX   )r_   r   r  r   r  r\   r\   r]   wrap_unix_stream_socket  s    z#TrioBackend.wrap_unix_stream_socketr"  c                   s   t j|}t|S rX   )r_   r   r  r"  r  r\   r\   r]   wrap_udp_socket  s    zTrioBackend.wrap_udp_socketr)  c                   s   t j|}t|S rX   )r_   r   r  r)  r  r\   r\   r]   wrap_connected_udp_socket  s    z%TrioBackend.wrap_connected_udp_socketr,  c                   s   t j|}t|S rX   )r_   r   r  r,  r  r\   r\   r]   wrap_unix_datagram_socket!  s    z%TrioBackend.wrap_unix_datagram_socketr-  c                   s   t j|}t|S rX   )r_   r   r  r-  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 0 d S )NrL  )rZ  rl  LookupErrorr6   r_   Z	to_threadcurrent_default_thread_limiterr4  )r[   r  r\   r\   r]   r  -  s    

z*TrioBackend.current_default_thread_limiterr   z.AbstractContextManager[AsyncIterator[Signals]])r]  rW   c                 G  s   t |S rX   )r[  )r[   r]  r\   r\   r]   r_  8  s    z TrioBackend.open_signal_receiverr+   c                 C  s   t  }t|S rX   )r!   rD  )r[   r~  r\   r\   r]   get_current_task>  s    zTrioBackend.get_current_taskzSequence[TaskInfo]c                 C  s`   t  }|sJ t|g}|j}|r\g }|D ]*}|jD ]}|t| ||j q4q*|}q|S rX   )r    rD  Zchild_nurseriesZchild_tasksr  extend)r[   Z	root_taskZ
task_infosZ	nurseriesZnew_nurseriesZ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)Ztrio.testingr  )r[   r  r\   r\   r]   r  T  s    z"TrioBackend.wait_all_tasks_blockedrd  re  c                 C  s   t f i |S rX   )rd  )r[   rf  r\   r\   r]   create_test_runnerZ  s    zTrioBackend.create_test_runner)FN)N)r   )5r{   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  r  r  r  r_  r  r  r  r  r\   r\   r\   r]   r    s   		  ( 
  
r  )
__future__r   r   r   r  r   systypesr  collections.abcr   r   r   r   r   r   r	   r
   concurrent.futuresr   
contextlibr   Zdataclassesr   	functoolsr   ior   r   r   r   r   r   r   typingr   r   r   r   r   r   r   r   Ztrio.from_threadr_   Ztrio.lowlevelrq  r   r   r   r    r!   r"   r#   r$   Ztrio.socketr%   r   Ztrio.to_threadr&    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   Ztyping_extensionsrL   rM   ZexceptiongrouprN   rO   rP   r  rQ   rR   rS   r   ZRunVarr   r   ZByteReceiveStreamr   ZByteSendStreamr   r   Z
Instrumentr   r   r   r   r   r   r   ZSocketListenerr  r!  r"  r)  r,  r-  rZ  r[  rd  rD  r  Zbackend_classr\   r\   r\   r]   <module>   s   (
( 6; 8!C

86L W   