
    Iho                        d Z ddlmZ ddlmZ ddlmZ dZddd	d
Z G d d      Z	 G d d      Z
 G d de
      Z G d de      Zd Zy)zScheduling Utilities.    )annotations)count   )symbol_by_name)	FairCyclepriority_cycleround_robin_cyclesorted_cyclez%kombu.utils.scheduling:priority_cyclez(kombu.utils.scheduling:round_robin_cyclez#kombu.utils.scheduling:sorted_cycle)priorityround_robinsortedc                  2    e Zd ZdZefdZd Zd Zd Zd Z	y)r   a2  Cycle between resources.

    Consume from a set of resources, where each resource gets
    an equal chance to be consumed from.

    Arguments:
    ---------
        fun (Callable): Callback to call.
        resources (Sequence[Any]): List of resources.
        predicate (type): Exception predicate.
    c                <    || _         || _        || _        d| _        y )Nr   )fun	resources	predicatepos)selfr   r   r   s       O/var/www/html/planif/env/lib/python3.12/site-packages/kombu/utils/scheduling.py__init__zFairCycle.__init__!   s    ""    c                    	 	 | j                   | j                     }| xj                  dz  c_        |S # t        $ r& d| _        | j                   s| j                         Y nw xY wd)Nr   r   )r   r   
IndexErrorr   )r   resources     r   _nextzFairCycle._next'   sb    +>>$((3A +~~..** &+ s   /3 ,A"!A"c                    t        d      D ](  }| j                         }	  | j                  ||fi |c S  y# | j                  $ r |t	        | j
                        dz
  k\  r Y Yw xY w)zGet from next resource.r   r   N)r   r   r   r   lenr   )r   callbackkwargstriedr   s        r   getzFairCycle.get2   sp    1X 	Ezz|Htxx(=f==	 >> C/!33 4s   8+A&%A&c                     y)zClose cycle.N r   s    r   closezFairCycle.close=       r   c                N    dj                  | t        | j                              S )z``repr(cycle)``.z/<FairCycle: {self.pos}/{size} {self.resources}>)r   size)formatr   r   r$   s    r   __repr__zFairCycle.__repr__@   s)    @GGC/ H 1 	1r   N)
__name__
__module____qualname____doc__	Exceptionr   r   r!   r%   r*   r#   r   r   r   r      s%    
 2; 	+	1r   r   c                  *    e Zd ZdZddZd Zd Zd Zy)r	   z2Iterator that cycles between items in round-robin.Nc                &    ||| _         y g | _         y Nitemsr   its     r   r   zround_robin_cycle.__init__I   s    >R
r
r   c                "    || j                   dd y)zUpdate items from iterable.Nr3   r5   s     r   updatezround_robin_cycle.updateL   s    

1r   c                     | j                   d| S zConsume n items.Nr3   r   ns     r   consumezround_robin_cycle.consumeP   s    zz"1~r   c                    | j                   }	 |j                  |j                  |j                  |                   |S # t        $ r Y |S w xY w)z,Move most recently used item to end of list.)r4   appendpopindex
ValueError)r   	last_usedr4   s      r   rotatezround_robin_cycle.rotateT   sP    

	LL5;;y#9:;   		s   /? 	AAr2   )r+   r,   r-   r.   r   r8   r=   rD   r#   r   r   r	   r	   F   s    <2r   r	   c                      e Zd ZdZd Zy)r   z"Cycle that repeats items in order.c                     y)zUnused in this implementation.Nr#   )r   rC   s     r   rD   zpriority_cycle.rotatea   r&   r   N)r+   r,   r-   r.   rD   r#   r   r   r   r   ^   s
    ,-r   r   c                      e Zd ZdZd Zy)r
   zCycle in sorted order.c                2    t        | j                  d|       S r:   )r   r4   r;   s     r   r=   zsorted_cycle.consumeh   s    djj!n%%r   N)r+   r,   r-   r.   r=   r#   r   r   r
   r
   e   s
     &r   r
   c                "    t        | t              S )zGet cycle class by name.)r   CYCLE_ALIASES)names    r   cycle_by_namerL   m   s    $..r   N)r.   
__future__r   	itertoolsr   importsr   __all__rJ   r   r	   r   r
   rL   r#   r   r   <module>rQ      s]     "  #
 8=3/1 /1d 0-& -&> &/r   