a
    !f                    @  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
 d dlmZ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 d d	l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$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;m<Z< d dl=Z=ddl>m?Z?m@Z@mAZAmBZB ddlCmDZDmEZE ddlFmGZGmHZH ddlImJZJmKZKmLZLmMZMmNZN ddlImOZP ddlQmRZRmSZS ddlTmUZV ddlTmWZX ddlTmYZY ddlZm[Z\ ddlBm]Z]m^Z^ ddl_m`Z` ejadkr4d d!d"d#d$Zbnd d!d"d%d$Zbd d&lmcZcmdZdmeZemfZf d d'lmgZh d d(d"d)d*Zie8d+Zje8d,d-d.Zkelejmd/Zne`d0Zod1epd0< d d2d3d4Zqd5d6d7d8d9Zre< ZsefZtd d:d"d;d<Zud=d:d>d?d@dAZvdBdBddCdDdEd:d:d=d+dFdGdHZgejwZwejxZxG dIdJ dJe\Z[d>d2dKdLZyd>d2dMdNZzd>d2dOdPZ{dQd2dRdSZ|dQd2dTdUZ}G dVdW dWZ~e< ZG dXdY dYePZOG dZd[ d[eBjZG d\d] d]eBjZe7e5ej e5e f ZG d^d_ d_e'Ze`d`Zdaepd`< e`dbZdcepdb< dBddddedEd:dfd+dgdhdiZddjdedEdkd+dldmdnZdDdEd+dodpdqZG drds dseBjZedBdtG dudv dveBjZedBdtG dwdx dxeBjZedBdtG dydz dzeBjZdddBd{d|d:d}d}d}d~dd:dzd	ddZddEd>dddZdd>dddZdd>dddZG dd dejZG dd dejZG dd deBjZG dd deBjZG dd deBjZG dd deBjZG dd deBjZG dd deBjZdd6ddddddZd6ddddZdddd:ddddZd d d d dddddddddddZdddddddZe`dZdepd< e`dZdepd< dd>dddZdd>dddZG ddĄ deXZWG ddƄ deVZUe`dǃZdepd< dd2ddʄZG dd̄ deDd Zddd͜ddτZd dd"dd҄Zdd2ddԄZdd2ddׄZd>d2ddلZG ddۄ deBjZdS )    )annotationsN)_run_until_complete_cb)OrderedDictdeque)Future)Contextcopy_context)	dataclass)partialwraps)CORO_RUNNINGCORO_SUSPENDEDGEN_RUNNINGGEN_SUSPENDEDgetcoroutinestategetgeneratorstate)IOBase)PathLike)Queue)AddressFamily
SocketKind)Thread)TracebackType)IOAnyAsyncGenerator	AwaitableCallable
Collection	Coroutine	GeneratorIterableMappingOptionalSequenceTupleTypeVarUnioncast)WeakKeyDictionary   )CapacityLimiterStatisticsEventStatisticsTaskInfoabc)DeprecatedAsyncContextManagerDeprecatedAwaitable)claim_worker_threadthreadlocals)BrokenResourceErrorBusyResourceErrorClosedResourceErrorEndOfStream
WouldBlock)ExceptionGroup)GetAddrInfoReturnTypeconvert_ipv6_sockaddr)CapacityLimiter)Event)ResourceGuard)CancelScope)IPSockAddrTypeUDPPacketType)RunVar      asyncio.TaskzGenerator | Awaitable[Any])taskreturnc                 C  s   |   S N)get_cororF    rK   Y/var/www/html/python-backend/venv/lib/python3.9/site-packages/anyio/_backends/_asyncio.pyrI   H   s    rI   c                 C  s   | j S rH   )_cororJ   rK   rK   rL   rI   M   s    )	all_taskscreate_taskcurrent_taskget_running_loop)runzIterable[Callable]c                 C  s   dd | j D S )Nc                 S  s   g | ]\}}|qS rK   rK   ).0cbcontextrK   rK   rL   
<listcomp>V       z'_get_task_callbacks.<locals>.<listcomp>)
_callbacksrJ   rK   rK   rL   _get_task_callbacksU   s    rY   T_RetvalT_contraT)contravariantget_name
_root_taskzRunVar[asyncio.Task | None]rG   c                  C  s   t d } | d ur|  s| S t D ]N}|jr$| s$t|D ]2}|tu sZt|dd dkr>t | |    S q>q$t	t
jt }t|}|r|j}|r|jd ur|j}q|d urt	t
j|jS |S )N
__module__zuvloop.loop)r^   getdonerN   rX   rY   r   getattrsetr(   asyncioTaskrP   _task_statescancel_scope_parent_scope
_host_task)	root_taskrF   rT   staterh   rK   rK   rL   find_root_taskc   s*    



rm   r   str)funcrG   c                 C  s0   t | dd }t | dd }ddd ||fD S )Nr`   __qualname__.c                 S  s   g | ]}|r|qS rK   rK   )rS   xrK   rK   rL   rV      rW   z%get_callable_name.<locals>.<listcomp>)rc   join)ro   modulequalnamerK   rK   rL   get_callable_name   s    rv   boolc                 C  s   t ttttf t| }zt|ttfv W S  ty|   ztt t	|t
tfv W  Y S  tyv   td|  dY n0 Y n0 dS )zBReturn ``True`` if the task has been started and has not finished.zCannot determine if task z has started or notN)r(   r   r   rI   r   r   r   AttributeErrorr   r    r   r   	Exception)rF   cororK   rK   rL   _task_started   s    r{   &asyncio.AbstractEventLoopPolicy | NoneNone)policy
use_uvlooprG   c                 C  sp   | d u rZ|rZt jjdkrZzdd l}W n ty6   Y n$0 ttjdrRt|jj	drZ|
 } | d urlt|  d S )Ncpythonr   shutdown_default_executor)sysimplementationnameuvloopImportErrorhasattrre   AbstractEventLooploopZLoopZEventLoopPolicyset_event_loop_policy)r~   r   r   rK   rK   rL   _maybe_set_event_loop_policy   s    r   Fdebugr   r~   z"Callable[..., Awaitable[T_Retval]]object)ro   argsr   r   r~   rG   c                  s4   t dd fdd}t|| t| |dS )NrZ   r_   c                    sZ   t tjt } td td }|t| < tr6| |j	 z  I d H W t| = S t| = 0 d S rH   )
r(   re   rf   rP   	TaskStaterv   rg   _native_task_namesset_namer   )rF   
task_stater   ro   rK   rL   wrapper   s    zrun.<locals>.wrapper)r   )r   r   
native_run)ro   r   r   r~   r   r   rK   r   rL   rR      s    
rR   c                   @  s  e Zd Zejddddd dddZejdf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d
ddZdd
ddZ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jddd$d*d)Zd+S ),r>   F)deadlineshieldfloatrw   )r   r   rG   c                C  s
   t | S rH   r   __new__)clsr   r   rK   rK   rL   r      s    zCancelScope.__new__c                 C  sH   || _ || _d | _d| _d| _d | _d | _t | _d | _	d| _
