§
     @gr  ã                  óî  — d dl mZ d dlZd dlZddlmZmZ ddlmZ ddl	m
Z
 ej        r!d dlZd dlZej        ej        ej        f         Zej        eej        f         Zej        g ej        e         f         Zej        ej        eej        f         gej        d         f         Zej        ej        eej        f         eegej        d         f         Zdd„Z G d„ de¦  «        Z G d„ de
¦  «        ZdS )é    )ÚannotationsNé   )ÚRequestÚResponse)ÚAsyncByteStreamé   )ÚAsyncBaseTransport)NNNÚreturnÚEventc                 ó|   — t          j        ¦   «         dk    rdd l}  | j        ¦   «         S dd l} |j        ¦   «         S )NÚtrior   )ÚsniffioÚcurrent_async_libraryr   r   Úasyncio)r   r   s     úJ/var/www/piapp/venv/lib/python3.11/site-packages/httpx/_transports/asgi.pyÚcreate_eventr      sD   € ÝÔ$Ñ&Ô&¨&Ò0Ð0ØˆˆˆàˆtŒz‰|Œ|ÐàˆˆˆàˆwŒ}‰ŒÐó    c                  ó   — e Zd Zd	d„Zd
d„ZdS )ÚASGIResponseStreamÚbodyúlist[bytes]r
   ÚNonec                ó   — || _         d S ©N)Ú_body)Úselfr   s     r   Ú__init__zASGIResponseStream.__init__)   s   € ØˆŒ
ˆ
ˆ
r   útyping.AsyncIterator[bytes]c               óD   K  — d                      | j        ¦  «        W V — d S )Nr   )Újoinr   )r   s    r   Ú	__aiter__zASGIResponseStream.__aiter__,   s)   è è € Ø�hŠh�t”zÑ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"r   N)r   r   r
   r   )r
   r   )Ú__name__Ú
