
    keJi                         d dl mZmZ d dlmZmZ d dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZ  G d d	e          Z G d
 de          Z G d de          Ze	eeef                  Z G d dee          ZdS )    )ABCabstractmethod)OptionalUnionN)RedisCluster)WeightedList)CircuitBreaker)Numberc                       e Zd Zeedefd                        Zej        edefd                        Zeedee	         fd                        Z
e
j        edee	         fd                        Z
dS )	AbstractDatabasereturnc                     dS )z]The weight of this database in compare to others. Used to determine the database failover to.N selfs    \/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/redis/multidb/database.pyweightzAbstractDatabase.weight   	     	    r   c                     dS )z5Set the weight of this database in compare to others.Nr   r   r   s     r   r   zAbstractDatabase.weight   r   r   c                     dS )z6Health check URL associated with the current database.Nr   r   s    r   health_check_urlz!AbstractDatabase.health_check_url   r   r   r   c                     dS )z>Set the health check URL associated with the current database.Nr   r   r   s     r   r   z!AbstractDatabase.health_check_url   r   r   N)__name__
__module____qualname__propertyr   floatr   setterr   strr   r   r   r   r   r      s            ^ X ]U    ^ ] (3-    ^ X #    ^   r   r   c                       e Zd Z	 d
dedee         fdZedefd            Zej	        defd            Zedee         fd            Z
e
j	        dee         fd	            Z
dS )BaseDatabaseNr   r   c                 "    || _         || _        d S N)_weight_health_check_url)r   r   r   s      r   __init__zBaseDatabase.__init__&   s    
 !1r   r   c                     | j         S r&   r'   r   s    r   r   zBaseDatabase.weight.   
    |r   c                     || _         d S r&   r+   r   s     r   r   zBaseDatabase.weight2       r   c                     | j         S r&   r(   r   s    r   r   zBaseDatabase.health_check_url6   s    %%r   c                     || _         d S r&   r0   r   s     r   r   zBaseDatabase.health_check_url:   s    !1r   r&   )r   r   r   r    r   r"   r)   r   r   r!   r   r   r   r   r$   r$   %   s         +/2 22 #3-2 2 2 2     X ]U    ] &(3- & & & X& 2# 2 2 2 2 2 2r   r$   c                   
   e Zd ZdZeedeej        e	f         fd                        Z
e
j        edeej        e	f         fd                        Z
eedefd                        Zej        edefd                        Zd	S )
SyncDatabasez5Database with an underlying synchronous redis client.r   c                     dS )zThe underlying redis client.Nr   r   s    r   clientzSyncDatabase.clientB   r   r   r5   c                     dS )z Set the underlying redis client.Nr   r   r5   s     r   r5   zSyncDatabase.clientH   r   r   c                     dS )z)Circuit breaker for the current database.Nr   r   s    r   circuitzSyncDatabase.circuitN   r   r   r9   c                     dS )z1Set the circuit breaker for the current database.Nr   r   r9   s     r   r9   zSyncDatabase.circuitT   r   r   N)r   r   r   __doc__r   r   r   redisRedisr   r5   r!   r	   r9   r   r   r   r3   r3   ?   s        ??ek<78    ^ X ]U5;#<=    ^ ]     ^ X ^~    ^ ^  r   r3   c            
           e Zd Z	 ddeej        ef         dedede	e
         f fdZedeej        ef         fd            Zej        deej        ef         fd	            Zedefd
            Zej        defd            Z xZS )DatabaseNr5   r9   r   r   c                     || _         || _        | | j        _        t                                          ||           dS )at  
        Initialize a new Database instance.

        Args:
            client: Underlying Redis client instance for database operations
            circuit: Circuit breaker for handling database failures
            weight: Weight value used for database failover prioritization
            health_check_url: Health check URL associated with the current database
        N)_client_cbdatabasesuperr)   )r   r5   r9   r   r   	__class__s        r   r)   zDatabase.__init___   s>       !122222r   r   c                     | j         S r&   rB   r   s    r   r5   zDatabase.clientt   r,   r   c                     || _         d S r&   rH   r7   s     r   r5   zDatabase.clientx   r.   r   c                     | j         S r&   rC   r   s    r   r9   zDatabase.circuit|   s	    xr   c                     || _         d S r&   rK   r;   s     r   r9   zDatabase.circuit   s    r   r&   )r   r   r   r   r=   r>   r   r	   r    r   r"   r)   r   r5   r!   r9   __classcell__)rF   s   @r   r@   r@   ^   s5        +/3 3ek</03  3 	3
 #3-3 3 3 3 3 3* ek<78    X ]U5;#<=    ]     X ^~    ^    r   r@   )abcr   r   typingr   r   r=   r   redis.data_structurer   redis.multidb.circuitr	   redis.typingr
   r   r$   r3   tuple	Databasesr@   r   r   r   <module>rU      sR   # # # # # # # # " " " " " " " "        - - - - - - 0 0 0 0 0 0          s   42 2 2 2 2# 2 2 24    #   8 |V345	$ $ $ $ $|\ $ $ $ $ $r   