d| _d S )NFr   )	_deadline_shieldri   _cancel_called_active_timeout_handle_cancel_handlerd   _tasksrj   _timeout_expired_cancel_calls)selfr   r   rK   rK   rL   __init__   s    zCancelScope.__init__r_   c                 C  s   | j rtdttjt  | _}| j| zt	| }W n6 t
yp   trT| nd }td || }|t	|< Y n0 |j| _| |_|   d| _ | jr|   | S )Nz;Each CancelScope may only be used for a single 'with' blockT)r   RuntimeErrorr(   re   rf   rP   rj   r   addrg   KeyErrorr   r]   r   rh   ri   _timeoutr   _deliver_cancellation)r   Z	host_taskr   Z	task_namerK   rK   rL   	__enter__   s&    zCancelScope.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Nonebool | Noneexc_typeexc_valexc_tbrG   c                 C  s   | j stdt | jur"td| jd us0J t| j}|d u sN|j| urVtdd| _ | jrr| j  d | _| j	
| j | j|_| jr|   |d urt|tr|jn|g}tdd |D r| jr|  S | jsd S |  s|  S d S )NzThis cancel scope is not activezIAttempted to exit cancel scope in a different task than it was entered inzTAttempted to exit a cancel scope that isn't the current tasks's current cancel scopeFc                 s  s   | ]}t |tV  qd S rH   )
isinstanceCancelledError)rS   excrK   rK   rL   	<genexpr>3  rW   z'CancelScope.__exit__.<locals>.<genexpr>)r   r   rP   rj   rg   ra   rh   r   cancelr   removeri   r   _deliver_cancellation_to_parentr   r8   
exceptionsallr   	_uncancelr   _parent_cancelled)r   r   r   r   Zhost_task_stater   rK   rK   rL   __exit__  s>    
zCancelScope.__exit__c                 C  sJ   t jdk s| jd u rd| _dS t| jD ]}| j  q(d| _| j  S )N)rC      r   T)r   version_inforj   r   rangeZuncancel
cancelling)r   irK   rK   rL   r   ?  s    zCancelScope._uncancelr}   c                 C  sF   | j tjkrBt }| | j kr0d| _|   n|| j | j| _	d S NT)
r   mathinfrQ   timer   r   call_atr   r   )r   r   rK   rK   rL   r   K  s    
zCancelScope._timeoutc                 C  s   d}t  }| jD ]l}|jrqt| j}|| urH|du s||jr@qq&|j}q&d}||ur|| ju sft|r|  j	d7  _	|
  q|rt | j| _nd| _dS )z
        Deliver cancellation to directly contained tasks and nested cancel scopes.

        Schedule another run at the end if we still have tasks eligible for cancellation.
        FNT   )rP   r   _must_cancelrg   rh   r   ri   rj   r{   r   r   rQ   	call_soonr   r   )r   Zshould_retrycurrentrF   rh   rK   rK   rL   r   T  s.    


z!CancelScope._deliver_cancellationc                 C  sJ   | j }d}|dur6|jr&|jdu r&|}|jr.q6|j }q
|durF|  dS )zIStart cancellation effort in the farthest directly cancelled parent scopeN)ri   r   r   r   r   )r   scopeZscope_to_cancelrK   rK   rL   r   x  s    z+CancelScope._deliver_cancellation_to_parentc                 C  s*   | j }|d ur&|js&|jrdS |j }qdS )NTF)ri   r   r   )r   rh   rK   rK   rL   r     s    zCancelScope._parent_cancelledr0   c                 C  s>   | j s4| jr| j  d | _d| _ | jd ur4|   t| jS r   )r   r   r   rj   r   r0   r   rK   rK   rL   r     s    

zCancelScope.cancelc                 C  s   | j S rH   )r   r   rK   rK   rL   r     s    zCancelScope.deadlinevaluerG   c                 C  s<   t || _| jd ur$| j  d | _| jr8| js8|   d S rH   )r   r   r   r   r   r   r   r   r   rK   rK   rL   r     s    


c                 C  s   | j S rH   )r   r   rK   rK   rL   cancel_called  s    zCancelScope.cancel_calledc                 C  s   | j S rH   )r   r   rK   rK   rL   r     s    zCancelScope.shieldc                 C  s    | j |kr|| _ |s|   d S rH   )r   r   r   rK   rK   rL   r     s    
N)__name__r`   rp   r   r   r   r   r   r   r   r   r   r   r   r   propertyr   setterr   r   rK   rK   rK   rL   r>      s*   4	$	r>   c                     s   t dI d H  d S Nr   )sleeprK   rK   rK   rL   
checkpoint  s    r   c                    sf   t  } | d u rd S zt|  j}W n ty4   Y d S 0 |rb|jrPtdI d H  q6|jrZqbq6|j}q6d S r   )rP   rg   rh   r   r   r   r   ri   )rF   rh   rK   rK   rL   checkpoint_if_cancelled  s    r   c                     s<   t dd tdI d H  W d    n1 s.0    Y  d S )NTr   r   )r>   r   rK   rK   rK   rL   cancel_shielded_checkpoint  s    r   r   c                  C  sh   zt t  j} W n ty(   tj Y S 0 tj}| rdt|| j}| jrRtj }qdq0| j	r\qdq0| j
} q0|S rH   )rg   rP   rh   r   r   r   minr   r   r   ri   )rh   r   rK   rK   rL   current_effective_deadline  s    r   c                   C  s
   t   S rH   )rQ   r   rK   rK   rK   rL   current_time  s    r   c                   @  s&   e Zd ZdZdZddddddZdS )	r   z
    Encapsulates auxiliary task information that cannot be added to the Task instance itself
    because there are no guarantees about its implementation.
    	parent_idr   rh   
int | Nonez
str | NoneCancelScope | Nonec                 C  s   || _ || _|| _d S rH   r   )r   r   r   rh   rK   rK   rL   r     s    zTaskState.__init__N)r   r`   rp   __doc__	__slots__r   rK   rK   rK   rL   r     s   r   c                      s"   e Zd Zdd fddZ  ZS )r8   list[BaseException])r   c                   s   t    || _d S rH   )superr   r   r   r   	__class__rK   rL   r     s    
zExceptionGroup.__init__)r   r`   rp   r   __classcell__rK   rK   r   rL   r8     s   r8   c                   @  s.   e Zd ZdddddZdddd	d
dZdS )_AsyncioTaskStatusasyncio.Futureint)futurer   c                 C  s   || _ || _d S rH   )_future
_parent_id)r   r   r   rK   rK   rL   r     s    z_AsyncioTaskStatus.__init__NzT_contra | Noner}   r   c                 C  sN   z| j | W n tjy.   tdd Y n0 ttjt }| jt	| _
d S )Nz.called 'started' twice on the same task status)r   
set_resultre   InvalidStateErrorr   r(   rf   rP   r   rg   r   )r   r   rF   rK   rK   rL   started  s    z_AsyncioTaskStatus.started)N)r   r`   rp   r   r   rK   rK   rK   rL   r     s   r   c                   @  s   e Zd ZddddZd dddZddd	d
dddZedddddZ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d ddddd!d$d%ZdS )'	TaskGroupr}   r_   c                 C  s   t  | _d| _g | _d S )NF)r>   rh   r   _exceptionsr   rK   rK   rL   r   *  s    zTaskGroup.__init__c                   s   | j   d| _| S r   )rh   r   r   r   rK   rK   rL   
__aenter__/  s    
zTaskGroup.__aenter__r   r   r   r   r   c              
     s  | j |||}|d ur.| j   | j| | j jrpzt| j jI d H  W q. tjyl   | j   Y q.0 q.d| _	| j 
 s| | j}n| j}zJt|dkrtdd |D rtqt|n|r|d |ur|d W n. ty } zd |_ W Y d }~n
