ó
    |ñ:i…'  ã                  ój  • S SK Jr  S SKrS SKrS SKJr  S SKJr  S SK	J	r	  S SK
Jr  S SKJr  S SKrS SKJr  S S	KJr  S S
KJr  S SKJr  SSKJr  SSKJr  \R6                  (       a  S SKJr  S SKJr  SSKJ r    " S S\RB                  RD                  5      r"Sq#SS jr$ " S S\5      r% " S S\5      r&g)é    )ÚannotationsN)Úcontextmanager)Ú	ExitStack)Úcopy)ÚTracebackType)Úurlsplit)Ú	CliRunner)ÚResult)ÚClient)ÚRequesté   )Ú
ScriptInfo)ÚSessionMixin)ÚWSGIEnvironment)ÚTestResponse)ÚFlaskc                  ód   ^ • \ rS rSrSr    S               SU 4S jjjrSS jrSrU =r$ )	ÚEnvironBuilderé   au  An :class:`~werkzeug.test.EnvironBuilder`, that takes defaults from the
application.

:param app: The Flask application to configure the environment from.
:param path: URL path being requested.
:param base_url: Base URL where the app is being served, which
    ``path`` is relative to. If not given, built from
    :data:`PREFERRED_URL_SCHEME`, ``subdomain``,
    :data:`SERVER_NAME`, and :data:`APPLICATION_ROOT`.
:param subdomain: Subdomain name to append to :data:`SERVER_NAME`.
:param url_scheme: Scheme to use instead of
    :data:`PREFERRED_URL_SCHEME`.
:param json: If given, this is serialized as JSON and passed as
    ``data``. Also defaults ``content_type`` to
    ``application/json``.
:param args: other positional arguments passed to
    :class:`~werkzeug.test.EnvironBuilder`.
:param kwargs: other keyword arguments passed to
    :class:`~werkzeug.test.EnvironBuilder`.
