a
    OfE                     @  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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mZ d dlmZ d dlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*Z+d dl,Z+d dl-m.Z.m/Z/m0Z0 d dl,m1Z1m2Z2m3Z3m4Z4 d dl5m6Z7 d dl8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@ ddlAmBZBmCZCmDZDmEZE ddlFmGZG ddlHmIZI ddlJmKZL ddlJmMZN ddlJmOZO ddlPmQZR ddl>mSZSmTZTmUZU ddlVmWZW ddlXmYZY ejZdkrd dlm[Z[ nd dl\m[Z[ ejZd kr>d d!lm]Z]m^Z^ nd d"l_m`Z` d d!l\m]Z]m^Z^ e'd#Zae'd$Zbe'd%eceSZde]d&Zee[d'Zfe+jgjhZhG d(d) d)eRZQG d*d+ d+e>jiZiG d,d- d-e>jjZjed.d/G d0d1 d1e>jkZled.d/G d2d3 d3e>jmZned.d/G d4d5 d5e>joZoG d6d7 d7e+j>jpZqehd8Zrd9esd8< d:d;d<d=d>ZtG d?d@ d@e#ed ZuG dAdB dBeue>jvZvG dCdD dDeve>jwZwG dEdF dFeue>jxZyG dGdH dHeue>jxZzG dIdJ dJeueS e>j{Z{G dKdL dLeueS e>j|Z|G dMdN dNeuec e>j}Z}G dOdP dPeuec e>j~Z~G dQdR dReNZMG dSdT dTeLZKehdUZd9esdU< G dVdW dWZG dXdY dYe>jZG dZd[ d[e=ZG d\d] d]eWZeZdS )^    )annotationsN)AsyncIteratorIterable)Future)	dataclass)partial)IOBase)PathLike)Signals)AddressFamily
SocketKind)TracebackType)IOAnyAsyncGenerator	AwaitableCallable
CollectionContextManager	CoroutineGenericMappingNoReturnSequenceTypeVarcastoverload)ErrorOutcomeValue)current_root_taskcurrent_taskwait_readablewait_writable)
SocketType)run_sync   )CapacityLimiterStatisticsEventStatisticsTaskInfoabc)claim_worker_thread)BrokenResourceErrorBusyResourceErrorClosedResourceErrorEndOfStream)convert_ipv6_sockaddr)create_memory_object_streamCapacityLimiterEvent)ResourceGuardCancelScope)IPSockAddrTypeUDPPacketTypeUNIXDatagramPacketType)AsyncBackend)MemoryObjectSendStream)   
   )	ParamSpec)r>      )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 )&r8   Nztrio.CancelScope | Noneobject)originalkwargsreturnc                 K  s
   t | S NrJ   __new__)clsrK   rL    rR   N/var/www/ai-form-bot/venv/lib/python3.9/site-packages/anyio/_backends/_trio.pyrP   a   s    zCancelScope.__new__r   Nonec                 K  s   |pt jf i || _d S rN   )trior8   _CancelScope__original)selfrK   rL   rR   rR   rS   __init__f   s    zCancelScope.__init__rM   c                 C  s   | j   | S rN   )rV   	__enter__rW   rR   rR   rS   rZ   i   s    