d }~0 0 |S )NFr   c                 s  s    | ]}t |to|j V  qd S rH   )r   r   r   )rS   erK   rK   rL   r   M  s   z&TaskGroup.__aexit__.<locals>.<genexpr>r   )rh   r   r   r   appendr   re   waitr   r   r   _filter_cancellation_errorslenr   r8   BaseException__context__)r   r   r   r   Zignore_exceptionr   r   rK   rK   rL   	__aexit__4  s4    


zTaskGroup.__aexit__zSequence[BaseException]r   )r   rG   c                 C  s   g }| D ]}t |trt|j}t|dkr:|| qt|dkrV||d  q|rt|}|j|_|j|_|j	|_	|| qt |t
r|jr|| q|S Nr   r   )r   r8   r   r   r   r   r   	__cause__r   __traceback__r   r   )r   Zfiltered_exceptionsr   Znew_exceptionsnew_excrK   rK   rL   r   ^  s"    
z%TaskGroup._filter_cancellation_errorsr   asyncio.Future | None)rz   task_status_futurerG   c              
     s   d }}t tjt }zz|I d H  W nV ty| } z>|d u sF| r^| j| | j	  n
|
| W Y d }~n(d }~0 0 |d ur| s|
td W || jjv r| jj| t|= n"|| jjv r| jj| t|= 0 d S )NT2Child exited without calling task_status.started())r(   re   rf   rP   r   rb   r   r   rh   r   set_exceptionr   r   r   rg   )r   rz   r  Z__traceback_hide__Z__tracebackhide__rF   r   rK   rK   rL   _run_wrapped_tasku  s&     zTaskGroup._run_wrapped_taskNzCallable[..., Awaitable[Any]]tupler   rE   )ro   r   r   r  rG   c                   s.  ddd fdd} j s$tdi }|d u r8t|nt|}trL||d< i }rvtt }tt jj	|d< nt jj	}||i |}	t
|	std	| d
t|	d ot|	d }
|
stjdk r܈ |	}	t|	fi |}|
stjdkr|| t|| jdt|<  jj| |S )NrE   r}   )_taskrG   c              
     s   |  j jv sJ  j j|  t| = z|  }W n< tyl } z$t|jtrT|j}q@|}W Y d }~n
d }~0 0 |d urd u s r j	
|  j   qȈ| nd urȈ sȈtd d S )Nr  )rh   r   r   rg   	exceptionr   r   r   rb   r   r   r   r	  r   )r  r   r   r   r  rK   rL   	task_done  s$    z#TaskGroup._spawn.<locals>.task_donez;This task group is not active; no new tasks can be started.r   Ztask_statusz Expected an async function, but z appears to be synchronouscr_framegi_framerB   r   )r   r   rv   rn   r   idrP   r   rh   rj   re   iscoroutine	TypeErrorr   r   r   r
  rO   add_done_callbackr   rg   r   r   )r   ro   r   r   r  r  optionskwargsr   rz   Zforeign_cororF   rK   r  rL   _spawn  s@    





zTaskGroup._spawnr   )ro   r   r   rG   c                G  s   |  ||| d S rH   )r  )r   ro   r   r   rK   rK   rL   
start_soon  s    zTaskGroup.start_soonc             	     s~   t  }| ||||}tddH z|I d H W W  d    S  tyZ   |   Y n0 W d    n1 sp0    Y  d S )NTr   )re   r   r  r>   r   r   )r   ro   r   r   r   rF   rK   rK   rL   start  s    zTaskGroup.start)N)r   r`   rp   r   r   r  staticmethodr   r
  r  r  r  rK   rK   rK   rL   r   )  s   * Ir   c                      s^   e Zd ZdZdddd fddZdd	d
ddddZddddZddddddZ  ZS )WorkerThread
   rE   zset[WorkerThread]zdeque[WorkerThread])rk   workersidle_workersc                   sD   t  jdd || _|| _|| _|j| _td| _t	 | _
d| _d S )NzAnyIO worker threadr  r*   F)r   r   rk   r  r   _loopr   r   queuer   
idle_sincestopping)r   rk   r  r   r   rK   rL   r     s    zWorkerThread.__init__r   r   r   r}   )r   resultr   rG   c                 C  s`   t  | _| js| j|  | s\|d urRt|trFtd}||_	|}|
| n
|| d S )Nzcoroutine raised StopIteration)r   r#  r$  r   r   	cancelledr   StopIterationr   r  r	  r   )r   r   r%  r   r  rK   rK   rL   _report_result  s    
zWorkerThread._report_resultr_   c           	      C  s   t d | jt_| j }|d u r4W d    d S |\}}}}| sd }d }z|j|g|R  }W n( ty } z|}W Y d }~n
d }~0 0 | j s| j	| j
||| | j  qW d    n1 s0    Y  d S )Nre   )r1   r   r2   r"  ra   r&  rR   r   	is_closedcall_soon_threadsafer(  r  )	r   itemrU   ro   r   r   r%  r  r   rK   rK   rL   rR     s$    



