o
    ß­jW  ã                   @   s,  U d dl Zd dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZ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%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l0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z; dddddddiddigidœdddœdddœdœg d¢d œZ<d!dd"d#dd$e%d idœid%œZ=d&d'd(d)d*d+d,œZ>ee?e?f e@d-< d.ed/eee?ef eee?ef  f fd0d1„ZAd2d3œd4e	e d5ed6e/d7eeee;d8 f ef d9eBd/eee?ef  fd:d;„ZCd2d3œd<ee d5ed6e/d7eeee;d8 f ef d9eBd/eee?ef  fd=d>„ZDd?ejEd@e?d/e?fdAdB„ZFd?ejEd@e?d/e?fdCdD„ZGd?ejEd@e?dEe
e? d/ee?ef fdFdG„ZHd2d3œd?ejEdEe
e? d5ed6e/d7eeee;d8 f ef d9eBd/eee?ef ee?ef ee?ef f fdHdI„ZIdJe	e7 d/ee fdKdL„ZJdMddddddddd2dNœ
dOe?dPe?dQe?dRee? dSee? dJe	e7 dTee	e7  dUeeee?ef   dVeeee?ee?ef f   dWee? dXeee?ee?ef f  dYeee?ee?ef f  d9eBd/ee?ef fdZd[„ZKdS )\é    N)
ÚAnyÚDictÚListÚOptionalÚSequenceÚSetÚTupleÚTypeÚUnionÚcast)Úrouting)ÚGenerateJsonSchemaÚJsonSchemaValueÚ
ModelFieldÚ	UndefinedÚget_compat_model_name_mapÚget_definitionsÚget_schema_from_model_fieldÚlenient_issubclass)ÚDefaultPlaceholder)Ú	Dependant)Úget_flat_dependantÚget_flat_params)Újsonable_encoder)ÚMETHODS_WITH_BODYÚ
REF_PREFIXÚREF_TEMPLATE)ÚOpenAPI)ÚBodyÚParam)ÚResponse)ÚModelNameMap)Údeep_dict_updateÚgenerate_operation_id_for_pathÚis_body_allowed_for_status_code)ÚJSONResponse)Ú	BaseRoute)ÚHTTP_422_UNPROCESSABLE_ENTITY)ÚLiteralÚValidationErrorÚobjectÚLocationÚarrayÚanyOfÚtypeÚstringÚinteger)Útitler.   ÚitemsÚMessage)r1   r.   z
Error Type)ÚlocÚmsgr.   )r1   r.   Ú
propertiesÚrequiredÚHTTPValidationErrorÚdetailÚDetailú$ref)r1   r.   r6   ÚInformationÚSuccessÚRedirectionzClient ErrorzServer ErrorzDefault Response)Ú1XXÚ2XXÚ3XXÚ4XXÚ5XXÚDEFAULTÚstatus_code_rangesÚflat_dependantÚreturnc                 C   sN   i }g }| j D ]}t|jjddd�}|jj}|||< | ||ji¡ q||fS )NT©Úby_aliasÚexclude_none)Úsecurity_requirementsr   Úsecurity_schemeÚmodelÚscheme_nameÚappendÚscopes)rF   Úsecurity_definitionsÚoperation_securityÚsecurity_requirementÚsecurity_definitionÚsecurity_name© rV   úR/var/www/html/CropPilot/venv/lib/python3.10/site-packages/fastapi/openapi/utils.pyÚ get_openapi_security_definitionsI   s   
ýrX   T)Úseparate_input_output_schemasÚall_route_paramsÚschema_generatorÚmodel_name_mapÚfield_mapping)Ú
validationÚserializationrY   c           
      C   s¨   g }| D ]M}|j }tt|ƒ}|jsqt|||||d�}|j|jj|j|dœ}	|j	r.|j	|	d< |j
