Ë
    ÌAHjÐ  ã                  óŠ   — d dl mZ d dlmZ d dlmZ d dlmZmZ d dl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)é    )Úannotations)ÚIterable)Ú	dataclass)ÚdatetimeÚ	timedelta)ÚTYPE_CHECKING)ÚPipelineé   )ÚJob)ÚQueuec                  óV   — e Zd ZU dZded<   ded<   d
dd„Zedd„«       Zedd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.
    ÚintÚtimesú	list[int]Ú	intervalsc                ó  — |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Ú
isinstancer   r   r   ÚlistÚ	TypeErrorr   )Úselfr   ÚintervalÚinterval_listÚis        úA/root/tools/cai/cai_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ó    c                ó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)ÚclsÚcountr   s      r   Úget_intervalzRepeat.get_interval:   s%   € ð ”C˜	“NÒ"Ø˜R‘=Ð à˜ÑÐr   Nc                ó(  — |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
   )Úpipeline)Úseconds)Úrepeats_leftr   ÚidÚ
connectionr&   Úrepeat_intervalsr$   ÚsaveÚ_enqueue_jobr   Únowr   Úschedule_jobÚexecute)r"   ÚjobÚqueuer&   ÚpipeÚrepeat_countr   Úscheduled_times           r   ÚschedulezRepeat.scheduleK   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   )r   r   r   zint | Iterable[int] | None)r#   r   r   r   Úreturnr   )N)r1   r   r2   r   r&   zPipeline | None)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   Úclassmethodr$   r6   © r   r   r   r      sA   … ñð ƒJØÓôð: ò ó ð ð  ó*ó ñ*r   r   N)Ú
__future__r   Úcollections.abcr   Údataclassesr   r   r   Útypingr   Úredis.clientr	   r1   r   r2   r   r   r>   r   r   ú<module>rD      s<   ðÝ "å $Ý !ß (Ý  áÝ%åÝð ÷fð fó ñfr   