zCancelScope.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Nonebool | Noneexc_typeexc_valexc_tbrM   c                 C  s   | j |||S rN   )rV   __exit__rW   ra   rb   rc   rR   rR   rS   rd   m   s    zCancelScope.__exit__c                 C  s   | j   d S rN   )rV   cancelr[   rR   rR   rS   rf   v   s    zCancelScope.cancelfloatc                 C  s   | j jS rN   rV   deadliner[   rR   rR   rS   ri   y   s    zCancelScope.deadlinevaluerM   c                 C  s   || j _d S rN   rh   rW   rk   rR   rR   rS   ri   }   s    boolc                 C  s   | j jS rN   )rV   cancel_calledr[   rR   rR   rS   rn      s    zCancelScope.cancel_calledc                 C  s   | j jS rN   )rV   cancelled_caughtr[   rR   rR   rS   ro      s    zCancelScope.cancelled_caughtc                 C  s   | j jS rN   rV   shieldr[   rR   rR   rS   rq      s    zCancelScope.shieldc                 C  s   || j _d S rN   rp   rl   rR   rR   rS   rq      s    )N)N)__name__
__module____qualname__rP   rX   rZ   rd   rf   propertyri   setterrn   ro   rq   rR   rR   rR   rS   r8   `   s$    	r8   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 )	TaskGrouprT   rY   c                 C  s   d| _ tjdd| _d | _d S )NFT)Zstrict_exception_groups)_activerU   Zopen_nursery_nursery_managercancel_scoper[   rR   rR   rS   rX      s    zTaskGroup.__init__c                   s*   d| _ | j I d H | _t| jj| _| S )NT)rx   ry   
__aenter___nurseryr8   rz   r[   rR   rR   rS   r{      s    zTaskGroup.__aenter__r\   r]   r^   r_   r`   c              
     s   zvz | j |||I d H W W d| _S  tyl } z2|tj\}}|sVtj }|| W Y d }~n
d }~0 0 W d| _nd| _0 d S NF)ry   	__aexit__rx   rD   splitrU   	Cancelled_create)rW   ra   rb   rc   exc_restZcancelled_excrR   rR   rS   r~      s    	
zTaskGroup.__aexit__Nnamez,Callable[[Unpack[PosArgsT]], Awaitable[Any]]zUnpack[PosArgsT]rJ   )funcargsr   rM   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   )rx   RuntimeErrorr|   
start_soonrW   r   r   r   rR   rR   rS   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   )rx   r   r|   startr   rR   rR   rS   r      s
    zTaskGroup.start)rr   rs   rt   rX   r{   r~   r   r   rR   rR   rR   rS   rw      s   rw   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 )BlockingPortalrY   c                 C  s
   t | S rN   rO   rQ   rR   rR   rS   rP      s    zBlockingPortal.__new__rT   c                   s   t    tj | _d S rN   )superrX   rU   lowlevelcurrent_trio_token_tokenr[   	__class__rR   rS   rX      s    
zBlockingPortal.__init__z<Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]tuple[Unpack[PosArgsT]]dict[str, Any]rJ   zFuture[T_Retval])r   r   rL   r   futurerM   c              	   C  s.   t jjt| jj|d| j||||| jd d S )Nr   )Z
trio_token)rU   from_threadr%   r   Z_task_groupr   Z
_call_funcr   )rW   r   r   rL   r   r   rR   rR   rS   _spawn_task_from_thread   s    z&BlockingPortal._spawn_task_from_thread)rr   rs   rt   rP   rX   r   __classcell__rR   rR   r   rS   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_bytesrM   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 |rz|S td S rN   )r   Zreceive_somerU   r.   	__cause__r,   r/   rW   r   datar   rR   rR   rS   receive   s    zReceiveStreamWrapper.receiverT   rY   c                   s   | j  I d H  d S rN   r   acloser[   rR   rR   rS   r     s    zReceiveStreamWrapper.aclose)N)rr   rs   rt   __annotations__r   r   rR   rR   rR   rS   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   rT   itemrM   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 rN   )r   Zsend_allrU   r.   r   r,   rW   r   r   rR   rR   rS   send  s    zSendStreamWrapper.sendrY   c                   s   | j  I d H  d S rN   r   r[   rR   rR   rS   r     s    zSendStreamWrapper.acloseN)rr   rs   rt   r   r   r   rR   rR   rR   rS   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_stderrrT   rY   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)rq   )r8   r   r   r   r   waitBaseExceptionkillr[   rR   rR   rS   r     s    .,zProcess.acloseintc                   s   | j  I d H S rN   )r   r   r[   rR   rR   rS   r   /  s    zProcess.waitc                 C  s   | j   d S rN   )r   	terminater[   rR   rR   rS   r   2  s    zProcess.terminatec                 C  s   | j   d S rN   )r   r   r[   rR   rR   rS   r   5  s    zProcess.killr
   )signalrM   c                 C  s   | j | d S rN   )r   send_signal)rW   r   rR   rR   rS   r   8  s    zProcess.send_signalc                 C  s   | j jS rN   )r   pidr[   rR   rR   rS   r   ;  s    zProcess.pidr   c                 C  s   | j jS rN   )r   