r9t|j
ƒ|	d< n|jtkrEt|jƒ|	d< |jrLd|	d< | |	¡ q|S )N©Úfieldr[   r\   r]   rY   )ÚnameÚinr7   ÚschemaÚdescriptionÚexamplesÚexampleTÚ
deprecated)Ú
field_infor   r   Úinclude_in_schemar   ÚaliasÚin_Úvaluer7   re   Úopenapi_examplesr   rg   r   rh   rO   )
rZ   r[   r\   r]   rY   Ú
parametersÚparamri   Úparam_schemaÚ	parameterrV   rV   rW   Ú get_openapi_operation_parametersZ   s8   

ûü

rs   Ú
body_fieldc                 C   s–   | sd S t | tƒsJ ‚t| ||||d�}tt| jƒ}|j}| j}i }	|r(||	d< d|i}
|jr7t	|jƒ|
d< n|j
tkrCt	|j
ƒ|
d< ||
i|	d< |	S )Nr`   r7   rd   rf   rg   Úcontent)Ú
isinstancer   r   r   r   ri   Ú
media_typer7   rn   r   rg   r   )rt   r[   r\   r]   rY   Úbody_schemari   Úrequest_media_typer7   Úrequest_body_oaiÚrequest_media_contentrV   rV   rW   Ú"get_openapi_operation_request_bodyƒ   s2   
û
ÿ
r|   ÚrouteÚmethodc                 C   s2   t jdtdd� | jr| jS | j}t| j||d�S )Nzqfastapi.openapi.utils.generate_operation_id() was deprecated, it is not used internally, and will be removed sooné   ©Ú
stacklevel)rb   Úpathr~   )ÚwarningsÚwarnÚDeprecationWarningÚoperation_idÚpath_formatr#   rb   )r}   r~   r‚   rV   rV   rW   Úgenerate_operation_id¨   s   ürˆ   c                 C   s   | j r| j S | j dd¡ ¡ S )NÚ_ú )Úsummaryrb   Úreplacer1   ©r}   r~   rV   rV   rW   Úgenerate_operation_summary·   s   rŽ   Úoperation_idsc                 C   s¸   i }| j r
| j |d< t| |d�|d< | jr| j|d< | jp| j}||v rId|› d�| jj›  }t| jdi ƒ d¡}|rB|d	|› �7 }t	j
|d
d� | |¡ ||d< | jrZ| j|d< |S )NÚtagsr�   r‹   re   zDuplicate Operation ID z for function Ú__globals__Ú__file__z at é   r€   ÚoperationIdrh   )r�   rŽ   re   r†   Ú	unique_idÚendpointÚ__name__ÚgetattrÚgetrƒ   r„   Úaddrh   )r}   r~   r�   Ú	operationr†   ÚmessageÚ	file_namerV   rV   rW   Úget_openapi_operation_metadata½   s*   


ÿÿ

rž   c           +   
      s*  i }i }i }| j d usJ dƒ‚t| jtƒr| jj}	n| j}	|	s#J dƒ‚|	j}
| j�r| j D �]á}t| ||d�‰ g }t| j	dd�}t
|d�\}}|rRˆ  dg ¡ |¡ |rY| |¡ t| j	ƒ}t|||||d�}| |¡ |r‰d	d
„ |D ƒ}dd
„ |D ƒ}| |¡ t| ¡ ƒˆ d< |tv r�t| j||||d�}|r�|ˆ d< | jrÇi }| jD ]}t|tjƒrÂt||||||d�\}}}|j|i||j< q¥|ˆ d< | jd urÒt| jƒ}nt |	j¡}|j  !d¡}|d urít|j"t#ƒrít|j"ƒ}| j$ˆ  di ¡ |i ¡d< |
�r2t%| jƒ�r2ddi}t&|	t'ƒ�r| j(�rt)| j(||||d�}ni }|ˆ  di ¡ |i ¡ di ¡ |
i ¡d< | j*�rÇˆ  di ¡}| j* +¡ D ]…\}} |  ,¡ }!|! -dd ¡ t|ƒ .¡ }"|"dk�r\d}"| |"i ¡}#t|!t/ƒ�slJ dƒ‚| j0 !|¡}$d }%|$�r˜t)|$||||d�}%|
�p„d}&|! di ¡ |&i ¡ di ¡}'t1|'|%ƒ t2 !t|ƒ .¡ ¡�pªt3j4j* !t#|ƒ¡}(|! !d¡�p»|# !d¡�p»|(�p»d})t1|#|!ƒ |)|#d< �qAtt5ƒ}*|�sÒ| j�rÿt6‡ fdd „|*d!dfD ƒƒ�sÿd"ddd#t7d$ iiid%œˆ d |*< d&|v�rÿ| t8t9d'œ¡ | j:�r	t1ˆ | j:ƒ ˆ || ;¡ < q-|||fS )(NzMethods must be a listz.A response class is needed to generate OpenAPI)r}   r~   r�   T)Úskip_repeats)rF   Úsecurity)rZ   r[   r\   r]   rY   c                 S   s   i | ]}|d  |d f|“qS )rc   rb   rV   ©Ú.0rp   rV   rV   rW   Ú
<dictcomp>  s    ÿz$get_openapi_path.<locals>.<dictcomp>c                 S   s(   i | ]}|  d ¡r|d |d f|“qS )r7   rc   rb   )r™   r¡   rV   rV   rW   r£     s    ýÿro   )rt   r[   r\   r]   rY   ÚrequestBody©r}   r�   r[   r\   r]   rY   Ú	callbacksÚstatus_codeÚ	responsesre   r.   r/   r`   ru   rd   rM   rD   Údefaultz%An additional response must be a dictzapplication/jsonzAdditional Responsec                 3   s   � | ]	}|ˆ d  v V  qdS )r¨   NrV   )r¢   Ústatus©r›   rV   rW   Ú	<genexpr>~  s
   € 
