§
    ¬˜ºh!'  ã                  ó<  — d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m	Z	 d dl
mZ d dlmZ d dlZd dlmZ d d	lmZ d d
lmZ ddlmZ ddlmZ ej        rd dlmZ ddlmZ  G d„ dej        j        ¦  «        Zda dd„Z! G d„ de¦  «        Z" G d„ de¦  «        Z#dS )é    )ÚannotationsN)Úcontextmanager)Ú	ExitStack)Úcopy)ÚTracebackType)Úurlsplit)Ú	CliRunner)ÚClient)ÚRequesté   )Ú
ScriptInfo)ÚSessionMixin)ÚTestResponse)ÚFlaskc                  ó6   ‡ — e Zd ZdZ	 	 	 	 ddˆ fd„Zdd„Zˆ xZS )ÚEnvironBuildera½  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ÚstrÚbase_urlú
str | NoneÚ	subdomainÚ
url_schemeÚargsút.AnyÚkwargsÚreturnÚNonec                ó  •— |s|s|r!|d ut          |p|¦  «        k    s
J d¦   «         ‚|€´|j                             d¦  «        pd}|j        d         }	|r|› d|› �}|€|j        d         }t          |¦  «        }
|
j        p|› d|
j        p|› d|	                     d¦  «        › �}|
j        }|
j        r+t          |
j        t          ¦  «        rd	nd
}|||
j        z   z  }|| _         t          ¦   «         j        ||g|¢R i |¤Ž d S )Nz8Cannot pass "subdomain" or "url_scheme" with "base_url".ÚSERVER_NAMEÚ	localhostÚAPPLICATION_ROOTú.ÚPREFERRED_URL_SCHEMEz://r   ó   ?ú?)Ú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               €úU/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/flask/testing.pyr2   zEnvironBuilder.__init__/   s}  ø€ ð ð 	F 	ð 	F¨Zð 	FØ˜DÐ ÝØÐ#˜ñ
ô 
ò=
ð =
ð =
ð Fñ	=
ô =
ð =
ð ÐØœ
Ÿš }Ñ5Ô5ÐD¸ˆIØ”zÐ"4Ô5ˆHàð 7Ø(Ð6Ð6¨9Ð6Ð6�	àÐ!Ø œZÐ(>Ô?�
å˜4‘.”.ˆCà”:Ð+ ð +ð +°´
Ð0G¸ið +ð +Ø—O’O CÑ(Ô(ð+ð +ð ð ”8ˆDàŒyð (Ý(¨¬µEÑ:Ô:ÐC�d�dÀ�Ø˜˜cœi™Ñ'�àˆŒØ�‰ŒÔ˜˜xÐ9¨$Ð9Ð9Ð9°&Ð9Ð9Ð9Ð9Ð9ó    Úobjc                ó2   —  | j         j        j        |fi |¤ŽS )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)r3   r;   r   s      r9   Ú
json_dumpszEnvironBuilder.json_dumpsW   s#   € ð #ˆtŒxŒ}Ô" 3Ð1Ð1¨&Ð1Ð1Ð1r:   )r   NNN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r;   r   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r2   r?   Ú__classcell__©r8   s   @r9   r   r      so   ø€ € € € € ðð ð0 Ø#Ø $Ø!%ð&:ð &:ð &:ð &:ð &:ð &:ð &:ðP2ð 2ð 2ð 2ð 2ð 2ð 2ð 2r:   r   Ú r   r   c                 ó\   — t           st          j                             d¦  «        a t           S )NÚwerkzeug)Ú_werkzeug_versionÚ	importlibÚmetadataÚversion© r:   r9   Ú_get_werkzeug_versionrN   c   s*   € õ ð CÝ%Ô.×6Ò6°zÑBÔBÐåÐr:   c                  óx   ‡ — e Zd ZU dZded<   dˆ fd	„Zedd„¦   «         Zd„ Zd„ Z	dddœdˆ fd„Z
d d„Zd!d„Zˆ xZS )"Ú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   Úapplicationr   r   r   r   r   c                ó®   •—  t          ¦   «         j        |i |¤Ž d| _        g | _        t	          ¦   «         | _        ddt          ¦   «         › �dœ| _        d S )NFz	127.0.0.1z	Werkzeug/)ÚREMOTE_ADDRÚHTTP_USER_AGENT)r1   r2   Úpreserve_contextÚ_new_contextsr   Ú_context_stackrN   Úenviron_base)r3   r   r   r8   s      €r9   r2   zFlaskClient.__init__|   se   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ø %ˆÔØ<>ˆÔÝ'™kœkˆÔà&ØDÕ+@Ñ+BÔ+BÐDÐDð
ð 
ˆÔÐÐr:   ú%t.Generator[SessionMixin, None, None]c              /  ó¾  K  — | j         €t          d¦  «        ‚| j        } |j        |i |¤Ž}|                      |j        j        ¦  «         |5  |j                             ||j        ¦  «        }ddd¦  «         n# 1 swxY w Y   |€t          d¦  «        ‚|V — | 
                    ¦   «         }|j                             |¦  «        rdS |5  |j                             |||¦  «         ddd¦  «         n# 1 swxY w Y   |                      |j        j                             d¦  «        d         |j        j        |j                             d¦  «        ¦  «         dS )a’  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Ú	TypeErrorrQ   Ú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)r3   r   r   r   ÚctxÚsessÚresps          r9   Úsession_transactionzFlaskClient.session_transaction†   s  è è € ð( Œ=Ð ÝØPñô ð ð ÔˆØ&ˆcÔ&¨Ð7°Ð7Ð7ˆØ×!Ò! #¤+Ô"5Ñ6Ô6Ð6àð 	Hð 	HØÔ(×5Ò5°c¸3¼;ÑGÔGˆDð	Hð 	Hð 	Hñ 	Hô 	Hð 	Hð 	Hð 	Hð 	Hð 	Hð 	Høøøð 	Hð 	Hð 	Hð 	Hð ˆ<ÝÐHÑIÔIÐIàˆ
