o
     d*                     @   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m	Z	 e
de dededefddZG d	d
 d
ZG dd dZdS )    N)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   s*  | d |  dddd| d dd| d dd	| d
  d|  ddt|tjdddd}|  dp;d}|d |d< |d |d< |  drU| d d |d< |  dg D ]7\}}|d}|dkrkd}n|dkrrd}nd|  dd }|d}||v r|| d! | }|||< q[|S )"zE
    Builds a scope and request body into a WSGI environ object.
    method	root_path utf8latin1path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ioBytesIOsysstdoutupperreplace)r   r   environr   namevaluecorrected_name r4   D/usr/local/lib/python3.10/dist-packages/starlette/middleware/wsgi.pybuild_environ   s<   




r6   c                   @   s:   e Zd ZdejddfddZdedededdfd	d
Z	dS )WSGIMiddlewareappr   Nc                 C   s
   || _ d S N)r8   )selfr8   r4   r4   r5   __init__A   s   
zWSGIMiddleware.__init__r   receivesendc                    s2   |d dks	J t | j|}|||I d H  d S )Ntyper   )WSGIResponderr8   )r:   r   r<   r=   	responderr4   r4   r5   __call__D   s   zWSGIMiddleware.__call__)
__name__
__module____qualname__typingCallabler;   r   r   r   rA   r4   r4   r4   r5   r7   @   s    r7   c                	   @   s   e Zd Zdej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dejddfddZdS )r?   r8   r   r   Nc                 C   s<   || _ || _d | _d | _ttj\| _| _	d| _
d | _d S )NF)r8   r   statusresponse_headersanyiocreate_memory_object_streammathinfstream_sendstream_receiveresponse_startedexc_info)r:   r8   r   r4   r4   r5   r;   K   s   
zWSGIResponder.__init__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'   r6   r   rI   create_task_group
start_soonsenderrM   	to_threadrun_syncwsgistart_responserP   with_traceback)r:   r<   r=   r   rR   messager0   
task_groupr4   r4   r5   rA   V   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 r9   )rN   )r:   r=   r\   r4   r4   r5   rV   f   s   .zWSGIResponder.senderrG   rH   rP   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).0r1   r2   r4   r4   r5   
<listcomp>v   s    z0WSGIResponder.start_response.<locals>.<listcomp>zhttp.response.start)r>   rG   r    )	rP   rO   splitintrI   from_threadrunrM   r=   )r:   rG   rH   rP   status_code_stringr%   status_coder    r4   r4   r5   rZ   k   s    zWSGIResponder.start_responser0   rZ   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)r>   r   rR   rQ   )r>   r   )r8   rI   re   rf   rM   r=   )r:   r0   rZ   chunkr4   r4   r5   rY      s   
zWSGIResponder.wsgir9   )rB   rC   rD   rE   rF   r   r;   r   r   rA   rV   strListTupleAnyrZ   dictrY   r4   r4   r4   r5   r?   J   s    	
r?   )r*   rK   r,   rE   warningsrI   starlette.typesr   r   r   warnDeprecationWarningbytesrn   r6   r7   r?   r4   r4   r4   r5   <module>   s    .
