
    dh-                    6   S r SSKJr  SSKrSSKrSSKrSSKrSSKJr  SSK	J
r
  SSKJrJrJrJrJr  SSKrSSKrSSKJr  \R*                  " \5      r " S S	\\5      r\(       a  SS
KJrJrJrJrJrJ r J!r!J"r"   SSKJ#r#   " S S\#5      r&g! \$ a    \%r# Nf = f)z.Utility functions for parsing an OpenAPI spec.    )annotationsN)Enum)Path)TYPE_CHECKINGDictListOptionalUnion)ValidationErrorc                  L    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
r\SS j5       rSrg)HTTPVerb   zEnumerator of the HTTP verbs.getputpostdeleteoptionsheadpatchtracec                `     U " U5      $ ! [          a    [        SU R                   35      ef = f)zParse an HTTP verb.z$Invalid HTTP verb. Valid values are )
ValueError__members__)clsverbs     ]/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/utilities/openapi.pyfrom_strHTTPVerb.from_str    s;    	Wt9 	WCCOOCTUVV	Ws   
 #- N)r   strreturnr   )__name__
__module____qualname____firstlineno____doc__GETPUTPOSTDELETEOPTIONSHEADPATCHTRACEclassmethodr   __static_attributes__r       r   r   r      sA    '
C
CDFGDEEW Wr1   r   )
Components	Operation	ParameterPathItemPaths	ReferenceRequestBodySchema)OpenAPIc                    ^  \ rS rSr% SrSrS\S'   \S!S j5       rS"S jr	\S#S j5       r
\S$S	 j5       r\S%S
 j5       r\S&S j5       rS'S jrS(S jrS)S jr  S*       S+S jjrS)S jr    S,S jr    S-S jr\S.S j5       r\S/U 4S jj5       r\S0S j5       r\S1S j5       r\S2S j5       r\S3S j5       r\S4S j5       rS5S jrS6S jrS7S jr S8S jr!    S9S jr"\S:S j5       r#S r$U =r%$ );OpenAPISpec;   z;OpenAPI Model that removes mis-formatted parts of the spec.3.1.0r    openapic                R    U R                   (       d  [        S5      eU R                   $ )NzNo paths found in spec)pathsr   selfs    r   _paths_strictOpenAPISpec._paths_strict@   s    zz566zzr1   c                f    U R                   R                  U5      nU(       d  [        SU 35      eU$ )NzNo path found for )rD   r   r   )rC   path	path_items      r   _get_path_strictOpenAPISpec._get_path_strictF   s4    &&**40	1$899r1   c                J    U R                   c  [        S5      eU R                   $ )zGet components or err.zNo components found in spec. )
componentsr   rB   s    r   _components_strictOpenAPISpec._components_strictL   s$     ??"<==r1   c                N    U R                   R                  nUc  [        S5      eU$ )zGet parameters or err.zNo parameters found in spec. )rM   
parametersr   )rC   rP   s     r   _parameters_strictOpenAPISpec._parameters_strictS   s-     ,,77
<==r1   c                N    U R                   R                  nUc  [        S5      eU$ )z%Get the dictionary of schemas or err.zNo schemas found in spec. )rM   schemasr   )rC   rT   s     r   _schemas_strictOpenAPISpec._schemas_strict[   s+     ))11?9::r1   c                N    U R                   R                  nUc  [        S5      eU$ )zGet the request body or err.zNo request body found in spec. )rM   requestBodiesr   )rC   request_bodiess     r   _request_bodies_strict"OpenAPISpec._request_bodies_strictc   s-     00>>!>??r1   c                    UR                   R                  S5      S   nU R                  nX#;  a  [        SU 35      eX2   $ )z-Get a parameter (or nested reference) or err./zNo parameter found for )refsplitrQ   r   )rC   r_   ref_namerP   s       r   _get_referenced_parameter%OpenAPISpec._get_referenced_parameterk   sF    77==%b),,
%6xjABB##r1   c                    SSK Jn  U R                  U5      n[        X25      (       a#  U R                  U5      n[        X25      (       a  M#  U$ zGet the root reference or err.r   r7   )openapi_pydanticr7   rb   
isinstance)rC   r_   r7   	parameters       r   _get_root_referenced_parameter*OpenAPISpec._get_root_referenced_parameters   sC    .2237	..66yAI ..r1   c                    UR                   R                  S5      S   nU R                  nX#;  a  [        SU 35      eX2   $ )z*Get a schema (or nested reference) or err.r]   r^   zNo schema found for )r_   r`   rU   r   )rC   r_   ra   rT   s       r   get_referenced_schema!OpenAPISpec.get_referenced_schema|   sF    77==%b)&&"3H:>??  r1   c                   Ub  X#:  a  [        SU S35      eSSKJn  [        X5      (       a  U R	                  U5      nUR
                  bE  UR
                  R                  5        H'  u  pVU R                  XbS-   U5      UR
                  U'   M)     UR                  b%  U R                  UR                  US-   U5      Ul        U$ )NzMax depth of z- has been exceeded when resolving references.r   rf      )RecursionErrorrg   r7   rh   rm   
