o
    U!h                     @   s   d dl mZmZmZmZmZmZmZ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mZ G dd deZG dd dZedZdedefddZdS )    )	AnyBinaryIOCallableDictIterableOptionalTypeTypeVarcast)PYDANTIC_V2
CoreSchemaGetJsonSchemaHandlerJsonSchemaValue"with_info_plain_validator_function)URL)Address)FormData)Headers)QueryParams)State)
UploadFile)	AnnotatedDocc                       s  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dZ	d1dee
edf def fddZdee
edf ddf fddZd2 fddZeded  deedef  fddZeded  d edefd!d"Zed#ed$edd fd%d&Zesed'ee	ef ddfd(d)Zed*ed+edefd,d-Zed.ee d+eegef defd/d0Z   Z!S )3r   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                       t  |I dH 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__ /var/www/html/contec/backend/tec.wsc/Coding/backend/Contec_Project_backend/env/lib/python3.10/site-packages/fastapi/datastructures.pyr"   K      zUploadFile.writezL
                The number of bytes to read from the file.
                c                    r    )z|
        Read some bytes from the file.

        To be awaitable, compatible with async, this is run in threadpool.
        N)r!   read)r#   r   r$   r&   r'   r*   _   s   zUploadFile.readoffsetzO
                The position in bytes to seek to in the file.
                c                    r    )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$   r&   r'   r,   q   r(   zUploadFile.seekc                    s   t   I dH S )zm
        Close the file.

        To be awaitable, compatible with async, this is run in threadpool.
        N)r!   closer#   r$   r&   r'   r-      s   zUploadFile.closecls.c                 c   s    | j V  d S N)validate)r/   r&   r&   r'   __get_validators__   s   zUploadFile.__get_validators__vc                 C   s    t |tstdt| |S NzExpected UploadFile, received: )
isinstanceStarletteUploadFile
ValueErrortype)r/   r3   r&   r&   r'   r1      s   
zUploadFile.validate_UploadFile__input_value_c                 C   s&   t |tstdt| tt|S r4   )r5   r6   r7   r8   r
   r   )r/   r9   r:   r&   r&   r'   	_validate   s   

zUploadFile._validatefield_schemac                 C   s   | ddd d S Nstringbinary)r8   format)update)r/   r<   r&   r&   r'   __modify_schema__   s   zUploadFile.__modify_schema__core_schemahandlerc                 C   s
   dddS r=   r&   )r/   rC   rD   r&   r&   r'   __get_pydantic_json_schema__      
z'UploadFile.__get_pydantic_json_schema__sourcec                 C   
   t | jS r0   )r   r;   )r/   rG   rD   r&   r&   r'   __get_pydantic_core_schema__   rF   z'UploadFile.__get_pydantic_core_schema__)r)   )r   N)"__name__
__module____qualname____doc__r   r   r   __annotations__r   strintr   bytesr"   r*   r,   r-   classmethodr   r   r   r   r2   r1   r;   r   r   rB   r   r   r   rE   rI   __classcell__r&   r&   r$   r'   r      s   
 !


$r   c                   @   s>   e Zd ZdZdefddZdefddZdedefd	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                 C   s
   || _ d S r0   rU   )r#   rU   r&   r&   r'   __init__      
zDefaultPlaceholder.__init__r   c                 C   rH   r0   )boolrU   r.   r&   r&   r'   __bool__   rX   zDefaultPlaceholder.__bool__oc                 C   s   t |to
|j| jkS r0   )r5   rT   rU   )r#   r[   r&   r&   r'   __eq__   s   zDefaultPlaceholder.__eq__N)
rJ   rK   rL   rM   r   rW   rY   rZ   objectr\   r&   r&   r&   r'   rT      s
    rT   DefaultTyperU   r   c                 C   s   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.
    )rT   rV   r&   r&   r'   Default   s   r_   N)typingr   r   r   r   r   r   r   r	   r
   fastapi._compatr   r   r   r   r   starlette.datastructuresr   r   r   r   r   r   r   r6   typing_extensionsr   r   rT   r^   r_   r&   r&   r&   r'   <module>   s   ,  