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?ZtG d@dA dAe#ed ZuG dBdC dCeue>jvZvG dDdE dEeve>jwZwG dFdG dGeue>jxZyG dHdI dIeue>jxZzG dJdK dKeueS e>j{Z{G dLdM dMeueS e>j|Z|G dNdO dOeuec e>j}Z}G dPdQ dQeuec e>j~Z~G dRdS dSeNZMG dTdU dUeLZKehdVZd9esdV< G dWdX dXZG dYdZ dZe>jZG d[d\ 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Zd'd)ddZd*ddZd+ddZd,ddZed-ddZ	e	j
d.ddZ	ed/d d!Zed/d"d#Zed/d$d%Zej
d0d&d%ZdS )1r8   Noriginaltrio.CancelScope | Nonekwargsobjectreturnc                 K  
   t | S NrM   __new__)clsrJ   rL    rT   M/var/www/NoticeGen/venv/lib/python3.10/site-packages/anyio/_backends/_trio.pyrR   a   s   
zCancelScope.__new__r   Nonec                 K  s   |p	t jdi || _d S NrT   )trior8   _CancelScope__original)selfrJ   rL   rT   rT   rU   __init__f   s   zCancelScope.__init__c                 C  s   | j   | S rP   )rY   	__enter__rZ   rT   rT   rU   r\   i   s   
zCancelScope.__enter__exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Nonebool | Nonec                 C     | j |||S rP   )rY   __exit__rZ   r^   r`   rb   rT   rT   rU   rf   m   s   zCancelScope.__exit__c                 C     | j   d S rP   )rY   cancelr]   rT   rT   rU   ri   v      zCancelScope.cancelfloatc                 C     | j jS rP   rY   deadliner]   rT   rT   rU   rn   y      zCancelScope.deadlinevaluec                 C     || j _d S rP   rm   rZ   rp   rT   rT   rU   rn   }      boolc                 C  rl   rP   )rY   cancel_calledr]   rT   rT   rU   ru      ro   zCancelScope.cancel_calledc                 C  rl   rP   )rY   cancelled_caughtr]   rT   rT   rU   rv      ro   zCancelScope.cancelled_caughtc                 C  rl   rP   rY   shieldr]   rT   rT   rU   rx      ro   zCancelScope.shieldc                 C  rq   rP   rw   rr   rT   rT   rU   rx      rs   rP   )rJ   rK   rL   rM   rN   r8   )rJ   rK   rL   r   rN   rV   )rN   r8   r^   r_   r`   ra   rb   rc   rN   rd   rN   rV   rN   rk   rp   rk   rN   rV   rN   rt   )rp   rt   rN   rV   )__name__
__module____qualname__rR   r[   r\   rf   ri   propertyrn   setterru   rv   rx   rT   rT   rT   rU   r8   `   s&    


	r8   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 )#	TaskGrouprN   rV   c                 C  s   d| _ tjdd| _d | _d S )NFT)strict_exception_groups)_activerX   open_nursery_nursery_managercancel_scoper]   rT   rT   rU   r[      s   
zTaskGroup.__init__c                   s,   d| _ | j I d H | _t| jj| _| S )NT)r   r   
__aenter___nurseryr8   r   r]   rT   rT   rU   r      s
   zTaskGroup.__aenter__r^   r_   r`   ra   rb   rc   rd   c              
     sl   z0z| j |||I d H W W d| _S  ty1 } z|tj\}}|s,tj }|| d }~ww d| _w NF)r   	__aexit__r   rD   splitrX   	Cancelled_create)rZ   r^   r`   rb   exc_restcancelled_excrT   rT   rU   r      s   	
zTaskGroup.__aexit__Nnamefunc,Callable[[Unpack[PosArgsT]], Awaitable[Any]]argsUnpack[PosArgsT]r   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   )r   RuntimeErrorr   
start_soonrZ   r   r   r   rT   rT   rU   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   rT   rT   rU   r      s    zTaskGroup.startrz   )rN   r   ry   )r   r   r   r   r   rM   rN   rV   )r   r   r   rM   r   rM   rN   r   )r~   r   r   r[   r   r   r   r   rT   rT   rT   rU   r      s    


r   c                      s2   e Zd ZdddZd fddZdddZ  ZS )BlockingPortalrN   c                 C  rO   rP   rQ   rS   rT   rT   rU   rR         
zBlockingPortal.__new__rV   c                   s   t    tj | _d S rP   )superr[   rX   lowlevelcurrent_trio_token_tokenr]   	__class__rT   rU   r[      s   
zBlockingPortal.__init__r   <Callable[[Unpack[PosArgsT]], Awaitable[T_Retval] | T_Retval]r   tuple[Unpack[PosArgsT]]rL   dict[str, Any]r   rM   futureFuture[T_Retval]c              	   C  s.   t jjt| jj|d| j||||| jd d S )Nr   )
trio_token)rX   from_threadr%   r   _task_groupr   
_call_funcr   )rZ   r   r   rL   r   r   rT   rT   rU   _spawn_task_from_thread   s   
z&BlockingPortal._spawn_task_from_thread)rN   r   rz   )r   r   r   r   rL   r   r   rM   r   r   rN   rV   )r~   r   r   rR   r[   r   __classcell__rT   rT   r   rU   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 | NonerN   bytesc              
     sh   z| j |I d H }W n! tjy } zt|jd }~w tjy- } zt|jd }~ww |r2|S trP   )r   receive_somerX   r.   	__cause__r,   r/   rZ   r   datar   rT   rT   rU   receive   s   zReceiveStreamWrapper.receiverV   c                      | j  I d H  d S rP   r   acloser]   rT   rT   rU   r        zReceiveStreamWrapper.acloserP   )r   r   rN   r   rz   )r~   r   r   __annotations__r   r   rT   rT   rT   rU   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   rN   rV   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 rP   )r   send_allrX   r.   r   r,   rZ   r   r   rT   rT   rU   send  s   zSendStreamWrapper.sendc                   r   rP   r   r]   rT   rT   rU   r     r   zSendStreamWrapper.acloseNr   r   rN   rV   rz   )r~   r   r   r   r   r   rT   rT   rT   rU   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_stderrrN   rV   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)rx   )r8   r   r   r   r   waitBaseExceptionkillr]   rT   rT   rU   r     s*   
zProcess.acloseintc                      | j  I d H S rP   )r   r   r]   rT   rT   rU   r   /     zProcess.waitc                 C  rh   rP   )r   	terminater]   rT   rT   rU   r   2  rj   zProcess.terminatec                 C  rh   rP   )r   r   r]   rT   rT   rU   r   5  rj   zProcess.killsignalr
   c                 C     | j | d S rP   )r   send_signal)rZ   r   rT   rT   rU   r   8     zProcess.send_signalc                 C  rl   rP   )r   pidr]   rT   rT   rU   r   ;  ro   zProcess.pidr   c                 C  rl   rP   )r   
returncoder]   rT   rT   rU   r   ?  ro   zProcess.returncodec                 C     | j S rP   )r   r]   rT   rT   rU   stdinC     zProcess.stdinc                 C  r   rP   )r   r]   rT   rT   rU   stdoutG  r   zProcess.stdoutc                 C  r   rP   )r   r]   rT   rT   rU   stderrK  r   zProcess.stderrNrz   rN   r   )r   r
   rN   rV   )rN   r   )rN   r   )rN   r   )r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rT   rT   rT   rU   r     s(   
 




r   c                      s   e Zd Zd fddZ  ZS )_ProcessPoolShutdownInstrumentrN   rV   c                   s   t    d S rP   )r   	after_runr]   r   rT   rU   r   Q  rj   z(_ProcessPoolShutdownInstrument.after_runrz   )r~   r   r   r   r   rT   rT   r   rU   r   P  s    r   &current_default_worker_process_limiterztrio.lowlevel.RunVarworkersset[abc.Process]rN   rV   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   )	rX   sleepmathinfr   r   r   r8   r   )r   processrT   rT   rU   _shutdown_process_poolZ  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TrioSocketTyperN   rV   c                 C  s   || _ d| _d S r   )_trio_socket_closedrZ   r   rT   rT   rU   r[   m  s   
z_TrioSocketMixin.__init__c                 C  s    | j rt| j dk rtd S Nr   )r   r.   r   filenor,   r]   rT   rT   rU   _check_closedq  s
   z_TrioSocketMixin._check_closedsocket.socketc                 C  rl   rP   )r   _sockr]   rT   rT   rU   _raw_socketw  ro   z_TrioSocketMixin._raw_socketc                   s(   | j  dkrd| _| j   d S d S )Nr   T)r   r   r   closer]   rT   rT   rU   r   {  s
   z_TrioSocketMixin.acloser   r   r   c                 C  s@   t |tjr	t|| j dk r| jrtd t |trt||r   )
isinstancerX   r.   r   r   r   OSErrorr,   rZ   r   rT   rT   rU   _convert_socket_error  s   
z&_TrioSocketMixin._convert_socket_errorNr   r   rN   rV   rz   )rN   r   )r   r   rN   r   )	r~   r   r   r[   r   r   r   r   r   rT   rT   rT   rU   r   l  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   rN   rV   c                   $   t  | td| _td| _d S Nreading from
writing tor   r[   r6   _receive_guard_send_guardr   r   rT   rU   r[        
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 rP   )r  r   recvr   r   r/   r   rT   rT   rU   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 rP   )r  
memoryviewr   r   r   r   )rZ   r   view
bytes_sentr   rT   rT   rU   r     s   "zSocketStream.sendc                   s   | j tj d S rP   )r   shutdownsocketSHUT_WRr]   rT   rT   rU   send_eof  s   zSocketStream.send_eofr   )r
  )r   r   rN   r   r   rz   )r~   r   r   r[   r   r   r  r   rT   rT   r   rU   r    s
    
r  c                   @  s    e Zd ZdddZdddZdS )UNIXSocketStreammsglenr   maxfdsrN   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 integer   z!maxfds must be a positive integeriTz.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r   r   
ValueErrorarrayrX   r   
checkpointr  r   recvmsgr  CMSG_LENitemsizer   r   r/   
SOL_SOCKET
SCM_RIGHTSr   	frombyteslenlist)rZ   r  r  fdsmessageancdataflagsaddrr   
cmsg_level	cmsg_type	cmsg_datarT   rT   rU   receive_fds  sD   
&zUNIXSocketStream.receive_fdsr%  r   r$  Collection[int | IOBase]rV   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  rX   r   r  r  r   sendmsgr  r  r   r   r   )rZ   r%  r$  filenosfdfdarrayr   rT   rT   rU   send_fds  sB   



"zUNIXSocketStream.send_fdsN)r  r   r  r   rN   r  )r%  r   r$  r-  rN   rV   )r~   r   r   r,  r3  rT   rT   rT   rU   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   r[   rX   r  from_stdlib_socketr6   _accept_guardrZ   r6  r   rT   rU   r[        zTCPSocketListener.__init__rN   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  rZ   r   _addrr   rT   rT   rU   r?    s   zTCPSocketListener.acceptr6  r   )rN   r  r~   r   r   r[   r?  r   rT   rT   r   rU   r5        r5  c                      r4  )UNIXSocketListenerr6  r   c                   r7  r8  r9  r<  r   rT   rU   r[      r=  zUNIXSocketListener.__init__rN   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 rP   )r;  r   r?  r   r   r  rC  rT   rT   rU   r?    s    

zUNIXSocketListener.acceptrE  )rN   r  rF  rT   rT   r   rU   rH    rG  rH  c                      s2   e Zd Zd fddZddd	ZdddZ  ZS )	UDPSocketr   r   rN   rV   c                   r  r  r  r   r   rT   rU   r[     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   recvfromr0   r   r   rZ   r   r(  r   rT   rT   rU   r     s   "zUDPSocket.receiver   r:   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 rP   r  r   sendtor   r   r   rT   rT   rU   r        "zUDPSocket.sendr   )rN   rJ  )r   r:   rN   rV   r~   r   r   r[   r   r   r   rT   rT   r   rU   rI        
rI  c                      2   e Zd Zd fddZddd	ZdddZ  ZS )ConnectedUDPSocketr   r   rN   rV   c                   r  r  r  r   r   rT   rU   r[   %  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 rK  r  r   r  r   r   r   rT   rT   rU   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 rP   r  r   r   r   r   r   rT   rT   rU   r   1  rQ  zConnectedUDPSocket.sendr   rN   r   r   rR  rT   rT   r   rU   rU  $  s    
rU  c                      rT  )UNIXDatagramSocketr   r   rN   rV   c                   r  r  r  r   r   rT   rU   r[   :  r	  zUNIXDatagramSocket.__init__r;   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 rK  )r  r   rL  r   r   rM  rT   rT   rU   r   ?  s   "zUNIXDatagramSocket.receiver   c                   rN  rP   rO  r   rT   rT   rU   r   G  rQ  zUNIXDatagramSocket.sendr   )rN   r;   )r   r;   rN   rV   rR  rT   rT   r   rU   r\  9  rS  r\  c                      rT  )ConnectedUNIXDatagramSocketr   r   rN   rV   c                   r  r  r  r   r   rT   rU   r[   R  r	  z$ConnectedUNIXDatagramSocket.__init__r   c                   rV  rK  rW  r   rT   rT   rU   r   W  rX  z#ConnectedUNIXDatagramSocket.receiver   c                   rY  rP   rZ  r   rT   rT   rU   r   ^  rQ  z ConnectedUNIXDatagramSocket.sendr   r[  r   rR  rT   rT   r   rU   r]  O  s    
r]  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 )r5   rN   c                 C  rO   rP   rQ   r   rT   rT   rU   rR   l  r   zEvent.__new__rV   c                 C  s   t  | _d S rP   )rX   r5   _Event__originalr]   rT   rT   rU   r[   o  rj   zEvent.__init__rt   c                 C  
   | j  S rP   )r^  is_setr]   rT   rT   rU   r`  r  r   zEvent.is_setc                   r   rP   )r^  r   r]   rT   rT   rU   r   u  r   z
