o
    i                     @   sj  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	d
Z			dded eB dejdB dedB deddf
ddZej		d dedB dejdB dedB defddZejejejejejddZeed dB edB f ed< G dd dejZ		d dejded dB ded dB ddfddZ dejddfddZ!dS )!zLogging utilities for FastMCP.    N)AnyLiteralcast)Console)RichHandler)overridenamereturnc                 C   s(   |  drtj| dS tjd|  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
    r   _/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/fastmcp/utilities/logging.py
get_logger   s   
	r   INFOlevelDEBUGr   WARNINGERRORCRITICALloggerenable_rich_tracebacksrich_kwargsc                 K   s  t jjsdS |du rt jj}|du rtd}td}d|_||  t	ddt
ddi|}|| |dd	  d
dl}d
dl}t
dddd|dt ||gd}|| t	di |}	|	| |	dd	  |jdd D ]}
||
 qr|| ||	 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)sFconsoleT)stderrc                 S   s
   | j d u S Nexc_inforecordr   r   r   <lambda>D      
 z#configure_logging.<locals>.<lambda>r      )r   	show_path
show_levelrich_tracebackstracebacks_max_framestracebacks_suppressc                 S   s
   | j d uS r   r   r!   r   r   r   r#   \   r$   r   )r   settingslog_enabledr   r   r   	Formatter	propagatesetLevelr   r   setFormatter	addFiltermcppydanticupdatehandlersremoveHandler
addHandler)r   r   r   r   	formatterhandlerr2   r3   traceback_kwargstraceback_handlerhdlrr   r   r   configure_logging   sB   




	

r=   c                 k   s|    | r9t jj}ttd |  }td|||d| zdV  W td|||d| dS td|||d| 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   r+   	log_levelr   r   upperr=   )r   r   r   r   original_levellog_level_literalr   r   r   temporary_log_levelf   s<   
rB   )r   r   r   r   r   N_level_to_noc                       s~   e Zd ZU eeef dB ed< eeef dB ed< 		dded dB ded dB f fddZe	de
jdefd	d
Z  ZS )_ClampedLogFilterN	min_level	max_levelr   c                    sR   d | _ d | _t| }r|t|f| _ t| }r"|t|f| _t   d S r   )rE   rF   rC   getstrsuper__init__)selfrE   rF   min_level_nomax_level_no	__class__r   r   rJ      s   z_ClampedLogFilter.__init__r"   r	   c                 C   sX   | j r| j \}}|j|kr||_||_dS | jr*| j\}}|j|k r*||_||_dS dS )NT)rF   levelno	levelnamerE   )rK   r"   rM   max_level_namerL   min_level_namer   r   r   filter   s   



z_ClampedLogFilter.filterNN)__name__
__module____qualname__tupleintrH   __annotations__r   rJ   r   r   	LogRecordboolrT   __classcell__r   r   rN   r   rD      s    
 rD   rE   rF   c                 C   s"   t | d | jt||dd 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   )rE   rF   )rT   N)_unclamp_loggerr1   rD   )r   rE   rF   r   r   r   _clamp_logger   s   
r`   c                 C   s,   | j dd D ]}t|tr| | qdS )z/Remove all clamped log filters from the logger.N)filters
isinstancerD   removeFilter)r   rT   r   r   r   r_      s
   

r_   )r   NNrU   )"__doc__
contextlibr   typingr   r   r   rich.consoler   rich.loggingr   typing_extensionsr   r   rH   Loggerr   rZ   r]   r=   contextmanagerrB   r   r   r   r   r   rC   dictr[   FilterrD   r`   r_   r   r   r   r   <module>   st    

I6+