zWorkerThread.runNzasyncio.Task | NonefrG   c                 C  sF   d| _ | jd  | j|  z| j|  W n ty@   Y n0 d S r   )r$  r"  
put_nowaitr  discardr   r   
ValueError)r   r-  rK   rK   rL   stop2  s    zWorkerThread.stop)N)	r   r`   rp   MAX_IDLE_TIMEr   r(  rR   r1  r   rK   rK   r   rL   r    s
   r  _threadpool_idle_workerszRunVar[deque[WorkerThread]]_threadpool_workerszRunVar[set[WorkerThread]])cancellablelimiterzCallable[..., T_Retval]zCapacityLimiter | None)ro   r   r5  r6  rG   c             	     s  t  I d H  zt }t }W n2 tyR   t }t }t| t| Y n0 |p\t 4 I d H  t| d t	
 }t }|st|||}|  || ||j nH| }t }	|r|	|d j tjk rq| }
|
j|
j |
  qt }|tjjd  |j|| ||f |I d H W  d    W  d   I d H  S 1 s\0    Y  W d   I d H  q1 I d H s0    Y  d S )Nr   r   )r   r3  ra   r4  LookupErrorr   rd   current_default_thread_limiterr>   re   r   rm   r  r  r   r  r1  popr   r#  r2  popleftrk   remove_done_callbackr   rR   sniffioZcurrent_async_library_cvarr"  r.  )ro   r5  r6  r   r   r  r   rk   ZworkernowZexpired_workerrU   rK   rK   rL   run_sync_in_worker_threadB  s<    


r>  r   z asyncio.AbstractEventLoop | None)ro   r   r   rG   c                  s@   t dd fdd}t |p,tj}||  S )Nr}   r_   c               
     sR   z    W n: tyL }  z"|  t| ts8 W Y d } ~ n
d } ~ 0 0 d S rH   )r   r   r	  r   ry   )r   r   r-  ro   rK   rL   r   u  s    

z%run_sync_from_thread.<locals>.wrapper)r   r   r2   r   r*  r%  )ro   r   r   r   rK   r@  rL   run_sync_from_threadp  s    

rA  )ro   r   rG   c                 G  s   t | | tj}| S rH   )re   run_coroutine_threadsafer2   r   r%  )ro   r   r-  rK   rK   rL   run_async_from_thread  s    
rC  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 )BlockingPortalr_   c                 C  s
   t | S rH   r   r   rK   rK   rL   r     s    zBlockingPortal.__new__r}   c                   s   t    t | _d S rH   )r   r   rQ   r!  r   r   rK   rL   r     s    
zBlockingPortal.__init__r   r  dict[str, Any]r   r   )ro   r   r  r   r   rG   c              	   C  s*   t t| jj|d| j||||| jd d S )Nr  r?  )rA  r
   Z_task_groupr  Z
_call_funcr!  )r   ro   r   r  r   r   rK   rK   rL   _spawn_task_from_thread  s    z&BlockingPortal._spawn_task_from_thread)r   r`   rp   r   r   rG  r   rK   rK   r   rL   rD    s   rD  )eqc                   @  s6   e Zd ZU ded< ddddddZd	d
ddZdS )StreamReaderWrapperzasyncio.StreamReader_stream   r   bytes	max_bytesrG   c                   s"   | j |I d H }|r|S td S rH   )rJ  readr6   )r   rN  datarK   rK   rL   receive  s    zStreamReaderWrapper.receiver}   r_   c                   s   | j   d S rH   )rJ  feed_eofr   rK   rK   rL   aclose  s    zStreamReaderWrapper.acloseN)rK  )r   r`   rp   __annotations__rQ  rS  rK   rK   rK   rL   rI    s   
rI  c                   @  s4   e Zd ZU ded< dddddZddd	d
ZdS )StreamWriterWrapperzasyncio.StreamWriterrJ  rL  r}   r+  rG   c                   s    | j | | j  I d H  d S rH   )rJ  writedrainr   r+  rK   rK   rL   send  s    zStreamWriterWrapper.sendr_   c                   s   | j   d S rH   )rJ  closer   rK   rK   rL   rS    s    zStreamWriterWrapper.acloseN)r   r`   rp   rT  rZ  rS  rK   rK   rK   rL   rU    s   
rU  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asyncio.subprocess.Process_processzStreamWriterWrapper | None_stdinzStreamReaderWrapper | None_stdout_stderrr}   r_   c                   sT   | j r| j  I d H  | jr,| j I d H  | jrB| j I d H  |  I d H  d S rH   )r^  rS  r_  r`  r   r   rK   rK   rL   rS    s    zProcess.acloser   c                   s   | j  I d H S rH   )r]  r   r   rK   rK   rL   r     s    zProcess.waitc                 C  s   | j   d S rH   )r]  	terminater   rK   rK   rL   ra    s    zProcess.terminatec                 C  s   | j   d S rH   )r]  killr   rK   rK   rL   rb    s    zProcess.kill)signalrG   c                 C  s   | j | d S rH   )r]  send_signal)r   rc  rK   rK   rL   rd    s    zProcess.send_signalc                 C  s   | j jS rH   )r]  pidr   rK   rK   rL   re    s    zProcess.pidr   c                 C  s   | j jS rH   )r]  
returncoder   rK   rK   rL   rf    s    zProcess.returncodezabc.ByteSendStream | Nonec                 C  s   | j S rH   )r^  r   rK   rK   rL   stdin  s    zProcess.stdinzabc.ByteReceiveStream | Nonec                 C  s   | j S rH   )r_  r   rK   rK   rL   stdout  s    zProcess.stdoutc                 C  s   | j S rH   )r`  r   rK   rK   rL   stderr  s    zProcess.stderrN)r   r`   rp   rT  rS  r   ra  rb  rd  r   re  rf  rg  rh  ri  rK   rK   rK   rL   r\    s&   

r\  )cwdenvstart_new_sessionz#str | bytes | Sequence[str | bytes]zint | IO[Any] | Nonezstr | bytes | PathLike | NonezMapping[str, str] | None)	commandshellrg  rh  ri  rj  rk  rl  rG   c             	     s   t  I d H  |r>tjttttf | ||||||dI d H }n tj| ||||||dI d H }|jrnt	|jnd }	|j
rt|j
nd }
|jrt|jnd }t||	|
|S )N)rg  rh  ri  rj  rk  rl  )r   re   create_subprocess_shellr(   r'   rn   rL  create_subprocess_execrg  rU  rh  rI  ri  r\  )rm  rn  rg  rh  ri  rj  rk  rl  processZstdin_streamZstdout_streamZstderr_streamrK   rK   rL   open_process  s0    

rr  zset[Process])r  r  rG   c                 C  s   zt   }W n ty&   d}Y n0 | D ]R}|jdu r<q,|jjj  |j	jj  |j
jj  |  |r,||j q,dS )zG
    Forcibly shuts down worker processes belonging to this event loop.N)re   get_event_loop_policyget_child_watcherNotImplementedErrorrf  r^  rJ  
