§
    šŠtjˆ-  ã                  ó6  — d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZmZmZmZmZ ddlZddlZddlmZ  ej        e¦  «        Z G d„ d	ee¦  «        Zerdd
lmZmZmZmZmZm Z m!Z!m"Z" 	 ddlm#Z# n# e$$ r e%Z#Y nw xY w G d„ de#¦  «        Z&dS )z.Utility functions for parsing an OpenAPI spec.é    )ÚannotationsN)ÚEnum)ÚPath)ÚTYPE_CHECKINGÚDictÚListÚOptionalÚUnion)ÚValidationErrorc                  óJ   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zedd„¦   «         ZdS )ÚHTTPVerbzEnumerator of the HTTP verbs.ÚgetÚputÚpostÚdeleteÚoptionsÚheadÚpatchÚtraceÚverbÚstrÚreturnc                ód   — 	  | |¦  «        S # t           $ r t          d| j        › �¦  «        ‚w xY w)zParse an HTTP verb.z$Invalid HTTP verb. Valid values are )Ú
ValueErrorÚ__members__)Úclsr   s     úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/utilities/openapi.pyÚfrom_strzHTTPVerb.from_str    sN   € ð	WØ�3�t‘9”9ÐøÝð 	Wð 	Wð 	WÝÐUÀCÄOÐUÐUÑVÔVÐVð	Wøøøs   ‚
 �"/N)r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚGETÚPUTÚPOSTÚDELETEÚOPTIONSÚHEADÚPATCHÚTRACEÚclassmethodr   © ó    r   r   r      sf   € € € € € Ø'Ð'à
