Ë
    r™ãjÀ@  ã                  ó€  — d dl m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 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 ej@                  r>d dlZ!d dl"m#Z# e$ejJ                  e&   ee'e'f   ee'ef   f   Z( G d„ de!jR                  «      Z* ejV                  dejX                  dejZ                  f   ¬«      Z.	 d$	 	 	 	 	 	 	 	 	 d%d„Z/	 	 	 	 	 d&ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d'd„Z0 G d„ d «      Z1 G d!„ d"«      Z2d(d#„Z3y# e$ r d dlmZ dZY ŒÊw xY w))é    )ÚannotationsN)ÚBytesIO)Ú	parse_qslé   )Ú
_plain_int)ÚFileStorage)ÚHeaders)Ú	MultiDict)ÚRequestEntityTooLarge)Úparse_options_header)ÚData)ÚEpilogue)ÚField)ÚFile)ÚMultipartDecoder)ÚNeedData)Úget_content_length)Úget_input_stream)ÚSpooledTemporaryFile)ÚTemporaryFile)ÚWSGIEnvironmentc                  ó*   — e Zd Z	 d	 	 	 	 	 	 	 	 	 dd„Zy)ÚTStreamFactoryNc                 ó   — y ©N© )ÚselfÚtotal_content_lengthÚcontent_typeÚfilenameÚcontent_lengths        ú^/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/werkzeug/formparser.pyÚ__call__zTStreamFactory.__call__)   s   € ð ó    r   ©
r   ú
int | Noner   ú
str | Noner    r'   r!   r&   Úreturnút.IO[bytes])Ú__name__Ú
__module__Ú__qualname__r#   r   r$   r"   r   r   (   s<   „ ð *.ð	à",ð	ð %ð	ð !ð		ð
 'ð	ð ô	r$   r   ÚF.)Úboundc                ó  — d}t         �6t        j                  t        j                  t           t        |d¬«      «      S | �| |kD  r4t        j                  t        j                  t           t        d«      «      S t        «       S )Ni Ð zrb+)Úmax_sizeÚmode)r   ÚtÚcastÚIOÚbytesr   r   )r   r   r    r!   r0   s        r"   Údefault_stream_factoryr6   5   se   € ð €HäÐ'Ü�v‰v”a—d‘dœ5‘kÔ#7ÀÐPUÔ#VÓWÐWØ	Ð	%Ð)=ÀÒ)HÜ�v‰v”a—d‘dœ5‘k¤=°Ó#7Ó8Ð8ä‹9Ðr$   ©Úmax_form_partsc               óB   — t        ||||||¬«      j                  | «      S )a«	  Parse the form data in the environ and return it as tuple in the form
    ``(stream, form, files)``.  You should only call this method if the
    transport method is `POST`, `PUT`, or `PATCH`.

    If the mimetype of the data transmitted is `multipart/form-data` the
    files multidict will be filled with `FileStorage` objects.  If the
    mimetype is unknown the input stream is wrapped and returned as first
    argument, else the stream is empty.

    This is a shortcut for the common usage of :class:`FormDataParser`.

    :param environ: the WSGI environment to be used for parsing.
    :param stream_factory: An optional callable that returns a new read and
                           writeable file descriptor.  This callable works
                           the same as :meth:`Response._get_file_stream`.
    :param max_content_length: If the data is larger than this many bytes, raise
        :exc:`.RequestEntityTooLarge`. This is used by :meth:`parse_from_environ`
        to set up a limited stream. When using :meth:`parse`, you must get a
        limited stream with :func:`.get_input_stream`.
    :param max_form_memory_size: If a ``multipart/form-data`` text part is larger
        than this many bytes, raise :exc:`~exceptions.RequestEntityTooLarge`.
        File parts are written to disk after this size. This is an additional
        check, it does not replace using a limited stream and
        ``max_content_length``.
    :param max_form_parts: If more than this number of ``multipart/form-data``
        parts are received, raise :exc:`.RequestEntityTooLarge`. This is an
        additional check, it does not replace using a limited stream and
        ``max_content_length``.
    :param cls: an optional dict class to use.  If this is not specified
                       or `None` the default :class:`MultiDict` is used.
    :param silent: If set to False parsing errors will not be caught.
    :return: A tuple in the form ``(stream, form, files)``.

    .. versionchanged:: 3.1.9
        ``max_form_memory_size`` is not applied to
        ``application/x-www-form-urlencoded``.

    .. versionchanged:: 3.0
        The ``charset`` and ``errors`` parameters were removed.

    .. versionchanged:: 2.3
        Added the ``max_form_parts`` parameter.

    .. versionadded:: 0.5.1
       Added the ``silent`` parameter.

    .. versionadded:: 0.5
       Added the ``max_form_memory_size``, ``max_content_length``, and ``cls``
       parameters.
    )Ústream_factoryÚmax_form_memory_sizeÚmax_content_lengthr8   ÚsilentÚcls)ÚFormDataParserÚparse_from_environ)Úenvironr:   r;   r<   r>   r=   r8   s          r"   Úparse_form_datarB   E   s1   € ôx Ø%Ø1Ø-Ø%ØØô÷ Ñ˜Ó!ð"r$   c                  ó¢   — e Zd ZdZ	 	 	 	 	 d	ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 d