_transportr[  r_  r`  rb  remove_child_handlerre  )r  r  Zchild_watcherrq  rK   rK   rL   '_forcibly_shutdown_process_pool_on_exit!  s    

rx  )r  rG   c                   sb   zt tjI dH  W nH tjy\   | D ]}|jdu r(|  q(| D ]}| I dH  qDY n0 dS )z
    Shuts down worker processes belonging to this event loop.

    NOTE: this only works when the event loop was started using asyncio.run() or anyio.run().

    N)r   r   r   re   r   rf  rb  rS  )r  rq  rK   rK   rL   _shutdown_process_pool_on_exit9  s    

ry  c                 C  s:   t rddini }tt| fi | t tt|  d S )Nr   z AnyIO process pool shutdown task)r   rO   ry  rm   r  r
   rx  )r  r  rK   rK   rL   #setup_process_pool_exit_at_shutdownL  s    rz  c                   @  s   e Zd ZU ded< ded< ded< dZded< d	d
dddZdd
dddZdd
dddZddddZd
dddZ	d
dddZ
dS )StreamProtocolzdeque[bytes]
read_queueasyncio.Event
read_eventwrite_eventNException | Noner  asyncio.BaseTransportr}   	transportrG   c                 C  s<   t  | _t | _t | _| j  ttj|	d d S r   )
r   r|  re   r<   r~  r  rd   r(   	Transportset_write_buffer_limitsr   r  rK   rK   rL   connection_madea  s
    


zStreamProtocol.connection_mader   rG   c                 C  s,   |rt  | _|| j_| j  | j  d S rH   )r3   r  r  r~  rd   r  r   r   rK   rK   rL   connection_losth  s
    
zStreamProtocol.connection_lostrL  )rP  rG   c                 C  s   | j | | j  d S rH   )r|  r   r~  rd   )r   rP  rK   rK   rL   data_receivedp  s    zStreamProtocol.data_receivedr   r_   c                 C  s   | j   dS r   )r~  rd   r   rK   rK   rL   eof_receivedt  s    
zStreamProtocol.eof_receivedc                 C  s   t  | _d S rH   )re   r<   r  r   rK   rK   rL   pause_writingx  s    zStreamProtocol.pause_writingc                 C  s   | j   d S rH   r  rd   r   rK   rK   rL   resume_writing{  s    zStreamProtocol.resume_writing)r   r`   rp   rT  r  r  r  r  r  r  r  rK   rK   rK   rL   r{  [  s   
r{  c                   @  s   e Zd ZU ded< ded< ded< dZded< d	d
dddZdd
dddZddd
dddZdd
dddZd
dddZ	d
dddZ
dS )DatagramProtocolz#deque[tuple[bytes, IPSockAddrType]]r|  r}  r~  r  Nr  r  r  r}   r  c                 C  s.   t dd| _t | _t | _| j  d S )Nd   )maxlen)r   r|  re   r<   r~  r  rd   r  rK   rK   rL   r    s    

z DatagramProtocol.connection_mader  c                 C  s   | j   | j  d S rH   )r~  rd   r  r  rK   rK   rL   r    s    
z DatagramProtocol.connection_lostrL  r?   )rP  addrrG   c                 C  s&   t |}| j||f | j  d S rH   )r:   r|  r   r~  rd   )r   rP  r  rK   rK   rL   datagram_received  s    z"DatagramProtocol.datagram_receivedry   c                 C  s
   || _ d S rH   )r  r  rK   rK   rL   error_received  s    zDatagramProtocol.error_receivedr_   c                 C  s   | j   d S rH   )r  clearr   rK   rK   rL   r    s    zDatagramProtocol.pause_writingc                 C  s   | j   d S rH   r  r   rK   rK   rL   r    s    zDatagramProtocol.resume_writing)r   r`   rp   rT  r  r  r  r  r  r  r  rK   rK   rK   rL   r    s   
r  c                   @  sl   e Zd ZdddddZedddd	ZddddddZdddddZddddZddddZ	dS )SocketStreamzasyncio.Transportr{  r  protocolc                 C  s*   || _ || _td| _td| _d| _d S Nreading from
writing toFrv  	_protocolr=   _receive_guard_send_guard_closedr   r  r  rK   rK   rL   r     s
    

zSocketStream.__init__socket.socketr_   c                 C  s   | j dS Nsocketrv  get_extra_infor   rK   rK   rL   _raw_socket  s    zSocketStream._raw_socketrK  r   rL  rM  c              	     s  | j  t I d H  | jj sP| j sP| j  | jj I d H  | j	  z| jj
 }W n8 ty   | jr|td n| jjr| jjntd Y n0 t||kr|d | ||d   }}| jj
| | jj
s| jj  W d    n1 s0    Y  |S rH   )r  r   r  r~  is_setrv  
is_closingresume_readingr   pause_readingr|  r:  
IndexErrorr  r5   r  r6   r   
appendleftr  )r   rN  chunkleftoverrK   rK   rL   rQ    s.    



*zSocketStream.receiver}   rV  c                   s   | j  t I d H  | jr tn| jjd ur4| jjz| j| W n8 ty| } z | j	 rft
|n W Y d }~n
d }~0 0 | jj I d H  W d    n1 s0    Y  d S rH   )r  r   r  r5   r  r  rv  rW  r   r  r3   r  r   )r   r+  r   rK   rK   rL   rZ    s    
zSocketStream.sendc                   s&   z| j   W n ty    Y n0 d S rH   )rv  	write_eofOSErrorr   rK   rK   rL   send_eof  s    zSocketStream.send_eofc                   sX   | j  sTd| _z| j   W n ty0   Y n0 | j   tdI d H  | j   d S NTr   )rv  r  r  r  r  r[  r   abortr   rK   rK   rL   rS    s    

zSocketStream.acloseN)rK  )
r   r`   rp   r   r   r  rQ  rZ  r  rS  rK   rK   rK   rL   r    s   "r  c                   @  s   e Zd ZU dZded< dZded< dZdddd	Zedd
ddZ	dddddZ
dddddZdd
ddZd*dddddZdddddZddd d!d"d#Zdd$dd%d&d'Zdd
d(d)ZdS )+UNIXSocketStreamNr  _receive_future_send_futureFr  
raw_socketc                 C  s&   || _ t | _td| _td| _d S )Nr  r  )_UNIXSocketStream__raw_socketrQ   r!  r=   r  r  r   r  rK   rK   rL   r     s    
zUNIXSocketStream.__init__r_   c                 C  s   | j S rH   )r  r   rK   rK   rL   r    s    zUNIXSocketStream._raw_socketasyncio.AbstractEventLoopr   )r   rG   c                   sF   ddd fdd}t   }_jj|jd  || |S )Nr   r}   r,  c                   s   `  j d S rH   )r  remove_readerr  r-  r   r   rK   rL   callback  s    z7UNIXSocketStream._wait_until_readable.<locals>.callback)re   r   r  r!  
add_readerr  r   r  r   r   r  r-  rK   r  rL   _wait_until_readable  s
    
z%UNIXSocketStream._wait_until_readablec                   sF   ddd fdd}t   }_jj|jd  || |S )Nr   r}   r,  c                   s   `  j d S rH   )r  remove_writerr  r  r  rK   rL   r    s    z7UNIXSocketStream._wait_until_writable.<locals>.callback)re   r   r  r!  
add_writerr  r   r  r  rK   r  rL   _wait_until_writable  s
    
z%UNIXSocketStream._wait_until_writabler}   c                   s8   | j  | jtj W d    n1 s*0    Y  d S rH   )r  r  shutdownr  SHUT_WRr   rK   rK   rL   r    s    zUNIXSocketStream.send_eofrK  r   rL  rM  c                   s   t  }t I d H  | j z| j|}W nX tyL   | |I d H  Y q ty } z | jrht	d nt
|W Y d }~qd }~0 0 |st|W  d    S qW d    n1 s0    Y  d S rH   )rQ   r   r  r  recvBlockingIOErrorr  r  _closingr5   r3   r6   )r   rN  r   rP  r   rK   rK   rL   rQ    s    zUNIXSocketStream.receiverV  c                   s   t  }t I d H  | j t|}|rz| j|}W nX tyX   | |I d H  Y q" ty } z | j	rtt
d nt|W Y d }~q"d }~0 0 ||d  }q"W d    n1 s0    Y  d S rH   )rQ   r   r  
memoryviewr  rZ  r  r  r  r  r5   r3   )r   r+  r   viewZ
bytes_sentr   rK   rK   rL   rZ  -  s    zUNIXSocketStream.sendztuple[bytes, list[int]])msglenmaxfdsrG   c                   sz  t |tr|dk rtdt |tr,|dk r4tdt }td}t I d H  | j z&| j|t	
||j \}}}}W nX ty   | |I d H  Y qX ty }	 z | jrtd nt|	W Y d }	~	qXd }	~	0 0 |s|stqqXW d    n1 s0    Y  |D ]b\}
}}|
t	jks,|t	jkrFt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 integerr   z.Received unexpected ancillary data; message = z, cmsg_level = z, cmsg_type = )r   r   r0  rQ   arrayr   r  r  recvmsgr  CMSG_LENitemsizer  r  r  r  r5   r3   r6   
SOL_SOCKET
SCM_RIGHTSr   	frombytesr   list)r   r  r  r   fdsmessageancdataflagsr  r   
cmsg_level	cmsg_type	cmsg_datarK   rK   rL   receive_fds?  s@    
"(zUNIXSocketStream.receive_fdszCollection[int | IOBase])r  r  rG   c                   s  |st d|st dt }g }|D ]2}t|tr@|| q&t|tr&||  q&td|}t I d H  | j	 z$| j
|gtjtj|fg W qW qz ty   | |I d H  Y qz ty } z | jrtd nt|W Y d }~qzd }~0 0 qzW d    n1 s0    Y  d S )Nzmessage must not be emptyzfds must not be emptyr   )r0  rQ   r   r   r   r   filenor  r   r  r  sendmsgr  r  r  r  r  r  r  r5   r3   )r   r  r  r   ZfilenosfdZfdarrayr   rK   rK   rL   send_fdsf  s2    

