Ë
    §Œj÷  ã                   ó´   — d dl 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 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y)é    N)ÚABCÚabstractmethod)ÚWeightedList)ÚState)Ú	DatabasesÚSyncDatabase)ÚNoValidDatabaseExceptionÚTemporaryUnavailableExceptioné
   é   c                   ó<   — e Zd Zedefd„«       Zededdfd„«       Zy)ÚFailoverStrategyÚreturnc                  ó   — y)z.Select the database according to the strategy.N© ©Úselfs    ú`/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/redis/multidb/failover.pyÚdatabasezFailoverStrategy.database   ó   € ð 	ó    Ú	databasesNc                  ó   — y)z&Set the database strategy operates on.Nr   ©r   r   s     r   Úset_databaseszFailoverStrategy.set_databases   r   r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r   r      s=   „ Øð˜,ò ó ðð ð 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y)ÚFailoverStrategyExecutorr   c                  ó   — y)z The number of failover attempts.Nr   r   s    r   Úfailover_attemptsz*FailoverStrategyExecutor.failover_attempts   ó   € ð 	r   c                  ó   — y)z$The delay between failover attempts.Nr   r   s    r   Úfailover_delayz'FailoverStrategyExecutor.failover_delay#   r#   r   c                  ó   — y)zThe strategy to execute.Nr   r   s    r   Ústrategyz!FailoverStrategyExecutor.strategy)   r#   r   c                  ó   — y)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ò ó ó ðð Øð ò ó ó ðð ØðÐ*ò ó ó ðð ð˜ò ó ñr   r    c                   ó4   — e Zd ZdZdd„Zdefd„Zdeddfd„Zy)	ÚWeightBasedFailoverStrategyz6
    Failover strategy based on database weights.
    r   Nc                 ó"   — t        «       | _        y ©N)r   Ú
_databasesr   s    r   Ú__init__z$WeightBasedFailoverStrategy.__init__:   s   € Ü&›.ˆ�r   c                 ó–   — | j                   D ]0  \  }}|j                  j                  t        j                  k(  sŒ.|c S  t        d«      ‚)Nz-No valid database available for communication)r1   ÚcircuitÚstateÚCBStateÚCLOSEDr	   )r   r   Ú_s      r   r   z$WeightBasedFailoverStrategy.database=   s?   € ØŸ?œ?‰KˆH�aØ×Ñ×%Ñ%¬¯©Ó7Ø’ð +ô 'Ð'VÓWÐWr   r   c                 ó   — || _         y r0   )r1   r   s     r   r   z)WeightBasedFailoverStrategy.set_databasesD   s	   € Ø#ˆ�r   ©r   N)	r   r   r   Ú__doc__r2   r   r   r   r   r   r   r   r.   r.   5   s-   „ ñó)ð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y)ÚDefaultFailoverStrategyExecutorz+
    Executes given failover strategy.
    r'   r"   r%   c                 óJ   — || _         || _        || _        d| _        d| _        y ©Nr   )Ú	_strategyÚ_failover_attemptsÚ_failover_delayÚ_next_attempt_tsÚ_failover_counter)r   r'   r"   r%   s       r   r2   z(DefaultFailoverStrategyExecutor.__init__M   s+   € ð "ˆŒØ"3ˆÔØ-ˆÔØ%&ˆÔØ&'ˆÕr   r   c                 ó   — | j                   S r0   )rA   r   s    r   r"   z1DefaultFailoverStrategyExecutor.failover_attemptsY   s   € à×&Ñ&Ð&r   c                 ó   — | j                   S r0   )rB   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                 ó*  — 	 | j                   j                  «       }| j                  «        |S # t        $ rÛ}| j                  dk(  r<t        j
                  «       | j                  z   | _        | xj                  dz  c_        nUt        j
                  «       | j                  k\  r4| xj                  | j                  z  c_        | xj                  dz  c_        | j                  | j                  kD  r| j                  «        |‚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	   rC   ÚtimerB   rD   rA   r
   )r   r   Úes      r   r)   z'DefaultFailoverStrategyExecutor.executee   sà   € ð	Ø—~‘~×.Ñ.Ó0ˆHØ�K‰KŒMØˆOøÜ'ò 	Ø×$Ñ$¨Ò)Ü(,¯	©	«°d×6JÑ6JÑ(J�Ô%Ø×&Ò&¨!Ñ+Ö&Ü—‘“ × 5Ñ 5Ò5Ø×%Ò%¨×)=Ñ)=Ñ=Õ%Ø×&Ò&¨!Ñ+Õ&à×%Ñ%¨×(?Ñ(?Ò?Ø—‘”Ø�ä3ðRóð ûð	ús   ‚+. ®	D·CDÄDNc                 ó    — d| _         d| _        y r?   )rC   rD   r   s    r   rJ   z&DefaultFailoverStrategyExecutor._reset{   s   € Ø !ˆÔØ!"ˆÕr   r:   )r   r   r   r;   ÚDEFAULT_FAILOVER_ATTEMPTSÚDEFAULT_FAILOVER_DELAYr   r+   r,   r2   r*   r"   r%   r'   r   r)   rJ   r   r   r   r=   r=   H   s“   „ ñð ";Ø 6ñ	
(à"ð
(ð ð
(ð ó	
(ð ð' 3ò 'ó ð'ð ð$ ò $ó ð$ð ðÐ*ò ó ðð˜ó ô,#r   r=   )rK   Úabcr   r   Úredis.data_structurer   Úredis.multidb.circuitr   r6   Úredis.multidb.databaser   r   Úredis.multidb.exceptionr	   r
   rN   rO   r   r    r.   r=   r   r   r   Ú<module>rU      sY   ðÛ ß #å -Ý 2ß :÷ð
 Ð ØÐ ô	�sô 	ô˜sô ô2$Ð"2ô $ô&5#Ð&>õ 5#r   