returncoder[   rR   rR   rS   r   ?  s    zProcess.returncodec                 C  s   | j S rN   )r   r[   rR   rR   rS   stdinC  s    zProcess.stdinc                 C  s   | j S rN   )r   r[   rR   rR   rS   stdoutG  s    zProcess.stdoutc                 C  s   | j S rN   )r   r[   rR   rR   rS   stderrK  s    zProcess.stderrN)rr   rs   rt   r   r   r   r   r   r   ru   r   r   r   r   r   rR   rR   rR   rS   r     s&   
r   c                      s"   e Zd Zdd fddZ  ZS )_ProcessPoolShutdownInstrumentrT   rY   c                   s   t    d S rN   )r   	after_runr[   r   rR   rS   r   Q  s    z(_ProcessPoolShutdownInstrument.after_run)rr   rs   rt   r   r   rR   rR   r   rS   r   P  s   r   &current_default_worker_process_limiterztrio.lowlevel.RunVarset[abc.Process]rT   workersrM   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   )	rU   sleepmathinfr   r   r   r8   r   )r   processrR   rR   rS   _shutdown_process_poolZ  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TrioSocketTyperT   trio_socketrM   c                 C  s   || _ d| _d S r}   )_trio_socket_closedrW   r   rR   rR   rS   rX   m  s    z_TrioSocketMixin.__init__rY   c                 C  s    | j r
t| j dk rtd S Nr   )r   r.   r   filenor,   r[   rR   rR   rS   _check_closedq  s    z_TrioSocketMixin._check_closedsocket.socketc                 C  s   | j jS rN   )r   _sockr[   rR   rR   rS   _raw_socketw  s    z_TrioSocketMixin._raw_socketc                   s"   | j  dkrd| _| j   d S )Nr   T)r   r   r   closer[   rR   rR   rS   r   {  s    z_TrioSocketMixin.acloser   r   )r   rM   c                 C  sJ   t |tjrt|n2| j dk r0| jr0td nt |trBt|n|d S r   )
isinstancerU   r.   r   r   r   OSErrorr,   rW   r   rR   rR   rS   _convert_socket_error  s    
z&_TrioSocketMixin._convert_socket_errorN)	rr   rs   rt   rX   r   ru   r   r   r   rR   rR   rR   rS   r   l  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   rT   r   c                   s$   t  | td| _td| _d S Nreading from
writing tor   rX   r6   _receive_guard_send_guardr   r   rR   rS   rX     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 rN   )r   r   recvr   r   r/   r   rR   rR   rS   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 rN   )r   
memoryviewr   r   r   r   )rW   r   viewZ
bytes_sentr   rR   rR   rS   r     s     zSocketStream.sendrY   c                   s   | j tj d S rN   )r   shutdownsocketSHUT_WRr[   rR   rR   rS   send_eof  s    zSocketStream.send_eof)r   )rr   rs   rt   rX   r   r   r   r   rR   rR   r   rS   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maxfdsrM   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 integer   z!maxfds must be a positive integeriz.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r   r   
ValueErrorarrayrU   r   
checkpointr   r   recvmsgr   CMSG_LENitemsizer   r   r/   
SOL_SOCKET
SCM_RIGHTSr   	frombyteslenlist)rW   r   r   fdsmessageancdataflagsaddrr   
cmsg_level	cmsg_type	cmsg_datarR   rR   rS   receive_fds  s6    
 "&zUNIXSocketStream.receive_fdsr   zCollection[int | IOBase]rT   )r   r   rM   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   rU   r   r   r   r   sendmsgr   r   r   r   r   )rW   r   r   ZfilenosfdZfdarrayr   rR   rR   rS   send_fds  s2    