propertiesitems
get_schema)rC   schemadepth	max_depthr7   p_nameps          r   rt   OpenAPISpec.get_schema   s      U%7 	{*WX  	/f((//7F (#..446	,0OOAqy),T!!&) 7 <<#??6<<INFLr1   c                    SSK Jn  U R                  U5      n[        X25      (       a#  U R                  U5      n[        X25      (       a  M#  U$ re   )rg   r7   rm   rh   )rC   r_   r7   ru   s       r   _get_root_referenced_schema'OpenAPISpec._get_root_referenced_schema   sB    .++C0++//7F ++r1   c                    UR                   R                  S5      S   nU R                  nX#;  a  [        SU 35      eX2   $ )z0Get a request body (or nested reference) or err.r]   r^   zNo request body found for )r_   r`   rZ   r   )rC   r_   ra   rY   s       r   _get_referenced_request_body(OpenAPISpec._get_referenced_request_body   sH     77==%b)44)9(DEE''r1   c                    SSK Jn  U R                  U5      n[        X25      (       a#  U R                  U5      n[        X25      (       a  M#  U$ )z!Get the root request Body or err.r   rf   )rg   r7   r   rh   )rC   r_   r7   request_bodys       r   !_get_root_referenced_request_body-OpenAPISpec._get_root_referenced_request_body   sE     	/88=11<<\JL 11r1   c                >   SnU R                  S5      nU R                  S5      n[        U[        5      (       a#  US:w  a  [        R	                  SU SU 35        g
g
[        U[        5      (       a  [        R	                  SU SU 35        g
[        SU  S	U 35      e)z#Alert if the spec is not supported.ze This may result in degraded performance. Convert your OpenAPI spec to 3.1.* spec for better support.swaggerr?   r>   zAttempting to load an OpenAPI z spec. zAttempting to load a Swagger z)Attempting to load an unsupported spec:


N)r   rh   r    loggerwarningr   )objwarning_messageswagger_versionopenapi_versions       r   _alert_unsupported_spec#OpenAPISpec._alert_unsupported_spec   s    % 	
 ''),''),os++')4_4Eo.0
 --NN//@/*,
 =cU"_DUV r1   c                H  >  U R                  U5        [        TU ]	  U5      $ ! [         at  n[        R
                  " U5      nUR                  5        H/  nUS   nUnUS S  H  nXg   nM	     UR                  US   S 5        M1     U R                  U5      s S nA$ S nAff = f)Nlocr^   )r   super	parse_objr   copydeepcopyerrorspop)	r   r   enew_objerrorkeysitemkey	__class__s	           r   r   OpenAPISpec.parse_obj   s    	*'',7$S)) 
	* mmC(GU|9C9D %b4( $ ==))
	*s   # 
B!A)BB!B!c                $    U R                  U5      $ )z Get an OpenAPI spec from a dict.)r   )r   	spec_dicts     r   from_spec_dictOpenAPISpec.from_spec_dict   s     }}Y''r1   c                     [         R                  " U5      nU R                  U5      $ ! [         R                   a    [        R                  " U5      n N=f = f)z Get an OpenAPI spec from a text.)jsonloadsJSONDecodeErroryaml	safe_loadr   )r   textr   s      r   	from_textOpenAPISpec.from_text   sM    	-

