U
    s\j                     @   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 d dl	m
Z
mZmZ ede eeejeejf dddZG dd	 d	ZG d
d dZdS )    N)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.)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 r-   P/root/pica-gateway/venv/lib/python3.8/site-packages/starlette/middleware/wsgi.pybuild_environ   sD    







r/   c                   @   s<   e Zd Zejdejf ddddZeee	ddddZ
dS )	WSGIMiddleware.N)appr	   c                 C   s
   || _ d S N)r1   )selfr1   r-   r-   r.   __init__H   s    zWSGIMiddleware.__init__)r   receivesendr	   c                    s0   |d dkst t| j|}|||I d H  d S )Ntyper   )AssertionErrorWSGIResponderr1   )r3   r   r5   r6   Z	responderr-   r-   r.   __call__K   s    zWSGIMiddleware.__call__)__name__
__module____qualname__typingCallableAnyr4   r   r   r   r:   r-   r-   r-   r.   r0   G   s   r0   c                   @   s   e Zd ZU eejeejf  ed< e	ejeejf  ed< ej
dejf 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jeejf ej
dejf ddddZdS )r9   stream_sendstream_receive.N)r1   r   r	   c                 C   s<   || _ || _d | _d | _ttj\| _| _	d| _
d | _d S )NF)r1   r   statusresponse_headersanyioZcreate_memory_object_streammathinfrA   rB   response_startedexc_info)r3   r1   r   r-   r-   r.   r4   U   s    zWSGIResponder.__init__)r5   r6   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   rE   Zcreate_task_groupZ
start_soonsenderrA   Z	to_threadZrun_syncwsgistart_responserI   with_traceback)r3   r5   r6   r   rK   messager*   Z
task_groupr-   r-   r.   r:   `   s    :
zWSGIResponder.__call__)r6   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 r2   )rB   )r3   r6   rQ   r-   r-   r.   rM   p   s    zWSGIResponder.sender)rC   rD   rI   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>   s   z0WSGIResponder.start_response.<locals>.<listcomp>zhttp.response.start)r7   rC   r   )	rI   rH   splitintrE   from_threadrunrA   r6   )r3   rC   rD   rI   Zstatus_code_stringr   status_coder   r-   r-   r.   rO   u   s    zWSGIResponder.start_response)r*   rO   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)r7   r   rK   rJ   )r7   r   )r1   rE   rY   rZ   rA   r6   )r3   r*   rO   chunkr-   r-   r.   rN      s    
 zWSGIResponder.wsgi)N)r;   r<   r=   r   r>   MutableMappingstrr@   __annotations__r   r?   r   r4   r   r   r:   rM   ListTuplerO   DictrN   r-   r-   r-   r.   r9   Q   s    
	 r9   )r#   rF   r%   r>   warningsrE   Z	anyio.abcr   r   Zstarlette.typesr   r   r   warnDeprecationWarningbytesrb   r^   r@   r/   r0   r9   r-   r-   r-   r.   <module>   s   4