zUNIXSocketStream.send_fdsN)rr   rs   rt   r  r	  rR   rR   rR   rS   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   rX   rU   r   from_stdlib_socketr6   _accept_guardrW   r  r   rR   rS   rX     s    zTCPSocketListener.__init__r   rY   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   rW   r   Z_addrr   rR   rR   rS   r    s    >zTCPSocketListener.acceptrr   rs   rt   rX   r  r   rR   rR   r   rS   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   rR   rS   rX      s    zUNIXSocketListener.__init__r   rY   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 rN   )r  r   r  r   r   r   r  rR   rR   rS   r    s    >zUNIXSocketListener.acceptr  rR   rR   r   rS   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   rT   r   c                   s$   t  | td| _td| _d S r   r   r   r   rR   rS   rX     s    
zUDPSocket.__init__ztuple[bytes, IPSockAddrType]rY   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   recvfromr0   r   r   rW   r   r  r   rR   rR   rS   r     s    zUDPSocket.receiver:   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 rN   r   r   sendtor   r   r   rR   rR   rS   r     s
    zUDPSocket.sendrr   rs   rt   rX   r   r   r   rR   rR   r   rS   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   rT   r   c                   s$   t  | td| _td| _d S r   r   r   r   rR   rS   rX   %  s    
zConnectedUDPSocket.__init__r   rY   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   rR   rR   rS   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 rN   r   r   r   r   r   r   rR   rR   rS   r   1  s
    zConnectedUDPSocket.sendr   rR   rR   r   rS   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 )UNIXDatagramSocketr   rT   r   c                   s$   t  | td| _td| _d S r   r   r   r   rR   rS   rX   :  s    
zUNIXDatagramSocket.__init__r;   rY   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  rR   rR   rS   r   ?  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 rN   r  r   rR   rR   rS   r   G  s
    zUNIXDatagramSocket.sendr   rR   rR   r   rS   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 )ConnectedUNIXDatagramSocketr   rT   r   c                   s$   t  | td| _td| _d S r   r   r   r   rR   rS   rX   R  s    
