
    2Bf/"                        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      Z ed       G d de             Z ed       G d de             Z ed       G d de             Z ed       G d de             Z ed       G d de             Z G d de      Z e       Z G d d e      Zd!Z e j<                  d"e j>                        Z  e j<                  ee j>                        Z! e j<                  d#ez  e j>                        Z" G d$ d%      Z# G d& d'      Z$y)(    N)	dataclass)auto)Enum)cast)List)Optional)Tuple   )	_to_bytes)_to_str)Headers)RequestEntityTooLarge)parse_options_headerc                       e Zd Zy)EventN__name__
__module____qualname__     Y/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/werkzeug/sansio/multipart.pyr   r          r   r   T)frozenc                       e Zd ZU eed<   y)PreambledataNr   r   r   bytes__annotations__r   r   r   r   r          
Kr   r   c                   "    e Zd ZU eed<   eed<   y)FieldnameheadersNr   r   r   strr    r   r   r   r   r#   r#      s    
Ir   r#   c                   ,    e Zd ZU eed<   eed<   eed<   y)Filer$   filenamer%   Nr&   r   r   r   r)   r)       s    
IMr   r)   c                   "    e Zd ZU eed<   eed<   y)Datar   	more_dataN)r   r   r   r   r    boolr   r   r   r,   r,   '   s    
KOr   r,   c                       e Zd ZU eed<   y)Epiloguer   Nr   r   r   r   r0   r0   -   r!   r   r0   c                       e Zd Zy)NeedDataNr   r   r   r   r2   r2   2   r   r   r2   c                   R    e Zd Z e       Z e       Z e       Z e       Z e       Zy)StateN)	r   r   r   r   PREAMBLEPARTDATAEPILOGUECOMPLETEr   r   r   r4   r4   9   s%    vH6D6DvHvHr   r4   s
   (?:
|
|)s   (?:

||

)s   %s[ 	]c                   l    e Zd ZdZ	 ddedee   ddfdZdefdZdee   ddfd	Z	de
fd
ZdedefdZy)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boundarymax_form_memory_sizereturnc                    t               | _        d| _        || _        t        j
                  | _        || _        t        j                  dt        t        j                  |      t        t        fz  t        j                        | _        t        j                  dt        t        j                  |      t        t        fz  t        j                        | _        y )NFs%   %s?--%s(--[^\S\n\r]*%s?|[^\S\n\r]*%s)s$   %s--%s(--[^\S\n\r]*%s?|[^\S\n\r]*%s))	bytearraybuffercompleter=   r4   r5   stater<   recompile
LINE_BREAKescape	MULTILINEpreamble_reboundary_re)selfr<   r=   s      r   __init__zMultipartDecoder.__init__R   s    
  k$8!^^
  ::5299X.
JGHLL
 ::4299X.
JGHLL
r   c                    	 | j                   j                  d      }	 | j                   j                  d      }t	        ||      S # t        $ r t        | j                         }Y Hw xY w# t        $ r t        | j                         }Y Pw xY w)N   
   )rA   rindex