zUNIXSocketStream.send_fdsc                   sL   | j sHd| _ | j dkr$| j  | jr6| jd  | jrH| jd  d S )NT)r  r  r  r[  r  r   r  r   rK   rK   rL   rS    s    
zUNIXSocketStream.aclose)rK  )r   r`   rp   r  rT  r  r  r   r   r  r  r  r  rQ  rZ  r  r  rS  rK   rK   rK   rL   r    s   


'!r  c                   @  sZ   e Zd ZU dZded< dZddddZedd	d
dZdd	ddZ	dd	ddZ
dS )TCPSocketListenerNr   _accept_scopeFr  r  c                 C  s$   || _ ttjt | _td| _d S )Naccepting connections from)_TCPSocketListener__raw_socketr(   re   BaseEventLooprQ   r!  r=   _accept_guardr  rK   rK   rL   r     s    zTCPSocketListener.__init__r_   c                 C  s   | j S rH   )r  r   rK   rK   rL   r    s    zTCPSocketListener._raw_socketabc.SocketStreamc                   s  | j r
t| j t I d H  t | _ztz| j| jI d H \}}W nL t	j
y   z| j| j W n ttfy~   Y n0 | j rtd  Y n0 W d | _nd | _0 W d    n1 s0    Y  W d    n1 s0    Y  |tjtjd | jt|I d H \}}t||S )Nr   )r  r5   r  r   r>   r  r!  sock_acceptr  re   r   r  r0  ru  
setsockoptr  IPPROTO_TCPTCP_NODELAYconnect_accepted_socketr{  r  )r   client_sockZ_addrr  r  rK   rK   rL   accept  s*    

LzTCPSocketListener.acceptr}   c              	     sf   | j r
d S d| _ | jrXz| j| j W n ttfy>   Y n0 | j  tdI d H  | j	  d S r  )
r  r  r!  r  r  r0  ru  r   r   r[  r   rK   rK   rL   rS    s    
zTCPSocketListener.aclose)r   r`   rp   r  rT  r  r   r   r  r  rS  rK   rK   rK   rL   r    s   
r  c                   @  sH   e Zd ZddddZddddZd	dd
dZeddddZdS )UNIXSocketListenerr  r  c                 C  s"   || _ t | _td| _d| _d S )Nr  F)_UNIXSocketListener__raw_socketrQ   r!  r=   r  r  r  rK   rK   rL   r     s    
zUNIXSocketListener.__init__r  r_   c                   s   t  I d H   j z0 j \}}|d t|W W  d    S  ty   t } j	
 j|jd  | fdd |I d H  Y q ty } z  jrtd nt|W Y d }~qd }~0 0 qW d    n1 s0    Y  d S )NFc                   s    j  jS rH   )r!  r  r  _r   rK   rL   <lambda>  rW   z+UNIXSocketListener.accept.<locals>.<lambda>)r   r  r  r  setblockingr  r  re   r   r!  r  r   r  r  r  r5   r3   )r   r  r  r-  r   rK   r   rL   r    s"    

zUNIXSocketListener.acceptr}   c                   s   d| _ | j  d S r   )r  r  r[  r   rK   rK   rL   rS    s    zUNIXSocketListener.aclosec                 C  s   | j S rH   )r  r   rK   rK   rL   r    s    zUNIXSocketListener._raw_socketN)r   r`   rp   r   r  rS  r   r  rK   rK   rK   rL   r    s
   r  c                   @  sZ   e Zd ZdddddZedddd	Zd
dddZddddZdd
dddZdS )	UDPSocketasyncio.DatagramTransportr  r  c                 C  s*   || _ || _td| _td| _d| _d S r  r  r  rK   rK   rL   r     s
    

zUDPSocket.__init__r  r_   c                 C  s   | j dS r  r  r   rK   rK   rL   r    s    zUDPSocket._raw_socketr}   c                   s   | j  sd| _| j   d S r   rv  r  r  r[  r   rK   rK   rL   rS    s    
zUDPSocket.acloseztuple[bytes, IPSockAddrType]c              	     s   | j  t I d H  | jjsD| j sD| jj  | jj I d H  z| jj	 W W  d    S  t
y   | jr|td ntd Y n0 W d    n1 s0    Y  d S rH   r  r   r  r|  rv  r  r~  r  r   r:  r  r  r5   r3   r   rK   rK   rL   rQ    s    zUDPSocket.receiver@   rV  c                   sp   | j V t I d H  | jj I d H  | jr2tn| j rBt	n| jj
|  W d    n1 sb0    Y  d S rH   r  r   r  r  r   r  r5   rv  r  r3   sendtorY  rK   rK   rL   rZ    s    
zUDPSocket.sendN	r   r`   rp   r   r   r  rS  rQ  rZ  rK   rK   rK   rL   r    s   	r  c                   @  sZ   e Zd ZdddddZedddd	Zd
dddZddddZdd
dddZdS )ConnectedUDPSocketr  r  r  c                 C  s*   || _ || _td| _td| _d| _d S r  r  r  rK   rK   rL   r   %  s
    

zConnectedUDPSocket.__init__r  r_   c                 C  s   | j dS r  r  r   rK   rK   rL   r  .  s    zConnectedUDPSocket._raw_socketr}   c                   s   | j  sd| _| j   d S r   r  r   rK   rK   rL   rS  2  s    
zConnectedUDPSocket.acloserL  c              	     s   | j  t I d H  | jjsD| j sD| jj  | jj I d H  z| jj	 }W n& t
yz   | jrptd ntd Y n0 |d W  d    S 1 s0    Y  d S r   r  )r   packetrK   rK   rL   rQ  7  s    zConnectedUDPSocket.receiverV  c                   sp   | j V t I d H  | jj I d H  | jr2tn| j rBt	n| j
| W d    n1 sb0    Y  d S rH   r  rY  rK   rK   rL   rZ  J  s    
zConnectedUDPSocket.sendNr   rK   rK   rK   rL   r  $  s   	r  r   ztuple[str, int] | None)hostport
local_addrrG   c                   s@   t ttjtf t jt| ||dI d H \}}|  t||S )N)r  )	r(   r%   re   r  r{  rQ   create_connectionr  r  )r  r  r  r  r  rK   rK   rL   connect_tcpV  s    
r  )pathrG   c                   s   t  I d H  t  ttjd z|  W nb ty~   t } 	|j
d  | fdd |I d H  Y q( ty      Y q(0 tS q(d S )NFc                   s
     S rH   )r  r  r   r  rK   rL   r  n  rW   zconnect_unix.<locals>.<lambda>)r   rQ   r  AF_UNIXr  connectr  re   r   r  r   r  r   r[  r  )r  r-  rK   r	  rL   connect_unixc  s    
