
    dff                        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j4                  d
efdZ G d d      Z G d d      Z	 d dlmZ y# e $ r eZY yw xY w)    N)deque)DequeIterableOptionalTuple)ASGIReceiveCallableASGIReceiveEventASGISendCallableASGISendEventEnvironExcInfoHTTPRequestEventHTTPResponseBodyEventHTTPResponseStartEvent	HTTPScopeStartResponseWSGIAppscoper   messager	   bodyreturnc                    | d   d| d   j                  d      j                  d      | d   j                  d      d| d	   z  d
| j                  dd      |t        j                  dddd}| j                  d      }|d}|d   |d<   |d   |d<   | j                  d      }||d   |d<   | j                  dg       D ]  \  }}|j                  d      }|dk(  rd}	n+|dk(  rd}	n#d|j                         j                  dd      z  }	|j                  d      }
|	|v r||	   }t        |t              sJ |d z   |
z   }
|
||	<    |S )!zH
    Builds a scope and request message into a WSGI environ object.
    method pathutf8latin1query_stringasciizHTTP/%s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_TYPEzHTTP_%s-_,)	encodedecodegetsysstdoutupperreplace
isinstancestr)r   r   r   environr)   r.   namevaluename_strcorrected_name	value_strcorrected_name_environs               P/home/api-vastappli/venv/lib/python3.12/site-packages/uvicorn/middleware/wsgi.pybuild_environrG      s     /6]))&188Bn-44W=$u^'<< 99Xv6zz !G  YYx F~"#AYGM#AYGM YYx F!' yyB/ ,eH-''-N'+N&)9)A)A#s)KKN h/	W$%,^%<"4c::.4y@I"+,  N    c                   6    e Zd ZddedefdZ	 	 	 	 	 	 	 	 ddZy)_WSGIMiddlewareappworkersc                     t        j                  dt               || _        t        j
                  j                  |      | _        y )NzgUvicorn's native WSGI implementation is deprecated, you should switch to a2wsgi (`pip install a2wsgi`).)max_workers)warningswarnDeprecationWarningrK   
concurrentfuturesThreadPoolExecutorexecutor)selfrK   rL   s      rF   __init__z_WSGIMiddleware.__init__O   s:    >	

 "**=='=RrH   Nc                    K   |d   dk(  sJ t        | j                  | j                  |      } |||       d {    y 7 w)Ntyper#   )WSGIResponderrK   rU   )rV   r   receivesendinstances        rF   __call__z_WSGIMiddleware.__call__X   s=      V}&& 4==%@w%%%s   8AA A)
   )r   r   r[   r   r\   r
   r   N)__name__
__module____qualname__r   intrW   r^    rH   rF   rJ   rJ   N   sC    SG Sc S&& '& !	&
 
&rH   rJ   c            	           e Zd Zdedej
                  j                  ddfdZ	 	 	 	 	 	 ddZdd	Z		 dd
e
deee
e
f      dee   ddfdZdededdfdZy)rZ   rK   rU   r   r   c                     || _         || _        || _        d | _        d | _        t        j                         | _        t               | _	        t        j                         | _        d| _        d | _        y )NF)rK   rU   r   statusresponse_headersasyncioEvent
send_eventr   
send_queueget_event_looploopresponse_startedexc_info)rV   rK   rU   r   s       rF   rW   zWSGIResponder.__init__d   s]      
 $!--/<AG/6/E/E/G	 %+/rH   r   Nc                   K    |        d {   }t        j                  |j                  dd            }|j                  dd      }|rx|j                  dt         j                         |rE |        d {   }|j                  |j                  dd             |j                  dd      }|rE|j                  d       t        | j                  ||      }t        j                         | _
        | j                  j                  | j                  | j                  || j                        }| j                  j                  | j!                  |            }		 t        j"                  |d        d {    | j$                  j'                  d        | j(                  j+                          t        j"                  |	d        d {    | j,                  9| j,                  d   j/                  | j,                  d   | j,                  d         y 7 7 7 7 R# | j$                  j'                  d        | j(                  j+                          t        j"                  |	d        d {  7   w xY ww)Nr   rH   	more_bodyFr   r!      )ioBytesIOr8   seekSEEK_ENDwriterG   r   ri   rm   rn   run_in_executorrU   wsgistart_responsecreate_tasksenderwait_forrl   appendrk   setrp   with_traceback)
rV   r[   r\   r   r   rr   body_messager?   rz   r}   s
             rF   r^   zWSGIResponder.__call__u   s     +2)Ozz'++fc23KKU3	IIa%!)O  

<++FC89(,,[%@	  IIaL

GT:**,	yy((MM499gt/B/B
 &&t{{4'89	1""4...OO""4(OO!""64000==$--"11$--2BDMMRSDTUU %1 %4 $ / 1 OO""4(OO!""64000st   I4HA)I47H89I42B'I4H 3H4H 8AI4HAI4I4H I4AI1*I-+I11I4c                   K   	 | j                   r.| j                   j                         }|y  ||       d {    n<| j                  j                          d {    | j                  j	                          w7 B7 !wN)rl   popleftrk   waitclear)rV   r\   r   s      rF   r}   zWSGIResponder.sender   sk     //113?7m##oo**,,,%%' 
 $,s!   6A?A;"A?A= A?=A?rg   rh   rp   c                    || _         | j                  sd| _        |j                  dd      \  }}t        |      }|D cg c]'  \  }}|j	                  d      |j	                  d      f) }	}}d||	d}
| j
                  j                  |
       | j                  j                  | j                  j                         y y c c}}w )NT r!   r   zhttp.response.start)rY   rg   r0   )rp   ro   splitrc   r6   rl   r   rn   call_soon_threadsaferk   r   )rV   rg   rh   rp   status_code_strr4   status_coder@   rA   r0   http_response_start_events              rF   r{   zWSGIResponder.start_response   s     !$$$(D!!'c1!5OQo.K $4D% W%u||G'<=G 
 .%"A%
 OO""#<=II**4??+>+>? %s    ,Cr?   r{   c                 r   | j                  ||      D ]R  }d|dd}| j                  j                  |       | j                  j	                  | j
                  j                         T dddd}| j                  j                  |       | j                  j	                  | j
                  j                         y )Nzhttp.response.bodyT)rY   r   rr   rH   F)rK   rl   r   rn   r   rk   r   )rV   r?   r{   chunkresponse_body
empty_bodys         rF   rz   zWSGIResponder.wsgi   s    XXg~6 	@E,!4M
 OO""=1II**4??+>+>?	@ )-


 	z*		&&t':':;rH   )r[   r   r\   r
   r   N)r\   r
   r   Nr   )r`   ra   rb   r   rR   rS   rT   rW   r^   r}   r>   r   r   r   r   r{   r   r   rz   rd   rH   rF   rZ   rZ   c   s    00 $$770 	0"V,V4FV	V<	( '+	@@ #5c?3@ 7#	@
 
@.<G <] <t <rH   rZ   )WSGIMiddleware)!ri   concurrent.futuresrR   rt   r9   rO   collectionsr   typingr   r   r   r   uvicorn._typesr   r	   r
   r   r   r   r   r   r   r   r   r   ru   rG   rJ   rZ   a2wsgir   ModuleNotFoundErrorrd   rH   rF   <module>r      s      	 
   3 3    22!32;=::22j& &*b< b<J%% %$N%s   .A5 5A?>A?