o
    'hu-                     @  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                   @     e Zd ZdS )EventN__name__
__module____qualname__ r   r   U/var/www/html/olx_land/venv/lib/python3.10/site-packages/werkzeug/sansio/multipart.pyr          r   T)frozenc                   @     e Zd ZU ded< dS )PreamblebytesdataNr   r   r   __annotations__r   r   r   r   r         
 r   c                   @     e Zd ZU ded< ded< dS )Fieldstrnamer   headersNr   r   r   r   r   r         
 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                   @  r   )Datar   r   bool	more_dataNr   r   r   r   r   r#   $   r    r#   c                   @  r   )Epiloguer   r   Nr   r   r   r   r   r&   *   r   r&   c                   @  r
   )NeedDataNr   r   r   r   r   r'   /   r   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                   @  sV   e Zd ZdZ	dddd ddZd!ddZd"ddZd#ddZd$ddZd%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boundaryr   max_form_memory_size
int | Noner1   returnNonec                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completer3   r1   r(   r)   stater2   recompile
LINE_BREAKescape	MULTILINEpreamble_reboundary_re_search_position_parts_decoded)selfr2   r3   r1   r   r   r   __init__T   s(   	
zMultipartDecoder.__init__r   intc                 C  s^   z| d}W n ty   t|}Y nw z| d}W n ty)   t|}Y nw t||S )N   
   )rindex
ValueErrorlenmin)rD   r   last_nllast_crr   r   r   last_newline|   s   
zMultipartDecoder.last_newlinebytes | Nonec                 C  sJ   |d u r	d| _ d S | jd urt| jt| | jkrt | j| d S )NT)r9   r3   rK   r8   r   extend)rD   r   r   r   r   receive_data   s   

zMultipartDecoder.receive_datar   c                 C  s  t }| jtjkrS| j| j| j}|d urB|d	dr"tj
| _ntj| _t| jd |  }| jd | = t|d}d| _ntdt| jt| j t | _n| jtjkrt| j| j}|d ur| | jd |  }| |  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! nrtdt| jt | _nf| jtjkr| j"| jdd\}}
}| jd |
= t#||d}|rtj$| _nB| jtj$kr#| j"| jdd\}}
}| jd |
= |s|s"t#||d}n| jtj
kr@| j%r@t&t| jd}| jd d = tj'| _| j%rRt(|t)rRt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_DATAr:   r(   r)   r@   searchr8   rB   group
startswithr-   r*   r   rV   endr   maxrK   r2   SEARCH_EXTRA_LENGTHBLANK_LINE_RE_parse_headersrJ   r	   tcastr   getr!   r   r,   rC   r1   r   _parse_datar#   r+   r9   r&   r.   
isinstancer'   )rD   eventmatchr   r   headers_enddispositionextrar   r"   	del_indexr%   r   r   r   
next_event   s   


zMultipartDecoder.next_eventr   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   )rD   r   r   liner   _valuer   r   r   r_      s   zMultipartDecoder._parse_headersrV   r$   tuple[bytes, int, bool]c          	      C  s  |rt |}ttjt | }nd}d| j }| j	|dkrD| 
||d  |  }}t|| td| krAt| }}d}n5| j|}|d urh|ddr[tj| _ntj| _| }| }n| 
||d  |  }}|d u }t||| ||fS )Nr   rT   rG   TrS   )LINE_BREAK_RErf   r`   ra   Matchr   r[   r2   r8   findrO   rK   rA   rX   rY   rZ   r(   r-   r:   r*   rV   )	rD   r   rV   rf   
data_startr2   data_endrj   r%   r   r   r   rc      s(   



zMultipartDecoder._parse_dataN)r2   r   r3   r4   r1   r4   r5   r6   )r   r   r5   rF   )r   rP   r5   r6   )r5   r   )r   r   r5   r   )r   r   rV   r$   r5   ry   )
r   r   r   __doc__rE   rO   rR   rk   r_   rc   r   r   r   r   r0   M   s    	
(


Vr0   c                   @  s    e Zd ZdddZdd	d
ZdS )MultipartEncoderr2   r   r5   r6   c                 C  s   || _ tj| _d S r   )r2   r(   r)   r:   )rD   r2   r   r   r   rE      s   zMultipartEncoder.__init__re   r   c                 C  sh  t |tr| jtjkrtj| _|jS t |ttfrj| jtjtjtj	hv rjd| j
 d }|d|j  7 }t |trB|d|j  7 }|d7 }tt|jD ]\}}| dkrc|| d| d 7 }qMtj| _|S t |tr| jtjkrtj	| _t|jdkrd|j S |j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
r   s   --
zCannot generate z in state: )rd   r   r:   r(   r)   r*   r   r   r!   r+   r2   r   encoder"   r`   ra   r   lowerr,   r#   rK   r&   r.   rJ   )rD   re   r   r   rx   r   r   r   
send_event$  s<   


zMultipartEncoder.send_eventN)r2   r   r5   r6   )re   r   r5   r   )r   r   r   rE   r   r   r   r   r   r     s    
r   )"
__future__r   r;   typingr`   dataclassesr   enumr   r   datastructuresr   
exceptionsr   httpr	   r   r   r   r!   r#   r&   r'   rW   r(   r=   r<   r?   r^   r{   ro   r]   r0   r   r   r   r   r   <module>   s>     S