
    "<i"4                     (   d Z ddlZddlZddlmZ ddlmZmZ ddl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 ddlmZ ddlmZ erddlmZ  ee          Z G d de          Z G d de          Z  G d de          Z!g dZ"dS )zPOpenAPI component implementations: Tool, Resource, and ResourceTemplate classes.    N)Callable)TYPE_CHECKINGAny)ToolAnnotations)AnyUrl)ResourceResourceTemplate)get_http_headers)Tool
ToolResult)
get_logger)	HTTPRoute)RequestDirector)Contextc                        e Zd ZdZ	 	 	 	 	 ddej        dedededede	ee
f         d	e	ee
f         dz  d
ee         dz  dedz  dedz  dee
gef         dz  f fdZdefdZde	ee
f         defdZ xZS )OpenAPIToolz*Tool implementation for OpenAPI endpoints.Nclientroutedirectornamedescription
parametersoutput_schematagstimeoutannotations
serializerc           	          t                                          |||||pt                      |
|           || _        || _        || _        |	| _        d S )N)r   r   r   r   r   r   r   )super__init__set_client_route	_director_timeout)selfr   r   r   r   r   r   r   r   r   r   r   	__class__s               /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fastmcp/server/openapi/components.pyr    zOpenAPITool.__init__   se     	#!'#! 	 	
 	
 	
 !    returnc                 L    d| j         d| j        j         d| j        j         dS )@Custom representation to prevent recursion errors when printing.zOpenAPITool(name=z	, method=, path=))r   r#   methodpathr&   s    r(   __repr__zOpenAPITool.__repr__:   s1    g49gg9KggTXT_Tdggggr)   	argumentsc                   K   	 t          | j        d          r%| j        j        rt          | j        j                  nd}t          | j        d          r| j        j        r| j        j        ni }| j                            | j        ||          }|rY|j        r.|                                D ]\  }}||j        vr
||j        |<   n$|                                D ]\  }}||j        |<   t                      }|rF|j        r|j        
                    |           n$|                                D ]\  }}||j        |<   t                              d|j                    | j                            |           d{V }|                                 	 |                                }	d}
| j        "| j                            d          rd|	i}
n|	}
nt%          |	t&                    sd|	i}
n|	}
t)          |
          S # t          j        $ r t)          |j        	          cY S w xY w# t.          j        $ r}d
|j        j         d|j        j         }	 |j                                        }|d| z  }n:# t          j        t8          f$ r! |j        j        r|d|j        j         z  }Y nw xY wt9          |          |d}~wt.          j        $ r}t9          d|          |d}~ww xY w)zQExecute the HTTP request using RequestDirector for simplified parameter handling.base_urlzhttp://localhostheadersz run - sending request; headers: Nzx-fastmcp-wrap-resultresult)structured_content)contentHTTP error :  - Request error: )hasattrr"   r5   strr6   r$   buildr#   itemsr
   updateloggerdebugsendraise_for_statusjsonr   get
