U
    EZh
                     @  s   d dl mZ 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
 d dlmZmZmZ ede dddd	d
dZG dd dZG dd dZdS )    )annotationsN)ObjectReceiveStreamObjectSendStream)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.r   bytesdict[str, typing.Any])scopebodyreturnc           	      C  sP  |  dddd}| d dd}||rF|t|d }| d ||| d d	d
| d  d|  ddt|tjdddd}|  dpd}|d |d< |d |d< |  dr| d d |d< |  dg D ]r\}}|d}|dkrd}n&|dkrd}nd| 	 
d d!}|d}||krB|| d" | }|||< q|S )#zE
    Builds a scope and request body into a WSGI environ object.
    	root_path utf8latin1pathNmethodZ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
startswithlenioBytesIOsysstdoutupperreplace)	r
   r   script_nameZ	path_infoenvironr   namevalueZcorrected_name r0   `/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/starlette/middleware/wsgi.pybuild_environ   sD    







r2   c                   @  s0   e Zd ZdddddZddddd	d
dZdS )WSGIMiddleware typing.Callable[..., typing.Any]None)appr   c                 C  s
   || _ d S N)r6   )selfr6   r0   r0   r1   __init__J   s    zWSGIMiddleware.__init__r   r   r   )r
   receivesendr   c                   s0   |d dkst t| j|}|||I d H  d S )Ntyper   )AssertionErrorWSGIResponderr6   )r8   r
   r:   r;   Z	responderr0   r0   r1   __call__M   s    zWSGIMiddleware.__call__N)__name__
__module____qualname__r9   r?   r0   r0   r0   r1   r3   I   s   r3   c                   @  sz   e Zd ZU ded< ded< ddddd	d
ZddddddZdddddZddddddddZddddddZdS )r>   z8ObjectSendStream[typing.MutableMapping[str, typing.Any]]stream_sendz;ObjectReceiveStream[typing.MutableMapping[str, typing.Any]]stream_receiver4   r   r5   )r6   r
   r   c                 C  s<   || _ || _d | _d | _ttj\| _| _	d| _
d | _d S )NF)r6   r
   statusresponse_headersanyioZcreate_memory_object_streammathinfrC   rD   response_startedexc_info)r8   r6   r
   r0   r0   r1   r9   W   s    zWSGIResponder.__init__r   r   )r:   r;   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!   r2   r
   rG   Zcreate_task_groupZ
start_soonsenderrC   Z	to_threadZrun_syncwsgistart_responserK   with_traceback)r8   r:   r;   r   rM   messager-   Z
task_groupr0   r0   r1   r?   `   s    :
zWSGIResponder.__call__)r;   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 r7   )rD   )r8   r;   rS   r0   r0   r1   rO   p   s    zWSGIResponder.senderNstrzlist[tuple[str, str]]z
typing.Any)rE   rF   rK   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/   r0   r0   r1   
<listcomp>   s   z0WSGIResponder.start_response.<locals>.<listcomp>zhttp.response.start)r<   rE   r   )	rK   rJ   splitintrG   from_threadrunrC   r;   )r8   rE   rF   rK   Zstatus_code_stringr   status_coder   r0   r0   r1   rQ   u   s    zWSGIResponder.start_responser	   )r-   rQ   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)r<   r   rM   rL   )r<   r   )r6   rG   r\   r]   rC   r;   )r8   r-   rQ   chunkr0   r0   r1   rP      s    
zWSGIResponder.wsgi)N)	r@   rA   rB   __annotations__r9   r?   rO   rQ   rP   r0   r0   r0   r1   r>   S   s   
		 r>   )
__future__r   r&   rH   r(   typingwarningsrG   Z	anyio.abcr   r   Zstarlette.typesr   r   r   warnDeprecationWarningr2   r3   r>   r0   r0   r0   r1   <module>   s   4
