
    mϞiV                         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y)    )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                 >   K   t         |   |       d{   S 7 w)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     X/var/www/html/jploft-chatbot/venv/lib/python3.12/site-packages/fastapi/datastructures.pyr   zUploadFile.writeB   s     $ W]4((((   zL
                The number of bytes to read from the file.
                c                 >   K   t         |   |       d{   S 7 w)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   s       W\$''''r!   offsetzO
                The position in bytes to seek to in the file.
                c                 >   K   t         |   |       d{   S 7 w)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   s     $ W\&))))r!   c                 <   K   t         |           d{   S 7 w)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      W]_$$$s   _UploadFile__input_value_c                 p    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   s3    -)<=>tM?R>STUUJ..    core_schemahandlerc                     dddS )Nstringzapplication/octet-stream)r/   contentMediaType )r0   r3   r4   s      r    __get_pydantic_json_schema__z'UploadFile.__get_pydantic_json_schema__   s     !6PQQr2   sourcec                 2    ddl m}  || j                        S )N   )"with_info_plain_validator_function)
_compat.v2r=   r1   )r0   r:   r4   r=   s       r    __get_pydantic_core_schema__z'UploadFile.__get_pydantic_core_schema__   s     	C1#--@@r2   ))r   N)__name__
__module____qualname____doc__r   r   r
   __annotations__strintr   bytesr   r#   r&   r(   classmethodr   r1   r   r   dictr9   r/   r   r?   __classcell__)r   s   @r    r   r      s   B :;	=  d
C(A$BBCC
C$J$D EE
FFw$A BBCCd
CLMM )
) 
): (
( 
($*
* 
*(% /c /c /l / /
 R!#s(+R6JR	c3hR R
 A#YA)13%c9J2J)KA	c	A Ar2   r   c                   8    e Zd ZdZdefdZdefdZdedefdZ	y)	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                     || _         y NrN   )r   rN   s     r    __init__zDefaultPlaceholder.__init__   s	    
r2   r   c                 ,    t        | j                        S rP   )boolrN   )r   s    r    __bool__zDefaultPlaceholder.__bool__   s    DJJr2   oc                 X    t        |t              xr |j                  | j                  k(  S rP   )r,   rM   rN   )r   rV   s     r    __eq__zDefaultPlaceholder.__eq__   s"    !/0JQWW

5JJr2   N)
rA   rB   rC   rD   r   rR   rT   rU   objectrX   r8   r2   r    rM   rM      s5    c  $  K K4 Kr2   rM   DefaultTyperN   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.
    )rM   rQ   s    r    Defaultr\      s     e$$r2   N)collections.abcr   r   typingr   r   r   r   r	   annotated_docr
   pydanticr   starlette.datastructuresr   r   r   r   r   r   r   r-   rM   rZ   r\   r8   r2   r    <module>rb      sl    -   ) / 7 9 7 ? 3 FAA$ AAHK K$ m$%; %; %r2   