c                óB  >• U(       d  U(       d  U(       a!  US L[        U=(       d    U5      :w  d   S5       eUcË  UR                  R                  S5      =(       d    SnUR                  S   n	U(       a  U SU 3nUc  UR                  S   n[        U5      n
U
R                  =(       d    U SU
R
                  =(       d    U SU	R                  S5       3nU
R                  nU
R                  (       a  U S	U
R                   3nXl	        [        TU ],  " X#/UQ70 UD6  g )
Nz8Cannot pass "subdomain" or "url_scheme" with "base_url".ÚSERVER_NAMEÚ	localhostÚAPPLICATION_ROOTÚ.ÚPREFERRED_URL_SCHEMEz://Ú/Ú?)ÚboolÚconfigÚgetr   ÚschemeÚnetlocÚlstripÚpathÚqueryÚappÚsuperÚ__init__)Úselfr&   r$   Úbase_urlÚ	subdomainÚ
url_schemeÚargsÚkwargsÚ	http_hostÚapp_rootÚurlÚ	__class__s              €ÚP/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/flask/testing.pyr(   ÚEnvironBuilder.__init__1   s  ø€ ö ¦	®ZØ˜DÐ Ü�)×)˜zÓ*ó=+ð 	
ð Gó	
ð +ð ÑØŸ
™
Ÿ™ }Ó5×D¸ˆIØ—z‘zÐ"4Ñ5ˆHæØ(˜k¨¨9¨+Ð6�	àÑ!Ø ŸZ™ZÐ(>Ñ?�
ä˜4“.ˆCà—:‘:×+ Ð,¨C°·
±
×0G¸iÐ/HØ�H—O‘O CÓ(Ð)ð+ð ð —8‘8ˆDà�y�yØ˜˜q §¡ Ð,�àŒÜ‰Ò˜Ð9¨$Ò9°&Ó9ó    c                óP   • U R                   R                  R                  " U40 UD6$ )z›Serialize ``obj`` to a JSON-formatted string.

The serialization will be configured according to the config associated
with this EnvironBuilder's ``app``.
)r&   ÚjsonÚdumps)r)   Úobjr.   s      r3   Ú
json_dumpsÚEnvironBuilder.json_dumpsX   s"   € ð �x‰x�}‰}×"Ò" 3Ñ1¨&Ñ1Ð1r5   ©r&   )r   NNN)r&   r   r$   Ústrr*   ú
str | Noner+   r>   r,   r>   r-   út.Anyr.   r?   ÚreturnÚNone)r9   r?   r.   r?   r@   r=   )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r(   r:   Ú__static_attributes__Ú__classcell__©r2   s   @r3   r   r      sy   ø† ñð0 Ø#Ø $Ø!%ð%:àð%:ð ð%:ð ð	%:ð
 ð%:ð ð%:ð ð%:ð ð%:ð 
÷%:ð %:÷N2ò 2r5   r   Ú c                 ób   • [         (       d  [        R                  R                  S5      q [         $ )NÚwerkzeug)Ú_werkzeug_versionÚ	importlibÚmetadataÚversion© r5   r3   Ú_get_werkzeug_versionrR   d   s'   € ÷ ÒÜ%×.Ñ.×6Ñ6°zÓBÐäÐr5   c                  óÌ   ^ • \ rS rSr% SrS\S'   SU 4S jjr\      SS j5       rSS jr	      SS jr
S	S	S
.         SU 4S jjjrSS jr        SS jrSrU =r$ )ÚFlaskClientém   aô  Works like a regular Werkzeug test client but has knowledge about
Flask's contexts to defer the cleanup of the request context until
the end of a ``with`` block. For general information about how to
use this class refer to :class:`werkzeug.test.Client`.

.. versionchanged:: 0.12
   `app.test_client()` includes preset default environment, which can be
   set after instantiation of the `app.test_client()` object in
   `client.environ_base`.

Basic usage is outlined in the :doc:`/testing` chapter.
r   Úapplicationc                óŠ   >• [         TU ]  " U0 UD6  SU l        / U l        [	        5       U l        SS[        5        3S.U l        g )NFz	127.0.0.1z	Werkzeug/)ÚREMOTE_ADDRÚHTTP_USER_AGENT)r'   r(   Úpreserve_contextÚ_new_contextsr   Ú_context_stackrR   Úenviron_base)r)   r-   r.   r2   s      €r3   r(   ÚFlaskClient.__init__}   sK   ø€ Ü‰Ò˜$Ð) &Ò)Ø %ˆÔØ<>ˆÔÜ'›kˆÔà&Ø!*Ô+@Ó+BÐ*CÐDñ
ˆÕr5   c              /  ó  #   • U R                   c  [        S5      eU R                  nUR                  " U0 UD6nU R	                  UR
                  R                  5        U   UR                  R                  X4R
                  5      nSSS5        Wc  [        S5      eUv •  UR                  5       nUR                  R                  U5      (       a  gU   UR                  R                  X5U5        SSS5        U R                  UR
                  R                  R                  S5      S   UR
                  R                   UR"                  R%                  S5      5        g! , (       d  f       Nß= f! , (       d  f       N†= f7f)a2  When used in combination with a ``with`` statement this opens a
session transaction.  This can be used to modify the session that
the test client uses.  Once the ``with`` block is left the session is
stored back.

::

    with client.session_transaction() as session:
        session['value'] = 42

Internally this is implemented by going through a temporary test
request context and since session handling could depend on
request variables this function accepts the same arguments as
:meth:`~flask.Flask.test_request_context` which are directly
passed through.
Nz>Cookies are disabled. Create a client with 'use_cookies=True'.z'Session backend did not open a session.Ú:r   z
Set-Cookie)Ú_cookiesÚ	TypeErrorrV   Útest_request_contextÚ_add_cookies_to_wsgiÚrequestÚenvironÚsession_interfaceÚopen_sessionÚRuntimeErrorÚresponse_classÚis_null_sessionÚsave_sessionÚ_update_cookies_from_responseÚhostÚ	partitionr$   ÚheadersÚgetlist)r)   r-   r.   r&   ÚctxÚsessÚresps          r3   Úsession_transactionÚFlaskClient.session_transaction‡   s6  é € ð( �=‰=Ñ ÜØPóð ð ×ÑˆØ×&Ò&¨Ð7°Ñ7ˆØ×!Ñ! #§+¡+×"5Ñ"5Ô6âØ×(Ñ(×5Ñ5°c¿;¹;ÓGˆD÷ ð ‰<ÜÐHÓIÐIàŠ
Ø×!Ñ!Ó#ˆà× Ñ ×0Ñ0°×6Ñ6ØâØ×!Ñ!×.Ñ.¨s¸$Ô?÷ ð 	×*Ñ*Ø�K‰K×Ñ×&Ñ& sÓ+¨AÑ.Ø�K‰K×ÑØ�L‰L× Ñ  Ó.õ	
÷ �Sú÷ �Süs8   ‚AFÁ &EÂAFÃE0Ã0A/FÅ
E-Å)FÅ0
E>Å:Fc                óz   • 0 U R                   EUEnU R                  (       a  U R                  R                  US'   U$ )Nzwerkzeug.debug.preserve_context)r]   rZ   r[   Úappend)r)   ÚotherÚouts      r3   Ú_copy_environÚFlaskClient._copy_environ¹   s<   € Ø,�×"Ñ"Ð, eÐ,ˆà× × Ø59×5GÑ5G×5NÑ5NˆCÐ1Ñ2àˆ
r5   c                óè   • U R                  UR                  S0 5      5      US'   [        U R                  /UQ70 UD6n UR	                  5       UR                  5         $ ! UR                  5         f = f)Nr]   )r{   r    r   rV   Úget_requestÚclose)r)   r-   r.   Úbuilders       r3   Ú_request_from_builder_argsÚ&FlaskClient._request_from_builder_argsÁ   sb   € ð "&×!3Ñ!3°F·J±J¸~ÈrÓ4RÓ!Sˆˆ~ÑÜ  ×!1Ñ!1ÐC°DÒC¸FÑCˆð	Ø×&Ñ&Ó(à�M‰M�OøˆG�M‰M�Oús   ¿A ÁA1F©ÚbufferedÚfollow_redirectsc               ó¶  >• U(       Ga2  [        US   [        R                  R                  [        [
        45      (       aû  [        US   [        R                  R                  5      (       aH  [        US   5      nU R                  UR                  =(       d    0 5      Ul        UR                  5       nO˜[        US   [        5      (       a@  [        R                  US   U R                  U R                  0 5      S9R                  5       nO@[        US   5      nU R                  UR                  5      Ul        OU R                  X45      nU R                  R                  5         [         T	U ]E  UUUS9nU R                  R$                  Ul        U R(                   H  nU R                  R+                  U5        M      U R(                  R-                  5         U$ )Nr   )r&   r]   rƒ   )Ú
isinstancerL   Útestr   ÚdictÚBaseRequestr   r{   r]   r~   Úfrom_environrV   rf   r�   r\   r   r'   Úopenr7   Újson_moduler[   Úenter_contextÚclear)
r)   r„   r…   r-   r.   r€   re   ÚresponseÚcmr2   s
            €r3   rŒ   ÚFlaskClient.openÌ   sŽ  ø€ ÷ ”JØ�‰G”h—m‘m×2Ñ2´D¼+ÐF÷
ñ 
ô ˜$˜q™'¤8§=¡=×#?Ñ#?×@Ñ@Ü˜t A™w›-�Ø'+×'9Ñ'9¸'×:NÑ:N×:TÐRTÓ'U�Ô$Ø!×-Ñ-Ó/‘Ü˜D ™G¤T×*Ñ*Ü(×5Ñ5Ø˜‘G ×!1Ñ!1À×@RÑ@RÐSUÓ@Vð 6ð ç‘+“-ñ ô
 ˜t A™w›-�Ø"&×"4Ñ"4°W·_±_Ó"E�•ð ×5Ñ5°dÓCˆGð
 	×Ñ×!Ñ!Ô#ä‘7‘<ØØØ-ð  ð 
ˆð
  $×/Ñ/×4Ñ4ˆÔð ×$Ô$ˆBØ×Ñ×-Ñ-¨bÖ1ñ %ð 	×Ñ× Ñ Ô"Øˆr5   c                óL   • U R                   (       a  [        S5      eSU l         U $ )NzCannot nest client invocationsT)rZ   ri   ©r)   s    r3   Ú	__enter__ÚFlaskClient.__enter__ù   s$   € Ø× × ÜÐ?Ó@Ð@Ø $ˆÔØˆr5   c                óF   • SU l         U R                  R                  5         g )NF)rZ   r\   r   )r)   Úexc_typeÚ	exc_valueÚtbs       r3   Ú__exit__ÚFlaskClient.__exit__ÿ   s   € ð !&ˆÔØ×Ñ×!Ñ!Õ#r5   )r\   r[   r]   rZ   )r-   r?   r.   r?   r@   rA   )r-   r?   r.   r?   r@   zt.Iterator[SessionMixin])ry   r   r@   r   )r-   ztuple[t.Any, ...]r.   zdict[str, t.Any]r@   rŠ   )
r-   r?   r„   r   r…   r   r.   r?   r@   r   )r@   rT   )r˜   ztype | Noner™   zBaseException | Nonerš   zTracebackType | Noner@   rA   )rB   rC   rD   rE   rF   Ú__annotations__r(   r   ru   r{   r�   rŒ   r•   r›   rG   rH   rI   s   @r3   rT   rT   m   sÜ   ø‡ ñð Ó÷
ð ð/
Øð/
Ø&+ð/
à	!ó/
ó ð/
ôbð	Ø%ð	Ø/?ð	à	ô	ð Ø!&ñ	+àð+ð ð+ð ð	+ð
 ð+ð 
÷+ð +ôZð$àð$ð (ð$ð !ð	$ð
 
÷$ò $r5   rT   c                  óT   ^ • \ rS rSrSrSU 4S jjr S       SU 4S jjjrSrU =r$ )	ÚFlaskCliRunneri	  z¢A :class:`~click.testing.CliRunner` for testing a Flask app's
CLI commands. Typically created using
:meth:`~flask.Flask.test_cli_runner`. See :ref:`testing-cli`.
c                ó2   >• Xl         [        TU ]  " S0 UD6  g )NrQ   )r&   r'   r(   )r)   r&   r.   r2   s      €r3   r(   ÚFlaskCliRunner.__init__  s   ø€ ØŒÜ‰ÒÑ"˜6Ó"r5   c                ó†   >^ • Uc  T R                   R                  nSU;  a  [        U 4S jS9US'   [        TT ]  " X40 UD6$ )a  Invokes a CLI command in an isolated environment. See
:meth:`CliRunner.invoke <click.testing.CliRunner.invoke>` for
full method documentation. See :ref:`testing-cli` for examples.

If the ``obj`` argument is not given, passes an instance of
:class:`~flask.cli.ScriptInfo` that knows how to load the Flask
app being tested.

:param cli: Command object to invoke. Default is the app's
    :attr:`~flask.app.Flask.cli` group.
:param args: List of strings to invoke the command with.

:return: a :class:`~click.testing.Result` object.
r9   c                 ó   >• T R                   $ )Nr<   r”   s   €r3   Ú<lambda>Ú'FlaskCliRunner.invoke.<locals>.<lambda>(  s	   ø€ ¸$¿(º(r5   )Ú
create_app)r&   Úclir   r'   Úinvoke)r)   r§   r-   r.   r2   s   `   €r3   r¨   ÚFlaskCliRunner.invoke  sB   ù€ ð" ‰;Ø—(‘(—,‘,ˆCà˜ÓÜ&Ô2BÑCˆF�5‰Mä‰wŠ~˜cÑ2¨6Ñ2Ð2r5   r<   )r&   r   r.   r?   r@   rA   )NN)r§   r?   r-   r?   r.   r?   r@   r
   )	rB   rC   rD   rE   rF   r(   r¨   rG   rH   rI   s   @r3   rŸ   rŸ   	  s<   ø† ñ÷
#ð
 04ð3Øð3Ø',ð3Ø?Dð3à	÷3ö 3r5   rŸ   )r@   r=   )'Ú
__future__r   Úimportlib.metadatarN   ÚtypingÚtÚ
contextlibr   r   r   Útypesr   Úurllib.parser   Úwerkzeug.testrL   Úclick.testingr	   r
   r   Úwerkzeug.wrappersr   rŠ   r§   r   Úsessionsr   ÚTYPE_CHECKINGÚ_typeshed.wsgir   r   r&   r   rˆ   r   rM   rR   rT   rŸ   rQ   r5   r3   Ú<module>r·      sƒ   ðÝ "ã Û Ý %Ý  Ý Ý Ý !ã Ý #Ý  Ý  Ý 4å Ý "à‡?‡?Ý.Ý*åôC2�X—]‘]×1Ñ1ô C2ðL Ð ôôY$�&ô Y$ôx!3�Yõ !3r5   