
     f,                       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j        dej                  Z ej        eej                  Z ej        dez  ej                  ZdZ G d  d!          Z  G d" d#          Z!dS )$    )annotationsN)	dataclass)auto)Enum   )Headers)RequestEntityTooLarge)parse_options_headerc                      e Zd ZdS )EventN__name__
__module____qualname__     \/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/werkzeug/sansio/multipart.pyr   r              Dr   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               KKKKKr   r   c                  $    e Zd ZU ded<   ded<   dS )Fieldstrnamer   headersNr   r   r   r   r   r      s'         IIIr   r   c                  .    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#      s0         IIIMMMr   r#   c                  $    e Zd ZU ded<   ded<   dS )Datar   r   bool	more_dataNr   r   r   r   r&   r&   $   s"         KKKOOOOOr   r&   c                      e Zd ZU ded<   dS )Epiloguer   r   Nr   r   r   r   r*   r*   *   r   r   r*   c                      e Zd ZdS )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	dS )StateN)
r   r   r   r   PREAMBLEPARTDATA
DATA_STARTEPILOGUECOMPLETEr   r   r   r.   r.   6   sP        tvvH466D466DJtvvHtvvHHHr   r.   s
   (?:
|
|)s   (?:

||

)s   %s[ 	]   c                  L    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	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 | Noner8   returnNonec                  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| _        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completer:   r8   r.   r/   stater9   recompile
LINE_BREAKescape	MULTILINEpreamble_reboundary_re_search_position_parts_decoded)selfr9   r:   r8   s       r   __init__zMultipartDecoder.__init__T   s      kk$8!"^
  :529X..
JGHL
 
 :429X..
JGHL
 

 !"r   r   intc                    	 |                     d          }n# t          $ r t          |          }Y nw xY w	 |                     d          }n# t          $ r t          |          }Y nw xY wt          ||          S )N   
   )rindex
ValueErrorlenmin)rL   r   last_nllast_crs       r   last_newlinezMultipartDecoder.last_newline|   s    	 kk%((GG 	  	  	 $iiGGG	 	 kk%((GG 	  	  	 $iiGGG	  7G$$$s    44A A*)A*bytes | Nonec                    |	d| _         d S | j        ;t          | j                  t          |          z   | j        k    rt	                      | j                            |           d S )NT)rA   r:   rT   r@   r	   extend)rL   r   s     r   receive_datazMultipartDecoder.receive_data   sf    < DMMM%1DK  3t99,t/HHH')))Kt$$$$$r   r   c                v   t           }| j        t          j        k    r| j                            | j        | j                  }||                    d          	                    d          rt          j
        | _        nt          j        | _        t          | j        d |                                                   }| j        d |                                = t          |          }d| _        nt!          dt#          | j                  t#          | j                  z
  t&          z
            | _        n| j        t          j        k    rt(                              | j        | j                  }|L|                     | j        d |                                                   }|                                |                                z   dz  }| j        d |= d|vrt-          d          t/          |d                   \  }}t1          j        t4          |                    d                    }|                    d	          }	|	t9          |	||
          }nt;          ||          }t          j        | _        d| _        | xj        dz  c_        | j         | j        | j         k    rtC                      nCt!          dt#          | j                  t&          z
            | _        n| j        t          j        k    rO| "                    | j        d          \  }}
}| j        d |
= tG          ||          }|rt          j$        | _        n| j        t          j$        k    r@| "                    | j        d          \  }}
}| j        d |
= |s|stG          ||          }nY| j        t          j
        k    rD| j%        r=tM          t          | j                            }| j        d d = t          j'        | _        | j%        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_DATArB   r.   r/   rH   searchr@   rJ   group
startswithr3   r0   r   ra   endr   maxrT   r9   SEARCH_EXTRA_LENGTHBLANK_LINE_RE_parse_headersrS   r
   tcastr   getr#   r   r2   rK   r8   r	   _parse_datar&   r1   rA   r*   r4   
isinstancer,   )rL   eventmatchr   r!   headers_enddispositionextrar    r$   	del_indexr(   s               r   
next_eventzMultipartDecoder.next_event   s    :''$++DK9NOOE ;;q>>,,U33 ,!&DJJ!&DJT[5;;==9::K%))++. d+++()%%
 ),s4;''#dm*<*<<?RR) )%% Z5:%%!((d6KLLE --dk/EKKMM/.JKK  %{{}}uyy{{:q@K-(77$%IJJJ%912& &"U vc599V#4#455 99Z00' !) '!  EE " '!  E #-
()%##q(##>-$2E2V2V/111
 ),As4;/?/?BU/U(V(V%%Z5+++)-)9)9$+T)9)R)R&D)YJYJ'di888E ("Z
