
    ph                         S SK JrJr  S SKJr  S SKJr  S SKrSr " S S\5      r	 " S S	\5      r
 " S
 S\
5      r " S S\R                  5      r " S S\5      rg)    )ABCabstractmethod)Enum)CallableN<   c                        \ rS rSrSrSrSrSrg)State
   closedopenz	half-open N)__name__
__module____qualname____firstlineno__CLOSEDOPEN	HALF_OPEN__static_attributes__r       O/home/james-whalen/.local/lib/python3.13/site-packages/redis/multidb/circuit.pyr	   r	   
   s    FDIr   r	   c                   4   \ rS rSr\\S\4S j5       5       r\R                  \S\4S j5       5       r\\S\	4S j5       5       r
\
R                  \S\	4S j5       5       r
\\S	 5       5       r\R                  \S
 5       5       r\S\S \	\	/S4   4S j5       rSrg)CircuitBreaker   returnc                     g)z@The grace period in seconds when the circle should be kept open.Nr   selfs    r   grace_periodCircuitBreaker.grace_period        	r   r   c                     g)z Set the grace period in seconds.Nr   r   r   s     r   r   r       s    r   c                     g)z!The current state of the circuit.Nr   r   s    r   stateCircuitBreaker.state   r!   r   r%   c                     g)z!Set current state of the circuit.Nr   r   r%   s     r   r%   r&   "   r!   r   c                     g)z&Database associated with this circuit.Nr   r   s    r   databaseCircuitBreaker.database(   r!   r   c                     g)z*Set database associated with this circuit.Nr   r   r*   s     r   r*   r+   .   r!   r   cbNc                     gz6Callback called when the state of the circuit changes.Nr   r   r.   s     r   on_state_changedCircuitBreaker.on_state_changed4        	r   r   )r   r   r   r   propertyr   floatr   setterr	   r%   r*   r   r2   r   r   r   r   r   r      s    e    / /  / u    \\5       __   8-=ue,Ld,R#S  r   r   c                      \ rS rSrSrS\R                  4S jr\S\	4S j5       r
\
R                  S\	4S j5       r
\S\4S	 j5       r\R                  S
\4S j5       r\S 5       r\R                  S 5       r\S\S\\/S4   4S j5       rSrg)BaseCircuitBreaker:   z3
Base implementation of Circuit Breaker interface.
r.   c                    Xl         [        R                  U R                   R                  [        R                  U R                   R
                  [        R                  U R                   R                  0U l        S U l	        g N)
_cbr	   r   closer   r   r   	half_open_state_pb_mapper	_databaser1   s     r   __init__BaseCircuitBreaker.__init__?   sO    LL$((..JJOOTXX//!

 r   r   c                 .    U R                   R                  $ r<   r=   reset_timeoutr   s    r   r   BaseCircuitBreaker.grace_periodH   s    xx%%%r   r   c                 $    XR                   l        g r<   rE   r#   s     r   r   rG   L   s    !-r   c                 P    [        U R                  R                  R                  S9$ N)value)r	   r=   r%   namer   s    r   r%   BaseCircuitBreaker.stateP   s    488>>..//r   r%   c                 ,    U R                   U   " 5         g r<   )r@   r(   s     r   r%   rM   T   s    e$&r   c                     U R                   $ r<   rA   r   s    r   r*   BaseCircuitBreaker.databaseX   s    ~~r   c                     Xl         g r<   rP   r-   s     r   r*   rQ   \   s    !r   r   Nc                     gr0   r   r1   s     r   r2   #BaseCircuitBreaker.on_state_changed`   r4   r   )r=   rA   r@   )r   r   r   r   __doc__	pybreakerr   rB   r5   r6   r   r7   r	   r%   r*   r   r   r2   r   r   r   r   r9   r9   :   s    933  &e & & . . . 0u 0 0 \\'5 ' '   __" " 8-=ue,Ld,R#S  r   r9   c                   <    \ rS rSrSrS\\\\/S4   4S jrS r	Sr
g)
PBListenerf   zDWrapper for callback to be compatible with pybreaker implementation.r.   Nc                     Xl         X l        g)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r=   rA   )r   r.   r*   s      r   rB   PBListener.__init__i   s     !r   c                     [        U5      nU R                  Ul        [        UR                  S9n[        UR                  S9nU R                  XU5        g rJ   )PBCircuitBreakerAdapterrA   r*   r	   rL   r=   )r   r.   	old_state	new_states       r   state_changePBListener.state_changey   sA    $R(nn	/		/		*r   r[   )r   r   r   r   rU   r   r   r	   rB   ra   r   r   r   r   rX   rX   f   s(    N"neU3T9:" +r   rX   c                   b   ^  \ rS rSrS\R
                  4U 4S jjrS\S\\/S4   4S jr	Sr
U =r$ )r^      r.   c                 $   > [         TU ]  U5        g)z
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)superrB   )r   r.   	__class__s     r   rB    PBCircuitBreakerAdapter.__init__   s     	r   r   Nc                 d    [        XR                  5      nU R                  R                  U5        g r<   )rX   r*   r=   add_listener)r   r.   listeners      r   r2   (PBCircuitBreakerAdapter.on_state_changed   s"    b--0h'r   r   )r   r   r   r   rV   r   rB   r   r	   r2   r   __classcell__)rg   s   @r   r^   r^      s8    
933 
(8-=ue,Ld,R#S ( (r   r^   )abcr   r   enumr   typingr   rV   DEFAULT_GRACE_PERIODr	   r   r9   CircuitBreakerListenerrX   r^   r   r   r   <module>rs      s\    #    D 'S 'T) )X+11 +6(0 (r   