€CØ
€CØ€DØ€FØ€GØ€DØ€EØ€EàðWð Wð Wñ „[ðWð Wð Wr-   r   )Ú
ComponentsÚ	OperationÚ	ParameterÚPathItemÚPathsÚ	ReferenceÚRequestBodyÚSchema)ÚOpenAPIc                  óÒ  ‡ — e Zd ZU dZdZded<   edBd„¦   «         ZdCd
„ZedDd„¦   «         Z	edEd„¦   «         Z
edFd„¦   «         ZedGd„¦   «         ZdHd„ZdId„ZdJd„Z	 	 dKdLd#„ZdJd$„ZdMd&„ZdNd(„ZedOd,„¦   «         ZedPˆ fd-„¦   «         ZedQd/„¦   «         ZedRd1„¦   «         ZedSd3„¦   «         ZedTd5„¦   «         ZedUd6„¦   «         ZdVd8„ZdWd:„ZdXd=„ZdYd?„Z dZd@„Z!ed[dA„¦   «         Z"ˆ xZ#S )\ÚOpenAPISpecz;OpenAPI Model that removes mis-formatted parts of the spec.ú3.1.0r   Úopenapir   r2   c                ó<   — | j         st          d¦  «        ‚| j         S )NzNo paths found in spec)Úpathsr   ©Úselfs    r   Ú_paths_strictzOpenAPISpec._paths_strict@   s#   € àŒzð 	7ÝÐ5Ñ6Ô6Ð6ØŒzÐr-   Úpathr1   c                ób   — | j                              |¦  «        }|st          d|› �¦  «        ‚|S )NzNo path found for )r?   r   r   )r>   r@   Ú	path_items      r   Ú_get_path_strictzOpenAPISpec._get_path_strictF   s=   € ØÔ&×*Ò*¨4Ñ0Ô0ˆ	Øð 	:ÝÐ8°$Ð8Ð8Ñ9Ô9Ð9ØÐr-   r.   c                ó<   — | j         €t          d¦  «        ‚| j         S )zGet components or err.NzNo components found in spec. )Ú
componentsr   r=   s    r   Ú_components_strictzOpenAPISpec._components_strictL   s#   € ð Œ?Ð"ÝÐ<Ñ=Ô=Ð=ØŒÐr-   ú&Dict[str, Union[Parameter, Reference]]c                ó@   — | j         j        }|€t          d¦  «        ‚|S )zGet parameters or err.NzNo parameters found in spec. )rF   Ú
parametersr   )r>   rI   s     r   Ú_parameters_strictzOpenAPISpec._parameters_strictS   s*   € ð Ô,Ô7ˆ
ØÐÝÐ<Ñ=Ô=Ð=ØÐr-   úDict[str, Schema]c                ó@   — | j         j        }|€t          d¦  «        ‚|S )z%Get the dictionary of schemas or err.NzNo schemas found in spec. )rF   Úschemasr   )r>   rM   s     r   Ú_schemas_strictzOpenAPISpec._schemas_strict[   s(   € ð Ô)Ô1ˆØˆ?ÝÐ9Ñ:Ô:Ð:Øˆr-   ú(Dict[str, Union[RequestBody, Reference]]c                ó@   — | j         j        }|€t          d¦  «        ‚|S )zGet the request body or err.NzNo request body found in spec. )rF   ÚrequestBodiesr   )r>   Úrequest_bodiess     r   Ú_request_bodies_strictz"OpenAPISpec._request_bodies_strictc   s*   € ð Ô0Ô>ˆØÐ!ÝÐ>Ñ?Ô?Ð?ØÐr-   Úrefr3   úUnion[Parameter, Reference]c                óŒ   — |j                              d¦  «        d         }| j        }||vrt          d|› �¦  «        ‚||         S )z-Get a parameter (or nested reference) or err.ú/éÿÿÿÿzNo parameter found for )rT   ÚsplitrJ   r   )r>   rT   Úref_namerI   s       r   Ú_get_referenced_parameterz%OpenAPISpec._get_referenced_parameterk   sO   € à”7—=’= Ñ%Ô% bÔ)ˆØÔ,ˆ
Ø˜:Ð%Ð%ÝÐA°xÐAÐAÑBÔBÐBØ˜(Ô#Ð#r-   r0   c                ó¦   — ddl m} |                      |¦  «        }t          ||¦  «        r%|                      |¦  «        }t          ||¦  «        °%|S ©zGet the root reference or err.r   ©r3   )Úopenapi_pydanticr3   r[   Ú
isinstance)r>   rT   r3   Ú	parameters       r   Ú_get_root_referenced_parameterz*OpenAPISpec._get_root_referenced_parameters   sh   € à.Ð.Ð.Ð.Ð.Ð.à×2Ò2°3Ñ7Ô7ˆ	Ý˜ IÑ.Ô.ð 	BØ×6Ò6°yÑAÔAˆIõ ˜ IÑ.Ô.ð 	BàÐr-   r5   c                óŒ   — |j                              d¦  «        d         }| j        }||vrt          d|› �¦  «        ‚||         S )z*Get a schema (or nested reference) or err.rW   rX   zNo schema found for )rT   rY   rN   r   )r>   rT   rZ   rM   s       r   Úget_referenced_schemaz!OpenAPISpec.get_referenced_schema|   sO   € à”7—=’= Ñ%Ô% bÔ)ˆØÔ&ˆØ˜7Ð"Ð"ÝÐ>°HÐ>Ð>Ñ?Ô?Ð?Ø�xÔ Ð r-   r   NÚschemaúUnion[Reference, Schema]ÚdepthÚintÚ	max_depthúOptional[int]c                óx  — |�||k    rt          d|› d�¦  «        ‚ddlm} t          ||¦  «        r|                      |¦  «        }|j        �A|j                             ¦   «         D ]'\  }}|                      ||dz   |¦  «        |j        |<   Œ(|j        �$|                      |j        |dz   |¦  «        |_        |S )NzMax depth of z- has been exceeded when resolving references.r   r^   é   )ÚRecursionErrorr_   r3   r`   rd   Ú
propertiesÚitemsÚ
get_schema)r>   re   rg   ri   r3   Úp_nameÚps          r   rp   zOpenAPISpec.get_schema„   sê   € ð Ð  U¨iÒ%7Ð%7Ý ØX 	ÐXÐXÐXñô ð ð 	/Ð.Ð.Ð.Ð.Ð.å�f˜iÑ(Ô(ð 	8Ø×/Ò/°Ñ7Ô7ˆFð ÔÐ(Ø#Ô.×4Ò4Ñ6Ô6ð Uð U‘	�˜Ø,0¯OªO¸A¸uÀq¹yÈ)Ñ,TÔ,T�Ô! &Ñ)Ð)àŒ<Ð#ØŸ?š?¨6¬<¸À¹ÀIÑNÔNˆFŒLàˆr-   c                ó¦   — ddl m} |                      |¦  «        }t          ||¦  «        r%|                      |¦  «        }t          ||¦  «        °%|S r]   )r_   r3   rd   r`   )r>   rT   r3   re   s       r   Ú_get_root_referenced_schemaz'OpenAPISpec._get_root_referenced_schemaŸ   se   € à.Ð.Ð.Ð.Ð.Ð.à×+Ò+¨CÑ0Ô0ˆÝ˜ Ñ+Ô+ð 	8Ø×/Ò/°Ñ7Ô7ˆFõ ˜ Ñ+Ô+ð 	8àˆr-   ú'Optional[Union[Reference, RequestBody]]c                óŒ   — |j                              d¦  «        d         }| j        }||vrt          d|› �¦  «        ‚||         S )z0Get a request body (or nested reference) or err.rW   rX   zNo request body found for )rT   rY   rS   r   )r>   rT   rZ   rR   s       r   Ú_get_referenced_request_bodyz(OpenAPISpec._get_referenced_request_body¨   sQ   € ð ”7—=’= Ñ%Ô% bÔ)ˆØÔ4ˆØ˜>Ð)Ð)ÝÐD¸(ÐDÐDÑEÔEÐEØ˜hÔ'Ð'r-   úOptional[RequestBody]c                ó¦   — ddl m} |                      |¦  «        }t          ||¦  «        r%|                      |¦  «        }t          ||¦  «        °%|S )z!Get the root request Body or err.r   r^   )r_   r3   rw   r`   )r>   rT   r3   Úrequest_bodys       r   Ú!_get_root_referenced_request_bodyz-OpenAPISpec._get_root_referenced_request_body²   sj   € ð 	/Ð.Ð.Ð.Ð.Ð.à×8Ò8¸Ñ=Ô=ˆÝ˜ yÑ1Ô1ð 	KØ×<Ò<¸\ÑJÔJˆLõ ˜ yÑ1Ô1ð 	KàÐr-   ÚobjÚdictÚNonec                óp  — d}|                       d¦  «        }|                       d¦  «        }t          |t          ¦  «        r*|dk    r"t                               d|› d|› �¦  «         d
S d
S t          |t          ¦  «        r"t                               d|› d|› �¦  «         d
S t          d| › d	|› �¦  «        ‚)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:   r9   zAttempting to load an OpenAPI z spec. zAttempting to load a Swagger z)Attempting to load an unsupported spec:

ú
N)r   r`   r   ÚloggerÚwarningr   )r|   Úwarning_messageÚswagger_versionÚopenapi_versions       r   Ú_alert_unsupported_specz#OpenAPISpec._alert_unsupported_spec½   s	  € ð%ð 	ð
 Ÿ'š' )Ñ,Ô,ˆØŸ'š' )Ñ,Ô,ˆÝ�o¥sÑ+Ô+ð 	Ø 'Ò)Ð)Ý—’ð0°_ð 0ð 0Ø-ð0ð 0ñô ð ð ð ð
 �Ý˜­Ñ-Ô-ð 	Ý�NŠNð,°ð ,ð ,Ø)ð,ð ,ñô ð ð ð õ
 ØV¸cÐVÐVÀ_ÐVÐVñô ð r-   c                ó–  •— 	 |                       |¦  «         t          ¦   «                              |¦  «        S # t          $ r…}t	          j        |¦  «        }|                     ¦   «         D ]=}|d         }|}|d d…         D ]
}||         }Œ|                     |d         d ¦  «         Œ>|                      |¦  «        cY d }~S d }~ww xY w)NÚlocrX   )r‡   ÚsuperÚ	parse_objr   ÚcopyÚdeepcopyÚerrorsÚpop)	r   r|   ÚeÚnew_objÚerrorÚkeysÚitemÚkeyÚ	__class__s	           €r   r‹   zOpenAPISpec.parse_objÙ   sç   ø€ ð	*Ø×'Ò'¨Ñ,Ô,Ð,Ý‘7”7×$Ò$ SÑ)Ô)Ð)øÝð 
	*ð 
	*ð 
	*õ ”m CÑ(Ô(ˆGØŸš™œð )ð )�Ø˜U”|�Ø�Ø   œ9ð %ð %�CØ œ9�D�DØ—’˜˜bœ 4Ñ(Ô(Ð(Ð(Ø—=’= Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)øøøøð
	*øøøs   ƒ59 ¹
CÁA:CÂ=CÃCÚ	spec_dictc                ó,   — |                       |¦  «        S )z Get an OpenAPI spec from a dict.)r‹   )r   r—   s     r   Úfrom_spec_dictzOpenAPISpec.from_spec_dictê   s   € ð �}Š}˜YÑ'Ô'Ð'r-   Útextc                óª   — 	 t          j        |¦  «        }n)# t           j        $ r t          j        |¦  «        }Y nw xY w|                      |¦  «        S )z Get an OpenAPI spec from a text.)ÚjsonÚloadsÚJSONDecodeErrorÚyamlÚ	safe_loadr™   )r   rš   r—   s      r   Ú	from_textzOpenAPISpec.from_textï   s]   € ð	-Ýœ
 4Ñ(Ô(ˆIˆIøÝÔ#ð 	-ð 	-ð 	-Ýœ tÑ,Ô,ˆIˆIˆIð	-øøøà×!Ò! )Ñ,Ô,Ð,s   ‚ —#=¼=úUnion[str, Path]c                óF  — t          |t          ¦  «        r|nt          |¦  «        }|                     ¦   «         st          |› d�¦  «        ‚|                     d¦  «        5 }|                      |                     ¦   «         ¦  «        cddd¦  «         S # 1 swxY w Y   dS )z%Get an OpenAPI spec from a file path.z does not existÚrN)r`   r   ÚexistsÚFileNotFoundErrorÚopenr¡   Úread)r   r@   Úpath_Úfs       r   Ú	from_filezOpenAPISpec.from_fileø   sÑ   € õ # 4­Ñ.Ô.Ð>��µD¸±J´JˆØ�|Š|‰~Œ~ð 	>Ý# tÐ$<Ð$<Ð$<Ñ=Ô=Ð=Ø�ZŠZ˜‰_Œ_ð 	+ Ø—=’= §¢¡¤Ñ*Ô*ð	+ð 	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+ð 	+ð 	+s   Á"'BÂBÂBÚurlc                ó^   — t          j        |¦  «        }|                      |j        ¦  «        S )zGet an OpenAPI spec from a URL.)Úrequestsr   r¡   rš   )r   r¬   Úresponses      r   Úfrom_urlzOpenAPISpec.from_url  s'   € õ ”< Ñ$Ô$ˆØ�}Š}˜Xœ]Ñ+Ô+Ð+r-   c                ó&   — | j         d         j        S )zGet the base url.r   )Úserversr¬   r=   s    r   Úbase_urlzOpenAPISpec.base_url  s   € ð Œ|˜AŒÔ"Ð"r-   ú	List[str]c                óÔ   — ddl m} |                      |¦  «        }g }t          D ]B}t	          ||j        d¦  «        }t          ||¦  «        r|                     |j        ¦  «         ŒC|S )z6Return a list of valid methods for the specified path.r   ©r/   N)r_   r/   rC   r   ÚgetattrÚvaluer`   Úappend)r>   r@   r/   rB   ÚresultsÚmethodÚ	operations          r   Úget_methods_for_pathz OpenAPISpec.get_methods_for_path  sz   € à.Ð.Ð.Ð.Ð.Ð.à×)Ò)¨$Ñ/Ô/ˆ	ØˆÝð 	-ð 	-ˆFÝ 	¨6¬<¸Ñ>Ô>ˆIÝ˜) YÑ/Ô/ð -Ø—’˜vœ|Ñ,Ô,Ð,øØˆr-   úList[Parameter]c                óÚ   — ddl m} |                      |¦  «        }g }|j        sg S |j        D ]<}t	          ||¦  «        r|                      |¦  «        }|                     |¦  «         Œ=|S )Nr   r^   )r_   r3   rC   rI   r`   rb   r¹   )r>   r@   r3   rB   rI   ra   s         r   Úget_parameters_for_pathz#OpenAPISpec.get_parameters_for_path  s‘   € Ø.Ð.Ð.Ð.Ð.Ð.à×)Ò)¨$Ñ/Ô/ˆ	Øˆ