isinstancedictr   JSONDecodeErrortexthttpxHTTPStatusErrorresponsestatus_codereason_phrase
ValueErrorRequestError)r&   r3   r5   cli_headersrequestkeyvaluemcp_headersrO   r7   structured_outputeerror_message
error_datas                 r(   runzOpenAPITool.run>   s     Z	= 4<44(9=9N(DL)***'  4<338<8L$$  n**4;	8LLG  
5? 5&1&7&7&9&9 9 9
Ugo5538GOC09
 '2&7&7&9&9 5 5
U/4,, +,,K 5? 5O**;7777 '2&7&7&9&9 5 5
U/4,,LLMGOMMNNN
 "\..w77777777H %%'''9! %)!%1)--.EFF 3-5v,>)),2))#FD11 /)16(:%%(.%!5FGGGG' 9 9 9!(-8888889 $ 	3 	3 	3 Saj4RR
8PRR =Z__..
!3z!3!33(*5 = = =:? =!%<1:?%<%<<M= ]++2! 	= 	= 	=4q44551<	=sg   FH- A*H $H*'H- )H**H- -K/<K!I;:K;4J2/K1J22KK/K**K/)NNNNN)__name__
__module____qualname____doc__rM   AsyncClientr   r   r?   rJ   r   r!   floatr   r   r    r2   r   r]   __classcell__r'   s   @r(   r   r      sR       44 04 $ $.226   !    "	 
     cN  CH~,  #ho    %t+  cUCZ(4/           8h# h h h h\=4S> \=j \= \= \= \= \= \= \= \=r)   r   c                        e Zd ZdZ	 	 	 ddej        dedededed	ed
ede	e         dz  de
dz  f fdZdefdZdeez  fdZ xZS )OpenAPIResourcez.Resource implementation for OpenAPI endpoints.application/jsonNr   r   r   urir   r   	mime_typer   r   c
                     |t                      }t                                          t          |          ||||           || _        || _        || _        |	| _        d S )N)ri   r   r   rj   r   )r!   r   r    r   r"   r#   r$   r%   )r&   r   r   r   ri   r   r   rj   r   r   r'   s             r(   r    zOpenAPIResource.__init__   sk     <55Ds# 	 	
 	
 	
 !r)   r*   c                 B    d| j         d| j        d| j        j         dS )r,   zOpenAPIResource(name=z, uri=r-   r.   )r   ri   r#   r0   r1   s    r(   r2   zOpenAPIResource.__repr__   s,    `ty``$(``T[M]````r)   c                   K   	 | j         j        }t          | j                  }d|v rd|v r|                    d          }t          |          dk    ri }t          j        d|          }|rS|                    d           t          |          dz
  }t          |          D ]\  }}||k     r|d|z
           }	|	||<   |
                                D ],\  }}	|                    d| dt          |	                    }-i }
| j         j        D ]O}|j        d	k    rBt          | d
|j                   r*t!          | d
|j                   }||dk    r
||
|j        <   Pi }t          | j        d          r| j        j        r| j        j        ni }|                    |           t)                      }|                    |           | j                            | j         j        ||
|| j                   d{V }|                                 |j                            dd                                          dv r(|                                }t7          j        |          S t;          fddD                       r|j        S |j        S # t@          j!        $ r}d|j"        j#         d|j"        j$         }	 |j"                                        }|d| z  }n:# t6          j%        tL          f$ r! |j"        j        r|d|j"        j         z  }Y nw xY wtM          |          |d}~wt@          j'        $ r}tM          d|          |d}~ww xY w)z2Fetch the resource data by making an HTTP request.{}/   z\{([^}]+)\}T)reversequery_N r6   )r/   urlparamsr6   r   zcontent-typerh   c              3       K   | ]}|v V  	d S N ).0ctcontent_types     r(   	<genexpr>z'OpenAPIResource.read.<locals>.<genexpr>	  s(      OOBR<'OOOOOOr)   )ztext/zapplication/xmlr:   r;   r<   r=   )(r#   r0   r?   ri   splitlenrefindallsort	enumeraterA   replacer   locationr>   r   getattrr"   r6   rB   r
   rU   r/   r%   rF   rH   lowerrG   dumpsanyrL   r9   rM   rN   rO   rP   rQ   rK   rR   rS   )r&   r0   resource_uripartspath_paramsparam_matchesexpected_param_counti
