o
    h}                     @  s  d dl mZ d dlZddlmZmZ ddlmZ ddlm	Z	 ej
r2d 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gZdddZdddZG dd deZG dd de	ZdS )    )annotationsN   )RequestResponse)AsyncByteStream   )AsyncBaseTransportASGITransportreturnboolc                  C  s6   zdd l } |  dkrW dS W dS  ty   Y dS w )Nr   trioTF)sniffiocurrent_async_libraryImportError)r    r   j/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/httpx/_transports/asgi.pyis_running_trio   s   r   Eventc                  C  s&   t  rdd l} |  S dd l}| S )Nr   )r   r   r   asyncio)r   r   r   r   r   create_event,   s
   r   c                   @  s    e Zd ZdddZddd	Zd
S )ASGIResponseStreambodylist[bytes]r
   Nonec                 C  s
   || _ d S N)_body)selfr   r   r   r   __init__8   s   
zASGIResponseStream.__init__typing.AsyncIterator[bytes]c                 C s   d | jV  d S )N    )joinr   )r   r   r   r   	__aiter__;   s   zASGIResponseStream.__aiter__N)r   r   r
   r   )r
   r   )__name__
__module____qualname__r   r!   r   r   r   r   r   7   s    
r   c                   @  s,   e Zd ZdZ			ddddZdddZdS )r	   a  
    A custom AsyncTransport that handles sending requests directly to an ASGI app.

    ```python
    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_exceptionsr   	root_pathstrclienttuple[str, int]r
   r   c                 C  s   || _ || _|| _|| _d S r   )r(   r*   r+   r-   )r   r(   r*   r+   r-   r   r   r   r   W   s   
zASGITransport.__init__requestr   r   c                   sJ  t jts	J dddidjd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}d fdd}z| |||I d H  W n ty   | jru   d u rdd u ri Y nw  sJ d usJ d usJ t }t|dS )Nhttpversionz3.0z1.1c                 S  s   g | ]
\}}|  |fqS r   )lower).0kvr   r   r   
<listcomp>o   s    z6ASGITransport.handle_async_request.<locals>.<listcomp>   ?r   )typeasgihttp_versionmethodheadersschemepathraw_pathquery_stringserverr-   r+   Fr
   dict[str, typing.Any]c                    s^   r  I d H  ddiS z	  I d H } W n ty(   ddddd Y S w d| ddS )Nr8   zhttp.disconnectTzhttp.requestr   F)r8   r   	more_body)wait	__anext__StopAsyncIteration)r   )request_body_chunksrequest_completeresponse_completer   r   receive   s   z3ASGITransport.handle_async_request.<locals>.receivemessage&typing.MutableMapping[str, typing.Any]r   c                   s   | d dkrrJ | d |  dg dd S | d dkrE r%J |  dd}|  d	d
}|r=jdkr= | |sG  d S d S d S )Nr8   zhttp.response.startstatusr<   Tzhttp.response.bodyr   r   rC   FHEAD)getis_setr;   appendset)rK   r   rC   )
body_partsr/   rI   response_headersresponse_startedstatus_coder   r   send   s    
z0ASGITransport.handle_async_request.<locals>.sendi  )r<   stream)r
   rB   )rK   rL   r
   r   )
isinstancerX   r   r;   r<   rawurlr=   r>   r?   splitqueryhostportr-   r+   r!   r   r(   	Exceptionr*   rR   rP   r   r   )r   r/   scoperJ   rW   rX   r   )rS   r/   rG   rH   rI   rT   rU   rV   r   handle_async_requestc   sR   

z"ASGITransport.handle_async_requestN)Tr%   r&   )
r(   r)   r*   r   r+   r,   r-   r.   r
   r   )r/   r   r
   r   )r"   r#   r$   __doc__r   rb   r   r   r   r   r	   ?   s    )r
   r   )r
   r   )
__future__r   typing_modelsr   r   _typesr   baser   TYPE_CHECKINGr   r   Unionr   MutableMappingr,   Any_MessageCallable	Awaitable_Receive_Sendr)   __all__r   r   r   r	   r   r   r   r   <module>   s,    