Event.waitr(   c                 C  s   | j  }t|jdS )N)tasks_waiting)r^  
statisticsr(   ra  )rZ   orig_statisticsrT   rT   rU   rb  x  s   
zEvent.statisticsc                 C  rh   rP   )r^  setr]   rT   rT   rU   rd  |  rj   z	Event.setN)rN   r5   rz   r}   )rN   r(   )	r~   r   r   rR   r[   r`  r   rb  rd  rT   rT   rT   rU   r5   k  s    




r5   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 )<r3   NrJ   total_tokensfloat | NonerJ   trio.CapacityLimiter | NonerN   c                C  rO   rP   rQ   )rS   rf  rJ   rT   rT   rU   rR     s   
zCapacityLimiter.__new__rV   c                C  s.   |d ur	|| _ d S |d usJ t|| _ d S rP   )_CapacityLimiter__originalrX   r3   )rZ   rf  rJ   rT   rT   rU   r[     s   
zCapacityLimiter.__init__c                   r   rP   )ri  r   r]   rT   rT   rU   r     r   zCapacityLimiter.__aenter__r^   r_   r`   ra   rb   rc   c                   s   | j |||I d H  d S rP   )ri  r   rg   rT   rT   rU   r     s   zCapacityLimiter.__aexit__rk   c                 C  rl   rP   ri  rf  r]   rT   rT   rU   rf    ro   zCapacityLimiter.total_tokensrp   c                 C  rq   rP   rj  rr   rT   rT   rU   rf    rs   r   c                 C  rl   rP   )ri  borrowed_tokensr]   rT   rT   rU   rk    ro   zCapacityLimiter.borrowed_tokensc                 C  rl   rP   )ri  available_tokensr]   rT   rT   rU   rl    ro   z CapacityLimiter.available_tokensc                 C  rh   rP   )ri  acquire_nowaitr]   rT   rT   rU   rm    rj   zCapacityLimiter.acquire_nowaitborrowerrM   c                 C  r   rP   )ri  acquire_on_behalf_of_nowaitrZ   rn  rT   rT   rU   ro    r   z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   r   rP   )ri  acquirer]   rT   rT   rU   rq    r   zCapacityLimiter.acquirec                   s   | j |I d H  d S rP   )ri  acquire_on_behalf_ofrp  rT   rT   rU   rr    s   z$CapacityLimiter.acquire_on_behalf_ofc                 C  r_  rP   )ri  releaser]   rT   rT   rU   rs    r   zCapacityLimiter.releasec                 C  s   | j |S rP   )ri  release_on_behalf_ofrp  rT   rT   rU   rt    s   z$CapacityLimiter.release_on_behalf_ofr'   c                 C  s&   | j  }t|j|jt|j|jdS )N)rk  rf  	borrowersra  )ri  rb  r'   rk  rf  tupleru  ra  )rZ   origrT   rT   rU   rb    s   
zCapacityLimiter.statisticsrP   )rf  rg  rJ   rh  rN   r3   )rf  rg  rJ   rh  rN   rV   rz   )r^   r_   r`   ra   rb   rc   rN   rV   r{   r|   r   )rn  rM   rN   rV   )rN   r'   )r~   r   r   rR   r[   r   r   r   rf  r   rk  rl  rm  ro  rq  rr  rs  rt  rb  rT   rT   rT   rU   r3     s4    








r3   _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 rP   )_signals)rZ   r{  rT   rT   rU   r[     r   z_SignalReceiver.__init__rN   c                 C  s   t j| j | _| j | _| S rP   )rX   open_signal_receiverr}  _cmr\   rz  r]   rT   rT   rU   r\     s   z_SignalReceiver.__enter__r^   r_   r`   ra   rb   rc   rd   c                 C  re   rP   )r  rf   rg   rT   rT   rU   rf     s   z_SignalReceiver.__exit__c                 C  s   | S rP   rT   r]   rT   rT   rU   	__aiter__  s   z_SignalReceiver.__aiter__r
   c                   s   | j  I d H }t|S rP   )rz  	__anext__r
   )rZ   signumrT   rT   rU   r    s   z_SignalReceiver.__anext__N)r{  r|  )rN   ry  ry   )rN   r
   )	r~   r   r   r   r[   r\   rf   r  r  rT   rT   rT   rU   ry    s   
 



ry  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   rN   rV   c                 K  s$   ddl m} | | _d | _|| _d S )Nr   )Queue)queuer  _call_queue_send_stream_options)rZ   r  r  rT   rT   rU   r[     s   
zTestRunner.__init__r^   r_   r`   ra   rb   types.TracebackType | Nonec                 C  s<   | j r| j   | j d ur| j   | j d usd S d S d S rP   )r  r   r  getrg   rT   rT   rU   rf     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>  )r1   r  r   r.  r   r   )rZ   receive_streamcorooutcome_holderretvalr   rT   rT   rU   _run_tests_and_fixtures  s   "z"TestRunner._run_tests_and_fixturesoutcomerM   c                 C  s
   d | _ d S rP   )r  )rZ   r  rT   rT   rU   _main_task_finished  r   zTestRunner._main_task_finishedr    Callable[P, Awaitable[T_Retval]]r   P.argsrL   P.kwargsrF   c                 O  s   | j d u r'tjj| jf| jj| jd| j | j d u r'| j	   | j d u sg }| j 
||i ||f |s@| j	   |r8|d  S )N)run_sync_soon_threadsafedone_callbackr   )r  rX   r   start_guest_runr  r  putr  r  r  send_nowaitunwrap)rZ   r   r   rL   r  rT   rT   rU   _call_in_runner_task  s$   


zTestRunner._call_in_runner_taskfixture_func,Callable[..., AsyncGenerator[T_Retval, Any]]r   Iterable[T_Retval]c                 c  s`    |di |}|  |jd }|V  z	|  |jd  W n
 ty%   Y d S w |  |j td)Nz$Async generator fixture did not stoprT   )r  asendStopAsyncIterationr   r   )rZ   r  rL   asyncgenfixturevaluerT   rT   rU   run_asyncgen_fixture,  s   zTestRunner.run_asyncgen_fixture,Callable[..., Coroutine[Any, Any, T_Retval]]c                 C  s   | j |fi |S rP   r  )rZ   r  rL   rT   rT   rU   run_fixture>  s   zTestRunner.run_fixture	test_func'Callable[..., Coroutine[Any, Any, Any]]c                 C  s   | j |fi | d S rP   r  )rZ   r  rL   rT   rT   rU   run_testE  s   zTestRunner.run_testN)r  r   rN   rV   )r^   r_   r`   ra   rb   r  rN   rV   rz   )r  rM   rN   rV   )r   r  r   r  rL   r  rN   rF   )r  r  rL   r   rN   r  )r  r  rL   r   rN   rF   )r  r  rL   r   rN   rV   )r~   r   r   r[   rf   r  r  r  r  r  r  rT   rT   rT   rU   r    s    