param_nameparam_valuequery_paramsparamrW   r6   rT   rX   rO   r7   rZ   r[   r\   r~   s                        @r(   readzOpenAPIResource.read   s     ^	=;#Dtx==L d{{sd{{$**3//u::>>"$K %'J~t$D$DM$ F%**4*888/25zzA~, .7}-E-E F FMAz #777.3BFm:EJ 7 4?3D3D3F3F S S/
K#||,?,?,?,?[AQAQRR L/ 9 9>W,,?O5:?O?O1P1P,#D*:ej*:*:;;E(Ub[[38UZ0 G 4<338<8L$$ 
 NN;''' +,,KNN;'''!\11{)# 2        H %%''' $+//CCIIKKL!\11!z&)))OOOO2NOOOOO (}$''$ 	3 	3 	3 Saj4RR
8PRR =Z__..
!3z!3!33(*5 = = =:? =!%<1:?%<%<<M= ]++2! 	= 	= 	=4q44551<	=sT   I$J *!J J M"L+?!K! L+!4LL+LL++M=MM)rh   NN)r^   r_   r`   ra   rM   rb   r   r   r?   r!   rc   r    r2   bytesr   rd   re   s   @r(   rg   rg      s       88 , $ $   !    "	 
         #ho             4a# a a a a`=C%K `= `= `= `= `= `= `= `=r)   rg   c                        e Zd ZdZ	 	 ddej        dededededed	e	ee
f         d
ee         dz  dedz  f fdZdefdZ	 ddede	ee
f         dddefdZ xZS )OpenAPIResourceTemplatez7Resource template implementation for OpenAPI endpoints.Nr   r   r   uri_templater   r   r   r   r   c
                     |t                      }t                                          |||||           || _        || _        || _        |	| _        d S )N)r   r   r   r   r   )r!   r   r    r"   r#   r$   r%   )r&   r   r   r   r   r   r   r   r   r   r'   s             r(   r    z OpenAPIResourceTemplate.__init__$  se     <55D%#! 	 	
 	
 	
 !r)   r*   c                 B    d| j         d| j        d| j        j         dS )r,   zOpenAPIResourceTemplate(name=z, uri_template=r-   r.   )r   r   r#   r0   r1   s    r(   r2   z OpenAPIResourceTemplate.__repr__>  s/    ztyzz4K\zzgkgrgwzzzzr)   ri   rx   contextzContext | Nonec                 ^  K   g }|                                 D ]\  }}|                    | d|             t          | j        | j        | j        || j         dd                    |           | j        pd| j        j	         dt          | j        j        pg           | j        	  	        S )z,Create a resource with the given parameters.=-zResource for rh   )	r   r   r   ri   r   r   rj   r   r   )rA   appendrg   r"   r#   r$   r   joinr   r0   r!   r   r%   )r&   ri   rx   r   	uri_partsrV   rW   s          r(   create_resourcez'OpenAPIResourceTemplate.create_resourceB  s       	 ,,.. 	/ 	/JC--e--.... <+^I55 3 355(N,NDK<L,N,N(T[%+,,M

 

 

 
	
r)   )NNrz   )r^   r_   r`   ra   rM   rb   r   r   r?   rJ   r   r!   rc   r    r2   r   r   rd   re   s   @r(   r   r   !  s+       AA !% $   !    "	 
       cN  #ho             4{# { { { { %)	
 

 S#X
 "	

 

 
 
 
 
 
 
 
r)   r   )rg   r   r   )#ra   rG   r   collections.abcr   typingr   r   rM   	mcp.typesr   pydantic.networksr   fastmcp.resourcesr   r	   fastmcp.server.dependenciesr
   fastmcp.tools.toolr   r   fastmcp.utilities.loggingr   fastmcp.utilities.openapir   "fastmcp.utilities.openapi.directorr   fastmcp.serverr   r^   rC   r   rg   r   __all__r{   r)   r(   <module>r      s   V V  				 $ $ $ $ $ $ % % % % % % % %  % % % % % % $ $ $ $ $ $ 8 8 8 8 8 8 8 8 8 8 8 8 8 8 / / / / / / / / 0 0 0 0 0 0 0 / / / / / > > > > > > '&&&&&&	H		= = = = =$ = = =DA= A= A= A= A=h A= A= A=H8
 8
 8
 8
 8
. 8
 8
 8
x  r)   