U
    ÌZj&  ã                   @   s¤  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	 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 ))é    N)Ú	dataclass)Úauto)ÚEnum)Úcast)ÚList)ÚOptional)ÚTupleé   )Ú	_to_bytes)Ú_to_str)ÚHeaders)ÚRequestEntityTooLarge)Úparse_options_headerc                   @   s   e Zd ZdS )ÚEventN©Ú__name__Ú
__module__Ú__qualname__© r   r   ú\/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/werkzeug/sansio/multipart.pyr      s   r   T)Úfrozenc                   @   s   e Zd ZU eed< dS )ÚPreambleÚdataN©r   r   r   ÚbytesÚ__annotations__r   r   r   r   r      s   
r   c                   @   s   e Zd ZU eed< eed< dS )ÚFieldÚnameÚheadersN©r   r   r   Ústrr   r   r   r   r   r   r      s   
r   c                   @   s&   e Zd ZU eed< eed< eed< dS )ÚFiler   Úfilenamer   Nr   r   r   r   r   r!       s   
r!   c                   @   s   e Zd ZU eed< eed< dS )ÚDatar   Ú	more_dataN)r   r   r   r   r   Úboolr   r   r   r   r#   '   s   
r#   c                   @   s   e Zd ZU eed< dS )ÚEpiloguer   Nr   r   r   r   r   r&   -   s   
r&   c                   @   s   e Zd ZdS )ÚNeedDataNr   r   r   r   r   r'   2   s   r'   c                   @   s*   e Zd Zeƒ Zeƒ Zeƒ Zeƒ Zeƒ ZdS )ÚStateN)	r   r   r   r   ÚPREAMBLEÚPARTÚDATAÚEPILOGUEÚCOMPLETEr   r   r   r   r(   9   s
   r(   s
   (?:
|
|)s   (?:

||

)s   %s[ 	]é   c                   @   sh   e Zd ZdZdeee ddœdd„Zedœdd„Zee dd	œd
d„Z	e
dœdd„Zeed	œdd„ZdS )ÚMultipartDecoderz³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.
    N)ÚboundaryÚmax_form_memory_sizeÚreturnc                 C   sp   t ƒ | _d| _|| _tj| _|| _t 	dt
t |¡t
t
f tj¡| _t 	dt
t |¡t
t
f tj¡| _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Úcompleter1   r(   r)   Ústater0   ÚreÚcompileÚ
LINE_BREAKÚescapeÚ	MULTILINEÚpreamble_reÚboundary_reÚ_search_position)Úselfr0   r1   r   r   r   Ú__init__V   s$    ÿý	ÿýzMultipartDecoder.__init__)r2   c                 C   sj   z| j  d¡}W n tk
r.   t| j ƒ}Y nX z| j  d¡}W n tk
r^   t| j ƒ}Y nX t||ƒS )Nó   
ó   )r4   ÚrindexÚ
ValueErrorÚlenÚmin)r?   Zlast_nlZlast_crr   r   r   Úlast_newlinez   s    zMultipartDecoder.last_newline)r   r2   c                 C   sJ   |d krd| _ n6| jd k	r:t| jƒt|ƒ | jkr:tƒ ‚n| j |¡ d S )NT)r5   r1   rE   r4   r   Úextend)r?   r   r   r   r   Úreceive_data†   s    ÿþzMultipartDecoder.receive_datac                 C   s¸  t }| jtjkr¨| j | j| j¡}|d k	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 k	�rj|  | jd | ¡ … ¡}| jd | ¡ …= d|k�r
tdƒ‚t|d ƒ\}}tt| d¡ƒ}| d¡}|d k	�rNt|||d	�}nt||d
�}tj| _d| _ntdt| jƒt ƒ| _�n| jtjk�rV| j d| j ¡dk�r¼|  ¡  }	}
d}nb| j  | j¡}|d k	�r
| d¡ 	d¡�rðtj
| _ntj| _| ¡ }	| ¡ }
n|  ¡  }	}
|d k}t| jd |	… ƒ}| jd |
…= |�sH|�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é   s   --)r   r   úcontent-dispositionz"Missing Content-Disposition headerr   r"   )r"   r   r   )r   r   éÿÿÿÿT)r   r$   z&Invalid form-data cannot parse beyond )'Ú	NEED_DATAr6   r(   r)   r<   Úsearchr4   r>   ÚgroupÚ
startswithr,   r*   r   ÚstartÚendr   ÚmaxrE   r0   ÚSEARCH_EXTRA_LENGTHÚBLANK_LINE_REÚ_parse_headersrD   r   r   r    Úgetr!   r   r+   ÚfindrG   r=   r#   r5   r&   r-   Ú
isinstancer'   )r?   ÚeventÚmatchr   r   ZdispositionÚextrar   r"   Zdata_lengthZ	del_indexr$   r   r   r   Ú
next_event‘   s€    

 ÿ


ÿ

ýþ


zMultipartDecoder.next_eventc                 C   s`   g }t  d|¡}| ¡ D ]>}| ¡ dkrt|ƒ ¡  dd¡\}}| | ¡ | ¡ f¡ qt|ƒS )Nó    ó    ú:rJ   )ÚHEADER_CONTINUATION_REÚsubÚ
splitlinesÚstripr   ÚsplitÚappendr   )r?   r   r   Úliner   Úvaluer   r   r   rV   ì   s    zMultipartDecoder._parse_headers)N)r   r   r   Ú__doc__r   r   Úintr@   rG   rI   r   r]   r   rV   r   r   r   r   r/   O   s   	 ýü$[r/   c                   @   s,   e Zd Zeddœdd„Zeedœdd„ZdS )ÚMultipartEncoderN)r0   r2   c                 C   s   || _ tj| _d S )N)r0   r(   r)   r6   )r?   r0   r   r   r   r@   ù   s    zMultipartEncoder.__init__)rZ   r2   c                 C   s8  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krÚtj	| _d| j
 d }|dt|jƒ 7 }t |tƒrŒ|dt|jƒ 7 }|d7 }tt|ƒjD ],\}}| ¡ dkr |t|› d|› d�ƒ7 }q |d7 }|S t |tƒrö| jtj	krö|jS t |tƒ�rtj| _d| j
 d |j S td	|› d
| j› �ƒ‚d S )Ns   
--s   
s)   Content-Disposition: form-data; name="%s"s   ; filename="%s"rK   z: z
s   --
zCannot generate z in state: )rY   r   r6   r(   r)   r*   r   r   r!   r+   r0   r
   r   r"   r   r   Úlowerr#   r&   r-   rD   )r?   rZ   r   r   rh   r   r   r   Ú
send_eventý   s2    ý
zMultipartEncoder.send_event)r   r   r   r   r@   r   rm   r   r   r   r   rk   ø   s   rk   )&r7   Údataclassesr   Úenumr   r   Útypingr   r   r   r   Ú	_internalr
   r   Zdatastructuresr   Ú
exceptionsr   Úhttpr   r   r   r   r!   r#   r&   r'   rM   r(   r9   r8   r;   rU   ZLINE_BREAK_REra   rT   r/   rk   r   r   r   r   Ú<module>   sD   
 *