Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
test.cpython-313.pyc541 linesDownload Raw Back to __pycache__
1�

2��j+���`�SSKJr SSKrSSKrSSKrSSKrSSKJr SSK	J	r	 SSK3Jr SSKJ
r
 SSKJr SSKJr SS	KJr SS4KJr SSKJr SSKJr S
SKJr S
SKJr S
SKJr S
SKJr S
SKJr S
SKJr S
SKJr S
SKJr S
SKJ r  S
SKJ!r! S
SK"J#r# S
SK"J$r$ S
SK"J%r% S
SK"J&r& S
SK"J'r' S
SK(J)r) S
SK(J*r* S
SK(J+r+ S
S K(J,r, S
S!K(J-r- S
S"K(J.r. S
S#K/J0r0 S
S$K/J1r1 S
S%K2J3r3 S
S&K2J4r4 S
S'K5J6r6 S
S(K7J8r8 S
S)K9J:r: S
S*K9J;r; \Rx(aSSK=r>SS+K?J@r@ SS,K?JArA S?S@S-jjrBSASBS.jjrCSCS/jrD\R�"S0S1S29rF"S3S45rG"S5S6\H5rI"S7S85rJSDS9jrKSESFS:jjrL"S;S<\85rM\R�"S=S>55rOg)G�)�annotationsN)�defaultdict)�datetime)�BytesIO)�chain)�random)�
TemporaryFile)�time)�unquote)�urlsplit)�5urlunsplit�)�_get_environ)�_wsgi_decoding_dance)�_wsgi_encoding_dance)�
Authorization)�CallbackDict)�CombinedMultiDict)�EnvironHeaders)�
FileMultiDict)�Headers)�	MultiDict)�dump_cookie)�dump_options_header)�parse_cookie)�6parse_date)�parse_options_header)�Data)�Epilogue)�Field)�File)�MultipartEncoder)�Preamble)�7_urlencode)�8iri_to_uri)�cached_property)�get_content_type)�Request)�Response)�ClosingIterator)�get_current_url)�WSGIApplication)�WSGIEnvironmentc��^^^^�UcS[5[53n[5mSmSmU(aSUUUU4SjjnOTRn[	UR55nU"UR
[SS955 [U5GH�upg[USS5nUGb[US	[US9S55n	[USS5n10U11c+U	=(a [R"U	5S=(d Sn12URnURS
U134/5 U	cU"UR
[XkS955 OU"UR
[XiUS955 U"S5nU(d!U"UR
[!USS955 M�U"UR
[!USS955 MQ[#U[$5(d[%U5nU"UR
[U['5S955 U"UR
[!UR5SS955 GM� U"UR
[)SS955 TR+5n
TR-S5 TX�4$)z�Encode a dict of values (either strings or file descriptors or14:class:`FileStorage` objects.) into a multipart encoded string stored15in a file descriptor.16 17.. versionchanged:: 3.018    The ``charset`` parameter was removed.19Nz ---------------WerkzeugFormPart_rFc�`>�T(aTRU5$[U5nUT-T::aTRU5 Oi[R"[R[20[
S55nURTR55 URU5 UmSmTU-
mU$)Nzwb+T)�write�len�t�cast�IO�bytesr	�getvalue)�s�length�21new_stream�on_disk�stream�	threshold�total_lengths   �����SD:\code\apps\devtools\python\user_packages\Python313\site-packages\werkzeug/test.py�write_binary�-stream_encode_multipart.<locals>.write_binaryMs������|�|�A��&��Q����L�(�I�5��L�L��O�!"������U��]�5�5I�!J�J��$�$�V�_�_�%6�7��$�$�Q�'�'�F�"�G���&���
�rA)�data�read�filename�name�content_typezapplication/octet-stream�Content-Type)rE�headers)rErDrHTi@)rB�	more_data)r7r5�return�int)r22rrr0r"�encode�23send_eventr#�24_iter_data�getattr�	mimetypes�25guess_typerH�updater r!r�26isinstance�strrr�tell�seek)rB�use_tempfiler<�boundaryr?�encoder�key�value�readerrDrFrH�chunkr8r:r;r=s  `           @@@r>�stream_encode_multipartr^6s'�����5�d�f�X�f�h�Z�H��!�)�F��L��G��	�	�*�|�|���x���0�1�G���#�#�H�#�$6�7�8� ��&�27������-�����u�j�'�%���2N�O�H�"�5�.�$�?�L��#��:�!�,�,�X�6�q�9�2�1��28�m�m�G��N�N�^�\�:�;�<����W�/�/��3�0P�Q�R���&�&��#�'�J���29��u�
��� ��!3�!3�D�e�u�4U�!V�W���W�/�/��%�4�0P�Q�R���e�S�)�)��E�30����+�+�E�s�G�I�,N�O�P���+�+�D�e�l�l�n�PU�,V�W�X�C'�F��#�#�H�#�$6�7�8�
�[�[�]�F�31�K�K��N��6�#�#rAc�@�[USUS9up#nXR54$)z�Like `stream_encode_multipart` but returns a tuple in the form32(``boundary``, ``data``) where data is bytes.33 34.. versionchanged:: 3.035    The ``charset`` parameter was removed.36F)rWrX)r^rC)�valuesrXr;r8s    r>�encode_multipartra�s+�� 7��U�X� ��F�H��[�[�]�"�"rAc#��# �[U[5(aURSS9Shv�N gUR5H/up[U[5(aUHnX4v� M37 M*X4v� M1 gNI7f)z�Iterate over a mapping that might have a list of values, yielding38all key, value pairs. Almost like iter_multi_items but only allows39lists, not tuples, of values so tuples can be used for files.40T)�multiN)rSr�items�list)rBrZr[�vs    r>rNrN�sg���41�$�	�"�"��:�:�D�:�)�)�)��*�*�,�J�C��%��&�&��A��&�L���j� �'�	*�s�(A6�A4�A42A6�_TAnyMultiDictzMultiDict[t.Any, t.Any])�boundc���\rSrSr%SrSrSr\rSSK	r	\43"\	R5rC	S\
S'S	\
S44'S\
S'S\
S
'S\
S'S0S1Sjjr\S2Sj5rS3Sjr\45S4Sj5r\S5Sj5r\R*S6Sj5r\S7Sj5r\R*S6Sj5r\S7Sj5r\R*S8Sj5r\S9Sj5r\S:Sj5r\R*S;Sj5rS<SjrS=Sjr\S>Sj5r\R*S?S j5r\S@S!j5r\R*SAS"j5r\SBS#j5r\R*SCS$j5r\S5S%j5r\R*S6S&j5r\S>S'j5r \ R*SDS(j5r \S5S)j5r!\SES*j5r"SFS+jr#SFS,jr$SGS-jr%SHSIS.jjr&S/r'g)J�EnvironBuilder�a�This class can be used to conveniently create a WSGI environment46for testing purposes.  It can be used to quickly create WSGI environments47or request objects from arbitrary data.48 49The signature of this class is also used in some other places as of50Werkzeug 0.5 (:func:`create_environ`, :meth:`Response.from_values`,51:meth:`Client.open`).  Because of this most of the functionality is52available through the constructor alone.53 54Files and regular form data can be manipulated independently of each55other with the :attr:`form` and :attr:`files` attributes, but are56passed with the same argument to the constructor: `data`.57 58`data` can be any of these values:59 60-   a `str` or `bytes` object: The object is converted into an61    :attr:`input_stream`, the :attr:`content_length` is set and you have to62    provide a :attr:`content_type`.63-   a `dict` or :class:`MultiDict`: The keys have to be strings. The values64    have to be either any of the following objects, or a list of any of the65    following objects:66 67    -   a :class:`file`-like object:  These are converted into68        :class:`FileStorage` objects automatically.69    -   a `tuple`:  The :meth:`~FileMultiDict.add_file` method is called70        with the key and the unpacked `tuple` items as positional71        arguments.72    -   a `str`:  The string is set as form data for the associated key.73-   a file-like object: The object content is loaded in memory and then74    handled like a regular `str` or a `bytes`.75 76:param path: the path of the request.  In the WSGI environment this will77             end up as `PATH_INFO`.  If the `query_string` is not defined78             and there is a question mark in the `path` everything after79             it is used as query string.80:param base_url: the base URL is a URL that is used to extract the WSGI81                 URL scheme, host (server name + server port) and the82                 script root (`SCRIPT_NAME`).83:param query_string: an optional string or dict with URL parameters.84:param method: the HTTP method to use, defaults to `GET`.85:param input_stream: an optional input stream.  Do not specify this and86                     `data`.  As soon as an input stream is set you can't87                     modify :attr:`args` and :attr:`files` unless you88                     set the :attr:`input_stream` to `None` again.89:param content_type: The content type for the request.  As of 0.5 you90                     don't have to provide this when specifying files91                     and form data via `data`.92:param content_length: The content length for the request.  You don't93                       have to specify this when providing data via94                       `data`.95:param errors_stream: an optional error stream that is used for96                      `wsgi.errors`.  Defaults to :data:`stderr`.97:param multithread: controls `wsgi.multithread`.  Defaults to `False`.98:param multiprocess: controls `wsgi.multiprocess`.  Defaults to `False`.99:param run_once: controls `wsgi.run_once`.  Defaults to `False`.100:param headers: an optional list or :class:`Headers` object of headers.101:param data: a string or dict of form data or a file-object.102             See explanation above.103:param json: An object to be serialized and assigned to ``data``.104    Defaults the content type to ``"application/json"``.105    Serialized with the function assigned to :attr:`json_dumps`.106:param environ_base: an optional dict of environment defaults.107:param environ_overrides: an optional dict of environment overrides.108:param auth: An authorization object to use for the109    ``Authorization`` header value. A ``(username, password)`` tuple110    is a shortcut for ``Basic`` authorization.111 112.. versionchanged:: 3.0113    The ``charset`` parameter was removed.114 115.. versionchanged:: 2.1116    ``CONTENT_TYPE`` and ``CONTENT_LENGTH`` are not duplicated as117    header keys in the environ.118 119.. versionchanged:: 2.0120    ``REQUEST_URI`` and ``RAW_URI`` is the full raw URI including121    the query string, not only the path.122 123.. versionchanged:: 2.0124    The default :attr:`request_class` is ``Request`` instead of125    ``BaseRequest``.126 127.. versionadded:: 2.0128   Added the ``auth`` parameter.129 130.. versionadded:: 0.15131    The ``json`` param and :meth:`json_dumps` method.132 133.. versionadded:: 0.15134    The environ has keys ``REQUEST_URI`` and ``RAW_URI`` containing135    the path before percent-decoding. This is not part of the WSGI136    PEP, but many WSGI servers include it.137 138.. versionchanged:: 0.6139   ``path`` and ``base_url`` can now be unicode strings that are140   encoded with :func:`iri_to_uri`.141zHTTP/1.1)rrrN�MultiDict[str, str] | None�_args�142str | None�
_query_string�t.IO[bytes] | None�
_input_stream�_formzFileMultiDict | None�_filesc���UbSU;a[S5e[U5nUcSU;aURn[UR5UlXlUb[U5nX l[U[5(aX0l	O4Uc[5nO [U[5(d[U5nX0lX@lUc[5nO [U[5(d[U5nX�lUbX`lUc[ R"nX�lX�lX�lX�lX�lX�lXPlXplSUlUbT[U[65(a[9SUSUSS.5nURR;SUR=55 Ub3U
b[?S	5eURAU5n
URcS143UlU
(GaUb[?S5e[CU
S5(aU
RE5n
[U
[5(aU
RG5n
[U
[H5(a.[KU
5UlUR2c[MU
5UlO[OU
5Hpunn[U[6[P45(d[CUS5(aURSUU5 MFURTRWU5RYU5 Mr UbUUl-gg)
N�?z6Query string is defined in the path and as an argumentF�basicrr)�username�passwordrz can't provide both json and datazapplication/jsonz#can't provide input stream and datarC).�144ValueErrorr�queryr%�path�request_uri�base_urlrSrT�query_stringr�args�methodrrHrF�sys�stderr�
errors_stream�multithread�multiprocess�run_once�environ_base�environ_overrides�input_stream�content_length�closed�tupler�set�	to_header�	TypeError�145json_dumps�hasattrrCrLr5rr1rN�dict�_add_file_from_data�form�setlistdefault�append�mimetype)�selfr{r}r~r�r�rFr�r�r�r�r�rHrBr�r�r��json�authr|rZr[s                      r>�__init__�EnvironBuilder.__init__*s���*�#��t���U�V�V��t�n����C�4�K�&�,�,�L��{�/�/�0��	�����!�(�+�H� �
��l�C�(�(� ,���#�(�{����i�8�8�(��6��$�I����?��i�G��G�W�-�-��g�&�G����#� ,��� ��J�J�M�*��&��(�� �
�(��!2��(��,��������$��&�&�$��$�q�'�t�A�w�G���
�L�L���_�d�n�n�.>�?������ B�C�C��?�?�4�(�D�� � �(�$6��!���'�� E�F�F��t�V�$�$��y�y�{���$��$�$��{�{�}���$��&�&�$+�D�M��!��&�&�.�*-�d�)�D�'��",�T�"2�J�C��!�%�%���7�7�7�5�&�;Q�;Q��0�0��e�<��	�	�0�0��5�<�<�U�C�	#3���$�D�M� rAc
�l�[[U55n[US5URUSUR	S5[US55[US5USUSUR	SS	5UR	S146S	5USUSUS
USUS.nURU5 U"S0UD6$)z�Turn an environ dict back into a builder. Any extra kwargs147override the args extracted from the environ.148 149.. versionchanged:: 2.0150    Path and query values are passed through the WSGI decoding151    dance to avoid double encoding.152 153.. versionadded:: 0.15154�	PATH_INFO�wsgi.url_scheme�Host�SCRIPT_NAME�QUERY_STRING�REQUEST_METHOD�155wsgi.inputrGN�Content-Length�wsgi.errors�wsgi.multithread�wsgi.multiprocess�
wsgi.run_once)r{r}r~r�r�rFr�r�r�r�r�rH�)rrr�_make_base_url�poprR)�cls�environ�kwargsrH�outs     r>�from_environ�EnvironBuilder.from_environ�s����.��1�2��(���)=�>��*�*��)�*����F�#�$�W�]�%;�<��1561���1H�I��.�/�#�L�1�#�K�K���=�%�k�k�*:�D�A�$�]�3�"�#5�6�#�$7�8���0��!157��$	�158�159�6���z�S�z�rAc��[U[5(aURR"U/UQ76 gURRX5 g)z=Called in the EnvironBuilder to add files from the data dict.N)rSr��files�add_file)r�rZr[s   r>r��"EnvironBuilder._add_file_from_data�s:���e�U�#�#��J�J����,�e�,��J�J����+rAc�D�[XUSS45RS5S-$)N��/)r
�rstrip)�scheme�host�script_roots   r>r��EnvironBuilder._make_base_url�s&���6��b�"�=�>�E�E�c�J�S�P�PrAc�d�URURURUR5$)zPThe base URL is used to extract the URL scheme, host name,160port, and root path.161)r��162url_schemer�r��r�s r>r}�EnvironBuilder.base_url�s'��163�"�"�4�?�?�D�I�I�t�?O�?O�P�PrAc��UcSnSnSnO([U5up#pEnU(dU(a[S5eURS5UlX0lX lg)N�http�	localhostr�z4base url must not contain a query string or fragmentr�)rryr�r�r�r�)r�r[r��netlocr��qs�anchors       r>r}r��sT���=��F� �F��K�6>�u�o�3�F�K�V��V� �!W�X�X�&�-�-�c�2����	� �rAc��URRS5nUc6UR(d%UR(agUR(aggU$)z�The content type for the request.  Reflected from and to164the :attr:`headers`.  Do not set if you set :attr:`files` or165:attr:`form` for auto detection.166rGN�multipart/form-data�!application/x-www-form-urlencoded)rH�getrqrsrr�r��cts  r>rF�EnvironBuilder.content_type�sA���\�\�
�
�n�
-��
�:�d�0�0��{�{�,��z�z�:���	rAc�`�UcURRSS5 gXRS'g�NrG)rHr��r�r[s  r>rFr��s'���=��L�L���^�T�2�+0�L�L��(rAc�p�URnU(a"URS5SR5$S$)zIThe mimetype (content type without charset etc.)167 168.. versionadded:: 0.14169�;rN)rF�split�stripr�s  r>r��EnvironBuilder.mimetype�s2���
�
��+-�r�x�x��}�Q��%�%�'�7�4�7rAc�&�[US5Ulg)Nzutf-8)r'rFr�s  r>r�r��s��,�U�G�<��rAc�z^�SU4Sjjn[TRRSS55Sn[X!5$)z�The mimetype parameters as dict.  For example if the170content type is ``text/html; charset=utf-8`` the params would be171``{'charset': 'utf-8'}``.172 173.. versionadded:: 0.14174c�L>�[TRU5TRS'gr�)rr�rH)�dr�s �r>�	on_update�1EnvironBuilder.mimetype_params.<locals>.on_update�s���+>�t�}�}�a�+P�D�L�L��(rAzcontent-typer�r)r�zCallbackDict[str, str]rJ�None)rrHr�r)r�r�r�s`  r>�mimetype_params�EnvironBuilder.mimetype_params�s6���	Q�
!����!1�!1�.�"�!E�F�q�I���A�)�)rAc�>�URRS[S9$)z�The content length as integer.  Reflected from and to the175:attr:`headers`.  Do not set if you set :attr:`files` or176:attr:`form` for auto detection.177r�)�type)rHr�rKr�s r>r��EnvironBuilder.content_lengths���|�|��� 0�s��;�;rAc�t�UcURRSS5 g[U5URS'g)Nr�)rHr�rTr�s  r>r�r�s/���=��L�L���-�t�4�-0��Z�D�L�L�)�*rAc�x�URb[S5e[X5nUcU"5n[XU5 U$)z�Common behavior for getting the :attr:`form` and178:attr:`files` properties.179 180:param name: Name of the internal cached attribute.181:param storage: Storage class used for the data.182zan input stream is defined)r��AttributeErrorrO�setattr)r�rE�storage�rvs    r>�	_get_form�EnvironBuilder._get_formsA�����(� �!=�>�>�
�T�
 ��
�:���B��D��#��	rAc�*�SUl[XU5 g)z�Common behavior for setting the :attr:`form` and183:attr:`files` properties.184 185:param name: Name of the internal cached attribute.186:param value: Value to assign to the attribute.187N)rqr�)r�rEr[s   r>�	_set_form�EnvironBuilder._set_form$s��"�����E�"rAc�.�URS[5$)z$A :class:`MultiDict` of form values.rr)r�rr�s r>r��EnvironBuilder.form.s���~�~�g�y�1�1rAc�(�URSU5 g)Nrr�r�r�s  r>r�r�3s�����w��&rAc�.�URS[5$)zbA :class:`FileMultiDict` of uploaded files. Use188:meth:`~FileMultiDict.add_file` to add new files.189rs)r�rr�s r>r��EnvironBuilder.files7s��190�~�~�h�
�6�6rAc�(�URSU5 g)Nrsr�r�s  r>r�r�>s�����x��'rAc��UR$)z�An optional input stream. This is mutually exclusive with191setting :attr:`form` and :attr:`files`, setting it will clear192those. Do not provide this if the method is not ``POST`` or193another method that has a body.194)rqr�s r>r��EnvironBuilder.input_streamBs���!�!�!rAc�,�XlSUlSUlg�N)rqrrrsr�s  r>r�r�Ks��"����195���rAc�z�URc#URb[UR5$gUR$)zYThe query string.  If you set this to a string196:attr:`args` will no longer be available.197r�)rormr$r�s r>r~�EnvironBuilder.query_stringQs8��198���%��z�z�%�!�$�*�*�-�-���!�!�!rAc��XlSUlgr��rormr�s  r>r~r�\s��"����199rAc��URb[S5eURc[5UlUR$)z(The URL arguments as :class:`MultiDict`.za query string is defined)ror�rmrr�s r>r�EnvironBuilder.argsas9�����)� �!<�=�=��:�:��"��D�J��z�z�rAc��SUlXlgr�r�r�s  r>rr�js��!����200rAc�@�URRSS5S$)z4The server name (read-only, use :attr:`host` to set)�:rr)r�r�r�s r>�server_name�EnvironBuilder.server_nameos���y�y���s�A�&�q�)�)rAc��URRSS5n[U5S:Xa[US5$UR201S:Xagg![a Nf=f)z?The server port as integer (read-only, use :attr:`host` to set)rr��httpsi��P)r�r�r1rKryr�)r��piecess  r>�server_port�EnvironBuilder.server_portts_��������a�(���v�;�!��
��6�!�9�~�%��?�?�g�%�����
��
�s�
A
�
202A�Ac�F�UR5 g![a gf=fr�)�close�	Exceptionr�s r>�__del__�EnvironBuilder.__del__�s"��	��J�J�L���	��	�s��203 � c���UR(agURR5nUHnUR	5 M SUlg![a SnN0f=f![204a M?f=f)z�Closes all files.  If you put real :class:`file` objects into the205:attr:`files` dict you can call this method to automatically close206them all in one go.207Nr�T)r�r�r`r�r
r)r�r��fs   r>r
�EnvironBuilder.close�sq��208�;�;��	��J�J�%�%�'�E��A�
����	��209�����	��E�	��210�
��
�s"�A�A"�A�A�"211A0�/A0c��URnURnURnURnUbHUR	5nURSS5 UR	5nURU5 Xe-212nO�US:Xa6[
[URUR/55upnUSUS3nOKUS:Xa;[UR5RS5n[U5n[U5nO213[5n0n	UR(aU	RUR5 S"Sjn214[!UR"5nU	R0S	UR$_S215U216"UR&5_SU217"UR(5_S[!UR*5_S
U_SU_SUR,_S[/UR05_SUR2_SUR4_SUR6_SUR8_SU_SUR:_SUR<_SUR>_SUR@_5 URBRE5nURGS5 URGS5 UbXIS'Ub[/U5U	S'[I[J5n
URM5H:up�U
SURO5RQSS 53RSU5 M< U
RU5HunnS!RWU5X�'M URX(aU	RURX5 U	$)#z�Return the built environ.218 219.. versionchanged:: 0.15220    The content type and length headers are set based on221    input stream detection. Previously this only set the WSGI222    keys.223rrr�z; boundary="�"r��asciic�*�[[U55$r�)rr)�xs r>�_path_encode�0EnvironBuilder.get_environ.<locals>._path_encode�s��'���224�3�3rAr�r�r�r��REQUEST_URI�RAW_URI�SERVER_NAME�SERVER_PORT�	HTTP_HOST�SERVER_PROTOCOLzwsgi.versionr�r�r�r�r�r�rGr��CONTENT_TYPE�CONTENT_LENGTH�HTTP_�-�_z, )rrTrJrT)-r�r�r�rFrUrVr^rr�r�r$rLr1rr�rRrr|r�r�r{r~rrTr225r��server_protocol�wsgi_versionr�r�r�r�r�rH�copy�removerre�to_wsgi_list�upper�replacer�rd�joinr�)r�r�r�r�rF�	start_pos�end_posrX�form_encoded�resultr�raw_urirH�combined_headersrZr[r`s                 r>�get_environ�EnvironBuilder.get_environ�sM���(�(���,�,���=�=���(�(���#�$�)�)�+�I����a��#�"�'�'�)�G����i�(�$�0�N�
�.�
.�5L�!�4�9�9�d�j�j�"9�:�6�2�L�(�'�Z�|�H�:�Q�?�L�
�<�
<�%�d�i�i�0�7�7��@�L� ��.�N�"�<�0�L�"�9�L�"$������M�M�$�+�+�,�	4�'�t�'7�'7�8���
�
�
� �$�+�+�
��|�D�,<�,<�=�
��\�$�)�)�4�
�� 4�T�5F�5F� G�	
��w�

��7�
��t�/�/�
��s�4�#3�#3�4�
��T�Y�Y�
�"�4�#7�#7�
��� 1� 1�
�"�4�?�?�
��l�
� �t�1�1�!
�"#�D�$4�$4�#
�$$�T�%6�%6�%
�& ����'
�	226�0�,�,�#�#�%�����~�&����'�(��#�%1�>�"��%�'*�>�':�F�#�$�&�t�,��!�.�.�0�J�C��u�S�Y�Y�[�%8�%8��c�%B�$C�D�E�L�L�U�S�1�,�1�1�3�K�C���)�)�F�+�F�K�4��!�!��M�M�$�0�0�1��
rAc�L�UcURnU"UR55$)z�Returns a request with the data.  If the request class is not227specified :attr:`request_class` is used.228 229:param cls: The request wrapper to use.230)�
request_classr4)r�r�s  r>�get_request�EnvironBuilder.get_request�s(���;��$�$�C��4�#�#�%�&�&rA)rmrsrrrqrorr}r�r�rFr�r�r�rHr�r�r�r�r�r�r{r~r|r�r�r�)r�NN�GETNNNNFFFNNNNNNN)&r{rTr}rnr~z t.Mapping[str, str] | str | Noner�rTr�rprFrnr��231int | Noner�zt.IO[str] | Noner��boolr�r<r�r<rHz,Headers | t.Iterable[tuple[str, str]] | NonerBz:None | (t.IO[bytes] | str | bytes | t.Mapping[str, t.Any])r��t.Mapping[str, t.Any] | Noner�r=r�rnr�r=r�z&Authorization | tuple[str, str] | NonerJr�)r�r-r��t.AnyrJrj)rZrTr[zDt.IO[bytes] | tuple[t.IO[bytes], str] | tuple[t.IO[bytes], str, str]rJr�)r�rTr�rTr�rTrJrT�rJrT)r[rnrJr�)rJrn)r[rTrJr�)rJzt.Mapping[str, str])rJr;)r[r;rJr�)rErTr�ztype[_TAnyMultiDict]rJrg)rErTr[zMultiDict[str, t.Any]rJr�)rJ�MultiDict[str, str])r[r@rJr�)rJr)r[rrJr�)rJrp)r[rprJr�)r[rlrJr�)rJrK)rJr�)rJr-r�)r�ztype[Request] | NonerJr()(�__name__�232__module__�__qualname__�__firstlineno__�__doc__r&r'r(r7r��staticmethod�dumpsr��__annotations__r��classmethodr�r�r��propertyr}�setterrFr�r�r�r�r�r�r�r�r~rrr233rr
r4r8�__static_attributes__r�rAr>rjrj�s���`�F!�O��L��M���d�j�j�)�J��%�%���%�%�%�%� � ��#�9=��+/�#'�%)�*.�!�"��@D�KO�59�:>�#�-1�7;�'`%��`%��`%�7�	`%�234�`%�)�
`%�!�`%�#�`%�(�`%��`%��`%��`%�>�`%�I�`%�3�`%� 8�!`%�"�#`%�$+�%`%�&5�'`%�(235�)`%�D����@	,�
�	,�U�	,�236�		,��Q��Q��Q��Q��_�_�!��!��������1��1��8��8��_�_�=��=��*��*��<��<����8��8��$#��2��2�237�[�[�'��'��7��7��\�\�(��(��"��"�������238�"��"�����������239�[�[�����*��*�������$V�p	'�	'rArjc��\rSrSrSrSrg)�ClientRedirectErrori�zwIf a redirect loop is detected when using follow_redirects=True with240the :cls:`Client`, then this exception is raised.241r�N)rArBrCrDrErLr�rAr>rNrN�s��rArNc��\rSrSrSrSSSjjrS S!S	jjrS"SSSS242.S#SjjjrSSS.S$S
jjrS%Sjr	S&Sjr243S'S(SjjrS'S)SjjrSSS.S*Sjjr
S+SjrS+SjrS+SjrS+SjrS+SjrS+SjrS+SjrS+SjrS,SjrSrg)-�ClientiaaSimulate sending requests to a WSGI application without running a WSGI or HTTP244server.245 246:param application: The WSGI application to make requests to.247:param response_wrapper: A :class:`.Response` class to wrap response data with.248    Defaults to :class:`.TestResponse`. If it's not a subclass of ``TestResponse``,249    one will be created.250:param use_cookies: Persist cookies from ``Set-Cookie`` response headers to the251    ``Cookie`` header in subsequent requests. Domain and path matching is supported,252    but other cookie parameters are ignored.253:param allow_subdomain_redirects: Allow requests to follow redirects to subdomains.254    Enable this if the application handles subdomains and redirects between them.255 256.. versionchanged:: 2.3257    Simplify cookie implementation, support domain and path matching.258 259.. versionchanged:: 2.1260    All data is available as properties on the returned response object. The261    response cannot be returned as a tuple.262 263.. versionchanged:: 2.0264    ``response_wrapper`` is always a subclass of :class:``TestResponse``.265 266.. versionchanged:: 0.5267    Added the ``use_cookies`` parameter.268NTFc�269�XlUS[1;a[nO+Ub([U[5(d[	S[U405n[270R"[SU5UlU(a0UlOSUlX@l	g)N�WrapperTestResponse�TestResponse)271�applicationr)rS�272issubclassr�r2r3�response_wrapper�_cookies�allow_subdomain_redirects)r�rTrV�use_cookiesrXs     r>r��Client.__init__!s���'����h�/�/�+��
�
)�*��l�3273�3274� $�%��/�0�� ��!"���t�N�';�=M� N����GI�D�M� �D�M�)B�&rAr�r�c�l�URc[S5eURRX#U45$)aReturn a :class:`.Cookie` if it exists. Cookies are uniquely identified by275``(domain, path, key)``.276 277:param key: The decoded form of the key for the cookie.278:param domain: The domain the cookie was set for.279:param path: The path the cookie was set for.280 281.. versionadded:: 2.3282�>Cookies are disabled. Create a client with 'use_cookies=True'.)rWr�r��r�rZ�domainr{s    r>�283get_cookie�Client.get_cookie>s:���=�=� ��P��
��}�}� � �&��!4�5�5rA)r^�origin_onlyr{c284�&�URc[S5e[RUS[	X4X5S.UD65nXGlUR(a'URRURS5 gXpRUR'g)a�Set a cookie to be sent in subsequent requests.285 286This is a convenience to skip making a test request to a route that would set287the cookie. To test the cookie, make a test request to a route that uses the288cookie value.289 290The client uses ``domain``, ``origin_only``, and ``path`` to determine which291cookies to send with a request. It does not use other cookie parameters that292browsers use, since they're not applicable in tests.293 294:param key: The key part of the cookie.295:param value: The value part of the cookie.296:param domain: Send this cookie with requests that match this domain. If297    ``origin_only`` is true, it must be an exact match, otherwise it may be a298    suffix match.299:param origin_only: Whether the domain must be an exact match to the request.300:param path: Send this cookie with requests that match this path either exactly301    or as a prefix.302:param kwargs: Passed to :func:`.dump_cookie`.303 304.. versionchanged:: 3.0305    The parameter ``server_name`` is removed. The first parameter is306    ``key``. Use the ``domain`` and ``origin_only`` parameters instead.307 308.. versionchanged:: 2.3309    The ``origin_only`` parameter was added.310 311.. versionchanged:: 2.3312    The ``domain`` parameter defaults to ``localhost``.313Nr\r��r^r{)	rWr��Cookie�_from_response_headerrra�_should_deleter��_storage_key)r�rZr[r^rar{r��cookies        r>�314set_cookie�Client.set_cookieQs���P�=�=� ��P��
��-�-��C��S�T��T�V�T�315��)��� � ��M�M���f�1�1�4�8�17�M�M�&�-�-�.rArcc�p�URc[S5eURRX#U4S5 g)a8Delete a cookie if it exists. Cookies are uniquely identified by316``(domain, path, key)``.317 318:param key: The decoded form of the key for the cookie.319:param domain: The domain the cookie was set for.320:param path: The path the cookie was set for.321 322.. versionchanged:: 3.0323    The ``server_name`` parameter is removed. The first parameter is324    ``key``. Use the ``domain`` parameter instead.325 326.. versionchanged:: 3.0327    The ``secure``, ``httponly`` and ``samesite`` parameters are removed.328 329.. versionchanged:: 2.3330    The ``domain`` parameter defaults to ``localhost``.331Nr\)rWr�r�r]s    r>�
delete_cookie�Client.delete_cookie�s9��0�=�=� ��P��
�	
�
�
���6��-�t�4rAc�^^�URcg[[U55mTR=(d SmSR	UU4SjURR555nU(aX!S'gUR
SS5 g)z�If cookies are enabled, set the ``Cookie`` header in the environ to the332cookies that are applicable to the request host and path.333 334:meta private:335 336.. versionadded:: 2.3337Nr�z; c3�># �UH8nURTTR5(dM&UR5v� M: g7fr�)�_matches_requestr{�_to_request_header)�.0�cr�urls  ��r>�	<genexpr>�.Client._add_cookies_to_wsgi.<locals>.<genexpr>�s:����338�+���!�!�+�s�x�x�8�
#�A� � �"�"�+�s339�%A�A�HTTP_COOKIE)rWrr+�hostnamer-r`r�)r�r�r[rrts   @@r>�_add_cookies_to_wsgi�Client._add_cookies_to_wsgi�sr����=�=� ����w�/�0���l�l�1�k���	�	�340��]�]�)�)�+�341�342���%*�M�"��K�K�
�t�,rAc��URcgUHjn[RXU5nUR(a(URR	UR343S5 MRXPRUR344'Ml g)z�If cookies are enabled, update the stored cookies from any ``Set-Cookie``345headers in the response.346 347:meta private:348 349.. versionadded:: 2.3350N)rWrdrerfr�rg)r�rr{rH�headerrhs      r>�_update_cookies_from_response�$Client._update_cookies_from_response�sb���=�=� ���F��1�1�+�V�L�F��$�$��
�
�!�!�&�"5�"5�t�<�5;�
�
�f�1�1�2�
rAc���URU5 [URXS9n[[	U55nURUR=(d SURUSRS55 U$)zFRuns the wrapped WSGI app with the given environment.351 352:meta private:353��bufferedr�rz354Set-Cookie)	ry�run_wsgi_apprTrr+r}rxr{�getlist)r�r�r�r�rts     r>r��Client.run_wsgi_app�si��	
�!�!�'�*�
�$�*�*�G�
G����w�/�0���*�*��L�L�'�K����2�a�5�=�=��3N�	355��	rAc��[UR5up4pVn[RURR356XVS9nUR
SS5SR
S5n	URR
S5n357U	S/:wa
X8lXHl	OU358n	X�:wa;U	[U3595*SU360:XaUR(d[S5eO[S	5eUR
S3615nURR
S3625nUS[U5U:XaU[UR5SUlO
XXlSUl
URS;aoUR S:waS
UlUR"b!UR"R%5 SUlSUlSUlUR*R-SS5 UR/X�S9$)znPerform a new request to the location given by the redirect363response to the previous request.364 365:meta private:366)r{r~rrr�.r�Nz-Following subdomain redirects is not enabled.z.Following external redirects is not supported.r�>�3�4�HEADr:zTransfer-Encodingr�)r�locationrjr��requestr�r�rr�r�r1rX�RuntimeErrorr�r{�status_coder�r�r
rFr�rHr��open)
r��responser�r�r�r{r�r��builder�
to_name_parts�from_name_parts�367path_parts�368root_partss
             r>�resolve_redirect�Client.resolve_redirect�s���,4�H�4E�4E�+F�(���&� �-�-����$�$�4�.�369�����S�!�,�Q�/�5�5�c�:�
�!�-�-�3�3�C�8���R�D� �!'��!�L�,�M��+��c�/�2�2�4�5��H��5�5�&�'V�W�W�6�#�#S�T�T��Z�Z��_�370��(�(�.�.�s�3�371��'��J��(�J�6���G�$7�$7� 8� :�;�G�L� �L�"$�G�����z�1��~�~��'�!&����#�#�/��$�$�*�*�,�'+��$�#'�G� �%)�G�"��O�O��� 3�T�:��y�y��y�4�4rA)r��follow_redirectsc�:�SnU(d�[U5S:Xa{USn[U[5(aUR5nOP[U[5(a$[RU5R5nO[U[5(aUnUc,[U0UD6nUR5nUR5 URURUS9nUR"USU06n	[5n372/nU(dU	$U	RS;a�U(d U	R5 U	R5 U	RU	R4nX�;a&[SU	RSU	RS	35eU373R!U5 [#U5U	lUR'U	5 UR)X�S9n	U	RS;aM�[#U5U	lU	R+UR,R5 U	$!UR5 f=f)374a�Generate an environ dict from the given arguments, make a375request to the application using it, and return the response.376 377:param args: Passed to :class:`EnvironBuilder` to create the378    environ for the request. If a single arg is passed, it can379    be an existing :class:`EnvironBuilder` or an environ dict.380:param buffered: Convert the iterator returned by the app into381    a list. If the iterator has a ``close()`` method, it is382    called automatically.383:param follow_redirects: Make additional requests to follow HTTP384    redirects until a non-redirect status is returned.385    :attr:`TestResponse.history` lists the intermediate386    responses.387 388.. versionchanged:: 2.1389    Removed the ``as_tuple`` parameter.390 391.. versionchanged:: 2.0392    The request input stream is closed when calling393    ``response.close()``. Input streams for redirects are394    automatically closed.395 396.. versionchanged:: 0.5397    If a dict is provided as file in the dict for the ``data``398    parameter the content type has to be called ``content_type``399    instead of ``mimetype``. This change was made for400    consistency with :class:`werkzeug.FileWrapper`.401 402.. versionchanged:: 0.5403    Added the ``follow_redirects`` parameter.404Nrrr�r�>�-�.�/�1r�r�zLoop detected: A z
 redirect to z was already made.)r1rSrjr8r�r�r(r
r�r�rVr�r��
make_sequencer�rN�addr��historyr�r��
call_on_closer�)
r�r�r�rr�r��argr��response_partsr��	redirectsr��new_redirect_entrys
             r>r��Client.open"s���L#'���#�d�)�q�.��q�'�C��#�~�.�.��/�/�+���C��&�&�(�5�5�c�:�F�F�H���C��)�)����?�$�d�5�f�5�G�
 �!�-�-�/���
�
���*�*�7�?�?�X�*�N���(�(�.�J�'�J���E�	�&(����O��"�"�'405�406���&�&�(���� �"*�"3�"3�X�5I�5I�!J��!�.�)�'��(<�(<�'=�>�#�,�,�-�-?�A���407
�M�M�,�-�$�W�~�H���N�N�8�$��,�,�X�,�I�H�3�"�"�'408�409�8 %�W�~�H��
�"�"�7�#7�#7�#=�#=�>��O��W�
�
��s�#H�Hc�0�SUS'UR"U0UD6$)z1Call :meth:`open` with ``method`` set to ``GET``.r:r��r��r�r�kws   r>r��410Client.get������8���y�y�$�%�"�%�%rAc�0�SUS'UR"U0UD6$)z2Call :meth:`open` with ``method`` set to ``POST``.�POSTr�r�r�s   r>�post�Client.post������8���y�y�$�%�"�%�%rAc�0�SUS'UR"U0UD6$)z1Call :meth:`open` with ``method`` set to ``PUT``.�PUTr�r�r�s   r>�put�411Client.put�r�rAc�0�SUS'UR"U0UD6$)z4Call :meth:`open` with ``method`` set to ``DELETE``.�DELETEr�r�r�s   r>�delete�
Client.delete�s����8���y�y�$�%�"�%�%rAc�0�SUS'UR"U0UD6$)z3Call :meth:`open` with ``method`` set to ``PATCH``.�PATCHr�r�r�s   r>�patch�Client.patch������8���y�y�$�%�"�%�%rAc�0�SUS'UR"U0UD6$)z5Call :meth:`open` with ``method`` set to ``OPTIONS``.�OPTIONSr�r�r�s   r>�options�Client.options�s�� ��8���y�y�$�%�"�%�%rAc�0�SUS'UR"U0UD6$)z2Call :meth:`open` with ``method`` set to ``HEAD``.r�r�r�r�s   r>�head�Client.head�r�rAc�0�SUS'UR"U0UD6$)z3Call :meth:`open` with ``method`` set to ``TRACE``.�TRACEr�r�r�s   r>�trace�Client.trace�r�rAc�P�S[U5RSUR<S3$)N�<� �>)r�rArTr�s r>�__repr__�Client.__repr__�s)���4��:�&�&�'�q��)9�)9�(<�A�>�>rA)rWrXrTrV)NTF)412rTr,rVztype[Response] | NonerYr<rXr<rJr�)r�r�)rZrTr^rTr{rTrJz
Cookie | None)r�)rZrTr[rTr^rTrar<r{rTr�r>rJr�)rZrTr^rTr{rTrJr�)r�r-rJr�)rrTr{rTrHz	list[str]rJr��F)r�r-r�r<rJ�&tuple[t.Iterable[bytes], str, Headers])r�rSr�r<rJrS)413rr>r�r<r�r<r�r>rJrS)rr>r�r>rJrSr?)rArBrCrDrEr�r_rirlryr}r�r�r�r�r�r�r�r�r�r�r�r�rLr�rAr>rPrPs����<37� �*/�C�$�C�0�C��	C�414$(�C�415�
C�<@C�6��6� #�6�9<�6�	�6�,�58�416"� ��58�
�58��58�417�58��
58��58��58�418�58�v"��5�
�5��	5�419�5�420�
5�>-�0<��<�&)�<�4=�<�	
�<�,:?�
�&�
�26�
�	/�
� 8=�=5�$�=5�04�=5�	�=5�D�!&�	c��c��c��	c�421�c�422�
c�J&�423&�424&�425&�426&�427&�428&�429&�430?rArPc��[U0UD6nUR5UR5 $!UR5 f=f)aTCreate a new WSGI environ dict based on the values passed.  The first431parameter should be the path of the request which defaults to '/'.  The432second one can either be an absolute path (in that case the host is433localhost:80) or a full path to the request with scheme, netloc port and434the path to the script.435 436This accepts the same arguments as the :class:`EnvironBuilder`437constructor.438 439.. versionchanged:: 0.5440   This function is now a thin wrapper over :class:`EnvironBuilder` which441   was added in 0.5.  The `headers`, `environ_base`, `environ_overrides`442   and `charset` parameters were added.443)rjr4r
)rr�r�s   r>�create_environr��s7���d�-�f�-�G���"�"�$��
�
����
�
��s�-�?c�^444^�[U5R5nSm/m445SU446U4SjjnU"X5n[USS5n[U5nU(a[	U5nUbU"5 ODUHnT447RU5 TcM O T448(a[
T449U5nUbXdLa[Xe5nTup�Xh[U	54$!UbU"5 ff=f)a�Return a tuple in the form (app_iter, status, headers) of the450application output.  This works best if you pass it an application that451returns an iterator all the time.452 453Sometimes applications may use the `write()` callable returned454by the `start_response` function.  This tries to resolve such edge455cases automatically.  But if you don't get the expected output you456should set `buffered` to `True` which enforces buffering.457 458If passed an invalid WSGI application the behavior of this function is459undefined.  Never pass non-conforming WSGI applications to this function.460 461:param app: the application to execute.462:param buffered: set to `True` to enforce buffering.463:return: tuple in the form ``(app_iter, status, headers)``464Nc�n>�U(aUSRUS5eX4mTR$!Snf=f)Nrr)�with_tracebackr�)�statusrH�exc_info�bufferr�s   ��r>�start_response�$run_wsgi_app.<locals>.start_response�sC����
 ��q�k�0�0��!��=�=��$���}�}��� ��s�0�4r
r�)	rr(rO�iterrer�rr*r)�appr�r�r��app_rv�465close_func�app_iter�itemr�rHr�r�s          @@r>r�r��s����*�7�#�(�(�*�G�9=�H��F�466�467���
)�F����$�/�J�"&�v�,�H��	��H�~�H��%�����D��M�M�$���#��	���V�X�.�H��!�h�&<�&�x�<�H��O�F��W�W�-�-�-��+�%���&�s�B<�<
C	c�^�\rSrSr%SrSrS\S'S\S'SrSS
U4S	jjjr\	SS468j5r469SrU=r$)rSia:class:`~werkzeug.wrappers.Response` subclass that provides extra470information about requests made with the test :class:`Client`.471 472Test client requests will always return an instance of this class.473If a custom response class is passed to the client, it is474subclassed along with this to support test information.475 476If the test request included large files, or if the application is477serving a file, call :meth:`close` to close any open files and478prevent Python showing a ``ResourceWarning``.479 480.. versionchanged:: 2.2481    Set the ``default_mimetype`` to None to prevent a mimetype being482    assumed if missing.483 484.. versionchanged:: 2.1485    Response instances cannot be treated as tuples.486 487.. versionadded:: 2.0488    Test client methods always return instances of this class.489Nr(r�ztuple[TestResponse, ...]r�Fc�T>�[TU]"XU40UD6 X@lXPlXU4Ulgr�)�superr�r�r��
_compat_tuple)r�r�r�rHr�r�r��	__class__s       �r>r��TestResponse.__init__9s0���	����7�=�f�=�����%�w�6��rAc� �URSS9$)zfThe response data as text. A shortcut for490``response.get_data(as_text=True)``.491 492.. versionadded:: 2.1493T)�as_text)�get_datar�s r>�text�TestResponse.textGs���}�}�T�}�*�*rA)r�r�r�)r�)r�zt.Iterable[bytes]r�rTrHrr�r(r�ztuple[TestResponse]r�r>rJr�r?)
rArBrCrDrE�default_mimetyperH�__test__r�r&r�rL�
__classcell__)r�s@r>rSrSs�����,�����&�%��494�H�(*�
7�#�7��7��	7�495�7�%�
7��7�496�7�7��+��+rArSc���\rSrSr%SrS\S'S\S'S\S'S\S'S\S	'S497\S'S\S'S
\S'S\S'S\S'S\S'S\S'SSjrSSjr\SSj5r	\498SSj5r\499S Sj5rSr
g)!rdiQz�A cookie key, value, and parameters.500 501The class itself is not a public API. Its attributes are documented for inspection502with :meth:`.Client.get_cookie` only.503 504.. versionadded:: 2.3505rTrZr[�decoded_key�
decoded_valuezdatetime | None�expiresr;�max_ager^r<rar{zbool | None�secure�	http_onlyrn�	same_sitec���XR:H=(db UR(+=(aJ URUR5=(a( US[UR5*RS5=(az X R:H=(de URUR5=(aC U[UR5URRS5-506SRS5$)Nr�r�)r^ra�endswithr1r{�507startswith)r�rr{s   r>rp�Cookie._matches_request�s����;�;�&�
��$�$�$�C��(�(����5�C�� 3�3�t�{�{�#3�"3�4�=�=�c�B�
508�
�I�I��
�����	�	�*�U���T�Y�Y��$�)�)�*<�*<�S�*A�A�C�D�O�O�PS�T�
	509rAc�8�URSUR3$)N�=)rZr[r�s r>rq�Cookie._to_request_header�s���(�(��1�T�Z�Z�L�)�)rAc���URS5up4nURS5updn[[U5R55up�0n510UR	S5HNnURS5up�nU
(aUR5OSX�R5R
5'MP U"UR5UR5UU	[U511RS55SU512;a[U513S=(d S5OSU514RS5=(d USU515;U516RS5=(d URS5S=(d SS	U517;S518U519;U520RS5S9$)
Nr�r�r�zmax-agerr^r{r�r��httponly�samesite)rZr[r�r�r�r�r^rar{r�r�r�)�	partition�nextrrdr�r��lowerrr�rK�521rpartition)r�rr{r|r%�parameters_strrZr[r�r��paramsr��k�seprfs               r>re�Cookie._from_response_header�s=��$*�$4�$4�S�$9�!��>��(�(��-�
���%)�,�v�*>�*D�*D�*F�%G�"����"�(�(��-�D����s�+�I�A�A�58����	�d�F�7�7�9�?�?�$�%�.���	�	���+�+�-�#�'��v�z�z�)�4�5�3<��3F�C��y�)�.�Q�/�D��:�:�h�'�6�;� ��.����F�#�E�t���s�';�A�'>�E�#��v�%� �F�*��j�j��,�
522�
	523rAc�H�URURUR4$r�)r^r{r�r�s r>rg�Cookie._storage_key�s���{�{�D�I�I�t�'7�'7�7�7rAc��URS:H=(d2 URSL=(a URR5S:H$)Nr)r�r��	timestampr�s r>rf�Cookie._should_delete�s;���|�|�q� �524��L�L��$�F����)?�)?�)A�Q�)F�	525rAr�N)rrTr{rTrJr<r?)rrTr{rTr|rTrJzte.Self)rJztuple[str, str, str])rJr<)rArBrCrDrErHrprqrIrerJrgrfrLr�rAr>rdrdQs����526
�H�;��J�;���J���L�
��:�
���
�K�S�����I�/���#���%���%�527� *��528��529�2�8��8��530��531rArd)Ti�N)532rB�t.Mapping[str, t.Any]rWr<r<rKrXrnrJztuple[t.IO[bytes], int, str]r�)r`rrXrnrJztuple[str, bytes])rBrrJzt.Iterator[tuple[str, t.Any]])rr>r�r>rJr-r�)r�r,r�r-r�r<rJr�)P�533__future__r�dataclassesrPr��typingr2�collectionsrr�ior�	itertoolsrr�tempfiler	r534�urllib.parserrr
�	_internalrrr�datastructuresrrrrrrrr�rrrrr�sansio.multipartrrr r!r"r#�urlsr$r%�utilsr&r'�wrappers.requestr(�wrappers.responser)�wsgir*r+�
TYPE_CHECKING�typing_extensions�te�_typeshed.wsgir,r-r^rarN�TypeVarrgrjrrNrPr�r�rS�	dataclassrdr�rAr>�<module>r&s���"���535��#�����"�� �!�#�#�+�+�)�(�-�*�)�#�%��%���&�"�&�#�"�.�&���"�#�%�'�!�!��?�?�"�.�.�536���	W$�537�W$��W$��W$��	W$�538"�W$�v;?�#�!�#�-7�#��#�
!� ���+�3L�M��J	'�J	'�Z�)��k?�k?�\
�0FK�E.�	�E.�#2�E.�>B�E.�+�E.�P<+�8�<+�~
���f539�f540��f541rA
codekingpro/portable-devtools · Team Ai