ValueErrorlenmin)rK   last_nllast_crs      r   last_newlinezMultipartDecoder.last_newlineu   s    	'kk((/G	'kk((/G 7G$$  	'$++&G	'  	'$++&G	's"   A A) A&%A&)B
	B
r   c                     |d| _         y | j                  8t        | j                        t        |      z   | j                  kD  r
t	               | j                  j                  |       y )NT)rB   r=   rR   rA   r   extend)rK   r   s     r   receive_datazMultipartDecoder.receive_data   sU    < DM%%1DKK 3t9,t/H/HH'))KKt$r   c                    t         }| j                  t        j                  k(  r| j                  j                  | j                        }|U|j                  d      j                  d      rt        j                  | _        nt        j                  | _        t        | j                  d |j                                }| j                  d |j                         = t        |      }n| j                  t        j                  k(  rt        j                  | j                        }|z| j!                  | j                  d |j                                }| j                  d |j                         = d|vrt#        d      t%        |d         \  }}t'        t(        |j+                  d            }|j+                  d      }|t-        |||      }nt/        ||	      }t        j0                  | _        n| j                  t        j0                  k(  r"| j                  j3                  d| j4                  z         d
k(  r| j7                         x}	}
d}n| j8                  j                  | j                        }|l|j                  d      j                  d      rt        j                  | _        nt        j                  | _        |j                         }	|j                         }
n| j7                         x}	}
|d u }t        | j                  d |	       }| j                  d |
= |s|szt;        ||      }nl| j                  t        j                  k(  rO| j<                  rCt?        t        | j                              }| j                  d d = t        j@                  | _        | j<                  r(tC        |tD              rt#        d| j                         |S )N   s   --)r   content-dispositionz"Missing Content-Disposition headerr$   r*   )r*   r%   r$   )r%   r$   T)r   r-   z&Invalid form-data cannot parse beyond )#	NEED_DATArC   r4   r5   rI   searchrA   group
startswithr8   r6   r   startendr   BLANK_LINE_RE_parse_headersrQ   r   r   r'   getr)   r#   r7   findr<   rV   rJ   r,   rB   r0   r9   
isinstancer2   )rK   eventmatchr   r%   dispositionextrar$   r*   data_length	del_indexr-   s               r   
next_eventzMultipartDecoder.next_event   s    ::'$$++DKK8E ;;q>,,U3!&DJ!&DJT[[5;;=9:KK%))+. d+ZZ5::%!((5E --dkk/EKKM.JKKK%))+.(7$%IJJ%912&"U C6!23 99Z0' !) '!E " '!E #ZZ
ZZ5::%{{ 56"<
 +/*;*;*==i 	((//<${{1~007%*^^
%*ZZ
"'++-K %		I.2.?.?.AAK)!TM	\k23DJYJ'9$)<ZZ5>>)dmm%"45EADJ==Zx8Edjj\RSSr   c                 P   g }t         j                  d|      }|j                         D ]q  }|j                         dk7  st	        |      j                         j                  dd      \  }}|j                  |j                         |j                         f       s t        |      S )N    r   :r[   )HEADER_CONTINUATION_REsub
splitlinesstripr   splitappendr   )rK   r   r%   liner$   values         r   re   zMultipartDecoder._parse_headers   s    )+%))$5OO% 	>Dzz|s"%dm11399#qAe

ekkm<=	> wr   N)r   r   r   __doc__r   r   intrL   rV   rY   r   ro   r   re   r   r   r   r;   r;   K   sw     /3!
!
 'sm!
 
	!
F
%c 
%	%% 	%T 	%KE KZ	 5 	 W 	 r   r;   c                   ,    e Zd ZdeddfdZdedefdZy)MultipartEncoderr<   r>   Nc                 <    || _         t        j                  | _        y r{   )r<   r4   r5   rC   )rK   r<   s     r   rL   zMultipartEncoder.__init__   s     ^^
r   ri   c                    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 rt        j                  | _        d| j                  z   dz   }|dt        |j                        z  z  }t        |t              r|dt        |j                        z  z  }|dz  }t        t        |      j                  D ]-  \  }}|j!                         dk7  s|t        | d| d      z  }/ |dz  }|S t        |t"              r)| j                  t        j                  k(  r|j                  S t        |t$              r4t        j&                  | _        d| j                  z   dz   |j                  z   S t)        d	| d
| j                         )Ns   
--s   
s)   Content-Disposition: form-data; name="%s"s   ; filename="%s"r\   z: z
s   --
zCannot generate z in state: )rh   r   rC   r4   r5   r6   r   r#   r)   r7   r<   r   r$   r*   r   r%   lowerr,   r0   r9   rQ   )rK   ri   r   r$   rz   s        r   
send_eventzMultipartEncoder.send_event   s   eX&4::+GDJ::t}-$**NNJJJJA
 3

 DJt}},w6D@9UZZCXXXD%&*Yu~~-FFFGOD#E5199 >e::<#88Ibt&<==D> GODKt$uzz)A::x(DJt}},y85::EE/wk$**NOOr   )r   r   r   r   rL   r   r   r   r   r   r   r      s+    $ $4 $P P% Pr   r   )%rD   dataclassesr   enumr   r   typingr   r   r   r	   	_internalr   r   datastructuresr   
exceptionsr   httpr   r   r   r#   r)   r,   r0   r2   r^   r4   rF   rE   rH   rd   LINE_BREAK_RErs   r;   r   r   r   r   <module>r      sb   	 !       !  $ . '	 	 $u   $E  
 $5   $5  
 $u  	u 	 J	D  


4bllC

:r||4 $J$;R\\J W  W tP Pr   