o
    ߭h                     @   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 dededejeejf f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   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 r:   ^/var/www/html/stock_analysis/be/venv/lib/python3.10/site-packages/starlette/middleware/wsgi.pybuild_environ   sD   





r<   c                   @   sD   e Zd Zdejdejf ddfddZdeded	e	ddfd
dZ
dS )WSGIMiddlewareapp.r	   Nc                 C   s
   || _ d S N)r>   )selfr>   r:   r:   r;   __init__H   s   
zWSGIMiddleware.__init__r   receivesendc                    s2   |d dks	J t | j|}|||I d H  d S )Ntyper   )WSGIResponderr>   )r@   r   rB   rC   	responderr:   r:   r;   __call__K   s   zWSGIMiddleware.__call__)__name__
__module____qualname__typingCallableAnyrA   r   r   r   rG   r:   r:   r:   r;   r=   G   s    r=   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< dej
dejf deddfdd	Zd
ededdfddZdeddfddZ	ddedejejeef  dejddfddZdejeejf dej
dejf ddfddZdS )rE   stream_sendstream_receiver>   .r   r	   Nc                 C   s<   || _ || _d | _d | _ttj\| _| _	d| _
d | _d S )NF)r>   r   statusresponse_headersanyiocreate_memory_object_streammathinfrN   rO   response_startedexc_info)r@   r>   r   r:   r:   r;   rA   U   s   
zWSGIResponder.__init__rB   rC   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<   r   rR   create_task_group
start_soonsenderrN   	to_threadrun_syncwsgistart_responserW   with_traceback)r@   rB   rC   r   rY   messager6   
task_groupr:   r:   r;   rG   `   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?   )rO   )r@   rC   rc   r:   r:   r;   r]   p   s   .zWSGIResponder.senderrP   rQ   rW   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).0r7   r8   r:   r:   r;   
<listcomp>   s    z0WSGIResponder.start_response.<locals>.<listcomp>zhttp.response.start)rD   rP   r"   )	rW   rV   splitintrR   from_threadrunrN   rC   )r@   rP   rQ   rW   status_code_stringr'   status_coder"   r:   r:   r;   ra   u   s    zWSGIResponder.start_responser6   ra   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)rD   r   rY   rX   )rD   r   )r>   rR   rl   rm   rN   rC   )r@   r6   ra   chunkr:   r:   r;   r`      s   
zWSGIResponder.wsgir?   )rH   rI   rJ   r   rK   MutableMappingstrrM   __annotations__r   rL   r   rA   r   r   rG   r]   ListTuplera   Dictr`   r:   r:   r:   r;   rE   Q   s.   
 "	
rE   )r.   rT   r0   rK   warningsrR   	anyio.abcr   r   starlette.typesr   r   r   warnDeprecationWarningbytesrv   rr   rM   r<   r=   rE   r:   r:   r:   r;   <module>   s    "4
