
    i                        d dl mZmZ d dl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 d d	lmZ d d
lmZ d dlmZ  G d de          Z G d d          Z ed          ZdedefdZ ed          ZdS )    )CallableMapping)	AnnotatedAnyBinaryIOTypeVarcast)Doc)GetJsonSchemaHandler)URL)Address)FormData)Headers)QueryParams)State)
UploadFilec            	           e Zd ZU dZee ed          f         ed<   eedz   ed          f         ed<   ee	dz   ed          f         ed<   ee
 ed	          f         ed
<   eedz   ed          f         ed<   dee ed          f         ddf fdZ	 d dee	 ed          f         def fdZdee	 ed          f         ddf fdZd! fdZedededd fd            Zedeeef         dedeeef         fd            Zedee         deegeeef         f         deeef         fd            Z xZS )"r   aA  
    A file uploaded in a request.

    Define it as a *path operation function* (or dependency) parameter.

    If you are using a regular `def` function, you can use the `upload_file.file`
    attribute to access the raw standard Python file (blocking, not async), useful and
    needed for non-async code.

    Read more about it in the
    [FastAPI docs for Request Files](https://fastapi.tiangolo.com/tutorial/request-files/).

    ## Example

    ```python
    from typing import Annotated

    from fastapi import FastAPI, File, UploadFile

    app = FastAPI()


    @app.post("/files/")
    async def create_file(file: Annotated[bytes, File()]):
        return {"file_size": len(file)}


    @app.post("/uploadfile/")
    async def create_upload_file(file: UploadFile):
        return {"filename": file.filename}
    ```
    z,The standard Python file object (non-async).fileNzThe original file name.filenamezThe size of the file in bytes.sizezThe headers of the request.headersz2The content type of the request, from the headers.content_typedatazA
                The bytes to write to the file.
                returnc                 V   K   t                                          |           d{V S )z
        Write some bytes to the file.

        You normally wouldn't use this from a file you read in a request.

        To be awaitable, compatible with async, this is run in threadpool.
        N)superwrite)selfr   	__class__s     S/root/projects/qq-shell/venv/lib/python3.11/site-packages/fastapi/datastructures.pyr   zUploadFile.writeB   s1      $ WW]]4(((((((((    zL
                The number of bytes to read from the file.
                c                 V   K   t                                          |           d{V S )z|
        Read some bytes from the file.

        To be awaitable, compatible with async, this is run in threadpool.
        N)r   read)r   r   r   s     r    r$   zUploadFile.readV   s1        WW\\$'''''''''r!   offsetzO
                The position in bytes to seek to in the file.
                c                 V   K   t                                          |           d{V S )z
        Move to a position in the file.

        Any next read or write will be done from that position.

        To be awaitable, compatible with async, this is run in threadpool.
        N)r   seek)r   r%   r   s     r    r'   zUploadFile.seekh   s1      $ WW\\&)))))))))r!   c                 T   K   t                                                       d{V S )zm
        Close the file.

        To be awaitable, compatible with async, this is run in threadpool.
        N)r   close)r   r   s    r    r)   zUploadFile.close|   s-       WW]]__$$$$$$$r!   _UploadFile__input_value_c                     t          |t                    st          dt          |                     t	          t
          |          S )NzExpected UploadFile, received: )
isinstanceStarletteUploadFile
ValueErrortyper	   r   )clsr*   r+   s      r    	_validatezUploadFile._validate   sE    -)<== 	VTtM?R?RTTUUUJ...r!   core_schemahandlerc                     dddS )Nstringzapplication/octet-stream)r0   contentMediaType )r1   r3   r4   s      r    __get_pydantic_json_schema__z'UploadFile.__get_pydantic_json_schema__   s     !6PQQQr!   sourcec                 .    ddl m}  || j                  S )N   )"with_info_plain_validator_function)
_compat.v2r=   r2   )r1   r:   r4   r=   s       r    __get_pydantic_core_schema__z'UploadFile.__get_pydantic_core_schema__   s*     	CBBBBB11#-@@@r!   )r"   )r   N)__name__
__module____qualname____doc__r   r   r
   __annotations__strintr   bytesr   r$   r'   r)   classmethodr   r2   r   r   dictr9   r0   r   r?   __classcell__)r   s   @r    r   r      s         B :;;	=    d
CC(A$B$BBCCCC
C$J$D E EE
FFFFw$A B BBCCCCd
CCLMMM   )C 
) 
) ) ) ) ) ): ( (C 
( 
( ( ( ( ( ($*C 
* 
* * * * * *(% % % % % % /c /c /l / / / [/
 R!#s(+R6JR	c3hR R R [R
 A#YA)13%c9J2J)KA	c	A A A [A A A A Ar!   r   c                   :    e Zd ZdZdefdZdefdZdedefdZ	dS )	DefaultPlaceholderz
    You shouldn't use this class directly.

    It's used internally to recognize when a default value has been overwritten, even
    if the overridden default value was truthy.
    valuec                     || _         d S NrM   )r   rM   s     r    __init__zDefaultPlaceholder.__init__   s    


r!   r   c                 *    t          | j                  S rO   )boolrM   )r   s    r    __bool__zDefaultPlaceholder.__bool__   s    DJr!   oc                 L    t          |t                    o|j        | j        k    S rO   )r-   rL   rM   )r   rU   s     r    __eq__zDefaultPlaceholder.__eq__   s!    !/00JQW
5JJr!   N)
r@   rA   rB   rC   r   rQ   rS   rT   objectrW   r8   r!   r    rL   rL      s~         c     $        K K4 K K K K K Kr!   rL   DefaultTyperM   r   c                      t          |           S )z
    You shouldn't use this function directly.

    It's used internally to recognize when a default value has been overwritten, even
    if the overridden default value was truthy.
    )rL   rP   s    r    Defaultr[      s     e$$$r!   N)collections.abcr   r   typingr   r   r   r   r	   annotated_docr
   pydanticr   starlette.datastructuresr   r   r   r   r   r   r   r.   rL   rY   r[   _Unsetr8   r!   r    <module>rb      s   - - - - - - - -                    ) ) ) ) ) ) / / / / / / 7 7 7 7 7 7 9 9 9 9 9 9 7 7 7 7 7 7 ? ? ? ? ? ? 3 3 3 3 3 3 F F F F F FAA AA AA AA AA$ AA AA AAHK K K K K K K K$ gm$$%; %; % % % % 
r!   