z$ConnectedUNIXDatagramSocket.__init__r   rY   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   rR   rR   rS   r   W  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 rN   r#  r   rR   rR   rS   r   ^  s
    z ConnectedUNIXDatagramSocket.sendr   rR   rR   r   rS   r%  O  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 )r5   rY   c                 C  s
   t | S rN   rO   r   rR   rR   rS   rP   l  s    zEvent.__new__rT   c                 C  s   t  | _d S rN   )rU   r5   _Event__originalr[   rR   rR   rS   rX   o  s    zEvent.__init__rm   c                 C  s
   | j  S rN   )r&  is_setr[   rR   rR   rS   r'  r  s    zEvent.is_setc                   s   | j  I d H S rN   )r&  r   r[   rR   rR   rS   r   u  s    z
Event.waitr(   c                 C  s   | j  }t|jdS )N)tasks_waiting)r&  
statisticsr(   r(  )rW   Zorig_statisticsrR   rR   rS   r)  x  s    
zEvent.statisticsc                 C  s   | j   d S rN   )r&  setr[   rR   rR   rS   r*  |  s    z	Event.setN)	rr   rs   rt   rP   rX   r'  r   r)  r*  rR   rR   rR   rS   r5   k  s   r5   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 )1r3   NrK   zfloat | Noneztrio.CapacityLimiter | None)total_tokensrK   rM   c                C  s
   t | S rN   rO   )rQ   r,  rK   rR   rR   rS   rP     s    zCapacityLimiter.__new__rT   c                C  s,   |d ur|| _ n|d usJ t|| _ d S rN   )_CapacityLimiter__originalrU   r3   )rW   r,  rK   rR   rR   rS   rX     s    zCapacityLimiter.__init__rY   c                   s   | j  I d H S rN   )r-  r{   r[   rR   rR   rS   r{     s    zCapacityLimiter.__aenter__r\   r]   r^   r`   c                   s   | j |||I d H  d S rN   )r-  r~   re   rR   rR   rS   r~     s    zCapacityLimiter.__aexit__rg   c                 C  s   | j jS rN   r-  r,  r[   rR   rR   rS   r,    s    zCapacityLimiter.total_tokensrj   c                 C  s   || j _d S rN   r.  rl   rR   rR   rS   r,    s    r   c                 C  s   | j jS rN   )r-  borrowed_tokensr[   rR   rR   rS   r/    s    zCapacityLimiter.borrowed_tokensc                 C  s   | j jS rN   )r-  available_tokensr[   rR   rR   rS   r0    s    z CapacityLimiter.available_tokensc                 C  s   | j   d S rN   )r-  acquire_nowaitr[   rR   rR   rS   r1    s    zCapacityLimiter.acquire_nowaitrJ   )borrowerrM   c                 C  s   | j | d S rN   )r-  acquire_on_behalf_of_nowaitrW   r2  rR   rR   rS   r3    s    z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   s   | j  I d H  d S rN   )r-  acquirer[   rR   rR   rS   r5    s    zCapacityLimiter.acquirec                   s   | j |I d H  d S rN   )r-  acquire_on_behalf_ofr4  rR   rR   rS   r6    s    z$CapacityLimiter.acquire_on_behalf_ofc                 C  s
   | j  S rN   )r-  releaser[   rR   rR   rS   r7    s    zCapacityLimiter.releasec                 C  s   | j |S rN   )r-  release_on_behalf_ofr4  rR   rR   rS   r8    s    z$CapacityLimiter.release_on_behalf_ofr'   c                 C  s&   | j  }t|j|jt|j|jdS )N)r/  r,  	borrowersr(  )r-  r)  r'   r/  r,  tupler9  r(  )rW   origrR   rR   rS   r)    s    
zCapacityLimiter.statistics)N)N)rr   rs   rt   rP   rX   r{   r~   ru   r,  rv   r/  r0  r1  r3  r5  r6  r7  r8  r)  rR   rR   rR   rS   r3     s2    
 r3   _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 rN   )_signals)rW   r?  rR   rR   rS   rX     s    z_SignalReceiver.__init__rY   c                 C  s   t j| j | _| j | _| S rN   )rU   open_signal_receiverr@  _cmrZ   r>  r[   rR   rR   rS   rZ     s    z_SignalReceiver.__enter__r\   r]   r^   r_   r`   c                 C  s   | j |||S rN   )rB  rd   re   rR   rR   rS   rd     s    z_SignalReceiver.__exit__c                 C  s   | S rN   rR   r[   rR   rR   rS   	__aiter__  s    z_SignalReceiver.__aiter__r
   c                   s   | j  I d H }t|S rN   )r>  	__anext__r
   )rW   signumrR   rR   rS   rD    s    z_SignalReceiver.__anext__N)	rr   rs   rt   r   rX   rZ   rd   rC  rD  rR   rR   rR   rS   r=    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   rT   optionsrM   c                 K  s$   ddl m} | | _d | _|| _d S )Nr   )Queue)queuerI  _call_queue_send_stream_options)rW   rH  rI  rR   rR   rS   rX     s    zTestRunner.__init__r\   r]   ztypes.TracebackType | Noner`   c                 C  s,   | j r(| j   | j d ur(| j   qd S rN   )rL  r   rK  getre   rR   rR   rS   rd     s    

zTestRunner.__exit__rY   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  )r1   rL  r   r  r   r   )rW   Zreceive_streamcorooutcome_holderretvalr   rR   rR   rS   _run_tests_and_fixtures  s    $z"TestRunner._run_tests_and_fixturesrJ   )outcomerM   c                 C  s
   d | _ d S rN   )rL  )rW   rS  rR   rR   rS   _main_task_finished  s    zTestRunner._main_task_finishedz Callable[P, Awaitable[T_Retval]]zP.argszP.kwargsrF   )r   r   rL   rM   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   )rL  rU   r   Zstart_guest_runrR  rK  putrT  rM  rN  Zsend_nowaitunwrap)rW   r   r   rL   rP  rR   rR   rS   _call_in_runner_task  s     

zTestRunner._call_in_runner_taskz,Callable[..., AsyncGenerator[T_Retval, Any]]r   zIterable[T_Retval])fixture_funcrL   rM   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)rW  asendStopAsyncIterationr   r   )rW   rX  rL   ZasyncgenZfixturevaluerR   rR   rS   run_asyncgen_fixture,  s    zTestRunner.run_asyncgen_fixturez,Callable[..., Coroutine[Any, Any, T_Retval]]c                 C  s   | j |fi |S rN   rW  )rW   rX  rL   rR   rR   rS   run_fixture>  s    zTestRunner.run_fixturez'Callable[..., Coroutine[Any, Any, Any]])	test_funcrL   rM   c                 C  s   | j |fi | d S rN   r\  )rW   r^  rL   rR   rR   rS   run_testE  s    zTestRunner.run_testN)rr   rs   rt   rX   rd   rR  rT  rW  r[  r]  r_  rR   rR   rR   rS   rF    s   rF  c                      s0   e Zd Zdd fddZddddZ  ZS )	TrioTaskInfoztrio.lowlevel.Task)taskc                   sH   d }|j r|j jrt|j j}t t|||j|j t|| _	d S rN   )
Zparent_nurseryZparent_taskidr   rX   r   rO  weakrefproxy_task)rW   ra  Z	parent_idr   rR   rS   rX   L  s
    zTrioTaskInfo.__init__rm   rY   c                 C  s&   z| j jjW S  ty    Y dS 0 d S r}   )re  Z_cancel_statusZeffectively_cancelledReferenceErrorr[   rR   rR   rS   has_pending_cancellationT  s    z%TrioTaskInfo.has_pending_cancellation)rr   rs   rt   rX   rg  r   rR   rR   r   rS   r`  K  s   r`  c                   @  sT  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dd0ddd1dd2d3d4Zedd	d5d6Zeddddd7d8d9Zed0dddd7d:d;Zed<d	d=d>Zed/d/dd?d@ddAdAdAdBdCddDdE	dFdGZedHddIdJdKZeddLdMdNdOdPdQdRZedSdTdUdVdWZedXdYdZd[d\ZedXdYdZd]d^Zed_dNdNdd`dadbdcZeedXddddedfdgZ eedXdSdhdedidgZ edXdjdkdedldgZ edmdmdmdmdndodpdqdrdMdMdsdtdudvZ!eddwdMdxdydzd{Z"edXddZd|d}Z#edXddZd~dZ$ed+d	ddZ%edddddZ&edd	ddZ'edd	ddZ(edd	ddZ)edddddZ*d/S )TrioBackendz1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r   r   rF   )r   r   rL   rH  rM   c                 C  s   t j|g|R  S rN   )rU   run)rQ   r   r   rL   rH  rR   rR   rS   ri  ^  s    zTrioBackend.runrJ   rY   c                 C  s
   t j S rN   )rU   r   r   r   rR   rR   rS   current_tokenh  s    zTrioBackend.current_tokenrg   c                 C  s   t  S rN   )rU   current_timer   rR   rR   rS   rk  l  s    zTrioBackend.current_timeztype[BaseException]c                 C  s   t jS rN   )rU   r   r   rR   rR   rS   cancelled_exception_classp  s    z%TrioBackend.cancelled_exception_classrT   c                   s   t j I d H  d S rN   )rU   r   r   r   rR   rR   rS   r   t  s    zTrioBackend.checkpointc                   s   t j I d H  d S rN   )rU   r   checkpoint_if_cancelledr   rR   rR   rS   rm  x  s    z#TrioBackend.checkpoint_if_cancelledc                   s   t j I d H  d S rN   )rU   r   cancel_shielded_checkpointr   rR   rR   rS   rn  |  s    z&TrioBackend.cancel_shielded_checkpoint)delayrM   c                   s   t |I d H  d S rN   )rU   r   )rQ   ro  rR   rR   rS   r     s    zTrioBackend.sleepFri   rq   rm   zabc.CancelScope)ri   rq   rM   c                C  s   t ||dS )Nrp  r7   )rQ   ri   rq   rR   rR   rS   create_cancel_scope  s    zTrioBackend.create_cancel_scopec                 C  s   t  S rN   )rU   current_effective_deadliner   rR   rR   rS   rr    s    z&TrioBackend.current_effective_deadlinezabc.TaskGroupc                 C  s   t  S rN   )rw   r   rR   rR   rS   create_task_group  s    zTrioBackend.create_task_groupz	abc.Eventc                 C  s   t  S rN   r4   r   rR   rR   rS   create_event  s    zTrioBackend.create_eventr3   )r,  rM   c                 C  s   t |S rN   r2   )rQ   r,  rR   rR   rS   create_capacity_limiter  s    z#TrioBackend.create_capacity_limiterNz&Callable[[Unpack[PosArgsT]], T_Retval]zabc.CapacityLimiter | None)r   r   abandon_on_cancellimiterrM   c                   s:   dd fdd}t  t||ttj|dI d H S )NrF   rY   c                     s6   t t   W  d    S 1 s(0    Y  d S rN   )r+   rh  rR   r   r   tokenrR   rS   wrapper  s    z6TrioBackend.run_sync_in_worker_thread.<locals>.wrapper)rv  rw  )rh  rj  r%   r   rU   r3   )rQ   r   r   rv  rw  rz  rR   rx  rS   run_sync_in_worker_thread  s    
