§
    ¾<i3  ã                   óÎ   — d dl Z d dlmZmZ d dlmZmZ d dlmZ d dl	m
Z d dlmZmZ dZdZ G d	„ d
e¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )é    N)ÚABCÚabstractmethod)ÚAsyncDatabaseÚ	Databases)ÚWeightedList)ÚState)ÚNoValidDatabaseExceptionÚTemporaryUnavailableExceptioné
   é   c                   óJ   — e Zd Zedefd„¦   «         Zededdfd„¦   «         ZdS )ÚAsyncFailoverStrategyÚreturnc              ƒ   ó
   K  — dS )z.Select the database according to the strategy.N© ©Úselfs    ú™/Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/redis/asyncio/multidb/failover.pyÚdatabasezAsyncFailoverStrategy.database   ó   è è € ð 	ˆó    Ú	databasesNc                 ó   — dS )z&Set the database strategy operates on.Nr   ©r   r   s     r   Úset_databasesz#AsyncFailoverStrategy.set_databases   s	   € ð 	ˆr   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r   r      sg   € € € € € Øð ð ð ð ñ „^ðð ð yð °Tð ð ð ñ „^ðð ð r   r   c                   ó®   — e Zd Zeedefd„¦   «         ¦   «         Zeedefd„¦   «         ¦   «         Zeede	fd„¦   «         ¦   «         Z
edefd„¦   «         ZdS )ÚFailoverStrategyExecutorr   c                 ó   — dS )z The number of failover attempts.Nr   r   s    r   Úfailover_attemptsz*FailoverStrategyExecutor.failover_attempts   ó	   € ð 	ˆr   c                 ó   — dS )z$The delay between failover attempts.Nr   r   s    r   Úfailover_delayz'FailoverStrategyExecutor.failover_delay#   r#   r   c                 ó   — dS )zThe strategy to execute.Nr   r   s    r   Ústrategyz!FailoverStrategyExecutor.strategy)   r#   r   c              ƒ   ó
   K  — dS )zExecute the failover strategy.Nr   r   s    r   Úexecutez FailoverStrategyExecutor.execute/   r   r   N)r   r   r   Úpropertyr   Úintr"   Úfloatr%   r   r'   r   r)   r   r   r   r    r       sÍ   € € € € € ØØð 3ð ð ð ñ „^ñ „Xðð Øð ð ð ð ñ „^ñ „Xðð ØðÐ/ð ð ð ñ „^ñ „Xðð ð˜}ð ð ð ñ „^ðð ð r   r    c                   ó4   — e Zd ZdZd„ Zdefd„Zdeddfd„ZdS )ÚWeightBasedFailoverStrategyz6
    Failover strategy based on database weights.
    c                 ó,   — t          ¦   «         | _        d S ©N)r   Ú
