
    "<i                        d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlmZmZ d dlmZ  ee          Z G d d          ZdS )    )annotationsN)CallableMapping)Any)ToolAnnotations)ValidationError)settings)NotFoundError	ToolError)DuplicateBehavior)Tool
ToolResult)ToolTransformConfigapply_transformations_to_tools)
get_loggerc                      e Zd ZdZ	 	 	 d1d2d	Zd3dZd4dZd5dZd3dZ	 	 	 	 	 	 d6d7d!Z	d8d#Z
d9d(Zd:d*Zd;d+Zd<d,Zd=d0ZdS )>ToolManagerzManages FastMCP tools.Nduplicate_behaviorDuplicateBehavior | Nonemask_error_detailsbool | Nonetransformations(Mapping[str, ToolTransformConfig] | Nonec                    i | _         |pt          j        | _        t          |pi           | _        |d}|t
          j        vr2t          d| dd                    t
          j                             || _	        d S )NwarnzInvalid duplicate_behavior: z. Must be one of: z, )
_toolsr	   r   dictr   r   __args__
ValueErrorjoinr   )selfr   r   r   s       /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fastmcp/tools/tool_manager.py__init__zToolManager.__init__   s     (*=("= 	 @D!r@
 @

 %!'%6%???K/A K K#'99->-G#H#HK K  
 #5    returndict[str, Tool]c                @   K   t          | j        | j                  }|S )z?Return this manager's local tools with transformations applied.)toolsr   )r   r   r   )r!   transformed_toolss     r"   _load_toolszToolManager._load_tools4   s.      :+ 0
 
 
 ! r$   keystrboolc                B   K   |                                   d{V }||v S )zCheck if a tool exists.N)	get_toolsr!   r+   r(   s      r"   has_toolzToolManager.has_tool<   s1      nn&&&&&&&&e|r$   r   c                x   K   |                                   d{V }||v r||         S t          d|d          )zGet tool by key.NTool 
 not found)r/   r
   r0   s      r"   get_toolzToolManager.get_toolA   sT      nn&&&&&&&&%<<:5C555666r$   c                :   K   |                                   d{V S )zI
        Gets the complete, unfiltered inventory of local tools.
        N)r*   )r!   s    r"   r/   zToolManager.get_toolsH   s,       %%'''''''''r$   fnCallable[..., Any]name
str | Nonedescriptiontagsset[str] | Noner   ToolAnnotations | None
serializerCallable[[Any], str] | Noneexclude_argslist[str] | Nonec           	         t           j        rt          j        dt          d           t          j        |||||||          }|                     |          S )zAdd a tool to the server.zcToolManager.add_tool_from_fn() is deprecated. Use Tool.from_function() and call add_tool() instead.   )
stacklevel)r9   r;   r<   r   rA   r?   )r	   deprecation_warningswarningsr   DeprecationWarningr   from_functionadd_tool)	r!   r7   r9   r;   r<   r   r?   rA   tools	            r"   add_tool_from_fnzToolManager.add_tool_from_fnN   ss     ( 	Mu"   
 !##%!
 
 
 }}T"""r$   rK   c                v   | j                             |j                  }|r| j        dk    r2t                              d|j                    || j         |j        <   nZ| j        dk    r|| j         |j        <   n?| j        dk    rt          d|j                   | j        dk    r|S n|| j         |j        <   |S )z Register a tool with the server.r   zTool already exists: replaceerrorignore)r   getr+   r   loggerwarningr   )r!   rK   existings      r"   rJ   zToolManager.add_toolk   s    ;??48,, 	)&&00AtxAABBB(,DH%%(I55(,DH%%(G33 !C!C!CDDD(H44 5 %)DK!r$   	tool_nametransformationr   Nonec                    || j         |<   dS )zAdd a tool transformation.Nr   )r!   rU   rV   s      r"   add_tool_transformationz#ToolManager.add_tool_transformation|   s     +9Y'''r$   ToolTransformConfig | Nonec                6    | j                             |          S )zGet a tool transformation.)r   rQ   r!   rU   s     r"   get_tool_transformationz#ToolManager.get_tool_transformation   s    #''	222r$   c                ,    || j         v r
| j         |= dS dS )zRemove a tool transformation.NrY   r]   s     r"   remove_tool_transformationz&ToolManager.remove_tool_transformation   s)    ,,,$Y/// -,r$   c                N    || j         v r
| j         |= dS t          d|d          )zRemove a tool from the server.

        Args:
            key: The key of the tool to remove

        Raises:
            NotFoundError: If the tool is not found
        r3   r4   N)r   r
   )r!   r+   s     r"   remove_toolzToolManager.remove_tool   s;     $+C    9 9 9 9:::r$   	argumentsdict[str, Any]r   c                  K   |                      |           d{V }	 |                    |           d{V S # t          $ r'}t                              d|d|            |d}~wt
          $ r$}t                              d|           |d}~wt          $ rR}t                              d|           | j        rt          d|          |t          d|d|           |d}~ww xY w)zr
        Internal API for servers: Finds and calls a tool, respecting the
        filtered protocol path.
        NzError validating tool z: zError calling tool )r5   runr   rR   	exceptionr   	Exceptionr   )r!   r+   rc   rK   es        r"   	call_toolzToolManager.call_tool   sS     
 ]]3''''''''	K),,,,,,,,, 	 	 	BcBBqBBCCCG 	 	 	:3::;;;G 	K 	K 	K:3::;;;& K =c = =>>AE Bc B Bq B BCCJ	Ks.   : 
C1"A&&C13BC1AC,,C1)NNN)r   r   r   r   r   r   )r%   r&   )r+   r,   r%   r-   )r+   r,   r%   r   )NNNNNN)r7   r8   r9   r:   r;   r:   r<   r=   r   r>   r?   r@   rA   rB   r%   r   )rK   r   r%   r   )rU   r,   rV   r   r%   rW   )rU   r,   r%   r[   )rU   r,   r%   rW   )r+   r,   r%   rW   )r+   r,   rc   rd   r%   r   )__name__
__module____qualname____doc__r#   r*   r1   r5   r/   rL   rJ   rZ   r^   r`   rb   rj    r$   r"   r   r      s9          8<*.DH	5 5 5 5 54! ! ! !   
7 7 7 7( ( ( (  "& $.226)-# # # # #:   "9 9 9 93 3 3 30 0 0 0
; ; ; ;K K K K K Kr$   r   )
__future__r   rG   collections.abcr   r   typingr   	mcp.typesr   pydanticr   fastmcpr	   fastmcp.exceptionsr
   r   fastmcp.settingsr   fastmcp.tools.toolr   r   fastmcp.tools.tool_transformr   r   fastmcp.utilities.loggingr   rk   rR   r   ro   r$   r"   <module>r{      sS   " " " " " "  - - - - - - - -       % % % % % % $ $ $ $ $ $       7 7 7 7 7 7 7 7 . . . . . . / / / / / / / /        1 0 0 0 0 0	H		UK UK UK UK UK UK UK UK UK UKr$   