
    =qjQ                        d Z ddlmZ ddlZddlZdZdZ G d dej                        ZeefddZ	 e	d	dd
      Z
 e	ddd
      Z e	ddd
      Z e	ddd
      Z e	ddd
      Z e	ddd
      Zy)a  Aria Circuit-Breaker (KAR-234).

pybreaker-wrappers fuer externe APIs. Verhindert Cascading-Failures
wenn Anthropic/OpenAI/Telegram-API down ist.

Usage:
    from aria_circuit import anthropic_cb, telegram_cb

    @anthropic_cb
    def call_claude(prompt):
        return requests.post("https://api.anthropic.com/v1/messages", ...)

    # Bei open circuit: pybreaker.CircuitBreakerError
    )annotationsN   <   c                  (    e Zd ZdZddZddZddZy)AriaCircuitListenerz+Logging-listener for circuit state changes.c                    || _         y )N)name)selfr	   s     /root/aria/lib/aria_circuit.py__init__zAriaCircuitListener.__init__   s	    	    c           	         t         j                  j                  d| j                   d|j                   d|j                   d       t         j                  j	                          y )N
[circuit] : z -> 
)sysstderrwriter	   flush)r
   cb	old_state	new_states       r   state_changez AriaCircuitListener.state_change   sH    

:dii[9>>2B$y~~FVVXYZ

r   c           	         t         j                  j                  d| j                   dt	        |      j
                   d| d       t         j                  j                          y )Nr   z: failure (r   z)
)r   r   r   r	   type__name__r   )r
   r   excs      r   failurezAriaCircuitListener.failure!   sK    

:dii[DI<N<N;OrRUQVVYZ[

r   N)r	   strreturnNone)r    r!   )r   
__module____qualname____doc__r   r   r    r   r   r   r      s    5r   r   c                H    t        j                  ||| t        |       g      S )N)fail_maxreset_timeoutr	   	listeners)	pybreakerCircuitBreakerr   )r	   r'   r(   s      r   make_cbr,   &   s)    ###&t,-	 r   anthropic_api)r'   r(   
openai_apitelegram_api
      
linear_api
github_apisupabase_api)r	   r   r'   intr(   r5   r    zpybreaker.CircuitBreaker)r$   
__future__r   r*   r   DEFAULT_FAIL_MAXDEFAULT_RESET_TIMEOUTCircuitBreakerListenerr   r,   anthropic_cb	openai_cbtelegram_cb	linear_cb	github_cbsupabase_cbr%   r   r   <module>r@      s    #  
   )::  (8Nc  "EL1B?	nrDL1B?	L1B?	nqCr   