ˆ
ˆ
Ø×!Ò!Ñ#Ô#ˆàÔ ×0Ò0°Ñ6Ô6ð 	ØˆFàð 	@ð 	@ØÔ!×.Ò.¨s°D¸$Ñ?Ô?Ð?ð	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@ð 	×*Ò*ØŒKÔ×&Ò& sÑ+Ô+¨AÔ.ØŒKÔØŒL× Ò  Ñ.Ô.ñ	
ô 	
ð 	
ð 	
ð 	
s$   Á!A;Á;A?ÂA?ÃC6Ã6C:Ã=C:c                óH   — i | j         ¥|¥}| j        r| j        j        |d<   |S )Nzwerkzeug.debug.preserve_context)rX   rU   rV   Úappend)r3   ÚotherÚouts      r9   Ú_copy_environzFlaskClient._copy_environ¸   s6   € Ø,�Ô"Ð, eÐ,ˆàÔ ð 	OØ59Ô5GÔ5NˆCÐ1Ñ2àˆ
r:   c                ó  — |                       |                     di ¦  «        ¦  «        |d<   t          | j        g|¢R i |¤Ž}	 |                     ¦   «         |                     ¦   «          S # |                     ¦   «          w xY w)NrX   )ru   r*   r   rQ   Úget_requestÚclose)r3   r   r   Úbuilders       r9   Ú_request_from_builder_argsz&FlaskClient._request_from_builder_argsÀ   s}   € Ø!%×!3Ò!3°F·J²J¸~ÈrÑ4RÔ4RÑ!SÔ!Sˆˆ~ÑÝ  Ô!1ÐC°DÐCÐCÐC¸FÐCÐCˆð	Ø×&Ò&Ñ(Ô(à�MŠM‰OŒOˆOˆOøˆG�MŠM‰OŒOˆOˆOøøøs   ÁA+ Á+BF©ÚbufferedÚfollow_redirectsr|   r(   r}   r   c               óÚ  •— |�rAt          |d         t          j        j        t          t
          f¦  «        �rt          |d         t          j        j        ¦  «        rKt          |d         ¦  «        }|                      |j        pi ¦  «        |_        | 	                    ¦   «         }n´t          |d         t          ¦  «        rNt           
                    |d         | j        |                      i ¦  «        ¬¦  «         	                    ¦   «         }nKt          |d         ¦  «        }|                      |j        ¦  «        |_        n|                      ||¦  «        }| j                             ¦   «          t!          ¦   «                              |||¬¦  «        }| j        j        |_        | j        r:| j                             ¦   «         }| j                             |¦  «         | j        °:|S )Nr   )r   rX   r{   )r/   rH   Útestr   ÚdictÚBaseRequestr   ru   rX   rw   Úfrom_environrQ   ra   rz   rW   rx   r1   Úopenr=   Újson_modulerV   ÚpopÚenter_context)
