o
    m=8j}                     @  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 d dl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)create_collapsing_task_group)StarletteDeprecationWarning)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methodquery_stringasciizHTTP/http_version)   r   schemehttpTF)REQUEST_METHODSCRIPT_NAME	PATH_INFOQUERY_STRINGSERVER_PROTOCOLzwsgi.versionzwsgi.url_schemez
wsgi.inputzwsgi.errorszwsgi.multithreadzwsgi.multiprocesszwsgi.run_onceserver)	localhostP   r   SERVER_NAMEr   SERVER_PORTclientREMOTE_ADDRheaderszcontent-lengthCONTENT_LENGTHzcontent-typeCONTENT_TYPEHTTP_-_,)getencodedecode
startswithlenioBytesIOsysstdoutupperreplace)	r   r   script_name	path_infoenvironr%   namevaluecorrected_name rD   `/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/starlette/middleware/wsgi.pybuild_environ   sD   





rF   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)rH   )selfrH   rD   rD   rE   __init__N   s   
zWSGIMiddleware.__init__r   r   receiver
   sendr   c                   s2   |d dks	J t | j|}|||I d H  d S )Ntyper   )WSGIResponderrH   )rL   r   rN   rO   	responderrD   rD   rE   __call__Q   s   zWSGIMiddleware.__call__N)rH   rI   r   rJ   )r   r   rN   r
   rO   r   r   rJ   )__name__
__module____qualname__rM   rS   rD   rD   rD   rE   rG   M   s    
rG   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 ))rQ   z*ObjectSendStream[MutableMapping[str, Any]]stream_sendz-ObjectReceiveStream[MutableMapping[str, Any]]stream_receiverH   rI   r   r   r   rJ   c                 C  s<   || _ || _d | _d | _ttj\| _| _	d| _
d | _d S )NF)rH   r   statusresponse_headersanyiocreate_memory_object_streammathinfrW   rX   response_startedexc_info)rL   rH   r   rD   rD   rE   rM   [   s   
zWSGIResponder.__init__rN   r
   rO   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 sWw   Y  W d   I d H  n1 I d H slw   Y  | jd ur| jd | jd | jd d S )	N    Tr   	more_bodyFr   r   r   )r3   rF   r   r   
start_soonsenderrW   r[   	to_threadrun_syncwsgistart_responser`   with_traceback)rL   rN   rO   r   rb   messager@   
task_grouprD   rD   rE   rS   d   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 rK   )rX   )rL   rO   rj   rD   rD   rE   rd   t   s   .zWSGIResponder.senderNrY   strrZ   list[tuple[str, str]]r`   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   )stripr4   lower).0rA   rB   rD   rD   rE   
<listcomp>   s    z0WSGIResponder.start_response.<locals>.<listcomp>zhttp.response.start)rP   rY   r,   )	r`   r_   splitintr[   from_threadrunrW   rO   )rL   rY   rZ   r`   status_code_stringr1   status_coder,   rD   rD   rE   rh   y   s    zWSGIResponder.start_responser@   r   rh   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)rP   r   rb   ra   )rP   r   )rH   r[   ru   rv   rW   rO   )rL   r@   rh   chunkrD   rD   rE   rg      s   
zWSGIResponder.wsgi)rH   rI   r   r   r   rJ   )rN   r
   rO   r   r   rJ   )rO   r   r   rJ   rK   )rY   rl   rZ   rm   r`   r   r   rJ   )r@   r   rh   rI   r   rJ   )	rT   rU   rV   __annotations__rM   rS   rd   rh   rg   rD   rD   rD   rE   rQ   W   s   
 

	
	rQ   )r   r   r   r   r   r   )
__future__r   r8   r]   r:   warningscollections.abcr   r   typingr   r[   	anyio.abcr   r   starlette._utilsr   starlette.exceptionsr	   starlette.typesr
   r   r   warnrF   rG   rQ   rD   rD   rD   rE   <module>   s(    
4
