
    gt'                    ^   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  \R4                  (       a  S SKJr  S SKJr  SSKJr   " S S\R@                  RB                  5      r!Sq"SS jr# " S S\5      r$ " S S\5      r%g)    )annotationsN)contextmanager)	ExitStack)copy)TracebackType)urlsplit)	CliRunner)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              U/Users/Alptekin/Desktop/izin_takip/venv/lib/python3.13/site-packages/flask/testing.pyr'   EnvironBuilder.__init__0   s    	ZD #
=
 	F F		F 
 

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

0Gi/HHOOC()+  88Dyyq,9$9&9    c                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(   objr-   s      r2   
json_dumpsEnvironBuilder.json_dumpsW   s"     xx}}""31&11r4   r%   )r   NNN)r%   r   r#   strr)   
str | Noner*   r=   r+   r=   r,   t.Anyr-   r>   returnNone)r8   r>   r-   r>   r?   r<   )	__name__
__module____qualname____firstlineno____doc__r'   r9   __static_attributes____classcell__r1   s   @r2   r   r      sy    0 # $!%%:%: %: 	%:
 %: %: %: %: 
%: %:N2 2r4   r    c                 b    [         (       d  [        R                  R                  S5      q [         $ )Nwerkzeug)_werkzeug_version	importlibmetadataversion r4   r2   _get_werkzeug_versionrQ   c   s'     %..66zBr4   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$ )FlaskClientl   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_stackrQ   environ_base)r(   r,   r-   r1   s      r2   r'   FlaskClient.__init__|   sK    $)&) %<>'k&!*+@+B*CD
r4   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	TypeErrorrU   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          r2   session_transactionFlaskClient.session_transaction   s6    ( == P  &&77!!#++"5"56((55c;;GD  <HII
!!#  0066!!..s$?  	**KK&&s+A.KKLL  .	
 S Ss8   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\   rY   rZ   append)r(   otherouts      r2   _copy_environFlaskClient._copy_environ   s<    ,"",e,  595G5G5N5NC12
r4   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\   )rz   r   r   rU   get_requestclose)r(   r,   r-   builders       r2   _request_from_builder_args&FlaskClient._request_from_builder_args   sb     "&!3!3FJJ~r4R!S~ !1!1CDCFC	&&(MMOGMMOs   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(                  (       aH  U R(                  R+                  5       nU R                  R-                  U5        U R(                  (       a  MH  U$ )Nr   )r%   r\   r   )
isinstancerK   testr   dictBaseRequestr   rz   r\   r}   from_environrU   re   r   r[   r~   r&   openr6   json_modulerZ   popenter_context)
r(   r   r   r,   r-   r   rd   responsecmr1   s
            r2   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     r4   c                L    U R                   (       a  [        S5      eSU l         U $ )NzCannot nest client invocationsT)rY   rh   r(   s    r2   	__enter__FlaskClient.__enter__   s$      ?@@ $r4   c                F    SU l         U R                  R                  5         g )NF)rY   r[   r~   )r(   exc_type	exc_valuetbs       r2   __exit__FlaskClient.__exit__   s     !&!!#r4   )r[   rZ   r\   rY   )r,   r>   r-   r>   r?   r@   )r,   r>   r-   r>   r?   zt.Iterator[SessionMixin])rx   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?   rS   )r   ztype | Noner   zBaseException | Noner   zTracebackType | Noner?   r@   )rA   rB   rC   rD   rE   __annotations__r'   r   rt   rz   r   r   r   r   rF   rG   rH   s   @r2   rS   rS   l   s     
 /
/
&+/
	!/
 /
b	%	/?			 !&	++ + 	+
 + 
+ +Z$$ ($ !	$
 
$ $r4   rS   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  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                2   > Xl         [        TU ]  " S0 UD6  g )NrP   )r%   r&   r'   )r(   r%   r-   r1   s      r2   r'   FlaskCliRunner.__init__  s    "6"r4   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   r2   <lambda>'FlaskCliRunner.invoke.<locals>.<lambda>'  s	    $((r4   )
create_app)r%   clir   r&   invoke)r(   r   r,   r-   r1   s   `   r2   r   FlaskCliRunner.invoke  sB    " ;((,,C&2BCF5Mw~c2622r4   r;   )r%   r   r-   r>   r?   r@   )NN)r   r>   r,   r>   r-   r>   r?   r>   )	rA   rB   rC   rD   rE   r'   r   rF   rG   rH   s   @r2   r   r     s<    
#
 0433',3?D3	3 3r4   r   )r?   r<   )&
__future__r   importlib.metadatarM   typingt
contextlibr   r   r   typesr   urllib.parser   werkzeug.testrK   click.testingr	   r
   werkzeug.wrappersr   r   r   r   sessionsr   TYPE_CHECKING_typeshed.wsgir   r   r%   r   r   r   rL   rQ   rS   r   rP   r4   r2   <module>r      s    "   %     !  #   4  "??.*C2X]]11 C2L  Y$& Y$x!3Y !3r4   