
    piU                         d dl mZ 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 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)    )Mapping)	AnnotatedAnyBinaryIOCallableOptional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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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).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/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/fastapi/datastructures.pyr   zUploadFile.writeD   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.readX   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.seekj   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)r0   format )r1   r4   r5   s      r!   __get_pydantic_json_schema__z'UploadFile.__get_pydantic_json_schema__   s     !H55r3   sourcec                 2    ddl m}  || j                        S )N   )"with_info_plain_validator_function)
_compat.v2r?   r2   )r1   r<   r5   r?   s       r!   __get_pydantic_core_schema__z'UploadFile.__get_pydantic_core_schema__   s     	C1#--@@r3   ))r   N)__name__
__module____qualname____doc__r   r   r   __annotations__r   strintr   bytesr   r$   r'   r)   classmethodr   r2   r   r   dictr;   r0   r   rA   __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!#s(+66J6	c3h6 6
 A#YA)13%c9J2J)KA	c	A Ar3   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	    
r3   r   c                 ,    t        | j                        S rR   )boolrP   )r   s    r!   __bool__zDefaultPlaceholder.__bool__   s    DJJr3   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Jr3   N)
rC   rD   rE   rF   r   rT   rV   rW   objectrZ   r:   r3   r!   rO   rO      s5    c  $  K K4 Kr3   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$$r3   N)collections.abcr   typingr   r   r   r   r   r	   r
   annotated_docr   pydanticr   starlette.datastructuresr   r   r   r   r   r   r   r.   rO   r\   r^   r:   r3   r!   <module>rd      sq    #    ) / 7 9 7 ? 3 FAA$ AAHK K$ m$%; %; %r3   