U
    uiv                     @   s  U 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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 d dlmZ d d	lmZ d d
lmZmZmZ e j dk rdZ!eedf e"d< nHe j dk rej#ej$fZ!e%edf e"d< n ej#ej$ejfZ!e%edf e"d< e%dd e&ddd D Z'e'd  dkZ(ee)e
e)e)e)ee%e%e%ee*e*e*e	e+e+e+eeeeiZ,e%e,- Z.ee e"d< eeee eee df df e/dddZ0eee df e/dddZ1eee df e/dddZ2ee/dddZ3eee df e/dd d!Z4eee df e/dd"d#Z5ee/dd$d%Z6eee df e/dd&d'Z7ee/dd(d)Z8ee/dd*d+Z9ee/dd,d-Z:ee/dd.d/Z;ee/dd0d1Z<dS )2    N)deque)is_dataclass)
AnyDeque	FrozenSetListMappingSequenceSetTupleTypeUnion)may_v1)	UnionType)	BaseModel)VERSION)
UploadFile)	Annotatedget_args
get_origin)   	    .WithArgsTypes)r   
   c                 c   s   | ]}t |V  qd S N)int).0xr   r   P/home/lhs5088/backend/venv/lib/python3.8/site-packages/fastapi/_compat/shared.py	<genexpr>*   s     r    .   Url)clsclass_or_tuplereturnc                 C   sB   zt | tot| |W S  tk
r<   t | tr6Y dS  Y nX d S NF)
isinstancetype
issubclass	TypeErrorr   )r$   r%   r   r   r   lenient_issubclassB   s    
r,   )
annotationr&   c                 C   s   t | ttfrdS t | tS r'   )r,   strbytessequence_typesr-   r   r   r   _annotation_is_sequenceM   s    r2   c                 C   sL   t | }|tks|tkr8t| D ]}t|r  dS q dS t| pJtt | S NTF)r   r   r   r   field_annotation_is_sequencer2   r-   originargr   r   r   r4   S   s    
r4   )valuer&   c                 C   s   t | tot | ttf S r   )r(   r0   r.   r/   )r8   r   r   r   value_is_sequence_   s    r9   c                 C   s$   t | ttjttfp"t| p"t| S r   )r,   r   r   r   r   r2   r   r1   r   r   r   _annotation_is_complexc   s     r:   c                 C   sj   t | }|tks|tkr.tdd t| D S |tkrFtt| d S t| pht|pht|dpht|dS )Nc                 s   s   | ]}t |V  qd S r   )field_annotation_is_complex)r   r7   r   r   r   r    p   s     z.field_annotation_is_complex.<locals>.<genexpr>r   Z__pydantic_core_schema__Z__get_pydantic_core_schema__)	r   r   r   anyr   r   r;   r:   hasattr)r-   r6   r   r   r   r;   m   s    r;   c                 C   s   | t kpt|  S r   )Ellipsisr;   r1   r   r   r   field_annotation_is_scalar}   s    r?   c                 C   sj   t | }|tks|tkrLd}t| D ]"}t|r8d}q$q$t|s$ dS q$|S t| ohtdd t| D S )NFTc                 s   s   | ]}t |V  qd S r   )r?   r   sub_annotationr   r   r   r       s   z6field_annotation_is_scalar_sequence.<locals>.<genexpr>)r   r   r   r   #field_annotation_is_scalar_sequencer?   r4   all)r-   r6   Zat_least_one_scalar_sequencer7   r   r   r   rB      s    rB   c                 C   sH   t | trdS t| }|tks&|tkrDt| D ]}t |tr. dS q.dS r3   )r,   r/   r   r   r   r   r5   r   r   r   $is_bytes_or_nonable_bytes_annotation   s    

rD   c                 C   sH   t | trdS t| }|tks&|tkrDt| D ]}t |tr. dS q.dS r3   )r,   r   r   r   r   r   r5   r   r   r   .is_uploadfile_or_nonable_uploadfile_annotation   s    

rE   c                 C   sZ   t | }|tks|tkr<d}t| D ]}t|r$d}q$q$|S t| oXtdd t| D S )NFTc                 s   s   | ]}t |V  qd S r   )rD   r@   r   r   r   r       s   z/is_bytes_sequence_annotation.<locals>.<genexpr>)r   r   r   r   is_bytes_sequence_annotationr4   rC   r-   r6   Zat_least_oner7   r   r   r   rF      s    rF   c                 C   sZ   t | }|tks|tkr<d}t| D ]}t|r$d}q$q$|S t| oXtdd t| D S )NFTc                 s   s   | ]}t |V  qd S r   )rE   r@   r   r   r   r       s   z4is_uploadfile_sequence_annotation.<locals>.<genexpr>)r   r   r   r   !is_uploadfile_sequence_annotationr4   rC   rG   r   r   r   rH      s    rH   c                 C   sp   t | tjrdS t| }|tks(|tkrHt| D ]}t |tjr0 dS q0t| rlt| D ]}t|rX dS qXdS r3   )	r,   r   r   r   r   r   r   r4   annotation_is_pydantic_v1)r-   r6   r7   rA   r   r   r   rI      s    rI   )=systypestypingcollectionsr   dataclassesr   r   r   r   r   r   r	   r
   r   r   r   Zfastapi._compatr   Zfastapi.typesr   Zpydanticr   Zpydantic.versionr   ZPYDANTIC_VERSIONZstarlette.datastructuresr   typing_extensionsr   r   r   version_infor   __annotations___GenericAliasGenericAliastuplesplitZPYDANTIC_VERSION_MINOR_TUPLEZPYDANTIC_V2listset	frozensetZsequence_annotation_to_typekeysr0   boolr,   r2   r4   r9   r:   r;   r?   rB   rD   rE   rF   rH   rI   r   r   r   r   <module>   s~    0

             
