
     @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tz||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)      hhtz""""""""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I6Aq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 +Dt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{{63//#KKU;;	 ,GNf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IW_5HIIIk(K$,22488;#K-{')9:k
 
  &n6688  
 (NN	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NNNKKKL
23E ;sFJ'?2v/99:[fj!"F$45E$FF	 ?[fj!8U3V5EFV5WW
   # # # # # # # #EN EN EN EN EN& EN EN EN EN ENr   