o
    ?Zc>                     @   st   d Z ddlmZ ddlmZ dZdddd	ZG d
d dZG dd dZG dd deZ	G dd de	Z
dd ZdS )zScheduling Utilities.    )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                   @   s<   e Zd ZdZefddZdd Zdd Zdd	 Zd
d Z	dS )r   a$  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                 C   s   || _ || _|| _d| _d S )Nr   )fun	resources	predicatepos)selfr   r   r    r   L/var/www/chikooza/env/lib/python3.10/site-packages/kombu/utils/scheduling.py__init__   s   
zFairCycle.__init__c                 C   sL   	 z| j | j }|  jd7  _|W S  ty$   d| _| j s"|  Y nw q)Nr   r   )r   r   
IndexErrorr   )r   resourcer   r   r   _next$   s   zFairCycle._nextc              	   K   s\   t dD ]'}|  }z| j||fi |W   S  | jy+   |t| jd kr) Y qw dS )zGet from next resource.r   r   N)r   r   r   r   lenr   )r   callbackkwargstriedr   r   r   r   get/   s   zFairCycle.getc                 C      dS )zClose cycle.Nr   r   r   r   r   close:       zFairCycle.closec                 C   s   dj | t| jdS )z``repr(cycle)``.z/<FairCycle: {self.pos}/{size} {self.resources}>)r   size)formatr   r   r   r   r   r   __repr__=   s   
zFairCycle.__repr__N)
__name__
__module____qualname____doc__	Exceptionr   r   r   r   r"   r   r   r   r   r      s    r   c                   @   s2   e Zd ZdZdddZdd Zdd Zd	d
 ZdS )r   z2Iterator that cycles between items in round-robin.Nc                 C   s   |d ur	|| _ d S g | _ d S Nitemsr   itr   r   r   r   F   s   zround_robin_cycle.__init__c                 C   s   || j dd< dS )zUpdate items from iterable.Nr)   r+   r   r   r   updateI      zround_robin_cycle.updatec                 C   s   | j d| S zConsume n items.Nr)   r   nr   r   r   consumeM   s   zround_robin_cycle.consumec                 C   s8   | j }z|||| W |S  ty   Y |S w )z,Move most recently used item to end of list.)r*   appendpopindex
ValueError)r   	last_usedr*   r   r   r   rotateQ   s   zround_robin_cycle.rotater(   )r#   r$   r%   r&   r   r-   r2   r8   r   r   r   r   r   C   s    
r   c                   @      e Zd ZdZdd ZdS )r   z"Cycle that repeats items in order.c                 C   r   )zUnused in this implementation.Nr   )r   r7   r   r   r   r8   ^   r   zpriority_cycle.rotateN)r#   r$   r%   r&   r8   r   r   r   r   r   [       r   c                   @   r9   )r   zCycle in sorted order.c                 C   s   t | jd| S r/   )r   r*   r0   r   r   r   r2   e   r.   zsorted_cycle.consumeN)r#   r$   r%   r&   r2   r   r   r   r   r   b   r:   r   c                 C   s
   t | tS )zGet cycle class by name.)r   CYCLE_ALIASES)namer   r   r   cycle_by_namej   s   
r=   N)r&   	itertoolsr   importsr   __all__r;   r   r   r   r   r=   r   r   r   r   <module>   s    1