o
    i                     @  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mZ d dl	m
Z
 d dlZd dlmZmZ d dlmZmZmZ ejdedd	 dddZG dd dZG dd dZdS )    )annotationsN)CallableMutableMapping)Any)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.   )
stacklevelscoper	   bodybytesreturndict[str, Any]c           	      C  sL  |  dddd}| d dd}||r#|t|d }| d ||| d d	d
| d  d|  ddt|tjdddd}|  dpLd}|d |d< |d |d< |  drf| d d |d< |  dg D ]7\}}|d}|dkr|d}n|dkrd}nd| 	 
d d!}|d}||v r|| d" | }|||< ql|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 r5   P/home/app/Keep/.python/lib/python3.10/site-packages/starlette/middleware/wsgi.pybuild_environ   sD   





r7   c                   @  s    e Zd ZdddZdddZdS )WSGIMiddlewareappCallable[..., Any]r   Nonec                 C  s
   || _ d S N)r9   )selfr9   r5   r5   r6   __init__L   s   
zWSGIMiddleware.__init__r   r	   receiver   sendr
   c                   s2   |d dks	J t | j|}|||I d H  d S )Ntyper   )WSGIResponderr9   )r=   r   r?   r@   Z	responderr5   r5   r6   __call__O   s   zWSGIMiddleware.__call__N)r9   r:   r   r;   )r   r	   r?   r   r@   r
   r   r;   )__name__
__module____qualname__r>   rC   r5   r5   r5   r6   r8   K   s    
r8   c                   @  sT   e Zd ZU ded< ded< d#ddZd$ddZd%ddZ	d&d'ddZd(d!d"ZdS ))rB   z*ObjectSendStream[MutableMapping[str, Any]]stream_sendz-ObjectReceiveStream[MutableMapping[str, Any]]stream_receiver9   r:   r   r	   r   r;   c                 C  s<   || _ || _d | _d | _ttj\| _| _	d| _
d | _d S )NF)r9   r   statusresponse_headersanyioZcreate_memory_object_streammathinfrG   rH   response_startedexc_info)r=   r9   r   r5   r5   r6   r>   Y   s   
zWSGIResponder.__init__r?   r   r@   r
   c              
     s  d}d}|r| I d H }|| dd7 }| dd}|st| j|}t 4 I d H <}|| j| | j4 I d H  tj	| j
|| jI d H  W d   I d H  n1 I d H sXw   Y  W d   I d H  n1 I d H smw   Y  | jd ur| jd | jd | jd d S )	N    Tr   	more_bodyFr   r   r   )r&   r7   r   rK   Zcreate_task_groupZ
start_soonsenderrG   	to_threadZrun_syncwsgistart_responserO   with_traceback)r=   r?   r@   r   rQ   messager2   Z
task_groupr5   r5   r6   rC   b   s$   *(
zWSGIResponder.__call__c              	     sf   | j 4 I d H  | j 2 z3 d H W }||I d H  q6 W d   I d H  d S 1 I d H s,w   Y  d S r<   )rH   )r=   r@   rW   r5   r5   r6   rR   r   s   .zWSGIResponder.senderNrI   strrJ   list[tuple[str, str]]rO   r   c                 C  sZ   || _ | js+d| _|dd\}}t|}dd |D }tj| jjd||d d S d S )NT r   c                 S  s0   g | ]\}}|  d  |  d fqS )r   )stripr'   lower).0r3   r4   r5   r5   r6   
<listcomp>   s    z0WSGIResponder.start_response.<locals>.<listcomp>zhttp.response.start)rA   rI   r"   )	rO   rN   splitintrK   from_threadrunrG   r@   )r=   rI   rJ   rO   Zstatus_code_stringr$   status_coder"   r5   r5   r6   rU   w   s    zWSGIResponder.start_responser2   r   rU   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)rA   r   rQ   rP   )rA   r   )r9   rK   ra   rb   rG   r@   )r=   r2   rU   chunkr5   r5   r6   rT      s   
zWSGIResponder.wsgi)r9   r:   r   r	   r   r;   )r?   r   r@   r
   r   r;   )r@   r
   r   r;   r<   )rI   rX   rJ   rY   rO   r   r   r;   )r2   r   rU   r:   r   r;   )	rD   rE   rF   __annotations__r>   rC   rR   rU   rT   r5   r5   r5   r6   rB   U   s   
 

	
	rB   )r   r	   r   r   r   r   )
__future__r   r+   rL   r-   warningscollections.abcr   r   typingr   rK   Z	anyio.abcr   r   Zstarlette.typesr   r	   r
   warnDeprecationWarningr7   r8   rB   r5   r5   r5   r6   <module>   s$    
4
