a
    é´«j».  ã                   @  sp  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 dd	lmZ G d
d„ dƒZedd�G dd„ deƒƒZedd�G dd„ deƒƒZedd�G dd„ deƒƒZedd�G dd„ deƒƒZedd�G dd„ deƒƒZG dd„ deƒZeƒ ZG dd„ de	ƒZdZe dej¡Ze eej¡Ze de ej¡ZdZG d d!„ d!ƒZ G d"d#„ d#ƒZ!dS )$é    )ÚannotationsN)Ú	dataclass)Úauto)ÚEnumé   )ÚHeaders)ÚRequestEntityTooLarge)Úparse_options_headerc                   @  s   e Zd ZdS )ÚEventN©Ú__name__Ú
__module__Ú__qualname__© r   r   úX/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/werkzeug/sansio/multipart.pyr
      s   r
   T)Úfrozenc                   @  s   e Zd ZU ded< dS )ÚPreambleÚbytesÚdataN©r   r   r   Ú__annotations__r   r   r   r   r      s   
r   c                   @  s   e Zd ZU ded< ded< dS )ÚFieldÚstrÚnamer   ÚheadersNr   r   r   r   r   r      s   
r   c                   @  s&   e Zd ZU ded< ded< ded< dS )ÚFiler   r   Úfilenamer   r   Nr   r   r   r   r   r      s   
r   c                   @  s   e Zd ZU ded< ded< dS )ÚDatar   r   ÚboolÚ	more_dataNr   r   r   r   r   r   $   s   
r   c                   @  s   e Zd ZU ded< dS )ÚEpiloguer   r   Nr   r   r   r   r   r    *   s   
r    c                   @  s   e Zd ZdS )ÚNeedDataNr   r   r   r   r   r!   /   s   r!   c                   @  s0   e Zd Zeƒ Zeƒ Zeƒ Zeƒ Zeƒ Zeƒ Z	dS )ÚStateN)
r   r   r   r   ÚPREAMBLEÚPARTÚDATAÚ
DATA_STARTÚEPILOGUEÚCOMPLETEr   r   r   r   r"   6   s   r"   s
   (?:
|
|)s   (?:

||

)s   %s[ 	]é   c                   @  s|   e Zd ZdZdddœdddddœdd	„Zd
ddœdd„Zddœdd„Zdddœdd„Zddddœdd„Zdddœdd„Z	dS )ÚMultipartDecodera  Decodes a multipart message as bytes into Python events.

    The part data is returned as available to allow the caller to save
    the data from memory to disk, if desired.

    .. versionchanged:: 3.1.4
        Handle chunks that split a``
`` sequence.
    N)Ú	max_partsr   z
int | NoneÚNone)ÚboundaryÚmax_form_memory_sizer+   Úreturnc                C  s|   t ƒ | _d| _|| _|| _tj| _|| _t	 
dtt	 |¡ttf t	j¡| _t	 
dtt	 |¡ttf t	j¡| _d| _d| _d S )NFs%   %s?--%s(--[^\S\n\r]*%s?|[^\S\n\r]*%s)s$   %s--%s(--[^\S\n\r]*%s?|[^\S\n\r]*%s)r   )Ú	bytearrayÚbufferÚcompleter.   r+   r"   r#   Ústater-   ÚreÚcompileÚ
LINE_BREAKÚescapeÚ	MULTILINEÚpreamble_reÚboundary_reÚ_search_positionÚ_parts_decoded)Úselfr-   r.   r+   r   r   r   Ú__init__W   s(    ÿý	ÿýzMultipartDecoder.__init__zbytes | None)r   r/   c                 C  sJ   |d u rd| _ n6| jd ur:t| jƒt|ƒ | jkr:tƒ ‚n| j |¡ d S )NT)r2   r.   Úlenr1   r   Úextend)r=   r   r   r   r   Úreceive_data   s    ÿþzMultipartDecoder.receive_datar
   )r/   c                 C  sº  t }| jtjkr¨| j | j| j¡}|d ur„| d¡ 	d¡rDtj
