Ë
    ]jÏ  ã                   ó†   — d dl mZ d dlmZ d dlmZmZ d dlmZmZm	Z	 erd dl
mZ ddlmZ ddlmZ e G d	„ d
«      «       Zy)é    )ÚIterable)Ú	dataclass)ÚdatetimeÚ	timedelta)ÚTYPE_CHECKINGÚOptionalÚUnion)ÚPipelineé   )ÚJob)ÚQueuec            	       óž   — e Zd ZU dZeed<   ee   ed<   ddedeeee	e   f      fd„Z
ededee   defd„«       Zedd
dddded   fd„«       Zy	)ÚRepeata®  Defines repeat behavior for scheduled jobs.

    Attributes:
        times (int): The number of times to repeat the job. Must be greater than 0.
        intervals (Union[int, List[int]]): The intervals between job executions in seconds.
            Can be a single integer value or a list of intervals. If a list is provided and it's
            shorter than (times-1), the last interval will be reused for remaining repeats.
    ÚtimesÚ	intervalsÚintervalc                 ó  — |dk  rt        d«      ‚t        |t        «      r |dk  rt        d«      ‚|g| _        || _        yt        |t        «      r1t        |«      }|D ]  }|dk  sŒ	t        d«      ‚ || _        || _        yt        d«      ‚)aÛ  Initialize a Repeat instance.

        Args:
            times (int): The number of times to repeat the job. Must be greater than 0.
            interval (Optional[Union[int, Iterable[int]]], optional): The intervals between job executions in seconds.
                Can be a single integer value or a list of intervals. Defaults to 0 (immediately repeated).

        Raises:
            ValueError: If times is less than 1 or if intervals contains negative values.
        r   z*times: please enter a value greater than 0r   z+intervals: negative numbers are not allowedz,intervals must be an int or iterable of intsN)Ú
ValueErrorÚ
isinstanceÚintr   r   ÚlistÚ	TypeErrorr   )Úselfr   r   Úinterval_listÚis        ú3/root/env/lib/python3.12/site-packages/rq/repeat.pyÚ__init__zRepeat.__init__   sŸ   € ð 1Š9ÜÐIÓJÐJäh¤Ô$Ø˜!Š|Ü Ð!NÓOÐOØ&˜ZˆDŒNð ˆ
ô ˜¤(Ô+Ü  ›NˆMØ"ò TØq“5Ü$Ð%RÓSÐSðTð +ˆDŒNð ˆ
ô ÐJÓKÐKó    ÚcountÚreturnc                 ó2   — |t        |«      k\  r|d   S ||   S )z÷Returns the appropriate interval based on the repeat count.

        Args:
            count (int): Current repeat count (0-based)
            intervals (List[int]): List of intervals

        Returns:
            int: The interval to use
        éÿÿÿÿ)Úlen)Úclsr   r   s      r   Úget_intervalzRepeat.get_interval8   s%   € ð ”C˜	“NÒ"Ø˜R‘=Ð à˜ÑÐr   NÚjobr   Úqueuer   Úpipeliner
   c                 ó(  — |j                   |j                   dk  rt        d|j                  › d«      ‚||n|j                  j	                  «       }|j                   dz
  }d}|j
                  r| j                  ||j
                  «      }|j                   dz
  |_         |j                  |¬«       |dk(  r|j                  ||¬«       n5t        j                  «       t        |¬«      z   }|j                  |||¬«       |€|j                  «        yy)aQ  Schedules a job to repeat based on its repeat configuration.

        This decrements the job's repeats_left counter and either enqueues
        it immediately (if interval is 0) or schedules it to run after the
        specified interval.

        Args:
            job (Job): The job to repeat
            queue (Queue): The queue to enqueue/schedule the job on
            pipeline (Optional[Pipeline], optional): Redis pipeline to use. Defaults to None.

        Returns:
            scheduled_time (Optional[datetime]): When the job was scheduled to run, or None if not scheduled
        Nr   zCannot schedule job z: no repeats leftr   )r(   )Úseconds)Úrepeats_leftr   ÚidÚ
connectionr(   Úrepeat_intervalsr%   ÚsaveÚ_enqueue_jobr   Únowr   Úschedule_jobÚexecute)r$   r&   r'   r(   ÚpipeÚrepeat_countr   Úscheduled_times           r   ÚschedulezRepeat.scheduleI   s  € ð" ×ÑÐ# s×'7Ñ'7¸1Ò'<ÜÐ3°C·F±F°8Ð;LÐMÓNÐNà#Ð/‰x°S·^±^×5LÑ5LÓ5Nˆð ×'Ñ'¨!Ñ+ˆØˆà×ÒØ×'Ñ'¨°c×6JÑ6JÓKˆHð ×+Ñ+¨aÑ/ˆÔØ‰˜$ˆÔàqŠ=à×Ñ˜s¨TÐÕ2ô &Ÿ\™\›^¬iÀÔ.IÑIˆNØ×Ñ˜s N¸TÐÔBð ÐØL‰LNð r   )r   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r	   r   r   Úclassmethodr%   r7   © r   r   r   r      s™   … ñð ƒJØC‰yÓñ˜cð ¨X°e¸CÀÈ#ÁÐ<NÑ6OÑ-Pó ð: ð  ð  °°c±ð  ¸sò  ó ð ð  ñ*˜5ð *¨ð *¸HÀZÑ<Pò *ó ñ*r   r   N)Úcollections.abcr   Údataclassesr   r   r   Útypingr   r   r	   Úredis.clientr
   r&   r   r'   r   r   r>   r   r   ú<module>rC      s<   ðÝ $Ý !ß (ß 1Ñ 1áÝ%åÝð ÷fð fó ñfr   