__module__Ú__qualname__r   r!   © r   r   r   r   (   s<   € € € € € ðð ð ð ð#ð #ð #ð #ð #ð #r   r   c                  ó*   — e Zd ZdZ	 	 	 ddd„Zdd„ZdS )ÚASGITransporta  
    A custom AsyncTransport that handles sending requests directly to an ASGI app.
    The simplest way to use this functionality is to use the `app` argument.

    ```
    client = httpx.AsyncClient(app=app)
    ```

    Alternatively, you can setup the transport instance explicitly.
    This allows you to include any additional configuration arguments specific
    to the ASGITransport class:

    ```
    transport = httpx.ASGITransport(
        app=app,
        root_path="/submount",
        client=("1.2.3.4", 123)
    )
    client = httpx.AsyncClient(transport=transport)
    ```

    Arguments:

    * `app` - The ASGI application.
    * `raise_app_exceptions` - Boolean indicating if exceptions in the application
       should be raised. Default to `True`. Can be set to `False` for use cases
       such as testing the content of a client 500 response.
    * `root_path` - The root path on which the ASGI application should be mounted.
    * `client` - A two-tuple indicating the client IP and port of incoming requests.
    ```
    TÚ ©z	127.0.0.1é{   ÚappÚ_ASGIAppÚraise_app_exceptionsÚboolÚ	root_pathÚstrÚclientútuple[str, int]r
   r   c                ó>   — || _         || _        || _        || _        d S r   )r+   r-   r/   r1   )r   r+   r-   r/   r1   s        r   r   zASGITransport.__init__Q   s%   € ð ˆŒØ$8ˆÔ!Ø"ˆŒØˆŒˆˆr   Úrequestr   r   c              ƒ  ó  ‡‡‡‡‡	‡
‡‡K  — t          ‰j        t          ¦  «        sJ ‚dddid‰j        d„ ‰j        j        D ¦   «         ‰j        j        ‰j        j        ‰j        j	         
                    d¦  «        d         ‰j        j        ‰j        j        ‰j        j        f| j        | j        dœ}‰j                             ¦   «         Šd	Šd Šd Š
g Šd	Št#          ¦   «         Š	dˆˆˆ	fd„}dˆˆˆ	ˆ
ˆˆfd„}	 |                      |||¦  «        ƒ d {V —† n4# t&          $ r' | j        r‚ ‰	                     ¦   «          ‰€dŠ‰
€i Š
Y nw xY w‰	                     ¦   «         sJ ‚‰€J ‚‰
€J ‚t/          ‰¦  «        }t1          ‰‰
|¬¦  «        S )NÚhttpÚversionz3.0z1.1c                ó@   — g | ]\  }}|                      ¦   «         |f‘ŒS r%   )Úlower)Ú.0ÚkÚvs      r   ú
<listcomp>z6ASGITransport.handle_async_request.<locals>.<listcomp>i   s(   € ÐIÐIÐI©6¨A¨q˜Ÿš™œ A˜ÐIÐIÐIr   ó   ?r   )ÚtypeÚasgiÚhttp_versionÚmethodÚheadersÚschemeÚpathÚraw_pathÚquery_stringÚserverr1   r/   Fr
   údict[str, typing.Any]c               “  ó¼   •K  — ‰r‰                      ¦   «         ƒ d {V —† ddiS 	 ‰                     ¦   «         ƒ d {V —†} n# t          $ r dŠddddœcY S w xY wd| ddœS )Nr?   zhttp.disconnectTzhttp.requestr   F)r?   r   Ú	more_body)ÚwaitÚ	__anext__ÚStopAsyncIteration)r   Úrequest_body_chunksÚrequest_completeÚresponse_completes    €€€r   Úreceivez3ASGITransport.handle_async_request.<locals>.receive€   s¹   øè è € ð  ð 3Ø'×,Ò,Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ØÐ 1Ð2Ð2ðQØ0×:Ò:Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<��øÝ%ð Qð Qð QØ#'Ð Ø .¸È%ÐPÐPÐPÐPÐPðQøøøð +°DÀtÐLÐLÐLs   ¥A  Á AÁAÚmessager   c              “  ó„  •K  — | d         dk    r&‰rJ ‚| d         Š|                       dg ¦  «        ŠdŠd S | d         dk    r|‰                     ¦   «         rJ ‚|                       dd¦  «        }|                       d	d
¦  «        }|r ‰j        dk    r‰                     |¦  «         |s‰                     ¦   «          d S d S d S )Nr?   zhttp.response.startÚstatusrC   Tzhttp.response.bodyr   r   rK   FÚHEAD)ÚgetÚis_setrB   ÚappendÚset)	rS   r   rK   Ú
body_partsr4   rQ   Úresponse_headersÚresponse_startedÚstatus_codes	      €€€€€€r   Úsendz0ASGITransport.handle_async_request.<locals>.sendŽ   s÷   øè è € ð �vŒÐ"7Ò7Ð7Ø+Ð+Ð+Ð+à% hÔ/�Ø#*§;¢;¨y¸"Ñ#=Ô#=Ð Ø#'Ð Ð Ð à˜”Ð$8Ò8Ð8Ø,×3Ò3Ñ5Ô5Ð5Ð5Ð5Ø—{’{ 6¨3Ñ/Ô/�Ø#ŸKšK¨°UÑ;Ô;�	àð ,˜GœN¨fÒ4Ð4Ø×%Ò% dÑ+Ô+Ð+à ð ,Ø%×)Ò)Ñ+Ô+Ð+Ð+Ð+ð 9Ð8ð,ð ,r   iô  )rC   Ústream)r
   rI   )rS   rI   r
   r   )Ú
isinstancer`   r   rB   rC   ÚrawÚurlrD   rE   rF   ÚsplitÚqueryÚhostÚportr1   r/   r!   r   r+   Ú	Exceptionr-   rZ   rX   r   r   )r   r4   ÚscoperR   r_   r`   r[   rO   rP   rQ   r\   r]   r^   s    `    @@@@@@@r   Úhandle_async_requestz"ASGITransport.handle_async_request]   s,  øøøøøøøøè è € õ ˜'œ.­/Ñ:Ô:Ð:Ð:Ð:ð Ø Ð&Ø!Ø”nØIÐI°W´_Ô5HÐIÑIÔIØ”kÔ(Ø”KÔ$ØœÔ,×2Ò2°4Ñ8Ô8¸Ô;Ø#œKÔ-Ø”{Ô'¨¬Ô)9Ð:Ø”kØœð
ð 
ˆð  &œn×6Ò6Ñ8Ô8ÐØ Ðð ˆØÐØˆ
Ø ÐÝ(™NœNÐð	Mð 	Mð 	Mð 	Mð 	Mð 	Mð 	Mð 	Mð	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð*
	&Ø—(’(˜5 '¨4Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0øÝð 	&ð 	&ð 	&ØÔ(ð Øà×!Ò!Ñ#Ô#Ð#ØÐ"Ø!�ØÐ'Ø#%Ð øøð	&øøøð !×'Ò'Ñ)Ô)Ð)Ð)Ð)ØÐ&Ð&Ð&ØÐ+Ð+Ð+å# JÑ/Ô/ˆå˜Ð-=ÀfÐMÑMÔMÐMs   Ã7D Ä.EÅEN)Tr(   r)   )
r+   r,   r-   r.   r/   r0   r1   r2   r
   r   )r4   r   r
   r   )r"   r#   r$   Ú__doc__r   rj   r%   r   r   r'   r'   0   sc   € € € € € ðð ðF &*ØØ"4ð
ð 
ð 
ð 
ð 
ðXNð XNð XNð XNð XNð XNr   r'   )r
   r   )Ú
__future__r   Útypingr   Ú_modelsr   r   Ú_typesr   Úbaser	   ÚTYPE_CHECKINGr   r   ÚUnionr   ÚDictr0   ÚAnyÚ_MessageÚCallableÚ	AwaitableÚ_ReceiveÚ	CoroutineÚ_Sendr,   r   r   r'   r%   r   r   ú<module>r{      s«  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€à €€€à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø $Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $à	Ôð 4Ø€N€N€Nà€K€K€KàŒL˜œ¨¬
Ð2Ô3€Eð Œ;�s˜FœJ�Ô'€ØŒ?˜2˜vÔ/°Ô9Ð9Ô:€ØŒØ„[��f”j�Ô!Ð" FÔ$4Ð5EÔ$FÐFô	€ð Œ?Ø„[��f”j�Ô! 8¨UÐ3°VÔ5EÐFVÔ5WÐWô€ð
ð ð ð ð#ð #ð #ð #ð #˜ñ #ô #ð #ðENð ENð ENð ENð ENÐ&ñ ENô ENð ENð ENð ENr   