
    ^fp                        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dS )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                  4    e Zd ZdZefdZd Zd Zd Zd Z	dS )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| _        d S )Nr   )fun	resources	predicatepos)selfr   r   r   s       H/var/www/html/env/lib/python3.11/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|                                 Y nw xY wX)Nr   r   )r   r   
IndexErrorr   )r   resources     r   _nextzFairCycle._next'   sy    	++>$(3A + + +~ +..***+ ++	+s   #' ,AAc                    t          d          D ]S}|                                 }	  | j        ||fi |c S # | j        $ r |t	          | j                  dz
  k    r Y Pw xY wdS )zGet from next resource.r   r   N)r   r   r   r   lenr   )r   callbackkwargstriedr   s        r   getzFairCycle.get2   s    1XX 	 	Ezz||Htx(==f=====>   C//!333 43		 	s   8&A! A!c                    dS )zClose cycle.N r   s    r   closezFairCycle.close=         r   c                T    d                     | 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 1 	1r   N)
__name__
__module____qualname____doc__	Exceptionr   r   r!   r%   r*   r#   r   r   r   r      ss        
 
 2;    	+ 	+ 	+	 	 	  1 1 1 1 1r   r   c                  ,    e Zd ZdZddZd Zd Zd ZdS )r	   z2Iterator that cycles between items in round-robin.Nc                    ||ng | _         d S Nitemsr   its     r   r   zround_robin_cycle.__init__I   s    >RRr


r   c                    || j         dd<   dS )zUpdate items from iterable.Nr3   r5   s     r   updatezround_robin_cycle.updateL   s    
111r   c                     | j         d|         S zConsume n items.Nr3   r   ns     r   consumezround_robin_cycle.consumeP   s    z"1"~r   c                    | j         }	 |                    |                    |                    |                               n# t          $ r Y nw xY w|S )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   sa    
	LL5;;y#9#9::;;;; 	 	 	D	s   ;A 
AAr2   )r+   r,   r-   r.   r   r8   r=   rD   r#   r   r   r	   r	   F   s[        <<2 2 2 2        r   r	   c                      e Zd ZdZd ZdS )r   z"Cycle that repeats items in order.c                    dS )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dS )r
   zCycle in sorted order.c                :    t          | j        d|                   S r:   )r   r4   r;   s     r   r=   zsorted_cycle.consumeh   s    dj!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 /1 /1 /1 /1 /1 /1 /1d       0- - - - -& - - -& & & & &> & & &/ / / / /r   