
    'gu-                       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      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j4                  dej6                        Z ej4                  eej6                        Z ej4                  dez  ej6                        ZdZ G d  d!      Z  G d" d#      Z!y)$    )annotationsN)	dataclass)auto)Enum   )Headers)RequestEntityTooLarge)parse_options_headerc                      e Zd Zy)EventN__name__
__module____qualname__     Q/var/www/html/knws/venv/lib/python3.12/site-packages/werkzeug/sansio/multipart.pyr   r          r   r   T)frozenc                      e Zd ZU ded<   y)PreamblebytesdataNr   r   r   __annotations__r   r   r   r   r          
Kr   r   c                  "    e Zd ZU ded<   ded<   y)Fieldstrnamer   headersNr   r   r   r   r   r      s    
Ir   r   c                  ,    e Zd ZU ded<   ded<   ded<   y)Filer   r    filenamer   r!   Nr   r   r   r   r#   r#      s    
IMr   r#   c                  "    e Zd ZU ded<   ded<   y)Datar   r   bool	more_dataNr   r   r   r   r&   r&   $   s    
KOr   r&   c                      e Zd ZU ded<   y)Epiloguer   r   Nr   r   r   r   r*   r*   *   r   r   r*   c                      e Zd Zy)NeedDataNr   r   r   r   r,   r,   /   r   r   r,   c                  `    e Zd Z e       Z e       Z e       Z e       Z e       Z e       Z	y)StateN)
r   r   r   r   PREAMBLEPARTDATA
DATA_STARTEPILOGUECOMPLETEr   r   r   r.   r.   6   s,    vH6D6DJvHvHr   r.   s
   (?:
|
|)s   (?:

||

)s   %s[ 	]   c                  X    e Zd ZdZ	 d
dd	 	 	 	 	 	 	 ddZddZddZddZddZd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)	max_partsc                  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                        | _        d| _        d| _        y )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completemax_form_memory_sizer8   r.   r/   stateboundaryrecompile
LINE_BREAKescape	MULTILINEpreamble_reboundary_re_search_position_parts_decoded)selfr?   r=   r8   s       r   __init__zMultipartDecoder.__init__T   s      k$8!"^^
  ::5299X.
JGHLL
 ::4299X.
JGHLL

 !"r   c                    	 |j                  d      }	 |j                  d      }t        ||      S # t        $ r t        |      }Y 4w xY w# t        $ r t        |      }Y <w xY w)N   
   )rindex
ValueErrorlenmin)rI   r   last_nllast_crs       r   last_newlinezMultipartDecoder.last_newline|   sj    	 kk%(G	 kk%(G 7G$$  	 $iG	   	 $iG	 s    1 A AAA"!A"c                    |d| _         y | j                  8t        | j                        t        |      z   | j                  kD  r
t	               | j                  j                  |       y )NT)r<   r=   rP   r;   r	   extend)rI   r   s     r   receive_datazMultipartDecoder.receive_data   sW    < DM%%1DKK 3t9,t/H/HH ())KKt$r   c                   t         }| j                  t        j                  k(  r| j                  j                  | j                  | j                        }||j                  d      j                  d      rt        j                  | _        nt        j                  | _        t        | j                  d |j                                }| j                  d |j                         = t        |      }d| _        n1t!        dt#        | j                        t#        | j$                        z
  t&        z
        | _        n| j                  t        j                  k(  rt(        j                  | j                  | j                        }|9| j+                  | j                  d |j                                }|j                         |j                         z   dz  }| j                  d |= d|vrt-        d      t/        |d         \  }}t1        j2                  t4        |j7                  d            }|j7                  d	      }	|	t9        |	||
      }nt;        ||      }t        j<                  | _        d| _        | xj>                  dz  c_        | j@                  | j>                  | j@                  kD  rttC               t!        dt#        | j                        t&        z
        | _        n=| j                  t        j<                  k(  rU| jE                  | j                  d      \  }}
}| j                  d |
= tG        ||      }|rt        jH                  | _        n| j                  t        jH                  k(  rB| jE                  | j                  d      \  }}
}| j                  d |
= |s|sztG        ||      }nl| j                  t        j                  k(  rO| jJ                  rCtM        t        | j                              }| j                  d d = t        jN                  | _        | jJ                  r(tQ        |tR              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_DATAr>   r.   r/   rE   searchr;   rG   group
startswithr3   r0   r   r\   endr   maxrP   r?   SEARCH_EXTRA_LENGTHBLANK_LINE_RE_parse_headersrO   r
   tcastr   getr#   r   r2   rH   r8   r	   _parse_datar&   r1   r<   r*   r4   
isinstancer,   )rI   eventmatchr   r!   headers_enddispositionextrar    r$   	del_indexr(   s               r   
next_eventzMultipartDecoder.next_event   se    ::'$$++DKK9N9NOE ;;q>,,U3!&DJ!&DJT[[5;;=9:KK%))+. d+()%
 ),s4;;'#dmm*<<?RR)% ZZ5::%!((d6K6KLE --dkk/EKKM.JK  %{{}uyy{:q@KK-(7$%IJJ%912&"U vvc599V#45 99Z0' !) '!E " '!E #--
()%##q(#>>-$2E2E2V/11
 ),As4;;/?BU/U(V%ZZ5+++)-)9)9$++T)9)R&D)YJYJ'di8E"ZZ
ZZ5::%)-)9)9$++U)9)S&D)YJYJ'9$)<ZZ5>>)dmm%"45EADJ==Zx8Edjj\RSSr   c                B   g }t         j                  d|      }|j                         D ]j  }|j                         }|dk7  s|j	                         j                  d      \  }}}|j                  |j                         |j                         f       l t        |      S )N    r   :)HEADER_CONTINUATION_REsub
splitlinesstripdecode	partitionappendr   )rI   r   r!   liner    _values          r   re   zMultipartDecoder._parse_headers   s    )+%))$5OO% 	>D::<Ds{!%!8!8!=a

ekkm<=	> wr   c                  |rOt         j                  |      }t        j                  t        j                  t
           |      j                         }nd}d| j                  z   }| j                  j                  |      dk(  rF| j                  ||d        |z   x}}t        |      |z
  t        d|z         kD  rt        |      x}}d}n| j                  j                  |      }|l|j                  d      j                  d      rt         j"                  | _        nt         j&                  | _        |j)                         }|j                         }n| j                  ||d        |z   x}}|d u }t        |||       ||fS )Nr   rZ   rL   TrY   )LINE_BREAK_RErl   rf   rg   Matchr   ra   r?   r;   findrT   rP   rF   r^   r_   r`   r.   r3   r>   r0   r\   )	rI   r   r\   rl   
