
     h
                     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 S d S )N     Fc                 :    g | ]}                     |          S r   )
add_noincr).0pselfs     P/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/vine/synchronization.py
<listcomp>z$barrier.__init__.<locals>.<listcomp>7   s%    444		444    )r   r   argskwargs_valuesize__len__NotImplementedreadyfailedreason	cancelled	finalizedboolthen)r   promisesr   r   callbackr   plens   `      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__<   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.finalizeC   s@    ~ 	.$+":":DFDI----r   c                 F    d| _         | j                                         d S r'   )r   r   cancelr(   s    r   r+   zbarrier.cancelH   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_noincrL   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   r.   s     r   addzbarrier.addR   s;    ~ 	OOAIINIIII	 	r   c                 <    | j                             ||           d S N)r   r   )r   r    errbacks      r   r   zbarrier.thenW   s    Hg&&&&&r   c                 <    | j         s | j        j        |i | d S d S r2   )r   r   throwr$   s      r   r5   zbarrier.throwZ   s5    ~ 	*DFL$)&)))))	* 	*r   )NNNNNr2   )__name__
__module____qualname____doc__r"   r%   r)   r+   r   r0   r   r5   throw1r   r   r   r   r      s         6 9=%)       02 2 2  
      
' ' ' '* * * FFFr   N)r9   abstractr   r   r   __all__r   registerr   r   r   <module>r>      s    ! !            +U U U U U U U Up  '     r   