ÿ
ÿz#get_openapi_path.<locals>.<genexpr>rB   zValidation Errorr;   r8   )re   ru   r)   )r)   r8   )<Úmethodsrv   Úresponse_classr   rm   rw   rj   rž   r   Ú	dependantrX   Ú
setdefaultÚextendÚupdater   rs   ÚlistÚvaluesr   r|   rt   r¦   r   ÚAPIRouteÚget_openapi_pathr‚   rb   r§   ÚstrÚinspectÚ	signatureÚ__init__ro   r™   r©   ÚintÚresponse_descriptionr$   r   r%   Úresponse_fieldr   r¨   r2   ÚcopyÚpopÚupperÚdictÚresponse_fieldsr"   rE   ÚhttpÚclientr'   Úanyr   Úvalidation_error_definitionÚ$validation_error_response_definitionÚopenapi_extraÚlower)+r}   r�   r[   r\   r]   rY   r‚   Úsecurity_schemesÚdefinitionsÚcurrent_response_classÚroute_response_media_typer~   ro   rF   rQ   rR   rZ   Úoperation_parametersÚall_parametersÚrequired_parametersrz   r¦   ÚcallbackÚcb_pathÚcb_security_schemesÚcb_definitionsr§   Úresponse_signatureÚstatus_code_paramÚresponse_schemaÚoperation_responsesÚadditional_status_codeÚadditional_responseÚprocess_responseÚstatus_code_keyÚopenapi_responsera   Úadditional_field_schemarw   Úadditional_schemaÚstatus_textre   Úhttp422rV   r«   rW   r¶   ×   sV  
ÿ
ÿ

û
ÿþ
û
úü	€

þÿÿûüÿýý
ÿÿþû

ý

ÿþÿþü