z%TrioBackend.run_sync_in_worker_threadc                 C  s   t j  d S rN   )rU   r   check_cancelledr   rR   rR   rS   r|    s    zTrioBackend.check_cancelled)r   r   ry  rM   c                 C  s   t jj|g|R  S rN   )rU   r   ri  rQ   r   r   ry  rR   rR   rS   run_async_from_thread  s    z!TrioBackend.run_async_from_threadc                 C  s   t jj|g|R  S rN   )rU   r   r%   r}  rR   rR   rS   run_sync_from_thread  s    z TrioBackend.run_sync_from_threadzabc.BlockingPortalc                 C  s   t  S rN   )r   r   rR   rR   rS   create_blocking_portal  s    z"TrioBackend.create_blocking_portal)cwdenvstart_new_sessionz#str | bytes | Sequence[str | bytes]zint | IO[Any] | Nonezstr | bytes | PathLike | NonezMapping[str, str] | Noner   )	commandshellr   r   r   r  r  r  rM   c             
     sl   t jj||||||||dI d H }	|	jr2t|	jnd }
|	jrFt|	jnd }|	jrZt|	jnd }t|	|
||S )N)r   r   r   r  r  r  r  )	rU   r   open_processr   r   r   r   r   r   )rQ   r  r  r   r   r   r  r  r  r   Zstdin_streamZstdout_streamZstderr_streamrR   rR   rS   r    s    
zTrioBackend.open_processr   r   c                 C  s   t jt| d S rN   )rU   r   Zspawn_system_taskr   )rQ   r   rR   rR   rS   #setup_process_pool_exit_at_shutdown  s    z/TrioBackend.setup_process_pool_exit_at_shutdownstrr   zIPSockAddrType | Noner   )hostportlocal_addressrM   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_INETrU   r  r  r  bindconnectr   r   r   )rQ   r  r  r  familyr   rR   rR   rS   connect_tcp  s    zTrioBackend.connect_tcpzstr | byteszabc.UNIXSocketStream)pathrM   c                   sH   t jtj}z||I d H  W n ty>   |   Y n0 t|S rN   )rU   r   AF_UNIXr  r   r   r   )rQ   r  r   rR   rR   rS   connect_unix  s    zTrioBackend.connect_unixr   zabc.SocketListener)sockrM   c                 C  s   t |S rN   )r
  rQ   r  rR   rR   rS   create_tcp_listener  s    zTrioBackend.create_tcp_listenerc                 C  s   t |S rN   )r  r  rR   rR   rS   create_unix_listener  s    z TrioBackend.create_unix_listenerzsocket.AddressFamilyzUDPSocket | ConnectedUDPSocket)r  r  remote_address
