o
    NK&h                     @  st   d dl mZ d dlZd dl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
 d
eZdd ZdS )    )annotationsN)
NamedTuple)unquote)parse_content_header)logger   )RequestParametersc                   @  s*   e Zd ZU dZded< ded< ded< dS )Filea'  Model for defining a file.

    It is a `namedtuple`, therefore you can iterate over the object, or
    access the parameters by name.

    Args:
        type (str, optional): The mimetype, defaults to "text/plain".
        body (bytes): Bytes of the file.
        name (str): The filename.
    strtypebytesbodynameN)__name__
__module____qualname____doc____annotations__ r   r   E/var/www/html/venv/lib/python3.10/site-packages/sanic/request/form.pyr	      s
   
 r	   c                 C  s  i }i }|  |}|dd D ]}d}d}d}d}	d}
d}|dks|d|
}||
| d}|d }
|s7n^|d	}|d }|d|  }t||d \}}|d
kr|d}	|d}|du rz|drztj	|d \}}}t
||d}|durtd|}n|dkr|}|dd}|dkr!|	r||
d }|du r||}|	|v r||	 | q|g||	< qt|||d}|	|v r||	 | q|g||	< qtd qt|t|fS )a  Parse a request body and returns fields and files

    Args:
        body (bytes): Bytes request body.
        boundary (bytes): Bytes multipart boundary.

    Returns:
        Tuple[RequestParameters, RequestParameters]: A tuple containing fields and files as `RequestParameters`.
    r   Nz
text/plainzutf-8   r   s   
:zcontent-dispositionr   filenamez	filename*)encodingNFCzcontent-typecharset)r   r   r   zRForm-data field does not have a 'name' parameter in the Content-Disposition header)splitfinddecodeindexlowerr   getemailutilsdecode_rfc2231r   unicodedata	normalizeappendr	   r   debugr   )r   boundaryfilesfields
form_parts	form_part	file_namecontent_typecontent_charset
field_name
line_indexline_end_index	form_linecolon_indexidxform_header_fieldform_header_valueform_parametersr   _value	post_data	form_filer   r   r   parse_multipart_form    sl   






'
r@   )
__future__r   email.utilsr$   r'   typingr   urllib.parser   sanic.headersr   	sanic.logr   
parametersr   r	   r@   r   r   r   r   <module>   s    