
    Ti)                     0   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  \R,                  (       a  S SK
Jr  S
SKJr   " S S\R4                  R6                  5      r " S S\5      r " S S\5      rg)    N)contextmanager)	ExitStack)copy)TracebackType)urlsplit)	CliRunner)Client)Request   )
ScriptInfo)SessionMixin)TestResponse)Flaskc                     ^  \ rS rSrSr    SSSS\S\R                  \   S\R                  \   S	\R                  \   S
\R                  S\R                  SS4U 4S jjjr	S\R                  S\R                  S\4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`.
Nappr   pathbase_url	subdomain
url_schemeargskwargsreturnc                   > 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                  (       a4  [        U
R                  [        5      (       a  S	OS
nX+U
R                  -   -  nXl        [        TU ]4  " 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lstripr   query
isinstancebytesr   super__init__)selfr   r   r   r   r   r   r   	http_hostapp_rooturlsep	__class__s               _/var/www/html/backend/Backoffice_Marketplace/venv/lib/python3.13/site-packages/flask/testing.pyr.   EnvironBuilder.__init__,   s.    	ZD #
=
 	F F		F 
 

}5DIzz"45H(k9+6	! ZZ(>?
4.C::+,C

0Gi/HHOOC()+  88Dyy(E::dcii'9$9&9    objc                 P    U R                   R                  R                  " U40 UD6$ )zSerialize ``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/   r8   r   s      r5   
json_dumpsEnvironBuilder.json_dumpsT   s"     xx}}""31&11r7   r   )r!   NNN)__name__
__module____qualname____firstlineno____doc__strtOptionalAnyr.   r<   __static_attributes____classcell__r4   s   @r5   r   r      s    0 $(%)&*&:&: &: **S/	&:
 ::c?&: JJsO&: uu&: %%&: 
&: &:P2aee 2quu 2 2 2r7   r   c                     ^  \ rS rSr% SrS\S'   S\R                  S\R                  SS4U 4S	 jjr\	S\R                  S\R                  S\R                  \SS4   4S
 j5       rS rS rSSS.S\R                  S\S\S\R                  SS4
U 4S jjjrSS jrS\R$                  \   S\R$                  \   S\R$                  \   SS4S jrSrU =r$ )FlaskClient]   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   applicationr   r   r   Nc                    > [         TU ]  " U0 UD6  SU l        / U l        [	        5       U l        SS[        R                   3S.U l        g )NFz	127.0.0.1z	werkzeug/)REMOTE_ADDRHTTP_USER_AGENT)	r-   r.   preserve_context_new_contextsr   _context_stackwerkzeug__version__environ_base)r/   r   r   r4   s      r5   r.   FlaskClient.__init__m   sM    $)&) %>@'k&!*8+?+?*@A
r7   c              /   $  #    [        U S5      (       a  U R                  OU R                  nUc  [        S5      eU R                  nUR
                  " U0 UD6n[        U S5      (       a&  U R                  UR                  R                  5        O/U R                  R                  UR                  R                  5        U   UR                  R                  XER                  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                  XFU5        SSS5        [        U S5      (       ah   U R!                  UR                  R"                  R%                  S5      S   UR                  R&                  UR(                  R+                  S	5      5        gU R                  R-                  UR                  R                  UR(                  5        g! , (       d  f       GN-= f! , (       d  f       N= f! [         aT    U R!                  UR                  R"                  R%                  S5      S   UR(                  R+                  S	5      5         gf = 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.
_cookiesNz>Cookies are disabled. Create a client with 'use_cookies=True'._add_cookies_to_wsgiz'Session backend did not open a session._update_cookies_from_response:r   z
Set-Cookie)hasattrrZ   
cookie_jar	TypeErrorrN   test_request_contextr[   requestenvironinject_wsgisession_interfaceopen_sessionRuntimeErrorresponse_classis_null_sessionsave_sessionr\   host	partitionr   headersgetlistextract_wsgi)r/   r   r   cookie_storager   ctxsessresps           r5   session_transactionFlaskClient.session_transactionw   s    * +2$
*C*C!P  &&774/00%%ckk&9&9:OO''(;(;<((55c;;GD  <HII
!!#  0066!!..s$?  489922KK$$..s3A6KK$$LL((6 OO((##T\\? S S  22KK$$..s3A6LL((6s]   B>J &H&AJ3HJ*A&H/ <J
HJ
H,(J/AJ
JJJc                 z    0 U R                   EUEnU R                  (       a  U R                  R                  US'   U$ )Nzwerkzeug.debug.preserve_context)rW   rR   rS   append)r/   otherouts      r5   _copy_environFlaskClient._copy_environ   s<    ,"",e,  595G5G5N5NC12
r7   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)NrW   )rz   r&   r   rN   get_requestclose)r/   r   r   builders       r5   _request_from_builder_args&FlaskClient._request_from_builder_args   s`    !%!3!3FJJ~r4R!S~ !1!1CDCFC	&&(MMOGMMOs   A A1Fbufferedfollow_redirectsr   r   r   c                  > 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(                  (       aH  U R(                  R+                  5       nU R                  R-                  U5        U R(                  (       a  MH  U$ )Nr   )r   rW   r   )r+   rU   testr   dictBaseRequestr   rz   rW   r}   from_environrN   rc   r   rT   r~   r-   openr:   json_modulerS   popenter_context)
r/   r   r   r   r   r   rb   responsecmr4   s
            r5   r   FlaskClient.open   s    JGhmm22D+F
 
 $q'8==#?#?@@tAw-'+'9'9':N:N:TRT'U$!--/DGT**(55G!1!1@R@RSU@V 6 +- 
 tAw-"&"4"4W__"E 55dCG
 	!!#7<-   

  $//44   ##'')B--b1     r7   c                 L    U R                   (       a  [        S5      eSU l         U $ )NzCannot nest client invocationsT)rR   rg   r/   s    r5   	__enter__FlaskClient.__enter__   s$      ?@@ $r7   exc_type	exc_valuetbc                 F    SU l         U R                  R                  5         g )NF)rR   rT   r~   )r/   r   r   r   s       r5   __exit__FlaskClient.__exit__  s     !&!!#r7   )rT   rS   rW   rR   )r   rL   )r?   r@   rA   rB   rC   __annotations__rE   rG   r.   r   	Generatorr   rt   rz   r   r$   r   r   rF   typeBaseExceptionr   r   rH   rI   rJ   s   @r5   rL   rL   ]   s!    
aee 
quu 
 
 DUUD&'eeD	
\4-	.D DL !&	+uu+ + 	+
 %%+ 
+ +Z$**T"$ ::m,$ JJ}%	$
 
$ $r7   rL   c            	          ^  \ rS rSrSrSSS\R                  SS4U 4S jjr SS	\R                  S
\R                  S\R                  S\R                  4U 4S jjjrSr	U =r
$ )FlaskCliRunneri  zA :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`.
r   r   r   r   Nc                 2   > Xl         [        TU ]  " S0 UD6  g )N )r   r-   r.   )r/   r   r   r4   s      r5   r.   FlaskCliRunner.__init__  s    "6"r7   clir   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.
r8   c                     > T R                   $ )Nr>   r   s   r5   <lambda>'FlaskCliRunner.invoke.<locals>.<lambda>+  s	    $((r7   )
create_app)r   r   r   r-   invoke)r/   r   r   r   r4   s   `   r5   r   FlaskCliRunner.invoke  sB    " ;((,,C&2BCF5Mw~c2622r7   r>   )NN)r?   r@   rA   rB   rC   rE   rG   r.   r   rH   rI   rJ   s   @r5   r   r     se    
#G #quu # #
 043553'(uu3?@uu3	
3 3r7   r   )typingrE   
contextlibr   r   r   typesr   urllib.parser   werkzeug.testrU   click.testingr   r	   werkzeug.wrappersr
   r   r   r   sessionsr   TYPE_CHECKINGr   r   r   r   r   rL   r   r   r7   r5   <module>r      sj     %     !  #   4  "??*D2X]]11 D2Nl$& l$^!3Y !3r7   