reuse_portrM   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   )
rU   r   
SOCK_DGRAMr  r   SO_REUSEPORTr  r  r!  r  )rQ   r  r  r  r  r   rR   rR   rS   create_udp_socket  s    zTrioBackend.create_udp_socketzabc.UNIXDatagramSocket)r  remote_pathrM   c                   s   d S rN   rR   rQ   r  r  rR   rR   rS   create_unix_datagram_socket"  s    z'TrioBackend.create_unix_datagram_socketzabc.ConnectedUNIXDatagramSocketc                   s   d S rN   rR   r  rR   rR   rS   r  (  s    zstr | bytes | Nonez8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocketc                   s4   t j|}|r(||I d H  t|S t|S d S rN   )rU   r   r  r  r%  r$  )rQ   r  r  r   rR   rR   rS   r  .  s
    r   )r  r  protor   zbytes | str | Nonezstr | int | Nonezint | AddressFamilyzint | SocketKindz]list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]])r  r  r  r  r  r   rM   c                  s   t j||||||I d H S rN   )rU   r   getaddrinfo)rQ   r  r  r  r  r  r   rR   rR   rS   r  :  s    zTrioBackend.getaddrinfor9   ztuple[str, str])sockaddrr   rM   c                   s   t j||I d H S rN   )rU   r   getnameinfo)rQ   r  r   rR   rR   rS   r  O  s    zTrioBackend.getnameinfoc              
     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"   rU   r.   with_traceback__traceback__r-   rQ   r  r   rR   rR   rS   wait_socket_readableU  s    $z TrioBackend.wait_socket_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#   rU   r.   r  r  r-   r  rR   rR   rS   wait_socket_writable^  s    $z TrioBackend.wait_socket_writablec                 C  s@   z