ØÔ#ð 	ØˆIØ"Ô-ð 	)ð 	)ˆIÝ˜) YÑ/Ô/ð KØ ×?Ò?À	ÑJÔJ�	Ø×Ò˜iÑ(Ô(Ð(Ð(ØÐr-   r»   r/   c                ó¨   — ddl m} |                      |¦  «        }t          ||d¦  «        }t	          ||¦  «        st          d|› d|› �¦  «        ‚|S )z:Get the operation object for a given path and HTTP method.r   r¶   NzNo z method found for )r_   r/   rC   r·   r`   r   )r>   r@   r»   r/   rB   Úoperation_objs         r   Úget_operationzOpenAPISpec.get_operation%  sp   € à.Ð.Ð.Ð.Ð.Ð.à×)Ò)¨$Ñ/Ô/ˆ	Ý 	¨6°4Ñ8Ô8ˆÝ˜-¨Ñ3Ô3ð 	EÝÐC 6ÐCÐC¸TÐCÐCÑDÔDÐDØÐr-   r¼   c                ó¬   — ddl m} g }|j        rD|j        D ]<}t          ||¦  «        r|                      |¦  «        }|                     |¦  «         Œ=|S )z)Get the components for a given operation.r   r^   )r_   r3   rI   r`   rb   r¹   )r>   r¼   r3   rI   ra   s        r   Úget_parameters_for_operationz(OpenAPISpec.get_parameters_for_operation/  sy   € à.Ð.Ð.Ð.Ð.Ð.àˆ
ØÔð 	-Ø&Ô1ð -ð -�	Ý˜i¨Ñ3Ô3ð OØ $× CÒ CÀIÑ NÔ N�IØ×!Ò! )Ñ,Ô,Ð,Ð,ØÐr-   c                ój   — ddl m} |j        }t          ||¦  «        r|                      |¦  «        }|S )z+Get the request body for a given operation.r   r^   )r_   r3   ÚrequestBodyr`   r{   )r>   r¼   r3   rz   s       r   Úget_request_body_for_operationz*OpenAPISpec.get_request_body_for_operation;  sJ   € ð 	/Ð.Ð.Ð.Ð.Ð.à Ô,ˆÝ�l IÑ.Ô.ð 	PØ×AÒAÀ,ÑOÔOˆLØÐr-   c                óð   — | j         }|€0t          j        dd|                     d¦  «        ¦  «        }|› d|› �}|                     dd¦  «                             dd¦  «                             dd¦  «        S )z0Get a cleaned operation id from an operation id.Nz[^a-zA-Z0-9]Ú_rW   ú-ú.)ÚoperationIdÚreÚsubÚlstripÚreplace)r¼   r@   r»   Úoperation_ids       r   Úget_cleaned_operation_idz$OpenAPISpec.get_cleaned_operation_idF  sz   € ð !Ô,ˆØÐå”6˜/¨3°·²¸CÑ0@Ô0@ÑAÔAˆDØ"Ð-Ð- VÐ-Ð-ˆLØ×#Ò# C¨Ñ-Ô-×5Ò5°c¸3Ñ?Ô?×GÒGÈÈSÑQÔQÐQr-   )r   r2   )r@   r   r   r1   )r   r.   )r   rG   )r   rK   )r   rO   )rT   r3   r   rU   )rT   r3   r   r0   )rT   r3   r   r5   )r   N)re   rf   rg   rh   ri   rj   r   r5   )rT   r3   r   ru   )rT   r3   r   rx   )r|   r}   r   r~   )r|   r}   r   r8   )r—   r}   r   r8   )rš   r   r   r8   )r@   r¢   r   r8   )r¬   r   r   r8   )r   r   )r@   r   r   r´   )r@   r   r   r¾   )r@   r   r»   r   r   r/   )r¼   r/   r   r¾   )r¼   r/   r   rx   )r¼   r/   r@   r   r»   r   r   r   )$r   r    r!   r"   r:   Ú__annotations__Úpropertyr?   rC   rF   rJ   rN   rS   r[   rb   rd   rp   rt   rw   r{   Ústaticmethodr‡   r+   r‹   r™   r¡   r«   r°   r³   r½   rÀ   rÃ   rÅ   rÈ   rÓ   Ú__classcell__)r–   s   @r   r8   r8   ;   sù  ø€ € € € € € ØEÐEà€GÐÐÐÑàðð ð ñ „Xðð
ð ð ð ð ðð ð ñ „Xðð ðð ð ñ „Xðð ðð ð ñ „Xðð ðð ð ñ „Xðð$ð $ð $ð $ðð ð ð ð!ð !ð !ð !ð Ø#'ð	ð ð ð ð ð6ð ð ð ð(ð (ð (ð (ð	ð 	ð 	ð 	ð ðð ð ñ „\ðð6 ð*ð *ð *ð *ð *ñ „[ð*ð  ð(ð (ð (ñ „[ð(ð ð-ð -ð -ñ „[ð-ð ð+ð +ð +ñ „[ð+ð ð,ð ,ð ,ñ „[ð,ð
 ð#ð #ð #ñ „Xð#ð
ð 
ð 
ð 
ðð ð ð ðð ð ð ð
ð 
ð 
ð 
ð	ð 	ð 	ð 	ð ðRð Rð Rñ „\ðRð Rð Rð Rð Rr-   r8   )'r"   Ú
__future__r   rŒ   rœ   ÚloggingrÎ   Úenumr   Úpathlibr   Útypingr   r   r   r	   r
   r®   rŸ   Úpydanticr   Ú	getLoggerr   r‚   r   r   r_   r.   r/   r0   r1   r2   r3   r4   r5   r6   ÚImportErrorÚobjectr8   r,   r-   r   ú<module>rá      sí  ðØ 4Ð 4à "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =à €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $à	ˆÔ	˜8Ñ	$Ô	$€ðWð Wð Wð Wð Wˆs�Dñ Wô Wð Wð* ð 
ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðØ(Ð(Ð(Ð(Ð(Ð(Ð(øØð ð ð Ø€G€G€GðøøøðSRð SRð SRð SRð SR�'ñ SRô SRð SRð SRð SRs   Á7A> Á>BÂB