d„Zdd„Z	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 dd„Zy)r?   aš  This class implements parsing of form data for Werkzeug.  By itself
    it can parse multipart and url encoded form data.  It can be subclassed
    and extended but for most mimetypes it is a better idea to use the
    untouched stream and expose it as separate attributes on a request
    object.

    :param stream_factory: An optional callable that returns a new read and
                           writeable file descriptor.  This callable works
                           the same as :meth:`Response._get_file_stream`.
    :param max_content_length: If the data is larger than this many bytes, raise
        :exc:`.RequestEntityTooLarge`. This is used by :meth:`parse_from_environ`
        to set up a limited stream. When using :meth:`parse`, you must get a
        limited stream with :func:`.get_input_stream`.
    :param max_form_memory_size: If a ``multipart/form-data`` text part is larger
        than this many bytes, raise :exc:`~exceptions.RequestEntityTooLarge`.
        File parts are written to disk after this size. This is an additional
        check, it does not replace using a limited stream and
        ``max_content_length``.
    :param max_form_parts: If more than this number of ``multipart/form-data``
        parts are received, raise :exc:`.RequestEntityTooLarge`. This is an
        additional check, it does not replace using a limited stream and
        ``max_content_length``.
    :param cls: an optional dict class to use.  If this is not specified
                       or `None` the default :class:`MultiDict` is used.
    :param silent: If set to False parsing errors will not be caught.

    .. versionchanged:: 3.0
        The ``charset`` and ``errors`` parameters were removed.

    .. versionchanged:: 3.0
        The ``parse_functions`` attribute and ``get_parse_func`` methods were removed.

    .. versionchanged:: 2.2.3
        Added the ``max_form_parts`` parameter.

    .. versionadded:: 0.8
    Nr7   c               ó    — |€t         }|| _        || _        || _        || _        |€t        j                  dt        «      }|| _        || _	        y ©Nztype[MultiDict[str, t.Any]])
r6   r:   r<   r;   r8   r2   r3   r
   r>   r=   )r   r:   r;   r<   r>   r=   r8   s          r"   Ú__init__zFormDataParser.__init__²   sS   € ð Ð!Ü3ˆNà,ˆÔØ"4ˆÔØ$8ˆÔ!Ø,ˆÔàˆ;Ü—&‘&Ð6¼	ÓBˆCàˆŒØˆ�r$   c                óª   — t        || j                  ¬«      }t        |«      }t        |j	                  d«      «      \  }}| j                  ||||¬«      S )zÈParses the information from the environment as form data.

        :param environ: the WSGI environment to be used for parsing.
        :return: A tuple in the form ``(stream, form, files)``.
        )r<   ÚCONTENT_TYPE)r!   ÚmimetypeÚoptions)r   r<   r   r   ÚgetÚparse)r   rA   Ústreamr!   rI   rJ   s         r"   r@   z!FormDataParser.parse_from_environÊ   sZ   € ô " '¸d×>UÑ>UÔVˆÜ+¨GÓ4ˆÜ0°·±¸^Ó1LÓMÑˆ�'Ø�z‰zØØ)ØØð	 ó 