data_startr?   data_endrp   r(   s	            r   ri   zMultipartDecoder._parse_data   sT   !''-E6::<JJ4==(;;H%+
 $(#4#4T*+5F#G*#TTHy
 D	H$EH,<(=='*4y09I$$++D1E ;;q>,,U3!&DJ!&DJ ;;=!IIK	'+'8'8jk9J'Kj'XX9IT*X./IEEr   N)r?   r   r=   
int | Noner8   r   returnNone)r   r   r   int)r   zbytes | Noner   r   )r   r   )r   r   r   r   )r   r   r\   r'   r   ztuple[bytes, int, bool])
r   r   r   __doc__rJ   rT   rW   rq   re   ri   r   r   r   r7   r7   M   s^     ,0& 
 !%& &  )& 
 &  
& P
%%Tl $Fr   r7   c                      e Zd ZddZddZy)MultipartEncoderc                <    || _         t        j                  | _        y r   )r?   r.   r/   r>   )rI   r?   s     r   rJ   zMultipartEncoder.__init__   s     ^^
r   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 rd| j                  z   dz   }|d|j                  j                         z  z  }t        |t              r |d|j                  j                         z  z  }|dz  }t        j                  t        |      j                   D ]2  \  }}|j#                         dk7  s|| d| dj                         z  }4 t        j$                  | _        |S t        |t&              re| j                  t        j$                  k(  rHt        j                  | _        t)        |j                        dkD  rd|j                  z   S |j                  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
r   s   --
zCannot generate z in state: )rj   r   r>   r.   r/   r0   r   r   r#   r1   r?   r    encoder$   rf   rg   r!   lowerr2   r&   rP   r*   r4   rO   )rI   rk   r   r    r~   s        r   
send_eventzMultipartEncoder.send_event$  s   eX&4::+GDJ::t}-$**NNJJJJA
 3

 t}},w6D@5::CTCTCVVVD%&*U^^-B-B-DDDGOD vveU3;; <e::<#88tfBugT299;;D< ))DJKt$u7G7G)GDJ5::"++zz!t$uzz)A::x(DJt}},y85::EE/wk$**NOOr   N)r?   r   r   r   )rk   r   r   r   )r   r   r   rJ   r   r   r   r   r   r     s    $Pr   r   )"
__future__r   r@   typingrf   dataclassesr   enumr   r   datastructuresr   
exceptionsr	   httpr
   r   r   r   r#   r&   r*   r,   r]   r.   rB   rA   rD   rd   r   ru   rc   r7   r   r   r   r   <module>r      s`   " 	  !   $ . '	 	 $u   $E  
 $5   $5  
 $u  	u 	 J	D  


4bllC

:r||4 $J$;R\\J   OF OFd$P $Pr   