
    \IiR                         d dl 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 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)    )	AnnotatedAnyBinaryIOCallableOptionalTypeVarcast)Doc)
CoreSchemaGetJsonSchemaHandlerJsonSchemaValue)URL)Address)FormData)Headers)QueryParams)State)
UploadFilec                       e Zd ZU dZee ed      f   ed<   eee	    ed      f   ed<   eee
    ed      f   ed<   ee ed      f   ed	<   eee	    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dedefd       Zedee   deegef   de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).filez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.
                returnNc                 >   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/home/mario/Escritorio/furbo/venv/lib/python3.12/site-packages/fastapi/datastructures.pyr   zUploadFile.writeG   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.read[   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.seekm   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stringbinary)r1   format )r2   r5   r6   s      r"   __get_pydantic_json_schema__z'UploadFile.__get_pydantic_json_schema__   s     !H55r4   sourcec                 2    ddl m}  || j                        S )N   )"with_info_plain_validator_function)
_compat.v2r@   r3   )r2   r=   r6   r@   s       r"   __get_pydantic_core_schema__z'UploadFile.__get_pydantic_core_schema__   s     	C1#--@@r4   ))r   N)__name__
__module____qualname____doc__r   r   r
   __annotations__r   strintr   bytesr   r%   r(   r*   classmethodr   r3   r   r   r   r<   r1   r   rB   __classcell__)r!   s   @r"   r   r      s   B :;	=  s+D'EEFF
HSM3'G#HH
IIw$A BBCCsOPP )
) 
): (
( 
($*
* 
*(% /c /c /l / /
 6$6/C6	6 6
 A#YA)13%2C)DA	A Ar4   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rP   )r    rP   s     r"   __init__zDefaultPlaceholder.__init__   s	    
r4   r   c                 ,    t        | j                        S rR   )boolrP   )r    s    r"   __bool__zDefaultPlaceholder.__bool__   s    DJJr4   oc                 X    t        |t              xr |j                  | j                  k(  S rR   )r.   rO   rP   )r    rX   s     r"   __eq__zDefaultPlaceholder.__eq__   s"    !/0JQWW

5JJr4   N)
rD   rE   rF   rG   r   rT   rV   rW   objectrZ   r;   r4   r"   rO   rO      s5    c  $  K K4 Kr4   rO   DefaultTyperP   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.
    )rO   rS   s    r"   Defaultr^      s     e$$r4   N)typingr   r   r   r   r   r   r	   annotated_docr
   fastapi._compatr   r   r   starlette.datastructuresr   r   r   r   r   r   r   r/   rO   r\   r^   r;   r4   r"   <module>rc      sw       
 0 7 9 7 ? 3 FAA$ AAHK K$ m$%; %; %r4   