
    Pf                     b    d Z ddlmZ ddlmZ dgZ G d d          Z ej        e           dS )zSynchronization primitives.   )Thenable)promisebarrierc                   N    e Zd ZdZ	 	 ddZd Zd Zd Zd Zd Z	dd	Z
d
 ZeZdS )r   a  Barrier.

    Synchronization primitive to call a callback after a list
    of promises have been fulfilled.

    Example:

    .. code-block:: python

        # Request supports the .then() method.
        p1 = http.Request('http://a')
        p2 = http.Request('http://b')
        p3 = http.Request('http://c')
        requests = [p1, p2, p3]

        def all_done():
            pass  # all requests complete

        b = barrier(requests).then(all_done)

        # oops, we forgot we want another request
        b.add(http.Request('http://d'))

    Note that you cannot add new promises to a barrier after
    the barrier is fulfilled.
    Nc                     t                       _        |pd _        |pi  _        d _        |pd _         j        s&|r$|                                }|t          ur| _        dx _         _	        d  _
        d _        d _         fd|pg D              t          |p j                   _        |r                     |           d}d S )N     Fc                 :    g | ]}                     |          S r   )
add_noincr).0pselfs     F/var/www/html/env/lib/python3.11/site-packages/vine/synchronization.py
<listcomp>z$barrier.__init__.<locals>.<listcomp>7   s%    444		444    )r   argskwargs_valuesizereadyreason	cancelled	finalized__weakref____dict__)r   r   r   r   r   r   __len__NotImplementedr   failedr   r   r   boolthen)r   promisesr   r   callbackr   plen	__slots__s   `       r   __init__zbarrier.__init__$   s    JB	lIA	y 	!X 	! ##%%D>)) 	#((
T[4444X^4444h3$)44 	 IIh
			r   c                     | j         sN| j        sI| xj        dz  c_        | j        r4| j        | j        k    r&d| _          | j        | j        i | j         d S d S d S d S d S )Nr   T)r   r   r   r   r   r   r   r   r   r   r   s      r   __call__zbarrier.__call__D   s    z 	2$. 	2KK1KK~ 2$+":":!
	1T[11111		2 	2 	2 	22 2":":r   c                 p    | j         s'| j        | j        k    r | j        | j        i | j         d| _         d S NT)r   r   r   r   r   r   r   s    r   finalizezbarrier.finalizeK   s@    ~ 	.$+":":DFDI----r   c                 F    d| _         | j                                         d S r*   )r   r   cancelr+   s    r   r.   zbarrier.cancelP   s    r   c                 n    | j         s-| j        rt          d          |                    |            d S d S )Nz"Cannot add promise to full barrier)r   r   
ValueErrorr    r   r   s     r   r   zbarrier.add_noincrT   sC    ~ 	z G !EFFFFF4LLLLL	 	r   c                 b    | j         s'|                     |           | xj        dz  c_        d S d S )Nr   )r   r   r   r1   s     r   addzbarrier.addZ   s;    ~ 	OOAIINIIII	 	r   c                 <    | j                             ||           d S N)r   r    )r   r"   errbacks      r   r    zbarrier.then_   s    Hg&&&&&r   c                 <    | j         s | j        j        |i | d S d S r5   )r   r   throwr'   s      r   r8   zbarrier.throwb   s5    ~ 	*DFL$)&)))))	* 	*r   )NNNNNr5   )__name__
__module____qualname____doc__r%   r(   r,   r.   r   r3   r    r8   throw1r   r   r   r   r      s         6 9=%)
 
 
 
@2 2 2  
      
' ' ' '* * * FFFr   N)r<   abstractr   r!   r   __all__r   registerr   r   r   <module>rA      s    ! !            +] ] ] ] ] ] ] ]@  '     r   