
    ؾh                     ^    d Z ddlmZ ddlmZ dgZ G d d      Z ej                  e       y)zSynchronization primitives.   )Thenable)promisebarrierc                   L    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y)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               | _        |xs d| _        |xs i | _        d| _        |xs d| _        | j
                  s!|r|j                         }|t        ur|| _        dx| _        | _	        d | _
        d| _        d| _        |xs g D cg c]  }| j                  |       c} t        |xs | j
                        | _        |r| j                  |       d}y c c}w )N     F)pargskwargs_valuesizereadyreason	cancelled	finalized__weakref____dict__)r   r
   r   r   r   r   __len__NotImplementedr   failedr   r   r   
add_noincrboolthen)	selfpromisesr   r   callbackr   plenr
   	__slots__s	            P/var/www/Befach/backend/env/lib/python3.12/site-packages/vine/synchronization.py__init__zbarrier.__init__$   s    JB	lIA	yyX ##%D>) 	#((
T[%-^4	4h3$))4IIh
	 	5s   Cc                 
   | j                   sw| j                  sj| xj                  dz  c_        | j                  rH| j                  | j                  k\  r.d| _          | j
                  | j                  i | j                   y y y y y )Nr   T)r   r   r   r   r   r
   r   r   r   r   r   s      r    __call__zbarrier.__call__D   sc    zz$..KK1K~~$++":!
		1T[[1 #;~ #1z    c                     | j                   s?| j                  | j                  k\  r& | j                  | j                  i | j
                   d| _         y NT)r   r   r   r
   r   r   r   s    r    finalizezbarrier.finalizeK   s:    ~~$++":DFFDII--r%   c                 F    d| _         | j                  j                          y r'   )r   r
   cancelr(   s    r    r+   zbarrier.cancelP   s    r%   c                 n    | j                   s)| j                  rt        d      |j                  |        y y )Nz"Cannot add promise to full barrier)r   r   
ValueErrorr   r   r
   s     r    r   zbarrier.add_noincrT   s,    ~~zz !EFFFF4L r%   c                 j    | j                   s'| j                  |       | xj                  dz  c_        y y )Nr   )r   r   r   r.   s     r    addzbarrier.addZ   s'    ~~OOAIINI r%   c                 <    | j                   j                  ||       y N)r
   r   )r   r   errbacks      r    r   zbarrier.then_   s    Hg&r%   c                 V    | j                   s | j                  j                  |i | y y r2   )r   r
   throwr#   s      r    r5   zbarrier.throwb   s%    ~~DFFLL$)&) r%   )NNNNNr2   )__name__
__module____qualname____doc__r!   r$   r)   r+   r   r0   r   r5   throw1r   r%   r    r   r      s?    6 9=%)
@2

'* Fr%   N)r9   abstractr   r   r   __all__r   registerr   r%   r    <module>r>      s4    !  +] ]@   ' r%   