
    k7i(                     t   % S r SSKrSSKrSSKJrJrJr  SSKJr  SSK	J
r
  SSKJr  SSKrS\S\R                  4S	 jr   SS
\S   \-  S\R                  S-  S\S-  S\SS4
S jjr\R(                    SS
\S-  S\R                  S-  S\S-  S\4S jj5       r\R,                  \R.                  \R0                  \R2                  \R4                  SS.r\\S   S-  \S-  4   \S'    " S S\R<                  5      r  SS\R                  S\S   S-  S\S   S-  SS4S jjr S\R                  SS4S jr!g)zLogging utilities for FastMCP.    N)AnyLiteralcast)Console)RichHandler)overridenamereturnc                     U R                  S5      (       a  [        R                  " U S9$ [        R                  " SU  3S9$ )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    S/home/james-whalen/.local/lib/python3.13/site-packages/fastmcp/utilities/logging.py
get_loggerr      s<     z""  d++HTF"344    levelDEBUGINFOWARNINGERRORCRITICALloggerenable_rich_tracebacksrich_kwargsc                    [         R                  R                  (       d  gUc  [         R                  R                  nUc  [        R
                  " S5      n[        R                  " S5      nSUl        UR                  U 5        [        SS[        SS90UD6nUR                  U5        UR                  S 5        S	SKnS	SKn[        S[        SS9SSUS
[         Xg/S.UD6nUR                  U5        UR                  S 5        UR                  SS  H  n	UR!                  U	5        M     UR#                  U5        UR#                  U5        g)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                     U R                   S L $ Nexc_inforecords    r   <lambda>#configure_logging.<locals>.<lambda>D   s    V__%<r   r      )r   	show_path
show_levelrich_tracebackstracebacks_max_framestracebacks_suppressc                     U R                   S L$ r"   r#   r%   s    r   r'   r(   X   s    vd/Jr    )r   settingslog_enabledr   r   r   	Formatter	propagatesetLevelr   r   setFormatter	addFiltermcppydantichandlersremoveHandler
addHandler)
r   r   r   r   	formatterhandlerr8   r9   traceback_handlerhdlrs
             r   configure_loggingrA      sL    '' %!(!1!1!H!H~""9-!!-0I F
OOE  t$
G # <= # t$.$c4  ""9- JK "T" # g
'(r   c           	   +     #    U (       a_  [         R                  R                  n[        [        S   U R                  5       5      n[        SUUUS.UD6   Sv   [        SUUUS.UD6  gSv   g! [        SUUUS.UD6  f = f7f)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   Nr0   )r   r1   	log_levelr   r   upperrA   )r   r   r   r   original_levellog_level_literals         r   temporary_log_levelrG   b   s     *  ))33 !CDKKM
 	 	
##9	
 		

	  $'= 	 	  $'= 	s   ABA. B.A??B)r   r   r   r   r   N_level_to_noc                      ^  \ rS rSr% \\\4   S-  \S'   \\\4   S-  \S'     SS\S   S-  S\S   S-  4U 4S jjjr	\
S\R                  S\4S	 j5       rS
rU =r$ )_ClampedLogFilter   N	min_level	max_levelr   c                    > S U l         S U l        [        R                  U5      =n(       a  U[	        U5      4U l         [        R                  U5      =n(       a  U[	        U5      4U l        [
        TU ]  5         g r"   )rL   rM   rH   getstrsuper__init__)selfrL   rM   min_level_nomax_level_no	__class__s        r   rR   _ClampedLogFilter.__init__   sj     '++I66<6*C	N;DN'++I66<6*C	N;DNr   r&   r
   c                     U R                   (       a+  U R                   u  p#UR                  U:  a  X!l        X1l        gU R                  (       a+  U R                  u  pEUR                  U:  a  XAl        XQl        gg)NT)rM   levelno	levelnamerL   )rS   r&   rU   max_level_namerT   min_level_names         r   filter_ClampedLogFilter.filter   s_    >>+/>>(L~~,!-#1 >>+/>>(L~~,!-#1 r   )rM   rL   NN)__name__
__module____qualname____firstlineno__tupleintrP   __annotations__r   rR   r   r   	LogRecordboolr]   __static_attributes____classcell__)rV   s   @r   rJ   rJ      s    S#X%%S#X%%
 JK
 JK
	 " W.. 4  r   rJ   rL   rM   c                 B    [        U S9  U R                  [        XS9S9  g)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_loggerr7   rJ   )r   rL   rM   s      r   _clamp_loggerrm      s#     6"
-	WXr   c                     U R                   SS  H+  n[        U[        5      (       d  M  U R                  U5        M-     g)z/Remove all clamped log filters from the logger.N)filters
isinstancerJ   removeFilter)r   r]   s     r   rl   rl      s1    ..#f/00' $r   )r   NNr_   )"__doc__
contextlibr   typingr   r   r   rich.consoler   rich.loggingr   typing_extensionsr   r   rP   Loggerr   re   rh   rA   contextmanagerrG   r   r   r   r   r   rH   dictrf   FilterrJ   rm   rl   r0   r   r   <module>r|      s   $   % %   $ & 5S 5W^^ 5  MS$(*.B)BCcIB)NNT!B) !4KB) 	B)
 
B)J  %)*.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   