ð 	
r$   c                ó&  — |dk(  r| j                   }n3|dk(  r| j                  }n!|| j                  «       | j                  «       fS |€i }	  |||||«      S # t        $ r | j                  s‚ Y nw xY w|| j                  «       | j                  «       fS )a!  Parses the information from the given stream, mimetype,
        content length and mimetype parameters.

        :param stream: A limited input stream, from :meth:`.get_input_stream`.
        :param mimetype: The mimetype used to choose how to parse the form.
            ``multipart/form-data`` and ``application/x-www-form-urlencoded``
            are supported.
        :param content_length: the content length of the incoming data
        :param options: optional mimetype parameters (used for
                        the multipart boundary for instance)
        :return: A tuple in the form ``(stream, form, files)``.

        .. versionchanged:: 3.0
            The invalid ``application/x-url-encoded`` content type is not
            treated as ``application/x-www-form-urlencoded``.
        zmultipart/form-dataz!application/x-www-form-urlencoded)Ú_parse_multipartÚ_parse_urlencodedr>   Ú
ValueErrorr=   )r   rM   rI   r!   rJ   Ú
parse_funcs         r"   rL   zFormDataParser.parseÚ   sž   € ð. Ð,Ò,Ø×.Ñ.‰JØÐ<Ò<Ø×/Ñ/‰Jà˜4Ÿ8™8›: t§x¡x£zÐ1Ð1àˆ?ØˆGð	Ù˜f h°ÀÓHÐHøÜò 	Ø—;’;Øñ ð	úð �t—x‘x“z 4§8¡8£:Ð-Ð-s   Á
A ÁA/Á.A/c                ó  — t        | j                  | j                  | j                  | j                  ¬«      }|j                  dd«      j                  d«      }|st        d«      ‚|j                  |||«      \  }}|||fS )N)r:   r;   r8   r>   ÚboundaryÚ ÚasciizMissing boundary)	ÚMultiPartParserr:   r;   r8   r>   rK   ÚencoderQ   rL   )	r   rM   rI   r!   rJ   ÚparserrT   ÚformÚfiless	            r"   rO   zFormDataParser._parse_multipart  s   € ô !Ø×.Ñ.Ø!%×!:Ñ!:Ø×.Ñ.Ø—‘ô	
ˆð —;‘;˜z¨2Ó.×5Ñ5°gÓ>ˆáÜÐ/Ó0Ð0à—l‘l 6¨8°^ÓD‰ˆˆeØ�t˜UÐ"Ð"r$   c                óš   — t        |j                  «       j                  «       dd¬«      }|| j                  |«      | j                  «       fS )NTzwerkzeug.url_quote)Úkeep_blank_valuesÚerrors)r   ÚreadÚdecoder>   )r   rM   rI   r!   rJ   Úitemss         r"   rP   z FormDataParser._parse_urlencoded  sC   € ô Ø�K‰K‹M× Ñ Ó"Ø"Ø'ô
ˆð
 �t—x‘x “¨¯©«
Ð2Ð2r$   ©NNNNT)r:   úTStreamFactory | Noner;   r&   r<   r&   r>   ú"type[MultiDict[str, t.Any]] | Noner=   Úboolr8   r&   r(   ÚNone)rA   r   r(   Út_parse_resultr   )
rM   r)   rI   Ústrr!   r&   rJ   zdict[str, str] | Noner(   rg   )
rM   r)   rI   rh   r!   r&   rJ   zdict[str, str]r(   rg   )	r*   r+   r,   Ú__doc__rF   r@   rL   rO   rP   r   r$   r"   r?   r?   ‹   s  „ ñ$ðP 15Ø+/Ø)-Ø26Øðð &*ñà-ðð )ðð 'ð	ð
 0ðð ðð #ðð 
óó0
ð* *.ð'.àð'.ð ð'.ð #ð	'.ð
 'ð'.ð 
ó'.ðR#àð#ð ð#ð #ð	#ð
  ð#ð 
ó#ð*3àð3ð ð3ð #ð	3ð
  ð3ð 
