o
    96df                     @   s   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 d dlm	Z	m
Z
mZmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZ ddddd	ejd
efddZG dd dZG dd dZz	d dlmZ W dS  e ys   eZY dS w )    N)deque)DequeIterableOptionalTuple)ASGIReceiveCallableASGIReceiveEventASGISendCallableASGISendEventEnvironExcInfoHTTPRequestEventHTTPResponseBodyEventHTTPResponseStartEvent	HTTPScopeStartResponseWSGIAppscoper   messager   bodyreturnc                 C   s*  | d d| d  dd| d dd| d	  d
| dd|tjdddd}| d}|du r2d}|d |d< |d |d< | d}|durM|d |d< | dg D ]?\}}|d}|dkrcd}	n|dkrjd}	n
d| dd  }	|d}
|	|v r||	 }t|tsJ |d! |
 }
|
||	< qS|S )"zH
    Builds a scope and request message into a WSGI environ object.
    method pathutf8latin1Zquery_stringasciizHTTP/%s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serverN)	localhostP   r   ZSERVER_NAMEr   ZSERVER_PORTclientZREMOTE_ADDRheaderszcontent-lengthZCONTENT_LENGTHzcontent-typeZCONTENT_TYPEzHTTP_%s-_,)	encodedecodegetsysstdoutupperreplace
isinstancestr)r   r   r   environr"   r%   namevalueZname_strZcorrected_nameZ	value_strZcorrected_name_environ r6   nC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\uvicorn/middleware/wsgi.pybuild_environ   sF   






r8   c                   @   s:   e Zd ZddedefddZ						
			dddZdS )_WSGIMiddleware
   appworkersc                 C   s&   t dt || _tjj|d| _d S )NzgUvicorn's native WSGI implementation is deprecated, you should switch to a2wsgi (`pip install a2wsgi`).)max_workers)warningswarnDeprecationWarningr;   
concurrentfuturesThreadPoolExecutorexecutor)selfr;   r<   r6   r6   r7   __init__O   s   z_WSGIMiddleware.__init__r   r   receiver   sendr	   r   Nc                    s6   |d dks	J t | j| j|}|||I d H  d S )Ntyper    )WSGIResponderr;   rD   )rE   r   rG   rH   instancer6   r6   r7   __call__X   s   z_WSGIMiddleware.__call__)r:   )r   r   rG   r   rH   r	   r   N)__name__
__module____qualname__r   intrF   rL   r6   r6   r6   r7   r9   N   s    	r9   c                	   @   s   e Zd ZdedejjddfddZ					
		dddZdddZ		dde
deee
e
f  dee ddfddZdededdfddZdS )rJ   r;   rD   r   r   c                 C   sJ   || _ || _|| _d | _d | _t | _t | _	t
 | _d| _d | _d S )NF)r;   rD   r   statusresponse_headersasyncioEvent
send_eventr   
send_queueget_event_looploopresponse_startedexc_info)rE   r;   rD   r   r6   r6   r7   rF   d   s   


zWSGIResponder.__init__rG   r   rH   r	   r   Nc           
   
      sR  | I d H }t |dd}|dd}|r=|dt j |r8| I d H }||dd |dd}|s!|d t| j||}t	 | _
| j
| j| j|| j}| j
| |}	zt|d I d H  W | jd  | j  t|	d I d H  n| jd  | j  t|	d I d H  w | jd ur| jd | jd | jd d S )Nr       	more_bodyFr   r      )ioBytesIOr,   seekSEEK_ENDwriter8   r   rS   rW   rX   run_in_executorrD   wsgistart_responsecreate_tasksenderwait_forrV   appendrU   setrZ   with_traceback)
rE   rG   rH   r   r   r\   Zbody_messager3   rd   rg   r6   r6   r7   rL   u   s<   





zWSGIResponder.__call__c                    sL   	 | j r| j  }|d u rd S ||I d H  n| j I d H  | j  qN)rV   popleftrU   waitclear)rE   rH   r   r6   r6   r7   rg      s   

zWSGIResponder.senderrQ   rR   rZ   c           	      C   sh   || _ | js2d| _|dd\}}t|}dd |D }d||d}| j| | j| jj	 d S d S )NT r   c                 S   s$   g | ]\}}| d | d fqS )r   )r*   ).0r4   r5   r6   r6   r7   
<listcomp>   s    z0WSGIResponder.start_response.<locals>.<listcomp>zhttp.response.start)rI   rQ   r&   )
rZ   rY   splitrP   rV   ri   rX   call_soon_threadsaferU   rj   )	rE   rQ   rR   rZ   Zstatus_code_strr(   status_coder&   Zhttp_response_start_eventr6   r6   r7   re      s   zWSGIResponder.start_responser3   re   c                 C   sf   |  ||D ]}d|dd}| j| | j| jj qdddd}| j| | j| jj d S )Nzhttp.response.bodyT)rI   r   r\   r[   F)r;   rV   ri   rX   rt   rU   rj   )rE   r3   re   chunkZresponse_bodyZ
empty_bodyr6   r6   r7   rd      s   zWSGIResponder.wsgi)rG   r   rH   r	   r   N)rH   r	   r   Nrl   )rM   rN   rO   r   rA   rB   rC   rF   rL   rg   r2   r   r   r   r   re   r   r   rd   r6   r6   r6   r7   rJ   c   s6    



rJ   )WSGIMiddleware)!rS   concurrent.futuresrA   r^   r-   r>   collectionsr   typingr   r   r   r   Zuvicorn._typesr   r   r	   r
   r   r   r   r   r   r   r   r   r_   r8   r9   rJ   Za2wsgirw   ModuleNotFoundErrorr6   r6   r6   r7   <module>   s0    8
5e
