U
    &%e*                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZm	Z	 e
de eeedddZG dd dZG d	d
 d
ZdS )    N)ReceiveScopeSendzstarlette.middleware.wsgi is deprecated and will be removed in a future release. Please refer to https://github.com/abersheeran/a2wsgi as a replacement.)scopebodyreturnc                 C   s,  | d |  dddd| d dd| d dd	| d
  d|  ddt|tjdddd}|  dpvd}|d |d< |d |d< |  dr| d d |d< |  dg D ]p\}}|d}|dkrd}n$|dkrd}nd|  dd }|d}||kr|| d! | }|||< q|S )"zE
    Builds a scope and request body into a WSGI environ object.
    method	root_path utf8latin1pathZquery_stringasciizHTTP/http_version)   r   schemehttpTF)REQUEST_METHODZSCRIPT_NAMEZ	PATH_INFOZQUERY_STRINGZSERVER_PROTOCOLzwsgi.versionzwsgi.url_schemez
wsgi.inputzwsgi.errorszwsgi.multithreadzwsgi.multiprocesszwsgi.run_onceserver)	localhostP   r   ZSERVER_NAMEr   ZSERVER_PORTclientZREMOTE_ADDRheaderszcontent-lengthZCONTENT_LENGTHzcontent-typeZCONTENT_TYPEZHTTP_-_,)	getencodedecodeioBytesIOsysstdoutupperreplace)r   r   environr   namevalueZcorrected_name r(   X/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/starlette/middleware/wsgi.pybuild_environ   s<    





r*   c                   @   s2   e Zd ZejddddZeeeddddZ	dS )WSGIMiddlewareN)appr   c                 C   s
   || _ d S N)r,   )selfr,   r(   r(   r)   __init__A   s    zWSGIMiddleware.__init__)r   receivesendr   c                    s0   |d dkst t| j|}|||I d H  d S )Ntyper   )AssertionErrorWSGIResponderr,   )r.   r   r0   r1   Z	responderr(   r(   r)   __call__D   s    zWSGIMiddleware.__call__)
__name__
__module____qualname__typingCallabler/   r   r   r   r5   r(   r(   r(   r)   r+   @   s   r+   c                   @   s~   e Zd ZejeddddZeeddddZ	eddd	d
Z
deejejeef  ejddddZeejddddZdS )r4   N)r,   r   r   c                 C   s<   || _ || _d | _d | _ttj\| _| _	d| _
d | _d S )NF)r,   r   statusresponse_headersanyioZcreate_memory_object_streammathinfstream_sendstream_receiveresponse_startedexc_info)r.   r,   r   r(   r(   r)   r/   K   s    zWSGIResponder.__init__)r0   r1   r   c                    s   d}d}|r6| I d H }|| dd7 }| dd}qt| j|}t 4 I d H N}|| j| | j4 I d H   tj	| j
|| jI d H  W 5 Q I d H R X W 5 Q I d H R X | jd k	r| jd | jd | jd d S )	N    Tr   	more_bodyFr   r      )r   r*   r   r=   Zcreate_task_groupZ
start_soonsenderr@   Z	to_threadZrun_syncwsgistart_responserC   with_traceback)r.   r0   r1   r   rE   messager%   Z
task_groupr(   r(   r)   r5   V   s    :
zWSGIResponder.__call__)r1   r   c              
      sH   | j 4 I d H * | j 2 z3 d H W }||I d H  q6 W 5 Q I d H R X d S r-   )rA   )r.   r1   rK   r(   r(   r)   rG   f   s    zWSGIResponder.sender)r;   r<   rC   r   c                 C   sV   || _ | jsRd| _|dd\}}t|}dd |D }tj| jjd||d d S )NT r   c                 S   s0   g | ](\}}|  d  |  d fqS )r   )stripr   lower).0r&   r'   r(   r(   r)   
<listcomp>v   s   z0WSGIResponder.start_response.<locals>.<listcomp>zhttp.response.start)r2   r;   r   )	rC   rB   splitintr=   from_threadrunr@   r1   )r.   r;   r<   rC   Zstatus_code_stringr   status_coder   r(   r(   r)   rI   k   s    zWSGIResponder.start_response)r%   rI   r   c                 C   sH   |  ||D ]}tj| jjd|dd qtj| jjddd d S )Nzhttp.response.bodyT)r2   r   rE   rD   )r2   r   )r,   r=   rS   rT   r@   r1   )r.   r%   rI   chunkr(   r(   r)   rH      s    
 zWSGIResponder.wsgi)N)r6   r7   r8   r9   r:   r   r/   r   r   r5   rG   strListTupleAnyrI   dictrH   r(   r(   r(   r)   r4   J   s   	 r4   )r   r>   r!   r9   warningsr=   Zstarlette.typesr   r   r   warnDeprecationWarningbytesr[   r*   r+   r4   r(   r(   r(   r)   <module>   s   .
