
    ,i                         d dl mZmZ d dlmZ d dlmZ d dlZdZ G d de      Z	 G d d	e      Z
 G d
 de
      Z G d dej                        Z G d de      Zy)    )ABCabstractmethod)Enum)CallableN<   c                       e Zd ZdZdZdZy)Stateclosedopenz	half-openN)__name__
__module____qualname__CLOSEDOPEN	HALF_OPEN     Z/var/www/html/langgraph-service/venv/lib/python3.12/site-packages/redis/multidb/circuit.pyr	   r	   
   s    FDIr   r	   c                   "   e Zd Zeedefd              Zej                  edefd              Zeedefd              Z	e	j                  edefd              Z	eed               Z
e
j                  ed	               Z
ed
ed eegdf   fd       Zy)CircuitBreakerreturnc                      y)z@The grace period in seconds when the circle should be kept open.Nr   selfs    r   grace_periodzCircuitBreaker.grace_period        	r   r   c                      y)z Set the grace period in seconds.Nr   r   r   s     r   r   zCircuitBreaker.grace_period   s    r   c                      y)z!The current state of the circuit.Nr   r   s    r   statezCircuitBreaker.state   r   r   r    c                      y)z!Set current state of the circuit.Nr   r   r    s     r   r    zCircuitBreaker.state"   r   r   c                      y)z&Database associated with this circuit.Nr   r   s    r   databasezCircuitBreaker.database(   r   r   c                      y)z*Set database associated with this circuit.Nr   r   r$   s     r   r$   zCircuitBreaker.database.   r   r   cbNc                      yz6Callback called when the state of the circuit changes.Nr   r   r'   s     r   on_state_changedzCircuitBreaker.on_state_changed4        	r   )r   r   r   propertyr   floatr   setterr	   r    r$   r   r+   r   r   r   r   r      s    e    / /  / u    \\5       __   8-=ue,Ld,R#S  r   r   c                   
   e Zd ZdZdej
                  fdZedefd       Z	e	j                  defd       Z	edefd       Zej                  d	efd
       Zed        Zej                  d        Zededeegdf   fd       Zy)BaseCircuitBreakerz;
    Base implementation of Circuit Breaker interface.
    r'   c                    || _         t        j                  | j                   j                  t        j                  | j                   j
                  t        j                  | j                   j                  i| _        d | _	        y N)
_cbr	   r   closer   r   r   	half_open_state_pb_mapper	_databaser*   s     r   __init__zBaseCircuitBreaker.__init__?   sQ    LL$((..JJOOTXX//!

 r   r   c                 .    | j                   j                  S r3   r4   reset_timeoutr   s    r   r   zBaseCircuitBreaker.grace_periodH   s    xx%%%r   r   c                 &    || j                   _        y r3   r;   r   s     r   r   zBaseCircuitBreaker.grace_periodL   s    !-r   c                 V    t        | j                  j                  j                        S N)value)r	   r4   r    namer   s    r   r    zBaseCircuitBreaker.stateP   s    488>>..//r   r    c                 ,     | j                   |           y r3   )r7   r"   s     r   r    zBaseCircuitBreaker.stateT   s    $e$&r   c                     | j                   S r3   r8   r   s    r   r$   zBaseCircuitBreaker.databaseX   s    ~~r   c                     || _         y r3   rD   r&   s     r   r$   zBaseCircuitBreaker.database\   s	    !r   r   Nc                      yr)   r   r*   s     r   r+   z#BaseCircuitBreaker.on_state_changed`   r,   r   )r   r   r   __doc__	pybreakerr   r9   r-   r.   r   r/   r	   r    r$   r   r   r+   r   r   r   r1   r1   :   s    933  &e & & . . . 0u 0 0 \\'5 ' '   __" " 8-=ue,Ld,R#S  r   r1   c                   2    e Zd ZdZdeeeegdf   fdZd Zy)
PBListenerzDWrapper for callback to be compatible with pybreaker implementation.r'   Nc                      || _         || _        y)z
        Initialize a PBListener instance.

        Args:
            cb: Callback function that will be called when the circuit breaker state changes.
            database: Database instance associated with this circuit breaker.
        N)r4   r8   )r   r'   r$   s      r   r9   zPBListener.__init__i   s     !r   c                     t        |      }| j                  |_        t        |j                        }t        |j                        }| j                  |||       y r?   )PBCircuitBreakerAdapterr8   r$   r	   rA   r4   )r   r'   	old_state	new_states       r   state_changezPBListener.state_changey   sC    $R(nn	/		/	Y	*r   )	r   r   r   rG   r   r   r	   r9   rP   r   r   r   rJ   rJ   f   s(    N"neU3T9:" +r   rJ   c                   T     e Zd Zdej                  f fdZdedeegdf   fdZ xZ	S )rM   r'   c                 $    t         |   |       y)a  
        Initialize a PBCircuitBreakerAdapter instance.

        This adapter wraps pybreaker's CircuitBreaker implementation to make it compatible
        with our CircuitBreaker interface.

        Args:
            cb: A pybreaker CircuitBreaker instance to be adapted.
        N)superr9   )r   r'   	__class__s     r   r9   z PBCircuitBreakerAdapter.__init__   s     	r   r   Nc                 f    t        || j                        }| j                  j                  |       y r3   )rJ   r$   r4   add_listener)r   r'   listeners      r   r+   z(PBCircuitBreakerAdapter.on_state_changed   s$    b$--0h'r   )
r   r   r   rH   r   r9   r   r	   r+   __classcell__)rT   s   @r   rM   rM      s3    
933 
(8-=ue,Ld,R#S (r   rM   )abcr   r   enumr   typingr   rH   DEFAULT_GRACE_PERIODr	   r   r1   CircuitBreakerListenerrJ   rM   r   r   r   <module>r^      s\    #    D 'S 'T) )X+11 +6(0 (r   