a
    h                     @  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mZ d dlm	Z	m
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)MutableMapping)AnyCallable)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, 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}||v 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_INFO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-lengthCONTENT_LENGTHzcontent-type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 r6   U/var/www/html/assistant/venv/lib/python3.9/site-packages/starlette/middleware/wsgi.pybuild_environ   sD    







r8   c                   @  s0   e Zd ZdddddZddddd	d
dZdS )WSGIMiddlewareCallable[..., Any]None)appr   c                 C  s
   || _ d S N)r<   )selfr<   r6   r6   r7   __init__K   s    zWSGIMiddleware.__init__r	   r   r
   )r   receivesendr   c                   s0   |d dksJ t | j|}|||I d H  d S )Ntyper   )WSGIResponderr<   )r>   r   r@   rA   Z	responderr6   r6   r7   __call__N   s    zWSGIMiddleware.__call__N)__name__
__module____qualname__r?   rD   r6   r6   r6   r7   r9   J   s   r9   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 )rC   z*ObjectSendStream[MutableMapping[str, Any]]stream_sendz-ObjectReceiveStream[MutableMapping[str, Any]]stream_receiver:   r	   r;   )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infrH   rI   response_startedexc_info)r>   r<   r   r6   r6   r7   r?   X   s    zWSGIResponder.__init__r   r
   )r@   rA   r   c              
     s  d}d}|r6| I d H }|| dd7 }| dd}qt| j|}t 4 I d H x}|| j| | j4 I d H 0 tj	| j
|| jI d H  W d   I d H  q1 I d H s0    Y  W d   I d H  q1 I d H s0    Y  | jd ur
| jd | jd | jd d S )	N    Tr   	more_bodyFr   r      )r'   r8   r   rL   Zcreate_task_groupZ
start_soonsenderrH   Z	to_threadZrun_syncwsgistart_responserP   with_traceback)r>   r@   rA   r   rR   messager3   Z
task_groupr6   r6   r7   rD   a   s    nzWSGIResponder.__call__)rA   r   c              	     sb   | j 4 I d H : | j 2 z3 d H W }||I d H  q6 W d   I d H  q^1 I d H sT0    Y  d S r=   )rI   )r>   rA   rX   r6   r6   r7   rT   q   s    zWSGIResponder.senderNstrzlist[tuple[str, str]]r   )rJ   rK   rP   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).0r4   r5   r6   r6   r7   
<listcomp>   s   z0WSGIResponder.start_response.<locals>.<listcomp>zhttp.response.start)rB   rJ   r!   )	rP   rO   splitintrL   from_threadrunrH   rA   )r>   rJ   rK   rP   Zstatus_code_stringr%   status_coder!   r6   r6   r7   rV   v   s    zWSGIResponder.start_responser   )r3   rV   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)rB   r   rR   rQ   )rB   r   )r<   rL   ra   rb   rH   rA   )r>   r3   rV   chunkr6   r6   r7   rU      s    
zWSGIResponder.wsgi)N)	rE   rF   rG   __annotations__r?   rD   rT   rV   rU   r6   r6   r6   r7   rC   T   s   
		 rC   )
__future__r   r,   rM   r.   warningscollections.abcr   typingr   r   rL   Z	anyio.abcr   r   Zstarlette.typesr   r	   r
   warnDeprecationWarningr8   r9   rC   r6   r6   r6   r7   <module>   s    4