4(I !!),, ## 	-t,I	-s   ) *AAc                "   [        U[        5      (       a  UO
[        U5      nUR                  5       (       d  [        U S35      eUR	                  S5       nU R                  UR                  5       5      sSSS5        $ ! , (       d  f       g= f)z%Get an OpenAPI spec from a file path.z does not existrN)rh   r   existsFileNotFoundErroropenr   read)r   rG   path_fs       r   	from_fileOpenAPISpec.from_file   sa     #4..DJ||~~#tfO$<==ZZ_==* __s   B  
Bc                d    [         R                  " U5      nU R                  UR                  5      $ )zGet an OpenAPI spec from a URL.)requestsr   r   r   )r   urlresponses      r   from_urlOpenAPISpec.from_url  s%     <<$}}X]]++r1   c                4    U R                   S   R                  $ )zGet the base url.r   )serversr   rB   s    r   base_urlOpenAPISpec.base_url  s     ||A"""r1   c                    SSK Jn  U R                  U5      n/ n[         HF  n[	        X5R
                  S5      n[        Xb5      (       d  M+  UR                  UR
                  5        MH     U$ )z6Return a list of valid methods for the specified path.r   r3   N)rg   r3   rI   r   getattrvaluerh   append)rC   rG   r3   rH   resultsmethod	operations          r   get_methods_for_path OpenAPISpec.get_methods_for_path  sV    .))$/	F	<<>I)//v||,  r1   c                    SSK Jn  U R                  U5      n/ nUR                  (       d  / $ UR                   H5  n[	        XR5      (       a  U R                  U5      nUR                  U5        M7     U$ )Nr   rf   )rg   r7   rI   rP   rh   rj   r   )rC   rG   r7   rH   rP   ri   s         r   get_parameters_for_path#OpenAPISpec.get_parameters_for_path  si    .))$/	
##I"--I)// ??	J	i( . r1   c                    SSK Jn  U R                  U5      n[        XBS5      n[	        XS5      (       d  [        SU SU 35      eU$ )z:Get the operation object for a given path and HTTP method.r   r   NzNo z method found for )rg   r3   rI   r   rh   r   )rC   rG   r   r3   rH   operation_objs         r   get_operationOpenAPISpec.get_operation%  sK    .))$/		48-33s6(*<TFCDDr1   c                    SSK Jn  / nUR                  (       aE  UR                   H5  n[        XB5      (       a  U R	                  U5      nUR                  U5        M7     U$ )z)Get the components for a given operation.r   rf   )rg   r7   rP   rh   rj   r   )rC   r   r7   rP   ri   s        r   get_parameters_for_operation(OpenAPISpec.get_parameters_for_operation/  sT    .
&11	i33 $ C CI NI!!), 2 r1   c                l    SSK Jn  UR                  n[        X25      (       a  U R	                  U5      nU$ )z+Get the request body for a given operation.r   rf   )rg   r7   requestBodyrh   r   )rC   r   r7   r   s       r   get_request_body_for_operation*OpenAPISpec.get_request_body_for_operation;  s3     	/ ,,l..AA,OLr1   c                    U R                   nUc.  [        R                  " SSUR                  S5      5      nU SU 3nUR	                  SS5      R	                  SS5      R	                  SS5      $ )z0Get a cleaned operation id from an operation id.z[^a-zA-Z0-9]_r]   -.)operationIdresublstripreplace)r   rG   r   operation_ids       r   get_cleaned_operation_id$OpenAPISpec.get_cleaned_operation_idF  sm     !,,66/3C0@AD"V1VH-L##C-55c3?GGSQQr1   r   )r!   r6   )rG   r    r!   r5   )r!   r2   )r!   z&Dict[str, Union[Parameter, Reference]])r!   zDict[str, Schema])r!   z(Dict[str, Union[RequestBody, Reference]])r_   r7   r!   zUnion[Parameter, Reference])r_   r7   r!   r4   )r_   r7   r!   r9   )r   N)ru   zUnion[Reference, Schema]rv   intrw   zOptional[int]r!   r9   )r_   r7   r!   z'Optional[Union[Reference, RequestBody]])r_   r7   r!   Optional[RequestBody])r   dictr!   None)r   r   r!   r<   )r   r   r!   r<   )r   r    r!   r<   )rG   zUnion[str, Path]r!   r<   )r   r    r!   r<   )r!   r    )rG   r    r!   z	List[str])rG   r    r!   List[Parameter])rG   r    r   r    r!   r3   )r   r3   r!   r   )r   r3   r!   r   )r   r3   rG   r    r   r    r!   r    )&r"   r#   r$   r%   r&   r?   __annotations__propertyrD   rI   rM   rQ   rU   rZ   rb   rj   rm   rt   r|   r   r   staticmethodr   r/   r   r   r   r   r   r   r   r   r   r   r   r   r0   __classcell__)r   s   @r   r<   r<   ;   s   EGS 
        $! #'	(  !	
 
6((	0(				  6 * *  ( ( - - + + , ,
 # #

	"			 R Rr1   r<   )'r&   
__future__r   r   r   loggingr   enumr   pathlibr   typingr   r   r   r	   r
   r   r   pydanticr   	getLoggerr"   r   r    r   rg   r2   r3   r4   r5   r6   r7   r8   r9   r:   ImportErrorobjectr<   r   r1   r   <module>r      s    4 "    	   = =   $			8	$WsD W* 	 	 	(
SR' SR	  Gs   ;B BB