r  c                      r4  )TrioTaskInfotasktrio.lowlevel.Taskc                   sH   d }|j r|j jrt|j j}t t|||j|j t|| _	d S rP   )
parent_nurseryparent_taskidr   r[   r   r  weakrefproxy_task)rZ   r  	parent_idr   rT   rU   r[   L  s
   zTrioTaskInfo.__init__rN   rt   c                 C  s"   z| j jjW S  ty   Y dS w r   )r  _cancel_statuseffectively_cancelledReferenceErrorr]   rT   rT   rU   has_pending_cancellationT  s
   z%TrioTaskInfo.has_pending_cancellation)r  r  r}   )r~   r   r   r[   r  r   rT   rT   r   rU   r  K  s    r  c                   @  sV  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		3ddd8d9Zedd:d;Zedd=d>Zedd?d@ZeddBdCZed3d3ddDddRdSZeddVdWZe	3ddd_d`ZeddddeZeddidjZeddkdlZeddrdsZeeddwdxZ eeddzdxZ edd}dxZ ed~d~d~d~d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*d3S )TrioBackendr   1Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]]r   r   rL   r   r  rN   rF   c                 C  s   t j|g|R  S rP   )rX   run)rS   r   r   rL   r  rT   rT   rU   r  ^  s   zTrioBackend.runrM   c                 C  s
   t j S rP   )rX   r   r   r   rT   rT   rU   current_tokenh  s   
zTrioBackend.current_tokenrk   c                 C     t  S rP   )rX   current_timer   rT   rT   rU   r  l  ro   zTrioBackend.current_timetype[BaseException]c                 C  s   t jS rP   )rX   r   r   rT   rT   rU   cancelled_exception_classp  r   z%TrioBackend.cancelled_exception_classrV   c                      t j I d H  d S rP   )rX   r   r  r   rT   rT   rU   r  t     zTrioBackend.checkpointc                   r  rP   )rX   r   checkpoint_if_cancelledr   rT   rT   rU   r  x  r  z#TrioBackend.checkpoint_if_cancelledc                   r  rP   )rX   r   cancel_shielded_checkpointr   rT   rT   rU   r  |  r  z&TrioBackend.cancel_shielded_checkpointdelayc                   s   t |I d H  d S rP   )rX   r   )rS   r  rT   rT   rU   r     r  zTrioBackend.sleepFrn   rx   rn   rx   rt   abc.CancelScopec                C  s   t ||dS )Nr  r7   )rS   rn   rx   rT   rT   rU   create_cancel_scope  s   zTrioBackend.create_cancel_scopec                 C  r  rP   )rX   current_effective_deadliner   rT   rT   rU   r    ro   z&TrioBackend.current_effective_deadlineabc.TaskGroupc                 C     t  S rP   )r   r   rT   rT   rU   create_task_group  r   zTrioBackend.create_task_group	abc.Eventc                 C  r  rP   r4   r   rT   rT   rU   create_event  r   zTrioBackend.create_eventrf  r3   c                 C     t |S rP   r2   )rS   rf  rT   rT   rU   create_capacity_limiter  ro   z#TrioBackend.create_capacity_limiterN&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 )NrN   rF   c                     s6   t t   W  d    S 1 sw   Y  d S rP   )r+   r  rT   r   r   tokenrT   rU   wrapper  s   $z6TrioBackend.run_sync_in_worker_thread.<locals>.wrapper)r  r  )rN   rF   )r  r  r%   r   rX   r3   )rS   r   r   r  r  r  rT   r  rU   run_sync_in_worker_thread  s   
z%TrioBackend.run_sync_in_worker_threadc                 C  s   t j  d S rP   )rX   r   check_cancelledr   rT   rT   rU   r       zTrioBackend.check_cancelledr  c                 C     t jj|g|R  S rP   )rX   r   r  rS   r   r   r  rT   rT   rU   run_async_from_thread     z!TrioBackend.run_async_from_threadc                 C  r  rP   )rX   r   r%   r  rT   rT   rU   run_sync_from_thread  r  z TrioBackend.run_sync_from_threadabc.BlockingPortalc                 C  r  rP   )r   r   rT   rT   rU   create_blocking_portal  r   z"TrioBackend.create_blocking_portal)cwdenvstart_new_sessioncommand#str | bytes | Sequence[str | bytes]shellr   int | IO[Any] | Noner   r   r  str | bytes | PathLike | Noner  Mapping[str, str] | Noner  r   c             
     sn   t jj||||||||dI d H }	|	jrt|	jnd }
|	jr$t|	jnd }|	jr.t|	jnd }t|	|
||S )N)r   r   r   r  r  r  r  )	rX   r   open_processr   r   r   r   r   r   )rS   r  r  r   r   r   r  r  r  r   stdin_streamstdout_streamstderr_streamrT   rT   rU   r    s   
zTrioBackend.open_processr   r   c                 C  s   t jt| d S rP   )rX   r   spawn_system_taskr   )rS   r   rT   rT   rU   #setup_process_pool_exit_at_shutdown  s   z/TrioBackend.setup_process_pool_exit_at_shutdownhoststrportr   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_INETrX   r@  rA  rB  bindconnectr   r   r  )rS   r  r  r  familyr   rT   rT   rU   connect_tcp  s   zTrioBackend.connect_tcppathstr | bytesabc.UNIXSocketStreamc                   sD   t jtj}z||I d H  W t|S  ty!   |   w rP   )rX   r  AF_UNIXr  r   r   r  )rS   r  r   rT   rT   rU   connect_unix  s   zTrioBackend.connect_unixsockr   abc.SocketListenerc                 C  r  rP   )r5  rS   r  rT   rT   rU   create_tcp_listener  ro   zTrioBackend.create_tcp_listenerc                 C  r  rP   )rH  r  rT   rT   rU   create_unix_listener  ro   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  )
rX   r  
SOCK_DGRAMr@  r  SO_REUSEPORTr  r  rU  rI  )rS   r  r  r  r	  r   rT   rT   rU   create_udp_socket  s   zTrioBackend.create_udp_socketr6  remote_pathabc.UNIXDatagramSocketc                      d S rP   rT   rS   r6  r  rT   rT   rU   create_unix_datagram_socket"     z'TrioBackend.create_unix_datagram_socketabc.ConnectedUNIXDatagramSocketc                   r  rP   rT   r  rT   rT   rU   r  (  r  str | bytes | None8abc.UNIXDatagramSocket | abc.ConnectedUNIXDatagramSocketc                   s2   t j|}|r||I d H  t|S t|S rP   )rX   r  r:  r  r]  r\  )rS   r6  r  r   rT   rT   rU   r  .  s   r   )r  r  protor'  bytes | str | Nonestr | int | Noneint | AddressFamilyr  int | SocketKindr  r'  ]list[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int]]]c                  s   t j||||||I d H S rP   )rX   r  getaddrinfo)rS   r  r  r  r  r  r'  rT   rT   rU   r  :  s   zTrioBackend.getaddrinfosockaddrr9   tuple[str, str]c                   s   t j||I d H S rP   )rX   r  getnameinfo)rS   r  r'  rT   rT   rU   r!  O  s   zTrioBackend.getnameinfoc              
     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"   rX   r.   with_traceback__traceback__r-   rS   r  r   rT   rT   rU   wait_socket_readableU     
z TrioBackend.wait_socket_readablec              
     r"  )Nr  )r#   rX   r.   r#  r$  r-   r%  rT   rT   rU   wait_socket_writable^  r'  z TrioBackend.wait_socket_writablec                 C  s<   zt  W S  ty   ttj d}t | | Y S w )Nre  )rx  r  LookupErrorr3   rX   	to_threadcurrent_default_thread_limiterrd  )rS   r  rT   rT   rU   r+  g  s   

z*TrioBackend.current_default_thread_limiterr{  r
   &ContextManager[AsyncIterator[Signals]]c                 G  r  rP   )ry  )rS   r{  rT   rT   rU   r~  r  s   z TrioBackend.open_signal_receiverr)   c                 C  s   t  }t|S rP   )r!   r  )rS   r  rT   rT   rU   get_current_taskx  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 rP   )r    r  child_nurserieschild_tasksr.  extend)rS   	root_task
task_infos	nurseriesnew_nurseriesnurseryr  rT   rT   rU   get_running_tasks}  s   

	zTrioBackend.get_running_tasksc                   s   ddl m} | I d H  d S )Nr   )wait_all_tasks_blocked)trio.testingr8  )rS   r8  rT   rT   rU   r8    s   z"TrioBackend.wait_all_tasks_blockedr  c                 C  s   t di |S rW   )r  )rS   r  rT   rT   rU   create_test_runner  r  zTrioBackend.create_test_runner)
r   r  r   r   rL   r   r  r   rN   rF   )rN   rM   r{   )rN   r  rz   )r  rk   rN   rV   )rn   rk   rx   rt   rN   r  )rN   r  )rN   r  )rf  rk   rN   r3   )FN)
r   r  r   r   r  rt   r  r  rN   rF   )r   r  r   r   r  rM   rN   rF   )r   r  r   r   r  rM   rN   rF   )rN   r  )r  r  r  rt   r   r  r   r  r   r  r  r  r  r  r  rt   rN   r   r   r   rN   rV   rP   )r  r  r  r   r  r  rN   r  )r  r  rN   r  )r  r   rN   r  )
r  r  r  r  r  r  r	  rt   rN   r
  )r6  r   r  rV   rN   r  )r6  r   r  r  rN   r  )r6  r   r  r  rN   r  )r  r  r  r  r  r  r  r  r  r   r'  r   rN   r  )r   )r  r9   r'  r   rN   r   )r  r   rN   rV   )rN   r3   )r{  r
   rN   r,  )rN   r)   )rN   r.  )r  r   rN   r  )+r~   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-  r7  r8  r:  rT   rT   rT   rU   r  ]  s    		

r  r;  )
__future__r   r  r   r  systypesr  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   trio.from_threadrX   trio.lowlevelr  r   r   r   r    r!   r"   r#   trio.socketr$   r   trio.to_threadr%    r'   r(   r)   r*   _core._eventloopr+   _core._exceptionsr,   r-   r.   r/   _core._socketsr0   _core._streamsr1   _core._synchronizationr3   BaseCapacityLimiterr5   	BaseEventr6   _core._tasksr8   BaseCancelScoper9   r:   r;   abc._eventloopr<   streams.memoryr=   version_infor@   typing_extensionsrB   rC   exceptiongrouprD   rE   rF   r  rG   rH   rI   r   RunVarr   r   ByteReceiveStreamr   ByteSendStreamr   r   
Instrumentr   r   r   r   r   r  r  SocketListenerr5  rH  rI  rU  r\  r]  rx  ry  r  r  r  backend_classrT   rT   rT   rU   <module>   s    D7; 8
!C

L W  >