o
    [h	                     @   s   d dl Z d dlZd dlmZ d dlmZmZ d dlmZm	Z	m
Z
mZmZ ejegeje f Zejeegeje f ZG dd dZdS )    N)Request)ResponseStreamingResponse)ASGIAppMessageReceiveScopeSendc                   @   sf   e Zd ZddededdfddZdeded	eddfd
dZ	de
defddZde
dedefddZdS )BaseHTTPMiddlewareNappdispatchreturnc                 C   s$   || _ |d u r| j| _d S || _d S N)r   r   dispatch_func)selfr   r    r   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/starlette/middleware/base.py__init__   s   zBaseHTTPMiddleware.__init__scopereceivesendc                    s\   |d dkr|  |||I d H  d S t||d}| || jI d H }||||I d H  d S )Ntypehttp)r   )r   r   r   	call_next)r   r   r   r   requestresponser   r   r   __call__   s   zBaseHTTPMiddleware.__call__r   c                    s   t  }t   |j|j jd fdd}||   I d H }|d u r6  t	d|d dks>J dt
jtd f f fdd}t|d	 | d
}|d |_|S )Nr   c                	      s@   z I d H  W  d I d H  d S  d I d H  w r   )r   putr   )queuer   r   r   r   r   r   coro$   s   &z*BaseHTTPMiddleware.call_next.<locals>.corozNo response returned.r   zhttp.response.startc                    sH   	    I d H } | d u rn| d dksJ |  ddV  q  d S )NTr   zhttp.response.bodybody    )getresult)message)r   taskr   r   body_stream1   s   z1BaseHTTPMiddleware.call_next.<locals>.body_streamstatus)status_codecontentheaders)r   N)asyncioZget_event_loopQueuer   r   r   Zcreate_taskr"   r#   RuntimeErrortypingAsyncGeneratorbytesr   Zraw_headers)r   r   loopr   r$   r&   r   r   )r   r   r   r   r   r%   r   r      s&   	

zBaseHTTPMiddleware.call_nextr   c                    s   t  r   )NotImplementedError)r   r   r   r   r   r   r   @   s   zBaseHTTPMiddleware.dispatchr   )__name__
__module____qualname__r   DispatchFunctionr   r   r   r	   r   r   r   r   RequestResponseEndpointr   r   r   r   r   r
      s    	$r
   )r+   r.   Zstarlette.requestsr   Zstarlette.responsesr   r   Zstarlette.typesr   r   r   r   r	   Callable	Awaitabler7   r6   r
   r   r   r   r   <module>   s    