r3   r|   r}   r   r   ry   r`   ÚresponseÚcmr8   s
            €r9   rƒ   zFlaskClient.openÉ   sÉ  ø€ ð ñ 	D•JØ�ŒG•h”mÔ2µD½+ÐFñ
ô 
ñ 	Dõ ˜$˜qœ'¥8¤=Ô#?Ñ@Ô@ð FÝ˜t Aœw™-œ-�Ø'+×'9Ò'9¸'Ô:NÐ:TÐRTÑ'UÔ'U�Ô$Ø!×-Ò-Ñ/Ô/��Ý˜D œG¥TÑ*Ô*ð FÝ(×5Ò5Ø˜”G Ô!1À×@RÒ@RÐSUÑ@VÔ@Vð 6ñ ô ç’+‘-”-ð �õ
 ˜t Aœw™-œ-�Ø"&×"4Ò"4°W´_Ñ"EÔ"E�”�ð ×5Ò5°d¸FÑCÔCˆGð
 	Ô×!Ò!Ñ#Ô#Ð#å‘7”7—<’<ØØØ-ð  ñ 
ô 
ˆð
  $Ô/Ô4ˆÔð Ô ð 	2ØÔ#×'Ò'Ñ)Ô)ˆBØÔ×-Ò-¨bÑ1Ô1Ð1ð Ô ð 	2ð ˆr:   c                ó@   — | j         rt          d¦  «        ‚d| _         | S )NzCannot nest client invocationsT)rU   rd   ©r3   s    r9   Ú	__enter__zFlaskClient.__enter__ö   s*   € ØÔ ð 	AÝÐ?Ñ@Ô@Ð@Ø $ˆÔØˆr:   Úexc_typeútype | NoneÚ	exc_valueúBaseException | NoneÚtbúTracebackType | Nonec                óF   — d| _         | j                             ¦   «          d S )NF)rU   rW   rx   )r3   rŒ   rŽ   r�   s       r9   Ú__exit__zFlaskClient.__exit__ü   s'   € ð !&ˆÔØÔ×!Ò!Ñ#Ô#Ð#Ð#Ð#r:   )r   r   r   r   r   r   )r   r   r   r   r   rY   )
r   r   r|   r(   r}   r(   r   r   r   r   )r   rP   )rŒ   r�   rŽ   r�   r�   r‘   r   r   )r@   rA   rB   rC   Ú__annotations__r2   r   rp   ru   rz   rƒ   r‹   r“   rD   rE   s   @r9   rP   rP   l   sï   ø€ € € € € € ðð ð ÐÐÑð
ð 
ð 
ð 
ð 
ð 
ð ð/
ð /
ð /
ñ „^ð/
ðbð ð ðð ð ð Ø!&ð	+ð +ð +ð +ð +ð +ð +ð +ðZð ð ð ð$ð $ð $ð $ð $ð $ð $ð $r:   rP   c                  ó4   ‡ — e Zd ZdZdˆ fd„Z	 ddˆ fd„Zˆ xZS )ÚFlaskCliRunnerz®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`.
    r   r   r   r   r   r   c                óH   •— || _          t          ¦   «         j        di |¤Ž d S )NrM   )r   r1   r2   )r3   r   r   r8   s      €r9   r2   zFlaskCliRunner.__init__  s-   ø€ ØˆŒØ�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ð"Ð"r:   NÚclir   c                óŒ   •‡ — |€‰ j         j        }d|vrt          ˆ fd„¬¦  «        |d<    t          ¦   «         j        ||fi |¤ŽS )ac  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.
        Nr;   c                 ó   •— ‰ j         S )N)r   rŠ   s   €r9   ú<lambda>z'FlaskCliRunner.invoke.<locals>.<lambda>%  s	   ø€ ¸$¼(€ r:   )Ú
create_app)r   r˜   r   r1   Úinvoke)r3   r˜   r   r   r8   s   `   €r9   r�   zFlaskCliRunner.invoke  s]   øø€ ð" ˆ;Ø”(”,ˆCà˜ÐÐÝ&Ð2BÐ2BÐ2BÐ2BÐCÑCÔCˆF�5‰Mà�u‰wŒwŒ~˜c 4Ð2Ð2¨6Ð2Ð2Ð2r:   )r   r   r   r   r   r   )NN)r˜   r   r   r   r   r   r   r   )r@   rA   rB   rC   r2   r�   rD   rE   s   @r9   r–   r–     so   ø€ € € € € ðð ð
#ð #ð #ð #ð #ð #ð
 04ð3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3r:   r–   )r   r   )$Ú
__future__r   Úimportlib.metadatarJ   ÚtypingÚtÚ
contextlibr   r   r   Útypesr   Úurllib.parser   Úwerkzeug.testrH   Úclick.testingr	   r
   Úwerkzeug.wrappersr   r�   r˜   r   Úsessionsr   ÚTYPE_CHECKINGr   r   r   r   r   rI   rN   rP   r–   rM   r:   r9   ú<module>rª      sØ  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø  Ð  Ð  Ð  Ð  Ð  Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4à Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "à„?ð Ø*Ð*Ð*Ð*Ð*Ð*àÐÐÐÐÐðD2ð D2ð D2ð D2ð D2�X”]Ô1ñ D2ô D2ð D2ðN Ð ðð ð ð ðW$ð W$ð W$ð W$ð W$�&ñ W$ô W$ð W$ðt!3ð !3ð !3ð !3ð !3�Yñ !3ô !3ð !3ð !3ð !3r:   