
    OjV0                       d dl mZ d dlmZ d dlmZ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mZmZ erd d	lZd d
lmZ d dlmZmZmZ n	 	 d d	lZd d
lmZ d dlmZ  G d de      Ze G d d             ZddZ  G d de!      Z" G d d      Z# G d d      Z$y	# e$ r d d	lZd d
lmZ d dlmZ Y Uw xY w# e$ r d	Zd	ZY dw xY w)    )annotations)AsyncGenerator)	dataclassfield)Enum)SpooledTemporaryFile)TYPE_CHECKING)unquote_plus)FormDataHeaders
UploadFileN)FormParserError)MultipartCallbacksQuerystringCallbacksparse_options_header)r   c                       e Zd ZdZdZdZdZdZy)FormMessage               N)__name__
__module____qualname__FIELD_START
FIELD_NAME
FIELD_DATA	FIELD_ENDEND     l/var/www/origus_pro_usr/data/www/origus.pro/core/.venv/lib/python3.12/site-packages/starlette/formparsers.pyr   r      s    KJJI
Cr"   r   c                  p    e Zd ZU dZded<   dZded<    ee      Zded	<   dZ	d
ed<    ee
      Zded<   y)MultipartPartNzbytes | Nonecontent_disposition str
field_name)default_factory	bytearraydatazUploadFile | Nonefilezlist[tuple[bytes, bytes]]item_headers)r   r   r   r&   __annotations__r)   r   r+   r,   r-   listr.   r!   r"   r#   r%   r%   '   sA    (,,JI6D)6"D
".3D.IL+Ir"   r%   c                r    	 | j                  |      S # t        t        f$ r | j                  d      cY S w xY w)Nlatin-1)decodeUnicodeDecodeErrorLookupError)srccodecs     r#   _user_safe_decoder8   0   s9    %zz%  , %zz)$$%s     66c                      e Zd ZddZy)MultiPartExceptionc                    || _         y N)messageselfr=   s     r#   __init__zMultiPartException.__init__8   s	    r"   N)r=   r(   returnNone)r   r   r   r@   r!   r"   r#   r:   r:   7   s    r"   r:   c                  ^    e Zd Zddd	 	 	 	 	 	 	 	 	 ddZddZddZddZddZdd	Zdd
Z	y)
FormParser     )
max_fieldsmax_part_sizec                   t         J d       || _        || _        || _        || _        g | _        d| _        d| _        y )NEThe `python-multipart` library must be installed to use form parsing.r   )	multipartheadersstreamrG   rH   messages_current_field_size_current_fields)r?   rL   rM   rG   rH   s        r#   r@   zFormParser.__init__=   sJ     $m&mm$$*9;#$  r"   c                l    d| _         t        j                  df}| j                  j	                  |       y )Nr   r"   )rO   r   r   rN   appendr>   s     r#   on_field_startzFormParser.on_field_startN   s,    #$ **C0W%r"   c                   | xj                   ||z
  z  c_         | j                   | j                  kD  r%t        dt        | j                  dz         d      t        j
                  ||| f}| j                  j                  |       y NzField exceeded maximum size of    KB.)rO   rH   r:   intr   r   rN   rR   r?   r,   startendr=   s        r#   on_field_namezFormParser.on_field_nameS   {      C%K/ ##d&8&88$'Fs4K]K]`dKdGeFffi%jkk))4c?;W%r"   c                   | xj                   ||z
  z  c_         | j                   | j                  kD  r%t        dt        | j                  dz         d      t        j
                  ||| f}| j                  j                  |       y rU   )rO   rH   r:   rX   r   r   rN   rR   rY   s        r#   on_field_datazFormParser.on_field_dataZ   r]   r"   c                    | xj                   dz  c_         | j                   | j                  kD  rt        d| j                   d      t        j                  df}| j
                  j                  |       y )Nr   -Too many fields. Maximum number of fields is .r"   )rP   rG   r:   r   r   rN   rR   r>   s     r#   on_field_endzFormParser.on_field_enda   se    !$//1$'TUYUdUdTeef%ghh((#.W%r"   c                ^    t         j                  df}| j                  j                  |       y )Nr"   )r   r    rN   rR   r>   s     r#   on_endzFormParser.on_endh   s"    ??C(W%r"   c                t  K   | j                   | j                  | j                  | j                  | j                  d}t        j                  |      }t               }t               }g }| j                  2 3 d {   }|r|j                  |       n|j                          t        | j                        }| j                  j                          |D ]  \  }}	|t        j                  k(  rt               }t               }.|t        j                   k(  r|j#                  |	       S|t        j$                  k(  r|j#                  |	       x|t        j&                  k(  st)        |j+                  d            }
t)        |j+                  d            }|j-                  |
|f        57 16 t/        |      S w)N)rS   r\   r_   rc   re   r2   )rS   r\   r_   rc   re   rK   QuerystringParserr+   rM   writefinalizer0   rN   clearr   r   r   extendr   r   r
   r3   rR   r   )r?   	callbacksparserr)   field_valueitemschunkrN   message_typemessage_bytesnamevalues               r#   parsezFormParser.parsel   so     #11!//!// --kk+
	 ,,Y7[
k46  ;; 	0 	0%U#!DMM*HMM!/7 0+m;#:#::!*J"++K![%;%;;%%m4![%;%;;&&}5![%:%::'
(9(9)(DED(););I)FGELL$/0	0;( s2   A2F84F,8F)9F,<C!F8AF8)F,,F8N)
rL   r   rM   AsyncGenerator[bytes, None]rG   int | floatrH   rX   rA   rB   rA   rB   r,   bytesrZ   rX   r[   rX   rA   rB   rA   r   )
r   r   r   r@   rS   r\   r_   rc   re   ru   r!   r"   r#   rD   rD   <   s]     #'(!! ,!
  ! ! 
