
    $j|                        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j        ej        ej        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!dS )zLogging utilities for FastMCP.    N)AnyLiteralcast)Console)RichHandler)overridenamereturnc                     |                      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    a/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/fastmcp/utilities/logging.py
get_loggerr      sI     z"" , d++++"3T"3"34444    INFOlevelDEBUGr   WARNINGERRORCRITICALloggerenable_rich_tracebacksrich_kwargsc                    t           j        j        sdS |t           j        j        }|t	          j        d          }t	          j        d          }d|_        |                    |            |j	        dd         D ]}|
                    |           t           j        j        sQt	          j                    }|                    t	          j        d                     |                    |           dS t          ddt!          d          i|}|                    |           |                    d	            d
dl}d
dl}t!          d          dd|dt           ||gd}	|	                    |           t          di |	}
|
                    |           |
                    d            |                    |           |                    |
           dS )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>h   s    vd/J r    )r   settingslog_enabledr   r   r   	Formatter	propagatesetLevelhandlersremoveHandlerenable_rich_loggingStreamHandlersetFormatter
addHandlerr   r   	addFiltermcppydanticupdate)r   r   r   r   	formatterhdlrhandlerr<   r=   traceback_kwargstraceback_handlers              r   configure_loggingrD      s$    '  %!(!1!H~"9--!-00I F
OOE " # #T"""" / '))W./KLLMMM'"""   t$$$
 G ### <<=== JJJOOO $'''1!" 'h7  K(((#77&677""9--- J JKKK
g
'(((((r   c           	   +   
  K   | rzt           j        j        }t          t          d         |                                           }t          d|||d| 	 dV  t          d|||d| dS # t          d|||d| w xY wdV  dS )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   upperrD   )r   r   r   r   original_levellog_level_literals         r   temporary_log_levelrJ   n   s     *   )3 !CDKKMM
 
 	 	
##9	
 	
 		
 	
 	

	EEE  $'=  	     $'=  	    	s   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                              |          x}r|t	          |          f| _         t                              |          x}r|t	          |          f| _        t                                                       d S r"   )rN   rO   rK   getstrsuper__init__)selfrN   rO   min_level_nomax_level_no	__class__s        r   rT   z_ClampedLogFilter.__init__   s     '++I666< 	<*C	NN;DN'++I666< 	<*C	NN;DNr   r&   r
   c                     | j         r%| j         \  }}|j        |k    r||_        ||_        dS | j        r%| j        \  }}|j        |k     r||_        ||_        dS dS )NT)rO   levelno	levelnamerN   )rU   r&   rW   max_level_namerV   min_level_names         r   filterz_ClampedLogFilter.filter   su    > 	+/>(L.~,,!-#1 t> 	+/>(L.~,,!-#1 ttr   NN)__name__
__module____qualname__tupleintrR   __annotations__r   rT   r   r   	LogRecordboolr^   __classcell__)rX   s   @r   rM   rM      s         S#X%%%%S#X%%%%
  JK
 JK
	     " W. 4    X    r   rM   rN   rO   c                 p    t          |            |                     t          ||                     dS )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   )rN   rO   )r^   N)_unclamp_loggerr;   rM   )r   rN   rO   s      r   _clamp_loggerrk      s@     6""""
-	YWWWXXXXXr   c                 ~    | j         dd         D ],}t          |t                    r|                     |           -dS )z/Remove all clamped log filters from the logger.N)filters
isinstancerM   removeFilter)r   r^   s     r   rj   rj      sN    .# ( (f/00 	('''( (r   )r   NNr_   )"__doc__
contextlibr   typingr   r   r   rich.consoler   rich.loggingr   typing_extensionsr   r   rR   Loggerr   rd   rg   rD   contextmanagerrJ   r   r   r   r   r   rK   dictre   FilterrM   rk   rj   r/   r   r   <module>rz      s   $ $ $      % % % % % % % % % %             $ $ $ $ $ $ & & & & & & 5S 5W^ 5 5 5 5  MS$(*.N) N)BCcIN)NT!N) !4KN) 	N)
 
N) N) N) N)b  %)*.0 0:0NT!0 !4K0 	0 0 0 0l ]L] 
  d;<tCS4ZO 	 	 	& & & & & & & &V RVQUY YNYFG$NY FG$NY 
	Y Y Y Y&(GN (t ( ( ( ( ( (r   