+
    Nj'                    p   ^ RI Ht ^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H	t	 ^ RI
Ht ^ RIHt ^ RIt^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^RIHt ^RIHt ]P6                  '       d   ^ RIHt ^ RIHt ^RIH t   ! R R]PB                  PD                  4      t"Rs#R R lt$ ! R R]4      t% ! R R]4      t&R# )    )annotationsN)contextmanager)	ExitStack)copy)TracebackType)urlsplit)	CliRunner)Result)Client)Request)
ScriptInfo)SessionMixin)WSGIEnvironment)TestResponse)Flaskc                  B   a  ] tR t^tRtRR V 3R llltR R ltRtV ;t# )EnvironBuilderau  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               8    V ^8  d   QhRRRRRRRRRRR	R
RR
RR/# )   appr   pathstrbase_urlz
str | None	subdomain
url_schemeargst.AnykwargsreturnNone )formats   "O/data/cameron/venvs/serve_omidlab/lib/python3.14/site-packages/flask/testing.py__annotate__EnvironBuilder.__annotate__1   sZ     %: %:%: %: 	%:
 %: %: %: %: 
%:    c                	l  < V'       g   V'       g	   V'       d$   VR J\        T;'       g    T4      8w  g   Q R4       hVf   VP                  P                  R4      ;'       g    RpVP                  R,          p	V'       d   V RV 2pVf   VP                  R,          p\        V4      p
V
P                  ;'       g    T RV
P
                  ;'       g    T RV	P                  R4       2pV
P                  pV
P                  '       d   V R	V
P                   2pWn	        \        SV `,  ! W#.VO5/ VB  R # )
Nz8Cannot pass "subdomain" or "url_scheme" with "base_url".SERVER_NAME	localhostAPPLICATION_ROOT.PREFERRED_URL_SCHEMEz:///?)boolconfiggetr   schemenetloclstripr   queryr   super__init__)selfr   r   r   r   r   r   r   	http_hostapp_rooturl	__class__s   &&&&&&*,   r#   r7   EnvironBuilder.__init__1   s$    	ZD )))z*=+ 	
 G	
 + 

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

0G0Gi/HHOOC()+  88Dyyyq,9$9&9r&   c               $    V ^8  d   QhRRRRRR/# )r   objr   r   r   r   r!   )r"   s   "r#   r$   r%   X   s!     2 2e 2u 2 2r&   c                P    V P                   P                  P                  ! V3/ VB # )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)r8   r?   r   s   &&,r#   
json_dumpsEnvironBuilder.json_dumpsX   s"     xx}}""31&11r&   r   )r-   NNN)	__name__
__module____qualname____firstlineno____doc__r7   rC   __static_attributes____classcell__r<   s   @r#   r   r      s    *%: %:N2 2r&   r    c                   V ^8  d   QhRR/# )r   r   r   r!   )r"   s   "r#   r$   r$   d   s      s r&   c                 d    \         '       g    \        P                  P                  R 4      s \         # )werkzeug)_werkzeug_version	importlibmetadataversionr!   r&   r#   _get_werkzeug_versionrV   d   s'     %..66zBr&   c                     a  ] tR t^mt$ RtR]R&   R V 3R llt]R R l4       tR R	 lt	R
 R lt
RRRR/R V 3R llltR R ltR R ltRtV ;t# )FlaskClienta  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               $    V ^8  d   QhRRRRRR/# )r   r   r   r   r   r    r!   )r"   s   "r#   r$   FlaskClient.__annotate__}   s!     
 
e 
u 
 
r&   c                	   < \         SV `  ! V/ VB  R V n        . V n        \	        4       V n        RRRR\        4        2/V n        R# )FREMOTE_ADDRz	127.0.0.1HTTP_USER_AGENTz	Werkzeug/N)r6   r7   preserve_context_new_contextsr   _context_stackrV   environ_base)r8   r   r   r<   s   &*,r#   r7   FlaskClient.__init__}   sO    $)&) %<>'k;+@+B*CD
r&   c               $    V ^8  d   QhRRRRRR/# )r   r   r   r   r   zt.Iterator[SessionMixin]r!   )r"   s   "r#   r$   r[      s$     /
 /
/
&+/
	!/
r&   c              /  @  "   V P                   f   \        R4      hV P                  pVP                  ! V/ VB pV P	                  VP
                  P                  4       V;_uu_ 4        VP                  P                  W4P
                  4      pRRR4       Xf   \        R4      hVx  VP                  4       pVP                  P                  V4      '       d   R# V;_uu_ 4        VP                  P                  W5V4       RRR4       V P                  VP
                  P                  P                  R4      ^ ,          VP
                  P                   VP"                  P%                  R4      4       R#   + '       g   i     L; i  + '       g   i     L; i5i)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.:z
Set-Cookie)_cookies	TypeErrorrY   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)r8   r   r   r   ctxsessresps   &*,    r#   session_transactionFlaskClient.session_transaction   s:    ( == P  &&77!!#++"5"56S((55c;;GD  <HII
!!#  0066S!!..s$?  	**KK&&s+A.KKLL  .	
 S Ss>   A'F)&E8AFF'FA4F8F	FF	Fc                    V ^8  d   QhRRRR/# )r   otherr   r   r!   )r"   s   "r#   r$   r[      s      ?  r&   c                	|    / V P                   CVCpV P                  '       d   V P                  P                  VR &   V# )zwerkzeug.debug.preserve_context)rb   r_   r`   append)r8   r~   outs   && r#   _copy_environFlaskClient._copy_environ   s?    ,"",e,   595G5G5N5NC12