!"&
&&&&&r"   rD   c                      e Zd ZdZ	 dZ	 dddd	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZddZ	dd	Z
dd
ZddZddZddZy)MultiPartParserrF   rE   )	max_filesrG   rH   c                   t         J d       || _        || _        || _        || _        g | _        d| _        d| _        d| _        d| _	        t               | _        d| _        g | _        g | _        g | _        || _        y )NrJ   r   r"   r'   )rK   rL   rM   r~   rG   ro   _current_filesrP   _current_partial_header_name_current_partial_header_valuer%   _current_part_charset_file_parts_to_write_file_parts_to_finish_files_to_close_on_errorrH   )r?   rL   rM   r~   rG   rH   s         r#   r@   zMultiPartParser.__init__   s     $m&mm$"$9;
 36)47**_GI!:<"KM%*r"   c                "    t               | _        y r<   )r%   r   r?   s    r#   on_part_beginzMultiPartParser.on_part_begin   s    *_r"   c                   ||| }| j                   j                  t        | j                   j                        t        |      z   | j                  kD  r%t        dt        | j                  dz         d      | j                   j                  j                  |       y | j                  j                  | j                   |f       y )NzPart exceeded maximum size of rV   rW   )
r   r-   lenr,   rH   r:   rX   rk   r   rR   )r?   r,   rZ   r[   rr   s        r#   on_part_datazMultiPartParser.on_part_data   s    U3""*4%%**+c-.@@4CUCUU(+I#dN`N`cgNgJhIiil)mnn##**=9%%,,d.@.@--PQr"   c                   | j                   j                  Z| j                  j                  | j                   j                  t        | j                   j                  | j                        f       y | j                  j                  | j                          | j                  j                  | j                   j                  | j                   j                  f       y r<   )	r   r-   ro   rR   r)   r8   r,   r   r   r   s    r#   on_part_endzMultiPartParser.on_part_end   s    ""*JJ&&11%d&8&8&=&=t}}M &&--d.@.@A JJt11<<d>P>P>U>UVWr"   c                4    | xj                   ||| z  c_         y r<   )r   r?   r,   rZ   r[   s       r#   on_header_fieldzMultiPartParser.on_header_field   s    ))T%_<)r"   c                4    | xj                   ||| z  c_         y r<   )r   r   s       r#   on_header_valuezMultiPartParser.on_header_value   s    **d5o=*r"   c                    | j                   j                         }|dk(  r| j                  | j                  _        | j                  j
                  j                  || j                  f       d| _         d| _        y )Ns   content-dispositionr"   )r   lowerr   r   r&   r.   rR   )r?   r   s     r#   on_header_endzMultiPartParser.on_header_end   sh    11779**595W5WD2''..t7Y7Y/Z[,/)-0*r"   c                   t        | j                  j                        \  }}	 t        |d   | j                        | j                  _        d|v r| xj                  dz  c_        | j                  | j                  kD  rt        d| j                   d      t        |d   | j                        }t        | j                        }| j                  j                  |       t        |d|t        | j                  j                   	      
      | j                  _        y | xj$                  dz  c_        | j$                  | j&                  kD  rt        d| j&                   d      d | j                  _        y # t        $ r t        d      w xY w)Ns   namez=The Content-Disposition header field "name" must be provided.s   filenamer   z+Too many files. Maximum number of files is rb   )max_sizer   )raw)r-   sizefilenamerL   ra   )r   r   r&   r8   r   r)   KeyErrorr:   r   r~   r   spool_max_sizer   rR   r   r   r.   r-   rP   rG   )r?   dispositionoptionsr   tempfiles        r#   on_headers_finishedz#MultiPartParser.on_headers_finished   sh   3D4F4F4Z4Z[W	f,=gg>NPTP]P],^D) '!1$""T^^3(+VW[WeWeVffg)hii()=t}}MH+T5H5HIH))00:&0!D$6$6$C$CD	'D#   A% ##doo5(+XY]YhYhXiij)kll&*D#'  	f$%dee	fs   (E7 7Fc                     y r<   r!   r   s    r#   re   zMultiPartParser.on_end   s    r"   c           	       K   t        | j                  d         \  }}|j                  dd      }t        |t              r|j                  d      }|| _        	 |d   }| j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                   d}	 t#        j$                  ||      }| j&                  2 3 d {   }|j)                  |       | j*                  D ]6  \  }}	|j,                  sJ |j,                  j)                  |	       d {    8 | j.                  D ]3  }|j,                  sJ |j,                  j1                  d       d {    5 | j*                  j3                          | j.                  j3                          # t        $ r t        d      w xY w7 7 7 W6 |j5                          nO# t6        $ rC}
