
    h                         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dS )    )ABCabstractmethod)Enum)CallableN<   c                       e Zd ZdZdZdZdS )Stateclosedopenz	half-openN)__name__
__module____qualname__CLOSEDOPEN	HALF_OPEN     U/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/redis/multidb/circuit.pyr	   r	   
   s        FDIIIr   r	   c                   Z   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dS )CircuitBreakerreturnc                     dS )z@The grace period in seconds when the circle should be kept open.Nr   selfs    r   grace_periodzCircuitBreaker.grace_period   	     	r   r   c                     dS )z Set the grace period in seconds.Nr   r   r   s     r   r   zCircuitBreaker.grace_period   s      r   c                     dS )z!The current state of the circuit.Nr   r   s    r   statezCircuitBreaker.state   r   r   r    c                     dS )z!Set current state of the circuit.Nr   r   r    s     r   r    zCircuitBreaker.state"   r   r   c                     dS )z&Database associated with this circuit.Nr   r   s    r   databasezCircuitBreaker.database(   r   r   c                     dS )z*Set database associated with this circuit.Nr   r   r$   s     r   r$   zCircuitBreaker.database.   r   r   cbNc                     dS 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      sa       e    ^ X / / / / ^ / u    ^ X \5    ^ \   ^ X _  ^ _ 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dS )BaseCircuitBreakerz;
    Base implementation of Circuit Breaker interface.
    r'   c                     || _         t          j        | j         j        t          j        | j         j        t          j        | j         j        i| _        d | _	        d S N)
_cbr	   r   closer   r   r   	half_open_state_pb_mapper	_databaser*   s     r   __init__zBaseCircuitBreaker.__init__?   sB    L$(.JOTX/!

 r   r   c                     | j         j        S r3   r4   reset_timeoutr   s    r   r   zBaseCircuitBreaker.grace_periodH   s    x%%r   r   c                     || j         _        d S r3   r;   r   s     r   r   zBaseCircuitBreaker.grace_periodL   s    !-r   c                 @    t          | j        j        j                  S N)value)r	   r4   r    namer   s    r   r    zBaseCircuitBreaker.stateP   s    48>.////r   r    c                 0     | j         |                      d S 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                     || _         d S r3   rD   r&   s     r   r$   zBaseCircuitBreaker.database\   s    !r   r   Nc                     dS 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   :   sO        93     &e & & & X& . . . . . 0u 0 0 0 X0 \'5 ' ' ' \'   X _" " _" 8-=ue,Ld,R#S    ^  r   r1   c                   :    e Zd ZdZdeeeegdf         fdZd ZdS )
PBListenerzDWrapper for callback to be compatible with pybreaker implementation.r'   Nc                 "    || _         || _        dS )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                  }|                     |||           d S r?   )PBCircuitBreakerAdapterr8   r$   r	   rA   r4   )r   r'   	old_state	new_states       r   state_changezPBListener.state_changey   sX    $R((n	///		///	Y	*****r   )	r   r   r   rG   r   r   r	   r9   rP   r   r   r   rJ   rJ   f   sV        NN"neU3T9:" " " " + + + + +r   rJ   c                   P     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                 J    t                                          |           dS )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                 d    t          || j                  }| j                            |           d S r3   )rJ   r$   r4   add_listener)r   r'   listeners      r   r+   z(PBCircuitBreakerAdapter.on_state_changed   s/    b$-00h'''''r   )
r   r   r   rH   r   r9   r   r	   r+   __classcell__)rT   s   @r   rM   rM      st        
9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^      s5   # # # # # # # #                     D   ' ' ' ' 'S ' ' 'T) ) ) ) ) ) ) )X+ + + + +1 + + +6( ( ( ( (0 ( ( ( ( (r   