t  W S  ty:   ttj d}t | | Y S 0 d S )Nr+  )r<  rN  LookupErrorr3   rU   Z	to_threadcurrent_default_thread_limiterr*  )rQ   rw  rR   rR   rS   r  g  s    

z*TrioBackend.current_default_thread_limiterr
   z&ContextManager[AsyncIterator[Signals]])r?  rM   c                 G  s   t |S rN   )r=  )rQ   r?  rR   rR   rS   rA  r  s    z TrioBackend.open_signal_receiverr)   c                 C  s   t  }t|S rN   )r!   r`  )rQ   ra  rR   rR   rS   get_current_taskx  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 rN   )r    r`  Zchild_nurseriesZchild_tasksr  extend)rQ   Z	root_taskZ
task_infosZ	nurseriesZnew_nurseriesZnurseryra  rR   rR   rS   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.testingr  )rQ   r  rR   rR   rS   r    s    z"TrioBackend.wait_all_tasks_blockedrF  rG  c                 C  s   t f i |S rN   )rF  )rQ   rH  rR   rR   rS   create_test_runner  s    zTrioBackend.create_test_runner)FN)N)r   )+rr   rs   rt   classmethodri  rj  rk  rl  r   rm  rn  r   r   r   rq  rr  rs  rt  ru  r{  r|  r~  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  rA  r  r  r  r  rR   rR   rR   rS   rh  ]  s   	  	$ 
  
rh  )
__future__r   r   r   r   systypesrc  collections.abcr   r   concurrent.futuresr   dataclassesr   	functoolsr   ior   osr	   r   r
   r   r   r   typingr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ztrio.from_threadrU   Ztrio.lowlevelrS  r   r   r   r    r!   r"   r#   Ztrio.socketr$   r   Ztrio.to_threadr%    r'   r(   r)   r*   Z_core._eventloopr+   Z_core._exceptionsr,   r-   r.   r/   Z_core._socketsr0   Z_core._streamsr1   Z_core._synchronizationr3   ZBaseCapacityLimiterr5   Z	BaseEventr6   Z_core._tasksr8   ZBaseCancelScoper9   r:   r;   Zabc._eventloopr<   Zstreams.memoryr=   version_infor@   typing_extensionsrB   rC   ZexceptiongrouprD   rE   rF   r  rG   rH   rI   r   ZRunVarrw   r   ZByteReceiveStreamr   ZByteSendStreamr   r   Z
Instrumentr   r   r   r   r   r   r   ZSocketListenerr
  r  r  r!  r$  r%  r<  r=  rF  r`  rh  Zbackend_classrR   rR   rR   rS   <module>   s   D7; 8!C

L W  >