r  zsocket.AddressFamilyzIPSockAddrType | NonezUDPSocket | ConnectedUDPSocket)familylocal_addressremote_address
reuse_portrG   c                   s\   t  jt||| |dI d H }|d }|d }|jr@|  |j|sNt||S t||S d S )N)r  remote_addrr  r  r   r   )rQ   create_datagram_endpointr  r  r[  r  r  )r  r  r  r  r%  r  r  rK   rK   rL   create_udp_socketw  s    
r  r  typeprotor  zbytes | strzstr | int | Nonezint | AddressFamilyzint | SocketKindr9   )r  r  r  r  r  r  rG   c                  s(   t  j| |||||dI d H }tt|S )Nr  )rQ   getaddrinfor(   r9   )r  r  r  r  r  r  r%  rK   rK   rL   r    s    
r  r?   ztuple[str, str])sockaddrr  rG   c                   s   t  | |I d H S rH   )rQ   getnameinfo)r  r  rK   rK   rL   r    s    r  read_eventsz RunVar[dict[Any, asyncio.Event]]_read_eventswrite_events_write_eventsr  )sockrG   c              
     s   t  I d H  zt }W n  ty8   i }t| Y n0 || rNtdd t }t  }|| < |	| |j z6|
 I d H  W || d d ur||  d}qd}n&|| d d ur||  d}nd}0 |std S )Nr  TF)r   r  ra   r7  rd   r4   rQ   re   r<   r  r   r9  r  r5   )r  r  r   eventreadablerK   rK   rL   wait_socket_readable  s.    



r!  c              
     s   t  I d H  zt }W n  ty8   i }t| Y n0 || rNtdd t }t  }|| < |	| 
 |j z6| I d H  W || d d ur||  d}qd}n&|| d d ur||  d}nd}0 |std S )Nr  TF)r   r  ra   r7  rd   r4   rQ   re   r<   r  r  r   r9  r  r5   )r  r  r   r  writablerK   rK   rL   wait_socket_writable  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 )r<   r_   c                 C  s
   t | S rH   r   rE  rK   rK   rL   r     s    zEvent.__new__r}   c                 C  s   t  | _d S rH   )re   r<   _eventr   rK   rK   rL   r     s    zEvent.__init__r0   c                 C  s   | j   t| jS rH   )r$  rd   r0   r   rK   rK   rL   rd     s    
z	Event.setrw   c                 C  s
   | j  S rH   )r$  r  r   rK   rK   rL   r    s    zEvent.is_setc                   s    | j  I d H rt I d H  d S rH   )r$  r   r   r   rK   rK   rL   r     s    z
Event.waitr,   c                 C  s   t t| jjS rH   )r,   r   r$  _waitersr   rK   rK   rL   
statistics  s    zEvent.statisticsN)	r   r`   rp   r   r   rd   r  r   r&  rK   rK   rK   rL   r<     s   r<   c                   @  s  e Zd ZU dZded< dd dddZ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 )0r;   r   r   _total_tokens)total_tokensrG   c                 C  s
   t | S rH   r   )r   r(  rK   rK   rL   r     s    zCapacityLimiter.__new__)r(  c                 C  s   t  | _t | _|| _d S rH   )rd   
_borrowersr   _wait_queuer(  )r   r(  rK   rK   rL   r     s    zCapacityLimiter.__init__r}   r_   c                   s   |   I d H  d S rH   )acquirer   rK   rK   rL   r     s    zCapacityLimiter.__aenter__r   r   r   r   c                   s   |    d S rH   )release)r   r   r   r   rK   rK   rL   r    s    zCapacityLimiter.__aexit__c                 C  s   | j S rH   )r'  r   rK   rK   rL   r(    s    zCapacityLimiter.total_tokensr   c                 C  s   t |tst|std|dk r,td| j}|| _g }| j D ]*}||krV qr|	 sF|
| |d7 }qF|D ]}|  qvd S )Nz'total_tokens must be an int or math.infr   ztotal_tokens must be >= 1)r   r   r   isinfr  r0  r'  r*  valuesr  r   rd   )r   r   	old_valueeventsr  rK   rK   rL   r(    s    

r   c                 C  s
   t | jS rH   )r   r)  r   rK   rK   rL   borrowed_tokens(  s    zCapacityLimiter.borrowed_tokensc                 C  s   | j t| j S rH   )r'  r   r)  r   rK   rK   rL   available_tokens,  s    z CapacityLimiter.available_tokensr0   c                 C  s   |  t  t| jS rH   )acquire_on_behalf_of_nowaitrP   r0   acquire_nowaitr   rK   rK   rL   r4  0  s    zCapacityLimiter.acquire_nowaitr   )borrowerrG   c                 C  sB   || j v rtd| js(t| j | jkr,t| j | t| jS )NzEthis borrower is already holding one of this CapacityLimiter's tokens)	r)  r   r*  r   r'  r7   r   r0   r3  )r   r5  rK   rK   rL   r3  4  s    
z+CapacityLimiter.acquire_on_behalf_of_nowaitc                   s   |  t I d H S rH   )acquire_on_behalf_ofrP   r   rK   rK   rL   r+  A  s    zCapacityLimiter.acquirec                   s   t  I d H  z| | W nf ty   t }|| j|< z| I d H  W n" tyn   | j|d   Y n0 | j	
| Y n00 zt I d H  W n ty   |    Y n0 d S rH   )r   r3  r7   re   r<   r*  r   r   r9  r)  r   r   r,  r   r5  r  rK   rK   rL   r6  D  s"    
z$CapacityLimiter.acquire_on_behalf_ofc                 C  s   |  t  d S rH   )release_on_behalf_ofrP   r   rK   rK   rL   r,  Y  s    zCapacityLimiter.releasec                 C  sb   z| j | W n ty,   tdd Y n0 | jr^t| j | jk r^| jjddd }|  d S )Nz@this borrower isn't holding any of this CapacityLimiter's tokensF)lastr   )	r)  r   r   r   r*  r   r'  popitemrd   r7  rK   rK   rL   r8  \  s    z$CapacityLimiter.release_on_behalf_ofr+   c                 C  s   t | j| jt| jt| jS rH   )r+   r1  r(  r  r)  r   r*  r   rK   rK   rL   r&  i  s    zCapacityLimiter.statisticsN)r   r`   rp   r'  rT  r   r   r   r  r   r(  r   r1  r2  r4  r3  r+  r6  r,  r8  r&  rK   rK   rK   rL   r;     s(   
r;   _default_thread_limiterzRunVar[CapacityLimiter]c                  C  s8   z
t  W S  ty2   td} t |  |  Y S 0 d S )N(   )r;  ra   r7  r;   rd   )r6  rK   rK   rL   r8  u  s    