ô3r$   r?   c                  ór   — e Zd Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zd	d„Zd
d„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Zy)rW   Nc                ó’   — || _         || _        |€t        }|| _        |€t	        j
                  dt        «      }|| _        || _        y rE   )	r;   r8   r6   r:   r2   r3   r
   r>   Úbuffer_size)r   r:   r;   r>   rl   r8   s         r"   rF   zMultiPartParser.__init__.  sL   € ð %9ˆÔ!Ø,ˆÔàÐ!Ü3ˆNà,ˆÔàˆ;Ü—&‘&Ð6¼	ÓBˆCàˆŒØ&ˆÕr$   c                ó   — t        |«      ‚r   )rQ   )r   Úmessages     r"   ÚfailzMultiPartParser.failD  s   € Ü˜Ó!Ð!r$   c                ó’   — |j                  d«      }|r4t        |«      d   }|j                  dd«      j                  «       }|dv r|S y)Núcontent-typer   ÚcharsetrU   >   úus-asciiú
iso-8859-1rV   úutf-8ru   )rK   r   Úlower)r   Úheadersr   Ú
parametersÚ
ct_charsets        r"   Úget_part_charsetz MultiPartParser.get_part_charsetG  sO   € à—{‘{ >Ó2ˆáÜ-¨lÓ;¸AÑ>ˆJØ#Ÿ™¨	°2Ó6×<Ñ<Ó>ˆJð ÐIÑIØ!Ð!àr$   c                óÚ   — |j                   j                  d«      }	 t        |j                   d   «      }| j                  ||j                  ||¬«      }|S # t        t        f$ r d}Y Œ4w xY w)Nrq   zcontent-lengthr   )r   r    r   r!   )rw   rK   r   ÚKeyErrorrQ   r:   r    )r   Úeventr   r   r!   Ú	containers         r"   Ústart_file_streamingz$MultiPartParser.start_file_streamingV  s{   € ð —}‘}×(Ñ(¨Ó8ˆð	Ü'¨¯©Ð6FÑ(GÓHˆNð ×'Ñ'Ø!5Ø—^‘^Ø%Ø)ð	 (ó 
ˆ	ð Ðøô œ*Ð%ò 	ØŠNð	ús   �A ÁA*Á)A*c           
     ó  — d }t        || j                  | j                  ¬«      }g }g }t        |j                  | j
                  «      D �]  }|j                  |«       |j                  «       }	t        |	t        t        f«      rŒ<t        |	t        «      r|	}
