
    kKj                     d   U d Z ddlZddlZddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlZdedej                  fd	Z	 	 	 dd
ed   ez  dej                  dz  dedz  deddf
dZej(                  	 	 dd
edz  dej                  dz  dedz  defd       Zej,                  ej.                  ej0                  ej2                  ej4                  ddZeed   dz  edz  f   ed<    G d dej<                        Z	 	 ddej                  ded   dz  ded   dz  ddfdZ dej                  ddfdZ!y)zLogging utilities for FastMCP.    N)AnyLiteralcast)Console)RichHandler)overridenamereturnc                     | j                  d      rt        j                  |       S t        j                  d|        S )zGet a logger nested under FastMCP namespace.

    Args:
        name: the name of the logger, which will be prefixed with 'FastMCP.'

    Returns:
        a configured logger instance
    zfastmcp.r	   )
startswithlogging	getLoggerr   s    j/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/fastmcp/utilities/logging.py
get_loggerr      s9     z"  d++HTF"344    levelDEBUGINFOWARNINGERRORCRITICALloggerenable_rich_tracebacksrich_kwargsc                    t         j                  j                  sy|t         j                  j                  }|t	        j
                  d      }t	        j                  d      }d|_        |j                  |        |j                  dd D ]  }|j                  |        t         j                  j                  sJt	        j                         }|j                  t	        j                  d             |j                  |       yt        ddt!        d      i|}|j                  |       |j#                  d	        d
dl}	 d
dl}t         ||g}	t!        d      dd|d|	d}
|
j+                  |       t        di |
}|j                  |       |j#                  d        |j                  |       |j                  |       y# t(        $ r t         |g}	Y w xY w)z
    Configure logging for FastMCP.

    Args:
        logger: the logger to configure
        level: the log level to use
        rich_kwargs: the parameters to use for creating RichHandler
    Nfastmcpz%(message)sFz%(levelname)s: %(message)sconsoleT)stderrc                     | j                   d u S Nexc_inforecords    r   <lambda>z#configure_logging.<locals>.<lambda>P   s    V__%<r   r      )r   	show_path
show_levelrich_tracebackstracebacks_max_framestracebacks_suppressc                     | j                   d uS r"   r#   r%   s    r   r'   z#configure_logging.<locals>.<lambda>n   s    vd/Jr    )r   settingslog_enabledr   r   r   	Formatter	propagatesetLevelhandlersremoveHandlerenable_rich_loggingStreamHandlersetFormatter
addHandlerr   r   	addFilterpydanticmcpImportErrorupdate)r   r   r   r   	formatterhdlrhandlerr<   r=   r-   traceback_kwargstraceback_handlers               r   configure_loggingrE      s    '' %!(!1!1!H!H~""9-!!-0I F
OOE "T" # //'')W../KLM'"  t$
G # <= 7  'X6 $'1!"2 K(#7&67""9- JK
g
'(/  2&12s   G GGc           	   +      K   | r_t         j                  j                  }t        t        d   | j                               }t        d|||d| 	 d t        d|||d| yd y# t        d|||d| w xY ww)a  Context manager to temporarily set log level and restore it afterwards.

    Args:
        level: The temporary log level to set (e.g., "DEBUG", "INFO")
        logger: Optional logger to configure (defaults to FastMCP logger)
        enable_rich_tracebacks: Whether to enable rich tracebacks
        **rich_kwargs: Additional parameters for RichHandler

    Usage:
        with temporary_log_level("DEBUG"):
            # Code that runs with DEBUG logging
            pass
        # Original log level is restored here
    r   )r   r   r   Nr/   )r   r0   	log_levelr   r   upperrE   )r   r   r   r   original_levellog_level_literals         r   temporary_log_levelrK   t   s     *  ))33 !CDKKM
 	 	
##9	
 		

	  $'= 	 	  $'= 	s   AA=A) A=)A::A=)r   r   r   r   r   N_level_to_noc                        e Zd ZU eeef   dz  ed<   eeef   dz  ed<   	 	 d	ded   dz  ded   dz  f fdZe	de
j                  defd       Z xZS )
_ClampedLogFilterN	min_level	max_levelr   c                     d | _         d | _        t        j                  |      x}r|t	        |      f| _         t        j                  |      x}r|t	        |      f| _        t
        |           y r"   )rO   rP   rL   getstrsuper__init__)selfrO   rP   min_level_nomax_level_no	__class__s        r   rU   z_ClampedLogFilter.__init__   sj     '++I66<6*C	N;DN'++I66<6*C	N;DNr   r&   r
   c                     | j                   r-| j                   \  }}|j                  |kD  r||_        ||_        y| j                  r-| j                  \  }}|j                  |k  r||_        ||_        yy)NT)rP   levelno	levelnamerO   )rV   r&   rX   max_level_namerW   min_level_names         r   filterz_ClampedLogFilter.filter   sk    >>+/>>(L.~~,!-#1 >>+/>>(L.~~,!-#1 r   NN)__name__
__module____qualname__tupleintrS   __annotations__r   rU   r   r   	LogRecordboolr_   __classcell__)rY   s   @r   rN   rN      s    S#X%%S#X%%
 JK
 JK
	" W.. 4  r   rN   rO   rP   c                 V    t        |        | j                  t        ||             y)a  Clamp the logger to a minimum and maximum level.

    If min_level is provided, messages logged at a lower level than `min_level` will have their level increased to `min_level`.
    If max_level is provided, messages logged at a higher level than `max_level` will have their level decreased to `max_level`.

    Args:
        min_level: The lower bound of the clamp
        max_level: The upper bound of the clamp
    )r   )rO   rP   )r_   N)_unclamp_loggerr;   rN   )r   rO   rP   s      r   _clamp_loggerrl      s%     6"
-	YWXr   c                 p    | j                   dd D ]$  }t        |t              s| j                  |       & y)z/Remove all clamped log filters from the logger.N)filters
isinstancerN   removeFilter)r   r_   s     r   rk   rk      s.    ..#f/0' $r   )r   NNr`   )"__doc__
contextlibr   typingr   r   r   rich.consoler   rich.loggingr   typing_extensionsr   r   rS   Loggerr   re   rh   rE   contextmanagerrK   r   r   r   r   r   rL   dictrf   FilterrN   rl   rk   r/   r   r   <module>r{      s   $   % %   $ & 5S 5W^^ 5  MS$(*.T)BCcIT)NNT!T) !4KT) 	T)
 
T)n  %)*.0:0NNT!0 !4K0 	0 0l ]]LL]]  
 d;<tCS4ZO 	& &V RVQUYNNYFG$NY FG$NY 
	Y&(GNN (t (r   