
    Ki                     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    e/home/jay/workspace/scripts/.codegraph-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                  |        t        ddt        d      i|}|j                  |       |j                  d        d	dl}d	dl}t        d      dd|d
t         ||gd}|j                  |       t        di |}	|	j                  |       |	j                  d        |j                   dd D ]  }
|j#                  |
        |j%                  |       |j%                  |	       y)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)sFconsoleT)stderrc                     | j                   d u S Nexc_inforecords    r   <lambda>z#configure_logging.<locals>.<lambda>D   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>\   s    vd/J r    )r   settingslog_enabledr   r   r   	Formatter	propagatesetLevelr   r   setFormatter	addFiltermcppydanticupdatehandlersremoveHandler
addHandler)r   r   r   r   	formatterhandlerr7   r8   traceback_kwargstraceback_handlerhdlrs              r   configure_loggingrB      s`    '' %!(!1!1!H!H~""9-!!-0I F
OOE  t$
G # <=  $'1!" 'h7 K(#7&67""9- JK " #T"# g
'(r   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   upperrB   )r   r   r   r   original_levellog_level_literals         r   temporary_log_levelrH   f   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"   )rL   rM   rI   getstrsuper__init__)selfrL   rM   min_level_nomax_level_no	__class__s        r   rR   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)rM   levelno	levelnamerL   )rS   r&   rU   max_level_namerT   min_level_names         r   filterz_ClampedLogFilter.filter   sk    >>+/>>(L.~~,!-#1 >>+/>>(L.~~,!-#1 r   NN)__name__
__module____qualname__tupleintrP   __annotations__r   rR   r   r   	LogRecordboolr\   __classcell__)rV   s   @r   rK   rK      s    S#X%%S#X%%
 JK
 JK
	" W.. 4  r   rK   rL   rM   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   )rL   rM   )r\   N)_unclamp_loggerr6   rK   )r   rL   rM   s      r   _clamp_loggerri      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
isinstancerK   removeFilter)r   r\   s     r   rh   rh      s3    ..# (f/0'(r   )r   NNr]   )"__doc__
contextlibr   typingr   r   r   rich.consoler   rich.loggingr   typing_extensionsr   r   rP   Loggerr   rb   re   rB   contextmanagerrH   r   r   r   r   r   rI   dictrc   FilterrK   ri   rh   r/   r   r   <module>rx      s   $   % %   $ & 5S 5W^^ 5  MS$(*.F)BCcIF)NNT!F) !4KF) 	F)
 
F)R  %)*.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   