_databasesr   s    r   Ú__init__z$WeightBasedFailoverStrategy.__init__:   s   € Ý&™.œ.ˆŒˆˆr   r   c              ƒ   óz   K  — | j         D ]#\  }}|j        j        t          j        k    r|c S Œ$t          d¦  «        ‚)Nz-No valid database available for communication)r1   ÚcircuitÚstateÚCBStateÚCLOSEDr	   )r   r   Ú_s      r   r   z$WeightBasedFailoverStrategy.database=   sM   è è € Øœ?ð 	 ð 	 ‰KˆHaØÔÔ%­¬Ò7Ð7Øð 8õ 'Ð'VÑWÔWÐWr   r   Nc                 ó   — || _         d S r0   )r1   r   s     r   r   z)WeightBasedFailoverStrategy.set_databasesD   s   € Ø#ˆŒˆˆr   )	r   r   r   Ú__doc__r2   r   r   r   r   r   r   r   r.   r.   5   so   € € € € € ðð ð)ð )ð )ðX ð Xð Xð Xð Xð$ yð $°Tð $ð $ð $ð $ð $ð $r   r.   c                   ó”   — e Zd ZdZeefdededefd„Z	e
defd„¦   «         Ze
defd„¦   «         Ze
defd	„¦   «         Zdefd
„Zdd„ZdS )ÚDefaultFailoverStrategyExecutorz+
    Executes given failover strategy.
    r'   r"   r%   c                 óL   — || _         || _        || _        d| _        d| _        d S ©Nr   )Ú	_strategyÚ_failover_attemptsÚ_failover_delayÚ_next_attempt_tsÚ_failover_counter)r   r'   r"   r%   s       r   r2   z(DefaultFailoverStrategyExecutor.__init__M   s1   € ð "ˆŒØ"3ˆÔØ-ˆÔØ%&ˆÔØ&'ˆÔÐÐr   r   c                 ó   — | j         S r0   )r@   r   s    r   r"   z1DefaultFailoverStrategyExecutor.failover_attemptsY   s   € àÔ&Ð&r   c                 ó   — | j         S r0   )rA   r   s    r   r%   z.DefaultFailoverStrategyExecutor.failover_delay]   s   € àÔ#Ð#r   c                 ó   — | j         S r0   )r?   r   s    r   r'   z(DefaultFailoverStrategyExecutor.strategya   s
   € àŒ~Ðr   c              ƒ   óú  K  — 	 | j                              ¦   «         ƒ d {V —†}|                      ¦   «          |S # t          $ r·}| j        dk    r1t          j        ¦   «         | j        z   | _        | xj        dz  c_        nAt          j        ¦   «         | j        k    r%| xj        | j        z  c_        | xj        dz  c_        | j        | j        k    r|                      ¦   «          |‚t          d¦  «        ‚d }~ww xY w)Nr   é   zhNo database connections currently available. This is a temporary condition - please retry the operation.)
r?   r   Ú_resetr	   rB   ÚtimerA   rC   r@   r
   )r   r   Úes      r   r)   z'DefaultFailoverStrategyExecutor.executee   s  è è € ð	Ø!œ^×4Ò4Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6ˆHØKŠK‰MŒMˆMØˆOøÝ'ð 	ð 	ð 	ØÔ$¨Ò)Ð)Ý(,¬	©¬°dÔ6JÑ(JÔ%ØÐ&Ô&¨!Ñ+Ð&Ô&Ð&Ý”‘” Ô 5Ò5Ð5ØÐ%Ô%¨Ô)=Ñ=Ð%Ô%ØÐ&Ô&¨!Ñ+Ð&Ô&àÔ%¨Ô(?Ò?Ð?Ø—’‘”Øå3ðRñô ð øøøøð	øøøs   „49 ¹
C:ÁB2C5Ã5C:Nc                 ó"   — d| _         d| _        d S r>   )rB   rC   r   s    r   rI   z&DefaultFailoverStrategyExecutor._reset{   s   € Ø !ˆÔØ!"ˆÔÐÐr   )r   N)r   r   r   r:   ÚDEFAULT_FAILOVER_ATTEMPTSÚDEFAULT_FAILOVER_DELAYr   r+   r,   r2   r*   r"   r%   r'   r   r)   rI   r   r   r   r<   r<   H   s   € € € € € ðð ð ";Ø 6ð	
(ð 
(à'ð
(ð ð
(ð ð	
(ð 
(ð 
(ð 
(ð ð' 3ð 'ð 'ð 'ñ „Xð'ð ð$ ð $ð $ð $ñ „Xð$ð ðÐ/ð ð ð ñ „Xðð˜}ð ð ð ð ð,#ð #ð #ð #ð #ð #r   r<   )rJ   Úabcr   r   Úredis.asyncio.multidb.databaser   r   Úredis.data_structurer   Úredis.multidb.circuitr   r6   Úredis.multidb.exceptionr	   r
   rM   rN   r   r    r.   r<   r   r   r   ú<module>rT      sL  ðØ €€€Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #à CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ -Ð -Ð -Ð -Ð -Ð -Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð ð ð ð ð ð
 Ð ØÐ ð	ð 	ð 	ð 	ð 	˜Cñ 	ô 	ð 	ðð ð ð ð ˜sñ ô ð ð2$ð $ð $ð $ð $Ð"7ñ $ô $ð $ð&5#ð 5#ð 5#ð 5#ð 5#Ð&>ñ 5#ô 5#ð 5#ð 5#ð 5#r   