| j8                  D ]  }|j;                           t        |
t<              rt        d	      |
 d }
~
ww xY wt?        | j@                        S w)
NzContent-Types   charsetzutf-8r2   s   boundaryzMissing boundary in multipart.)r   r   r   r   r   r   r   re   r   zInvalid multipart data.)!r   rL   get
isinstancerz   r3   r   r   r:   r   r   r   r   r   r   r   re   rK   MultipartParserrM   rh   r   r-   r   seekrj   ri   BaseExceptionr   closer   r   ro   )r?   _paramscharsetboundaryrl   rm   rp   partr,   excr-   s               r#   ru   zMultiPartParser.parse   s    (n)EF	6**Z1gu%nnY/G	Gk*H "// --++#33#33!//#'#;#;kk	)
		..xCF#{{ 3 3eU# #'";"; 0JD$99$9))//$///0 !66 ,D99$9))..+++, ))//1**002A  	G$%EFF	G$3 0 ,  + OO 	55 

#/()BCL	 

##s   AIF2 AI:"G" G G
!G$AG" 4G5AG" 6G7;G" 2GI
GG" G" G" !I"	H.+>H))H..IN)rL   r   rM   rv   r~   rw   rG   rw   rH   rX   rA   rB   rx   ry   r{   )r   r   r   r   rH   r@   r   r   r   r   r   r   r   re   ru   r!   r"   r#   r}   r}      s     NQM> "&"&(++ ,+
 +  + + 
+4-RX=>1+23$r"   r}   )r6   zbytes | bytearrayr7   r(   rA   r(   )%
__future__r   collections.abcr   dataclassesr   r   enumr   r   r   typingr	   urllib.parser
   starlette.datastructuresr   r   r   python_multipartrK   python_multipart.exceptionsr   python_multipart.multipartr   r   r   ModuleNotFoundErrormultipart.exceptionsmultipart.multipartr   r%   r8   	Exceptionr:   rD   r}   r!   r"   r#   <module>r      s    " * (  )   % B B(;ii$	A0CG$  J J J% 
V VrX$ X$ # 	A<@	A  $	#$s*   B B63B9 5B66B9 9	CC