r&   c               $    V ^8  d   QhRRRRRR/# )r   r   ztuple[t.Any, ...]r   zdict[str, t.Any]r   BaseRequestr!   )r"   s   "r#   r$   r[      s$     	 	%	/?			r&   c                	    V P                  VP                  R / 4      4      VR &   \        V P                  .VO5/ VB p VP	                  4       VP                  4        #   TP                  4        i ; i)rb   )r   r1   r   rY   get_requestclose)r8   r   r   builders   &&& r#   _request_from_builder_args&FlaskClient._request_from_builder_args   sb     "&!3!3FJJ~r4R!S~ !1!1CDCFC	&&(MMOGMMOs   A A1bufferedFfollow_redirectsc          
     ,    V ^8  d   QhRRRRRRRRRR/# )	r   r   r   r   r/   r   r   r   r   r!   )r"   s   "r#   r$   r[      s<     + ++ + 	+
 + 
+r&   c               	  < V'       EdS   \        V^ ,          \        P                  P                  \        \
        34      '       Ed   \        V^ ,          \        P                  P                  4      '       dN   \        V^ ,          4      pT P                  VP                  ;'       g    / 4      Vn        VP                  4       pM\        V^ ,          \        4      '       dH   \        P                  V^ ,          V P                  V P                  / 4      R7      P                  4       pMD\        V^ ,          4      pV P                  VP                  4      Vn        MV P                  W44      pV P                  P                  4        \         S	V `E  VVVR7      pV P                  P$                  Vn        V P(                   F  pV P                  P+                  V4       K   	  V P(                  P-                  4        V# )r   )r   rb   )r   r   )
isinstancerQ   testr   dictr   r   r   rb   r   from_environrY   rl   r   ra   r   r6   openrA   json_moduler`   enter_contextclear)
r8   r   r   r   r   r   rk   responsecmr<   s
   &$$*,    r#   r   FlaskClient.open   s    4JGhmm22D+F
 
 $q'8==#?#?@@tAw-'+'9'9':N:N:T: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 % 	  "r&   c                   V ^8  d   QhRR/# )r   r   rX   r!   )r"   s   "r#   r$   r[      s      ; r&   c                	N    V P                   '       d   \        R 4      hRV n         V # )zCannot nest client invocationsT)r_   ro   r8   s   &r#   	__enter__FlaskClient.__enter__   s'       ?@@ $r&   c               (    V ^8  d   QhRRRRRRRR/# )	r   exc_typeztype | None	exc_valuezBaseException | NonetbzTracebackType | Noner   r    r!   )r"   s   "r#   r$   r[      s2     $ $$ ($ !	$
 
$r&   c                	H    R V n         V P                  P                  4        R# )FN)r_   ra   r   )r8   r   r   r   s   &&&&r#   __exit__FlaskClient.__exit__   s     !&!!#r&   )ra   r`   rb   r_   )rF   rG   rH   rI   rJ   __annotations__r7   r   r{   r   r   r   r   r   rK   rL   rM   s   @r#   rX   rX   m   sg     
 
 /
 /
b	+ + "'	+ +Z$ $r&   rX   c                  H   a  ] tR tRtRtR V 3R lltRR V 3R llltRtV ;t# )	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`.
c               $    V ^8  d   QhRRRRRR/# )r   r   r   r   r   r   r    r!   )r"   s   "r#   r$   FlaskCliRunner.__annotate__  s!     # #E #U #t #r&   c                	4   < Wn         \        SV `  ! R/ VB  R # )Nr!   )r   r6   r7   )r8   r   r   r<   s   &&,r#   r7   FlaskCliRunner.__init__  s    "6"r&   c               (    V ^8  d   QhRRRRRRRR/# )r   clir   r   r   r   r
   r!   )r"   s   "r#   r$   r     s,     3 33',3?D3	3r&   c                   <a  Vf   S P                   P                  pRV9  d   \        V 3R lR7      VR&   \        SS `  ! W3/ VB # )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.
r?   c                    < S P                   # )NrE   r   s   r#   <lambda>'FlaskCliRunner.invoke.<locals>.<lambda>(  s	    $((r&   )
create_app)r   r   r   r6   invoke)r8   r   r   r   r<   s   f&&,r#   r   FlaskCliRunner.invoke  sB    " ;((,,C&2BCF5Mw~c2622r&   rE   )NN)	rF   rG   rH   rI   rJ   r7   r   rK   rL   rM   s   @r#   r   r   	  s!    
# #3 3 3r&   r   )'
__future__r   importlib.metadatarS   typingt
contextlibr   r   r   typesr   urllib.parser   werkzeug.testrQ   click.testingr	   r
   r   werkzeug.wrappersr   r   r   r   sessionsr   TYPE_CHECKING_typeshed.wsgir   r   r   r   r   r   rR   rV   rX   r   r!   r&   r#   <module>r      s    "   %     !  #     4  "???.*C2X]]11 C2L  Y$& Y$x!3Y !3r&   