Z5:%%)-)9)9$+U)9)S)S&D)YJYJ' =9 =$)<<<Z5>))dm)%"4"4555EAAADJ= 	TZx88 	TRdjRRSSSr   r   c                   g }t                               d|          }|                                D ]}|                                }|dk    rf|                                                    d          \  }}}|                    |                                |                                f           t          |          S )N    r   :)HEADER_CONTINUATION_REsub
splitlinesstripdecode	partitionappendr   )rL   r   r!   liner    _values          r   rj   zMultipartDecoder._parse_headers   s    )+%))$55OO%% 	> 	>D::<<Ds{{!%!8!8!=!=a

ekkmm<===wr   ra   r'   tuple[bytes, int, bool]c               `   |rWt                               |          }t          j        t          j        t
                   |                                          }nd}d| j        z   }| j        	                    |          dk    r\| 
                    ||d                    |z   x}}t          |          |z
  t          d|z             k    rt          |          x}}d}n| j                            |          }|t|                    d                              d          rt           j        | _        nt           j        | _        |                                }|                                }n"| 
                    ||d                    |z   x}}|d u }t          |||                   ||fS )Nr   r_   rP   Tr^   )LINE_BREAK_RErq   rk   rl   Matchr   rf   r9   r@   findrX   rT   rI   rc   rd   re   r.   r3   rB   r0   ra   )	rL   r   ra   rq   
data_startr9   data_endru   r(   s	            r   rn   zMultipartDecoder._parse_data   s    	!''--E66::<<JJJ4=(;H%%++
 $(#4#4T*++5F#G#G*#TTHy
 D		H$EH,<(=(==='*4yy09II$++D11E ;;q>>,,U33 ,!&DJJ!&DJ ;;==!IIKK		'+'8'8jkk9J'K'Kj'XX9IT*X-.//IEEr   N)r9   r   r:   r;   r8   r;   r<   r=   )r   r   r<   rN   )r   rY   r<   r=   )r<   r   )r   r   r<   r   )r   r   ra   r'   r<   r   )
r   r   r   __doc__rM   rX   r\   rv   rj   rn   r   r   r   r7   r7   M   s          ,0& 
 !%&  &  &  &  &  & P
% 
% 
% 
%	% 	% 	% 	%T T T Tl       $F $F $F $F $F $Fr   r7   c                      e Zd Zd
dZddZd	S )MultipartEncoderr9   r   r<   r=   c                6    || _         t          j        | _        d S r   )r9   r.   r/   rB   )rL   r9   s     r   rM   zMultipartEncoder.__init__  s     ^


r   rp   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                                        z  z  }t          |t                    r|d|j                                        z  z  }|dz  }t          j        t          |          j        D ]:\  }}|                                dk    r|| d| d                                z  };t          j        | _        |S t          |t&                    rO| j        t          j        k    r:t          j	        | _        t)          |j                  dk    r
d|j        z   S |j        S t          |t&                    r| j        t          j	        k    r|j        S t          |t*                    r&t          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: )ro   r   rB   r.   r/   r0   r   r   r#   r1   r9   r    encoder$   rk   rl   r!   lowerr2   r&   rT   r*   r4   rS   )rL   rp   r   r    r   s        r   
send_eventzMultipartEncoder.send_event"  s   eX&& 	P4:+G+GDJ:t}-- 	P$*NJJA
 3
 3

 t},w6D@5:CTCTCVCVVVD%&& E*U^-B-B-D-DDDGOD veU33; < <e::<<#888t22u22299;;;D)DJKt$$ 	Pu7G)G)GDJ5:""++z!t$$ 	Puz)A)A:x(( 	PDJt},y85:EENNN$*NNOOOr   N)r9   r   r<   r=   )rp   r   r<   r   )r   r   r   rM   r   r   r   r   r   r     sB        $ $ $ $P P P P P Pr   r   )"
__future__r   rC   typingrk   dataclassesr   enumr   r   datastructuresr   
exceptionsr	   httpr
   r   r   r   r#   r&   r*   r,   rb   r.   rE   rD   rG   ri   r   rz   rh   r7   r   r   r   r   <module>r      sA   " " " " " " 				     ! ! ! ! ! !             $ $ $ $ $ $ . . . . . . ' ' ' ' ' '	 	 	 	 	 	 	 	 $    u    $    E   
 $    5    $    5   
 $    u   	 	 	 	 	u 	 	 	 HJJ	    D    

4blCC
:r|44 $J$;R\JJ   MF MF MF MF MF MF MF MF`$P $P $P $P $P $P $P $P $P $Pr   