Ë
    †Kài
  ã                  ól   — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZ  G d„ d	ed	   «      Zy
)zšCooldown admission control dependency.

Executes the first task immediately, then drops duplicates within the window.
Sets a Redis key on entry with TTL.
é    )Úannotations)Ú	timedelta)ÚTracebackType)ÚAnyé   )ÚAdmissionBlockedÚ
DependencyÚcurrent_docketÚcurrent_executionc                  óF   — e Zd ZdZddœdd„Zd	d„Zd
d„Z	 	 	 	 	 	 	 	 dd„Zy)ÚCooldowna™  Execute first, drop duplicates within window.

    Sets a Redis key on entry with a TTL equal to the window. If the key
    already exists, the task is blocked and quietly dropped.

    Works both as a default parameter and as ``Annotated`` metadata::

        # Per-task: don't start if one started in the last 30s
        async def process_webhooks(
            cooldown: Cooldown = Cooldown(timedelta(seconds=30)),
        ) -> None: ...

        # Per-parameter: don't start for this customer if one started in the last 30s
        async def process_customer(
            customer_id: Annotated[int, Cooldown(timedelta(seconds=30))],
        ) -> None: ...
    N©Úscopec               ó<   — || _         || _        d | _        d | _        y ©N)Úwindowr   Ú_argument_nameÚ_argument_value)Úselfr   r   s      úi/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/docket/dependencies/_cooldown.pyÚ__init__zCooldown.__init__#   s    € ØˆŒØˆŒ
Ø*.ˆÔØ$(ˆÕó    c                ód   — t        | j                  | j                  ¬«      }||_        ||_        |S )Nr   )r   r   r   r   r   )r   ÚnameÚvalueÚbounds       r   Úbind_to_parameterzCooldown.bind_to_parameter)   s+   € Ü˜Ÿ™¨D¯J©JÔ7ˆØ#ˆÔØ %ˆÔØˆr   c              ƒ  óX  K  — t        j                  «       }t        j                  «       }| j                  xs |j                  }| j
                  |› d| j
                  › d| j                  › }n|› d|j                  › }t        | j                  j                  «       dz  «      }|j                  «       4 ƒd {  –—† }|j                  |dd|¬«      ƒ d {  –—† }d d d «      ƒd {  –—†  st        |d| j                  › d|› d	¬
«      ‚| S 7 ŒS7 Œ87 Œ*# 1 ƒd {  –—†7  sw Y   Œ:xY w­w)Nz
:cooldown:ú:iè  r   T)ÚnxÚpxz
cooldown (z) on F)ÚreasonÚ
reschedule)r   Úgetr
   r   r   r   r   Úfunction_nameÚintr   Útotal_secondsÚredisÚsetr   )r   Ú	executionÚdocketr   Úcooldown_keyÚ	window_msr(   Úacquireds           r   Ú
__aenter__zCooldown.__aenter__/   s/  è ø€ Ü%×)Ñ)Ó+ˆ	Ü×#Ñ#Ó%ˆà—
‘
Ò)˜fŸk™kˆØ×ÑÐ*à'˜ D×$7Ñ$7Ð#8¸¸$×:NÑ:NÐ9OÐPñ ð $˜W J¨y×/FÑ/FÐ.GÐHˆLä˜Ÿ™×1Ñ1Ó3°dÑ:Ó;ˆ	à—<‘<“>÷ 	Oð 	O UØ"ŸY™Y |°Q¸4ÀI˜YÓN×NˆH÷	O÷ 	Oñ Ü"ØØ# D§K¡K =°°l°^ÐDØ ôð ð ˆð	OøØNøð	Oø÷ 	O÷ 	Oñ 	OüsZ   ‚B9D*Â;DÂ<D*Â?DÃDÃDÃD*Ã(DÃ)'D*ÄDÄD*ÄD'ÄDÄD'Ä#D*c              ƒ  ó   K  — y ­wr   © )r   Úexc_typeÚ	exc_valueÚ	tracebacks       r   Ú	__aexit__zCooldown.__aexit__I   s   è ø€ ð 	ùs   ‚)r   r   r   z
str | NoneÚreturnÚNone)r   Ústrr   r   r6   r   )r6   r   )r2   ztype[BaseException] | Noner3   zBaseException | Noner4   zTracebackType | Noner6   r7   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r/   r5   r1   r   r   r   r      sH   „ ñð$ BFõ )óóð4à,ðð (ðð (ð	ð
 
ôr   r   N)r<   Ú
__future__r   Údatetimer   Útypesr   Útypingr   Ú_baser   r	   r
   r   r   r1   r   r   ú<module>rB      s/   ðñõ #å Ý Ý ç RÓ Rô?ˆz˜*Ñ%õ ?r   