| _ntj| _t| jd | ¡ … ƒ}| jd | ¡ …= t|d�}d| _n tdt| jƒt| jƒ t ƒ| _�nê| jtjk�rÂt | j| j¡}|d u�rª|  | jd | ¡ … ¡}| ¡ | ¡  d }| jd |…= d|v�rtdƒ‚t|d ƒ\}}t t| d¡¡}| d	¡}	|	d u�r`t|	||d
�}nt||d�}tj| _d| _|  jd7  _| j d u�rÀ| j| j k�rÀt!ƒ ‚ntdt| jƒt ƒ| _nÐ| jtjk�r| j"| jdd�\}}
}| jd |
…= t#||d�}|�r’tj$| _n„| jtj$k�rX| j"| jdd�\}}
}| jd |
…= |�sJ|�s’t#||d�}n:| jtj
k�r’| j%�r’t&t| jƒd�}| jd d …= tj'| _| j%�r¶t(|t)ƒ�r¶td| j› �ƒ‚|S )Né   ó   --)r   r   r   úcontent-dispositionz"Missing Content-Disposition headerr   r   )r   r   r   )r   r   T)Ústart)r   r   Fz&Invalid form-data cannot parse beyond )*Ú	NEED_DATAr3   r"   r#   r9   Úsearchr1   r;   ÚgroupÚ
startswithr'   r$   r   rE   Úendr   Úmaxr?   r-   ÚSEARCH_EXTRA_LENGTHÚBLANK_LINE_REÚ_parse_headersÚ
ValueErrorr	   ÚtÚcastr   Úgetr   r   r&   r<   r+   r   Ú_parse_datar   r%   r2   r    r(   Ú
isinstancer!   )r=   ÚeventÚmatchr   r   Zheaders_endÚdispositionÚextrar   r   Ú	del_indexr   r   r   r   Ú
next_eventŒ   sz    

ÿ


ÿ

ýþ
zMultipartDecoder.next_eventzbytes | bytearrayr   c                 C  s`   g }t  d|¡}| ¡ D ]>}| ¡ }|dkr| ¡  d¡\}}}| | ¡ | ¡ f¡ qt|ƒS )Nó    ó    ú:)ÚHEADER_CONTINUATION_REÚsubÚ
splitlinesÚstripÚdecodeÚ	partitionÚappendr   )r=   r   r   Úliner   Ú_Úvaluer   r   r   rN   á   s    zMultipartDecoder._parse_headersr   ztuple[bytes, int, bool])r   rE   r/   c                C  sà   |r&t  |¡}t tjt |¡ ¡ }nd}| j d| j	 ¡dkr`|  
||d … ¡|  }}d}nj| j |¡}|d ur¨| d¡ d¡rŽtj| _ntj| _| ¡ }| ¡ }n|  
||d … ¡|  }}|d u }t|||… ƒ||fS )Nr   rC   éÿÿÿÿTrB   )ÚLINE_BREAK_RErV   rP   rQ   ÚMatchr   rJ   r1   Úfindr-   Ú_last_partial_boundary_indexr:   rG   rH   rI   r"   r'   r3   r$   rE   )r=   r   rE   rV   Z
data_startZdata_endrY   r   r   r   r   rS   î   s&    
ÿ

ÿzMultipartDecoder._parse_dataÚintc                 C  s”   t |ƒt d| j ƒ }z| d¡}W n ty>   t |ƒ}Y n0 ||k rPt |ƒ}z| d¡}W n tyx   t |ƒ}Y n0 ||k rŠt |ƒ}t||ƒS )Nó   
--ó   
ó   )r?   r-   ÚrindexrO   Úmin)r=   r   Zcomplete_boundary_indexZlast_nlÚlast_crr   r   r   rl     s    z-MultipartDecoder._last_partial_boundary_index)N)
r   r   r   Ú__doc__r>   rA   rZ   rN   rS   rl   r   r   r   r   r*   M   s    ýû(U!r*   c                   @  s,   e Zd Zdddœdd„Zdddœdd	„Zd
S )ÚMultipartEncoderr   r,   )r-   r/   c                 C  s   || _ tj| _d S )N)r-   r"   r#   r3   )r=   r-   r   r   r   r>   (  s    zMultipartEncoder.__init__r
   )rU   r/   c                 C  sz  t |tƒr$| jtjkr$tj| _|jS t |ttfƒrÔ| jtjtjtj	hv rÔd| j
 d }|d|j ¡  7 }t |tƒr„|d|j ¡  7 }|d7 }t t|¡jD ],\}}| ¡ dkrš||› d|› d� ¡ 7 }qštj| _|S t |tƒ�r| jtjk�rtj	| _t|jƒdk�rd|j S |jS n^t |tƒ�r8| jtj	k�r8|jS t |tƒ�r`tj| _d| j
 d	 |j S td
|› d| j› �ƒ‚d S )Nrn   s   
s)   Content-Disposition: form-data; name="%s"s   ; filename="%s"rD   z: z
r   s   --
zCannot generate z in state: )rT   r   r3   r"   r#   r$   r   r   r   r%   r-   r   Úencoder   rP   rQ   r   Úlowerr&   r   r?   r    r(   rO   )r=   rU   r   r   rg   r   r   r   Ú
send_event,  s:    ý

zMultipartEncoder.send_eventN)r   r   r   r>   rx   r   r   r   r   ru   '  s   ru   )"Ú
__future__r   r4   ÚtypingrP   Údataclassesr   Úenumr   r   Zdatastructuresr   Ú
exceptionsr   Úhttpr	   r
   r   r   r   r   r    r!   rF   r"   r6   r5   r8   rM   ri   r^   rL   r*   ru   r   r   r   r   Ú<module>   s<    [