
    k7i;4                        S r SSKrSSKrSSKJr  SSKJrJr  SSKrSSK	J
r
  SSKJr  SSKJr  SSKJr  SS	KJrJr  SS
KJr  SSKJrJr  SSKJr  \(       a  SSKJr  \" \5      r " S S\5      r " S S\5      r  " S S\5      r!/ SQr"g)zPOpenAPI component implementations: Tool, Resource, and ResourceTemplate classes.    N)Callable)TYPE_CHECKINGAny)ToolAnnotations)AnyUrl)	HTTPRoute)RequestDirector)ResourceResourceTemplate)get_http_headers)Tool
ToolResult)
get_logger)Contextc                      ^  \ rS rSrSr     SS\R                  S\S\S\	S\	S	\
\	\4   S
\
\	\4   S-  S\\	   S-  S\S-  S\S-  S\\/\	4   S-  4U 4S jjjrS\	4S jrS\
\	\4   S\4S jrSrU =r$ )OpenAPITool   z*Tool implementation for OpenAPI endpoints.Nclientroutedirectornamedescription
parametersoutput_schematagstimeoutannotations
serializerc           
      ~   > [         TU ]  UUUUU=(       d
    [        5       U
US9  Xl        X l        X0l        Xl        g )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               h/home/james-whalen/.local/lib/python3.13/site-packages/fastmcp/experimental/server/openapi/components.pyr!   OpenAPITool.__init__   sH     	#!'#! 	 	
 !    returnc                     SU R                   < SU R                  R                   SU R                  R                   S3$ )@Custom representation to prevent recursion errors when printing.zOpenAPITool(name=z	, method=, path=))r   r$   methodpathr'   s    r)   __repr__OpenAPITool.__repr__9   s;    "499-y9K9K8LGTXT_T_TdTdSeefggr+   	argumentsc                 2  #     [        U R                  S5      (       a:  U R                  R                  (       a  [        U R                  R                  5      OSn[        U R                  S5      (       a1  U R                  R                  (       a  U R                  R                  O0 nU R
                  R                  U R                  X5      nU(       aq  UR                  (       a9  UR                  5        H$  u  pVXTR                  ;  d  M  XdR                  U'   M&     O'UR                  5        H  u  pVXdR                  U'   M     [        5       nU(       aT  UR                  (       a  UR                  R                  U5        O'UR                  5        H  u  pVXdR                  U'   M     [        R                  SUR                   35        U R                  R                  U5      I Sh  vN nUR                  5          UR                  5       n	Sn
U R                   b(  U R                   R#                  S5      (       a  SU	0n
OU	n
O[%        U	[&        5      (       d  SU	0n
OU	n
[)        U
S9$  N! [        R*                   a    [)        UR,                  S	9s $ f = f! [.        R0                   a  nS
UR2                  R4                   SUR2                  R6                   3n UR2                  R                  5       nUSU 3-  nOW! [        R*                  [8        4 a:    UR2                  R,                  (       a  USUR2                  R,                   3-  n Of = f[9        U5      UeSnAf[.        R:                   a  n[9        SU< 35      UeSnAff = f7f)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#   r8   strr9   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'   r6   r8   cli_headersrequestkeyvaluemcp_headersrR   r:   structured_outputeerror_message
error_datas                 r)   runOpenAPITool.run=   s    Z	= 4<<449N9N DLL))*'  4<<338L8L $$  nn**4;;	LG ??&1&7&7&9
oo538OOC0 ':
 '2&7&7&9
/4, ': +,K??OO**;7 '2&7&7&9
/4, ': LL;GOO;LMN
 "\\..w77H %%'9! %)!%%1))--.EFF-5v,>),2)#FD11)16(:%(.%!5FGG/ 80 '' 9!(--889 $$ 	3 ajj445R

8P8P7QR =ZZ__.
3zl!33((*5 =::??!s1::??*;%<<M= ]+2!! 	=qe451<	=s   NDJ CJ ,I.-J A+I0 -N.J 0'JJ NJJ N10M(""LM(AMM(MM((N?NNNr#   r%   r$   r&   )NNNNN)__name__
__module____qualname____firstlineno____doc__rP   AsyncClientr   r	   rB   rM   r   r"   floatr   r   r!   r4   r   r`   __static_attributes____classcell__r(   s   @r)   r   r      s    4 04 $ $.226 !!    "	 
     cN  CH~,  #ho    %t+  cUCZ(4/   8h# h\=4S> \=j \= \=r+   r   c                      ^  \ rS rSrSr   SS\R                  S\S\S\	S\	S	\	S
\	S\
\	   S-  S\S-  4U 4S jjjrS\	4S jrS\	\-  4S jrSrU =r$ )OpenAPIResource   z.Resource implementation for OpenAPI endpoints.Nr   r   r   urir   r   	mime_typer   r   c
                    > Uc
  [        5       n[        T
U ]	  [        U5      UUUUS9  Xl        X l        X0l        Xl        g )N)rp   r   r   rq   r   )r"   r    r!   r   r#   r$   r%   r&   )r'   r   r   r   rp   r   r   rq   r   r   r(   s             r)   r!   OpenAPIResource.__init__   sL     <5Ds# 	 	
 !r+   r,   c                 n    SU R                   < SU R                  < SU R                  R                   S3$ )r.   zOpenAPIResource(name=z, uri=r/   r0   )r   rp   r$   r2   r3   s    r)   r4   OpenAPIResource.__repr__   s1    &tyym6$((WT[[M]M]L^^_``r+   c                   ^#     U R                   R                  n[        U R                  5      nSU;   a  SU;   a  UR	                  S5      n[        U5      S:  a  0 n[        R                  " SU5      nU(       aD  UR                  SS9  [        U5      S-
  n[        U5       H  u  pxXv:  d  M  USU-
     n	XU'   M     UR                  5        H$  u  pUR                  SU S3[        U	5      5      nM&     0 n
U R                   R                   Hi  nUR                  S	:X  d  M  [        U S
UR                   35      (       d  M5  [!        U S
UR                   35      nUc  MS  US:w  d  M[  XUR                  '   Mk     0 n[        U R"                  S5      (       a1  U R"                  R$                  (       a  U R"                  R$                  O0 nUR'                  U5        [)        5       nUR'                  U5        U R"                  R+                  U R                   R,                  UU
UU R.                  S9I Sh  vN nUR1                  5         UR$                  R3                  SS5      R5                  5       mST;   a&  UR7                  5       n[6        R8                  " U5      $ [;        U4S jS 5       5      (       a  UR<                  $ UR>                  $  N! [@        RB                   a  nSURD                  RF                   SURD                  RH                   3n URD                  R7                  5       nUSU 3-  nOW! [6        RJ                  [L        4 a:    URD                  R<                  (       a  USURD                  R<                   3-  n Of = f[M        U5      UeSnAf[@        RN                   a  n[M        SU< 35      UeSnAff = f7f)z2Fetch the resource data by making an HTTP request.{}/   z\{([^}]+)\}T)reversequery_N r9   )r1   urlparamsr9   r   zcontent-typeapplication/jsonc              3   ,   >#    U  H	  oT;   v   M     g 7fN ).0ctcontent_types     r)   	<genexpr>'OpenAPIResource.read.<locals>.<genexpr>  s     O2NB<'2Ns   )ztext/zapplication/xmlr=   r>   r?   r@   )(r$   r2   rB   rp   splitlenrefindallsort	enumeraterD   replacer   locationrA   r   getattrr#   r9   rE   r   rX   r1   r&   rI   rK   lowerrJ   dumpsanyrO   r<   rP   rQ   rR   rS   rT   rN   rU   rV   )r'   r2   resource_uripartspath_paramsparam_matchesexpected_param_counti
param_nameparam_valuequery_paramsparamrZ   r9   rW   r[   rR   r:   r]   r^   r_   r   s                        @r)   readOpenAPIResource.read   sV    ^	=;;##Dtxx=L d{sd{$**3/u:>"$K %'JJ~t$DM$%**4*8/25zA~, .7}-EMA 7.3BFm:EJ 7 .F 4?3D3D3F/
#||bB,?[AQR 4G L//>>W,5::,?O1P1P#DAejj\*:;E(Ub[38UZZ0	 0 G 4<<338L8L $$ 
 NN;' +,KNN;'!\\11{{))# 2  H %%' $++//CIIKL!\1!zz&))O2NOOO}}$'''), $$ 	3 ajj445R

8P8P7QR =ZZ__.
3zl!33((*5 =::??!s1::??*;%<<M= ]+2!! 	=qe451<	=s   OB'K 0A1K %K K #K +CK 7K8A)K !O"%K OK OK O*0N!"L>=N!>ANN!NN!!O8OOOrb   )r   NN)rc   rd   re   rf   rg   rP   rh   r   r	   rB   r"   ri   r!   r4   bytesr   rj   rk   rl   s   @r)   rn   rn      s    8 , $ $ !!    "	 
         #ho     4a# a`=C%K `= `=r+   rn   c                      ^  \ rS rSrSr  SS\R                  S\S\S\	S\	S	\	S
\
\	\4   S\\	   S-  S\S-  4U 4S jjjrS\	4S jr SS\	S\
\	\4   SSS\4S jjrSrU =r$ )OpenAPIResourceTemplatei   z7Resource template implementation for OpenAPI endpoints.Nr   r   r   uri_templater   r   r   r   r   c
                 r   > Uc
  [        5       n[        T
U ]	  UUUUUS9  Xl        X l        X0l        Xl        g )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!    OpenAPIResourceTemplate.__init__#  sH     <5D%#! 	 	
 !r+   r,   c                 n    SU R                   < SU R                  < SU R                  R                   S3$ )r.   zOpenAPIResourceTemplate(name=z, uri_template=r/   r0   )r   r   r$   r2   r3   s    r)   r4    OpenAPIResourceTemplate.__repr__=  s8    .tyym?4K\K\J__fgkgrgrgwgwfxxyzzr+   rp   r   contextzContext | Nonec                   #    / nUR                  5        H  u  pVUR                  U SU 35        M     [        U R                  U R                  U R
                  UU R                   SSR                  U5       3U R                  =(       d    SU R                  R                   3S[        U R                  R                  =(       d    / 5      U R                  S9	$ 7f)z,Create a resource with the given parameters.=-zResource for r   )	r   r   r   rp   r   r   rq   r   r   )rD   appendrn   r#   r$   r%   r   joinr   r2   r"   r   r&   )r'   rp   r   r   	uri_partsrY   rZ   s          r)   create_resource'OpenAPIResourceTemplate.create_resourceA  s      	 ,,.JCuAeW-. ) <<++^^II;a 345((NmDKK<L<L;M,N(T[[%%+,MM

 
	
s   CCrb   )NNr   )rc   rd   re   rf   rg   rP   rh   r   r	   rB   rM   r   r"   ri   r!   r4   r
   r   rj   rk   rl   s   @r)   r   r      s    A !% $ !!    "	 
       cN  #ho     4{# { %)	

 S#X
 "	

 

 
r+   r   )rn   r   r   )#rg   rJ   r   collections.abcr   typingr   r   rP   	mcp.typesr   pydantic.networksr   &fastmcp.experimental.utilities.openapir   /fastmcp.experimental.utilities.openapi.directorr	   fastmcp.resourcesr
   r   fastmcp.server.dependenciesr   fastmcp.tools.toolr   r   fastmcp.utilities.loggingr   fastmcp.serverr   rc   rF   r   rn   r   __all__r   r+   r)   <module>r      st    V  	 $ %  % $ = K 8 8 / 0&	H	=$ =DA=h A=H8
. 8
xr+   