d}g }|j                  }�nŽt        |	t        «      r$|	}
d }| j                  |	|«      }|j                  }�nZt        |	t         «      �rI| j                  �3|�1|t#        |	j$                  «      z  }|| j                  kD  r
t'        «       ‚ |	j$                  «       |	j(                  sìt        
t        «      rXdj+                  «      j-                  | j/                  |
j0                  «      d«      }|j                  |
j2                  |f«       n„t5        j6                  t4        j8                  t:           «      }|j=                  d«       |j                  |
j2                  t?        ||
j@                  |
j2                  |
j0                  ¬«      f«       |j                  «       }	t        |	t        t        f«      s�ŒÚ�Œ | jC                  |«      | jC                  |«      fS )N)r;   Ú	max_partsr   r$   Úreplace)rw   )"r   r;   r8   Ú_chunk_iterr_   rl   Úreceive_dataÚ
next_eventÚ
isinstancer   r   r   Úappendr   r   Úwriter   ÚlenÚdatar   Ú	more_dataÚjoinr`   rz   rw   Únamer2   r3   r4   r5   Úseekr   r    r>   )r   rM   rT   r!   Ú
field_sizerY   Úfieldsr[   rŠ   r}   Úcurrent_partr~   Ú_writeÚvalues                 r"   rL   zMultiPartParser.parseh  s'  € ð "&ˆ
ô "ØØ!%×!:Ñ!:Ø×)Ñ)ô
ˆð ˆØˆä §¡¨T×-=Ñ-=Ó>ó -	,ˆDØ×Ñ Ô%Ø×%Ñ%Ó'ˆEÜ  ¬´8Ð(<Õ=Ü˜e¤UÔ+Ø#(�LØ!"�JØ "�IØ&×-Ñ-’FÜ ¤tÔ,Ø#(�LØ!%�JØ $× 9Ñ 9¸%ÀÓ P�IØ&Ÿ_™_’FÜ ¤tÕ,Ø×0Ñ0Ð<ÀÐAWð #¤c¨%¯*©*£oÑ5˜
à%¨×(AÑ(AÒAÜ"7Ó"9Ð9á˜5Ÿ:™:Ô&Ø Ÿ?š?Ü% l´EÔ:Ø$'§H¡H¨YÓ$7×$>Ñ$>Ø $× 5Ñ 5°l×6JÑ6JÓ KÈYó%˜Eð #ŸM™M¨<×+<Ñ+<¸eÐ*DÕEä()¯©¬q¯t©t´E©{¸IÓ(F˜IØ%ŸN™N¨1Ô-Ø!ŸL™Là$0×$5Ñ$5Ü$/Ø(1Ø(4×(=Ñ(=Ø(4×(9Ñ(9Ø0<×0DÑ0Dô	%&ð!"ô
ð ×)Ñ)Ó+�ôU ! ¬´8Ð(<×=Ð=ð-	,ð^ �x‰x˜Ó §¡¨%£Ð0Ð0r$   )NNNi   N)r:   rc   r;   r&   r>   rd   rl   Úintr8   r&   r(   rf   )rn   rh   r(   zte.NoReturn)rw   r	   r(   rh   )r}   r   r   r&   r(   r)   )rM   r)   rT   r5   r!   r&   r(   z7tuple[MultiDict[str, str], MultiDict[str, FileStorage]])r*   r+   r,   rF   ro   rz   r   rL   r   r$   r"   rW   rW   -  s£   „ ð 15Ø+/Ø26Ø$Ø%)ð'à-ð'ð )ð'ð 0ð	'ð
 ð'ð #ð'ð 
ó'ó,"óðØðØ1;ðà	óð$@1Ø!ð@1Ø-2ð@1ØDNð@1à	@ô@1r$   rW   c              #  ó6   K  — 	  | |«      }|sn|–— Œd–— y­w)zŠRead data in chunks for multipart/form-data parsing. Stop if no data is read.
    Yield ``None`` at the end to signal end of parsing.
    Nr   )r_   ÚsizerŠ   s      r"   rƒ   rƒ   «  s+   è ø€ ð Ù�D‹zˆáØàŠ
ð ð ƒJùs   ‚r   r%   rb   )rA   r   r:   rc   r;   r&   r<   r&   r>   rd   r=   re   r8   r&   r(   rg   )r_   zt.Callable[[int], bytes]r–   r”   r(   zt.Iterator[bytes | None])4Ú
__future__r   Útypingr2   Úior   Úurllib.parser   Ú	_internalr   Údatastructuresr   r	   r
   Ú
exceptionsr   Úhttpr   Úsansio.multipartr   r   r   r   r   r   Úwsgir   r   Útempfiler   ÚImportErrorr   ÚTYPE_CHECKINGÚteÚ_typeshed.wsgir   Útupler4   r5   rh   rg   ÚProtocolr   ÚTypeVarÚCallableÚAnyr-   r6   rB   r?   rW   rƒ   r   r$   r"   ú<module>r«      sŸ  ðÝ "ã Ý Ý "å !Ý 'Ý #Ý %Ý -Ý &Ý "Ý &Ý #Ý "Ý .Ý &Ý $Ý "ð Ý-ð ‡?‚?Ûå.àØ	�‰ˆU‰�Y˜s C˜xÑ(¨)°C¸Ð4DÑ*EÐEñ€Nô˜Ÿ™ô ð €A‡I�Iˆc˜Ÿ™ C¨¯© JÑ/Ô0€ð "&ð	Ø$ðàðð ðð ð	ð
 óð$ -1Ø'+Ø%)Ø.2ØðC"ð "&ñC"ØðC"à)ðC"ð %ðC"ð #ð	C"ð
 
,ðC"ð ðC"ð ðC"ð óC"÷L_3ñ _3÷D{1ñ {1ô|øðc ò  Ý&àÒð ús   Á,D- Ä-D=Ä<D=