o
    dG'                     @   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                   @      e Zd ZdS )EventN__name__
__module____qualname__ r   r   ^/var/www/html/visualizacion-main/env/lib/python3.10/site-packages/werkzeug/sansio/multipart.pyr          r   T)frozenc                   @      e Zd ZU eed< dS )PreambledataNr   r   r   bytes__annotations__r   r   r   r   r         
 r   c                   @      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!         
 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                   @   r    )Datar   	more_dataN)r   r   r   r   r   boolr   r   r   r   r)   '   r&   r)   c                   @   r   )Epiloguer   Nr   r   r   r   r   r,   -   r   r,   c                   @   r   )NeedDataNr   r   r   r   r   r-   2   r   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                
   @   s   e Zd ZdZ	ddddedee dee ddfdd	Zdefd
dZdee ddfddZ	de
fddZdedefddZdS )MultipartDecoderzDecodes 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)	max_partsboundarymax_form_memory_sizer6   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completer8   r6   r.   r/   stater7   recompile
LINE_BREAKescape	MULTILINEpreamble_reboundary_re_search_position_parts_decoded)selfr7   r8   r6   r   r   r   __init__V   s(   	
zMultipartDecoder.__init__c                 C   sf   z| j d}W n ty   t| j }Y nw z| j d}W n ty-   t| j }Y nw t||S )N   
   )r;   rindex
ValueErrorlenmin)rG   last_nllast_crr   r   r   last_newline~   s   
zMultipartDecoder.last_newliner   c                 C   sJ   |d u r	d| _ d S | jd urt| jt| | jkrt | j| d S )NT)r<   r8   rM   r;   r   extend)rG   r   r   r   r   receive_data   s   
zMultipartDecoder.receive_datac                 C   s  t }| jtjkrU| j| j| j}|d urC|d	dr"t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rt| j| j}|d ur| | jd |  }| jd | = d|vrtdt|d \}}tt|d}|d}|d urt|||d	}nt||d
}tj| _d| _|  jd7  _| jd ur| j| jkrt  ntdt| jt | _n| jtjkr;| j!d| j dkr| "  }	}
d}n1| j#| j}|d ur|d	drtj
| _ntj| _| }	| }
n| "  }	}
|d u }t| jd |	 }| jd |
= |s4|s:t$||d}n| jtj
krX| j%rXt&t| jd}| jd d = tj'| _| j%rjt(|t)rjt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_DATAr=   r.   r/   rC   searchr;   rE   group
startswithr2   r0   r   startendr   maxrM   r7   SEARCH_EXTRA_LENGTHBLANK_LINE_RE_parse_headersrL   r   r   r%   getr'   r!   r1   rF   r6   r   findrQ   rD   r)   r<   r,   r3   
isinstancer-   )rG   eventmatchr   r#   dispositionextrar"   r(   data_length	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        :rT   )HEADER_CONTINUATION_REsub
splitlinesstripr   splitappendr   )rG   r   r#   liner"   valuer   r   r   r`      s   zMultipartDecoder._parse_headersN)r   r   r   __doc__r   r   intrH   rQ   rS   r   rj   r   r`   r   r   r   r   r5   O   s$    	
(_r5   c                   @   s0   e Zd ZdeddfddZdedefddZdS )	MultipartEncoderr7   r9   Nc                 C   s   || _ tj| _d S rv   )r7   r.   r/   r=   )rG   r7   r   r   r   rH     s   zMultipartEncoder.__init__rd   c                 C   s2  t |tr| jtjkrtj| _|jS t |ttfrm| jtjtjtj	hv rmtj	| _d| j
 d }|dt|j 7 }t |trF|dt|j 7 }|d7 }tt|jD ]\}}| dkrf|t| d| d7 }qP|d7 }|S t |tr{| jtj	kr{|jS t |trtj| _d| j
 d |j S td	| d
| j )Ns   
--s   
s)   Content-Disposition: form-data; name="%s"s   ; filename="%s"rU   z: z
s   --
zCannot generate z in state: )rc   r   r=   r.   r/   r0   r   r!   r'   r1   r7   r
   r"   r(   r   r#   lowerr)   r,   r3   rL   )rG   rd   r   r"   ru   r   r   r   
send_event  s4   

zMultipartEncoder.send_event)r   r   r   r   rH   r   r{   r   r   r   r   ry      s    ry   )&r>   dataclassesr   enumr   r   typingr   r   r   r   	_internalr
   r   datastructuresr   
exceptionsr   httpr   r   r   r!   r'   r)   r,   r-   rW   r.   r@   r?   rB   r_   LINE_BREAK_RErn   r^   r5   ry   r   r   r   r   <module>   sF    
 2