o
    ß­jc  ã                   @   s@  U d dl Z d dl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mZ d dlmZ d dl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mZ d dlmZmZ d dl m!Z! d d	l"m#Z# ergd
dl$m%Z% eƒ Z&eee ee f e'd< dee(e)df de*fdd„Z+de)de
e) fdd„Z,deeedddfde)dee de	ee)ef  de	e dee*ef dee de	e! de	e) de#d defdd „Z-dd!œd"ed#e	eee ee f  defd$d%„Z.de)de)d&e)de)fd'd(„Z/d)d*de)fd+d,„Z0d-eeef d.eeef ddfd/d0„Z1d1eeef d2eeef deeef fd3d4„Z2dS )5é    N)Úis_dataclass)	ÚTYPE_CHECKINGÚAnyÚDictÚMutableMappingÚOptionalÚSetÚTypeÚUnionÚcast)ÚWeakKeyDictionary)ÚPYDANTIC_V2Ú
BaseConfigÚ
ModelFieldÚPydanticSchemaGenerationErrorÚ	UndefinedÚUndefinedTypeÚ	ValidatorÚlenient_issubclass)ÚDefaultPlaceholderÚDefaultType)Ú	BaseModelÚcreate_model)Ú	FieldInfo)ÚLiteralé   )ÚAPIRouteÚ_CLONED_TYPES_CACHEÚstatus_codeÚreturnc                 C   s2   | d u rdS | dv rdS t | ƒ}|dk p|dv  S )NT>   Ú1XXÚ2XXÚ3XXÚ4XXÚ5XXÚdefaultéÈ   >   é0  éÌ   éÍ   )Úint)r   Úcurrent_status_code© r,   úJ/var/www/html/CropPilot/venv/lib/python3.10/site-packages/fastapi/utils.pyÚis_body_allowed_for_status_code*   s   r.   Úpathc                 C   s   t t d| ¡ƒS )Nz{(.*?)})ÚsetÚreÚfindall)r/   r,   r,   r-   Úget_path_param_names;   s   r3   Ú
validationÚnameÚtype_Úclass_validatorsr%   ÚrequiredÚmodel_configÚ
field_infoÚaliasÚmode)r4   Úserializationc	           
   	   C   sš   |pi }t r|pt|||d�}n|ptƒ }| |dœ}	t r$|	 d|i¡ n|	 ||||||dœ¡ ztdi |	¤ŽW S  ttfyL   tj d|› d�¡d‚w )	zB
    Create a new response field. Raises if type_ is invalid.
    )Ú
annotationr%   r;   )r5   r:   r<   )r6   r7   r%   r8   r9   r;   z2Invalid args for response field! Hint: check that aY   is a valid Pydantic field type. If you are using a return type annotation that is not a valid Pydantic field (e.g. Union[Response, dict, None]) you can disable generating the response model from the type annotation with the path operation decorator parameter response_model=None. Read more: https://fastapi.tiangolo.com/tutorial/response-model/Nr,   )	r   r   Úupdater   ÚRuntimeErrorr   ÚfastapiÚ
exceptionsÚFastAPIError)
r5   r6   r7   r%   r8   r9   r:   r;   r<   Úkwargsr,   r,   r-   Úcreate_response_field?   s:   ÿ

úÿ
ÿÿøÿrE   ©Úcloned_typesÚfieldrG   c                   sV  t r| S ˆ d u r
t‰ | j}t|ƒrt|dƒr|j}|}t|tƒrMtt	t |ƒ}ˆ  
|¡}|d u rMt|j|d�}|ˆ |< |j ¡ D ]}t|ˆ d�|j|j< q@t| j|d�}| j|_| j|_| j|_| j|_| j|_| j|_| j|_| j|_| j|_| jr†‡ fdd„| jD ƒ|_| jr‘t| jˆ d�|_| j|_| j|_| j|_| j |_ | j!|_!| "¡  |S )NÚ__pydantic_model__)Ú__base__rF   )r5   r6   c                    s   g | ]}t |ˆ d �‘qS )rF   )Úcreate_cloned_field)Ú.0Ú	sub_fieldrF   r,   r-   Ú
<listcomp>•   s    
ÿÿz'create_cloned_field.<locals>.<listcomp>)#r   r   r6   r   ÚhasattrrI   r   r   r   r	   Úgetr   Ú__name__Ú
__fields__ÚvaluesrK   r5   rE   Ú	has_aliasr;   r7   r%   r8   r9   r:   Ú
allow_noneÚvalidate_alwaysÚ
sub_fieldsÚ	key_fieldÚ
validatorsÚpre_validatorsÚpost_validatorsÚ
parse_jsonÚshapeÚpopulate_validators)rH   rG   Úoriginal_typeÚuse_typeÚfÚ	new_fieldr,   rF   r-   rK   p   sX   

ÿ
þþrK   Úmethodc                 C   s@   t jdtdd� | › |› �}t dd|¡}|› d| ¡ › �}|S )Nzrfastapi.utils.generate_operation_id_for_path() was deprecated, it is not used internally, and will be removed sooné   )Ú
stacklevelú\WÚ_)ÚwarningsÚwarnÚDeprecationWarningr1   ÚsubÚlower)r5   r/   rc   Úoperation_idr,   r,   r-   Úgenerate_operation_id_for_path§   s   ürn   Úrouter   c                 C   sH   | j › | j› �}t dd|¡}| jsJ ‚|› dt| jƒd  ¡ › �}|S )Nrf   rg   r   )r5   Úpath_formatr1   rk   ÚmethodsÚlistrl   )ro   rm   r,   r,   r-   Úgenerate_unique_id¶   s
   
rs   Ú	main_dictÚupdate_dictc                 C   sˆ   |  ¡ D ]=\}}|| v r t| | tƒr t|tƒr t| | |ƒ q|| v r=t| | tƒr=t|| tƒr=| | ||  | |< q|| |< qd S )N)ÚitemsÚ
isinstanceÚdictÚdeep_dict_updaterr   )rt   ru   ÚkeyÚvaluer,   r,   r-   ry   ¾   s   ÿþÿþ
òry   Ú
first_itemÚextra_itemsc                 G   s*   | f| }|D ]}t |tƒs|  S q| S )z×
    Pass items or `DefaultPlaceholder`s by descending priority.

    The first one to _not_ be a `DefaultPlaceholder` will be returned.

    Otherwise, the first item (a `DefaultPlaceholder`) will be returned.
    )rw   r   )r|   r}   rv   Úitemr,   r,   r-   Úget_value_or_defaultÐ   s   

ÿr   )3r1   rh   Údataclassesr   Útypingr   r   r   r   r   r   r	   r
   r   Úweakrefr   rA   Úfastapi._compatr   r   r   r   r   r   r   r   Úfastapi.datastructuresr   r   Úpydanticr   r   Úpydantic.fieldsr   Útyping_extensionsr   Úroutingr   r   Ú__annotations__r*   ÚstrÚboolr.   r3   rE   rK   rn   rs   ry   r   r,   r,   r,   r-   Ú<module>   s’   
 ,(
þÿ÷ÿþýü
ûúùø	÷

ö4ýÿý
ü7ÿÿÿ
þ&
ÿ
þ
ý