r8  c                   @  sh   e Zd ZddddZ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tuple[int, ...]signalsc                 C  s,   || _ t | _t | _t | _t | _	d S rH   )
_signalsrQ   r!  r   _signal_queuere   r   r   rd   _handled_signals)r   r?  rK   rK   rL   r     s
    
z_SignalReceiver.__init__r   r}   )signumrG   c                 C  s&   | j | | j s"| jd  d S rH   )rA  r   r   rb   r   )r   rC  rK   rK   rL   _deliver  s    
z_SignalReceiver._deliverr_   c                 C  s2   t | jD ]"}| j|| j| | j| q
| S rH   )rd   r@  r!  add_signal_handlerrD  rB  r   )r   sigrK   rK   rL   r     s    z_SignalReceiver.__enter__r   r   r   r   r   c                 C  s   | j D ]}| j| qd S rH   )rB  r!  remove_signal_handler)r   r   r   r   rF  rK   rK   rL   r     s    
z_SignalReceiver.__exit__c                 C  s   | S rH   rK   r   rK   rK   rL   	__aiter__  s    z_SignalReceiver.__aiter__c                   s2   t  I d H  | js(t | _| jI d H  | j S rH   )r   rA  re   r   r   r:  r   rK   rK   rL   	__anext__  s
    
z_SignalReceiver.__anext__N)	r   r`   rp   r   rD  r   r   rH  rI  rK   rK   rK   rL   r=    s   
r=  )r?  rG   c                  G  s   t | S rH   )r=  r>  rK   rK   rL   open_signal_receiver  s    rJ  r-   c                 C  sJ   t | }|d u r(tr|  nd }d }n|j}|j}tt| ||t| S rH   )	rg   ra   r   r]   r   r   r-   r  rI   )rF   r   r   r   rK   rK   rL   _create_task_info  s    
rK  c                   C  s
   t t S rH   )rK  rP   rK   rK   rK   rL   get_current_task  s    rL  zlist[TaskInfo]c                   C  s   dd t  D S )Nc                 S  s   g | ]}|  st|qS rK   )rb   rK  )rS   rF   rK   rK   rL   rV     rW   z%get_running_tasks.<locals>.<listcomp>)rN   rK   rK   rK   rL   get_running_tasks  s    rM  c                    sX   t  I d H  t } t D ]4}|| u r&q|jd u s:|j rtdI d H   qqd S qd S )Ng?)r   rP   rN   _fut_waiterrb   r   )Z	this_taskrF   rK   rK   rL   wait_all_tasks_blocked  s    
rO  c                   @  s   e Zd Zd"ddddddZdd	d
dZddddddZdd	ddZ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 )#
TestRunnerFNrw   r|   r   c                 C  sD   g | _ t|| t | _| j| | j| j t| j d S rH   )	r   r   re   new_event_loopr!  	set_debugset_exception_handler_exception_handlerset_event_loop)r   r   r   r~   rK   rK   rL   r     s    

zTestRunner.__init__r}   r_   c                 C  sn   t | j}|sd S |D ]}|  q| jtj|ddi |D ](}| rNq@| d ur@tt	| q@d S )Nreturn_exceptionsT)
rN   r!  r   run_until_completere   gatherr&  r  r(   r   )r   	to_cancelrF   rK   rK   rL   _cancel_all_tasks  s    

zTestRunner._cancel_all_tasksr  rF  )r   rU   rG   c                 C  s0   t |dtr"| j|d  n
|| d S )Nr  )r   ra   ry   r   r   default_exception_handler)r   r   rU   rK   rK   rL   rT    s    zTestRunner._exception_handlerc                 C  s:   | j r6| j g  }| _ t|dkr*|d n|r6t|d S r  )r   r   r8   r   rK   rK   rL   _raise_async_exceptions  s    
z"TestRunner._raise_async_exceptionsc              	   C  sN   z2|    | j| j  W td  | j  ntd  | j  0 d S rH   )rZ  r!  rW  shutdown_asyncgensre   rU  r[  r   rK   rK   rL   r[  
  s    

zTestRunner.closez,Callable[..., AsyncGenerator[T_Retval, Any]]zIterable[T_Retval])fixture_funcr  rG   c                 #  sp   dd fdd}j  t  j | }j   V     j |   d S )Nr}   r_   c               
     s   f i } z|  d I d H }  W n0 tyZ } z| W Y d }~d S d }~0 0 |   I d H  z|  d I d H  W n ty   Y n0 |  I d H  tdd S )Nz$Async generator fixture did not stop)	asendr\  r   r	  r   r   StopAsyncIterationrS  r   )agenretvalr   r  r-  r^  r  r   rK   rL   fixture_runner  s    

z7TestRunner.run_asyncgen_fixture.<locals>.fixture_runner)	r!  create_futurere   r<   rO   rW  r%  rd   r\  )r   r^  r  rd  Zfixture_taskrK   rc  rL   run_asyncgen_fixture  s    

zTestRunner.run_asyncgen_fixturez,Callable[..., Coroutine[Any, Any, T_Retval]]rZ   c                 C  s"   | j |f i |}|   |S rH   )r!  rW  r\  )r   r^  r  rb  rK   rK   rL   run_fixture4  s    zTestRunner.run_fixturez'Callable[..., Coroutine[Any, Any, Any]])	test_funcr  rG   c              
   C  sX   z| j |f i | W n0 tyJ } z| j| W Y d }~n
d }~0 0 |   d S rH   )r!  rW  ry   r   r   r\  )r   rh  r  r   rK   rK   rL   run_test=  s
    "zTestRunner.run_test)FFN)r   r`   rp   r   rZ  rT  r\  r[  rf  rg  ri  rK   rK   rK   rL   rP    s      	"	rP  )N)r   )
__future__r   r  re   concurrent.futures
concurrentr   r  r   Zasyncio.base_eventsr   collectionsr   r   r   contextvarsr   r   dataclassesr	   	functoolsr
   r   inspectr   r   r   r   r   r   ior   osr   r"  r   r   r   	threadingr   typesr   typingr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   weakrefr)   r<   r+   r,   r-   r.   Z_core._compatr/   r0   Z_core._eventloopr1   r2   Z_core._exceptionsr3   r4   r5   r6   r7   r8   ZBaseExceptionGroupZ_core._socketsr9   r:   Z_core._synchronizationr;   ZBaseCapacityLimiterr<   Z	BaseEventr=   Z_core._tasksr>   ZBaseCancelScoper?   r@   ZlowlevelrA   r   rI   rN   rO   rP   rQ   rR   r   rY   rZ   r[   r   rf   r   r^   rT  rm   rv   Z	_run_varscurrent_tokenr{   r   r   r   r   r   r   r   r   r   rg   Z
TaskStatusr   r   r   Z_Retval_Queue_Typer  r3  r4  r>  rA  rC  rD  ZByteReceiveStreamrI  ZByteSendStreamrU  r\  rr  rx  ry  rz  Protocolr{  r  r  r  ZSocketListenerr  r  r  r  r  r  r  r  r  r  r  r!  r#  r;  r8  r=  rJ  rK  rL  rM  rO  rP  rK   rK   rK   rL   <module>   s   H b	 HI1	 8"'$T "<%03  y*	