þÿÿþ
þÿ
r¶   Úroutesc                 C   sÂ   g }g }g }g }| D ]J}t |dd ƒrTt|tjƒrT|jr+t|jtƒs%J dƒ‚| |j¡ |jr4| |j¡ |jr?| 	|j 
¡ ¡ |jrJ| 	t|jƒ¡ t|jƒ}| 	|¡ q
|t|| | ƒ }|S )Nrj   z'A request body must be a Pydantic Field)r˜   rv   r   rµ   rt   r   rO   r½   rÂ   r±   r´   r¦   Úget_fields_from_routesr   r¯   r³   )râ   Úbody_fields_from_routesÚresponses_from_routesÚrequest_fields_from_routesÚcallback_flat_modelsr}   ÚparamsÚflat_modelsrV   rV   rW   rã   —  s8   ÿÿþ

€
ÿrã   z3.1.0)
Úopenapi_versionr‹   re   Úwebhooksr�   ÚserversÚterms_of_serviceÚcontactÚlicense_inforY   r1   Úversionrê   r‹   re   rë   r�   rì   rí   rî   rï   c              	      s  | |dœ}|r||d< |r||d< |	r|	|d< |
r|
|d< |r#||d< ||dœ}|r.||d< i }i }i }t ƒ }tt|p<g ƒt|pAg ƒ ƒ}t|ƒ}ttd	�}t||||d
�\}‰ |p[g D ]7}t|tj	ƒr“t
||||||d�}|r“|\}}}|r�| |ji ¡ |¡ |rŒ| di ¡ |¡ |r“ˆ  |¡ q\|p—g D ]7}t|tj	ƒrÏt
||||||d�}|rÏ|\}}}|r½| |ji ¡ |¡ |rÈ| di ¡ |¡ |rÏˆ  |¡ q˜ˆ rß‡ fdd„tˆ ƒD ƒ|d< |rå||d< ||d< |rï||d< |rõ||d< ttdi |¤Žddd�S )N)r1   rð   r‹   re   ÚtermsOfServicerî   Úlicense)ÚopenapiÚinforì   )Úref_template)Úfieldsr[   r\   rY   r¥   ÚsecuritySchemesc                    s   i | ]}|ˆ | “qS rV   rV   )r¢   Úk©rË   rV   rW   r£   
  s    zget_openapi.<locals>.<dictcomp>ÚschemasÚ
componentsÚpathsrë   r�   TrH   rV   )Úsetrã   r³   r   r   r   r   rv   r   rµ   r¶   r°   r‡   r²   Úsortedr   r   )r1   rð   rê   r‹   re   râ   rë   r�   rì   rí   rî   rï   rY   rô   Úoutputrû   rü   Úwebhook_pathsr�   Ú
all_fieldsr\   r[   r]   r}   Úresultr‚   rÊ   Úpath_definitionsÚwebhookrV   rù   rW   Úget_openapi¶  sž   



üú
ÿ
€ú
ÿ
€r  )LÚhttp.clientrÃ   r¸   rƒ   Útypingr   r   r   r   r   r   r   r	   r
   r   Úfastapir   Úfastapi._compatr   r   r   r   r   r   r   r   Úfastapi.datastructuresr   Úfastapi.dependencies.modelsr   Úfastapi.dependencies.utilsr   r   Úfastapi.encodersr   Úfastapi.openapi.constantsr   r   r   Úfastapi.openapi.modelsr   Úfastapi.paramsr   r   Úfastapi.responsesr    Úfastapi.typesr!   Úfastapi.utilsr"   r#   r$   Ústarlette.responsesr%   Ústarlette.routingr&   Ústarlette.statusr'   Útyping_extensionsr(   rÆ   rÇ   rE   r·   Ú__annotations__rX   Úboolrs   r|   rµ   rˆ   rŽ   rž   r¶   rã   r  rV   rV   rV   rW   Ú<module>   sH  
 0(
ýù	ô
ýÿýú
ÿ
þøþýüÿûø	
÷1øþýüÿûø	
÷%ÿÿ
þÿÿÿ

þ#÷þýüûÿú	÷$

ö Aÿ
þ#òþýüûúù
ø	÷
öõôóò
ñ