
    h-i2                        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                 (   | j                  dd      j                  d      j                  d      }| d   j                  d      j                  d      }|j                  |      r|t	        |      d }| 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.
    	root_path utf8latin1pathNmethod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-_,)getencodedecode
startswithlensysstdoutupperreplace
isinstancestr)r   r   r   script_name	path_infoenvironr*   r/   namevaluename_strcorrected_name	value_strcorrected_name_environs                 VD:\DhanshreeandTeamAI\Github\ai_code\venv\Lib\site-packages\uvicorn/middleware/wsgi.pybuild_environrL      s    ))K,33F;BB8LKf$$V,33H=IK(c+.01	/"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"+ 0  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DeprecationWarningrP   
concurrentfuturesThreadPoolExecutorexecutor)selfrP   rQ   s      rK   __init__z_WSGIMiddleware.__init__S   s:    >	

 "**=='=RrM   Nc                    K   |d   dk(  sJ t        | j                  | j                  |      } |||       d {    y 7 w)Ntyper$   )WSGIResponderrP   rZ   )r[   r   receivesendinstances        rK   __call__z_WSGIMiddleware.__call__\   s@      V}&&& 4==%@w%%%s   8AA A)
   )r   r   r`   r   ra   r
   r   N)__name__
__module____qualname__r   intr\   rc    rM   rK   rO   rO   R   sC    SG Sc S&& '& !	&
 
&rM   rO   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)r_   rP   rZ   r   r   c                     || _         || _        || _        d | _        d | _        t        j                         | _        t               | _	        t        j                         | _        d| _        d | _        y )NF)rP   rZ   r   statusresponse_headersasyncioEvent
send_eventr   
send_queueget_event_looploopresponse_startedexc_info)r[   rP   rZ   r   s       rK   r\   zWSGIResponder.__init__h   s]      
 $!--/<AG/6/E/E/G	 %+/rM   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   rM   	more_bodyFr   r"      )ioBytesIOr7   seekSEEK_ENDwriterL   r   rn   rr   rs   run_in_executorrZ   wsgistart_responsecreate_tasksenderwait_forrq   appendrp   setru   with_traceback)
r[   r`   ra   r   r   rw   body_messagerD   r   r   s
             rK   rc   zWSGIResponder.__call__y   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)rq   popleftrp   waitclear)r[   ra   r   s      rK   r   zWSGIResponder.sender   sk     //113?7m##oo**,,,%%' 
 $,s!   6A?A;"A?A= A?=A?rl   rm   ru   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)r^   rl   r1   )ru   rt   splitrh   r8   rq   r   rs   call_soon_threadsaferp   r   )r[   rl   rm   ru   status_code_strr5   status_coderE   rF   r1   http_response_start_events              rK   r   zWSGIResponder.start_response   s     !$$$(D!!'c1!5OQo.K $4#3KD% W%u||G'<=#3  
 .%"A%
 OO""#<=II**4??+>+>? %s    ,CrD   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)r^   r   rw   rM   F)rP   rq   r   rs   r   rp   r   )r[   rD   r   chunkresponse_body
empty_bodys         rK   r   zWSGIResponder.wsgi   s    XXg~6E,!4M
 OO""=1II**4??+>+>? 7 )-


 	z*		&&t':':;rM   )r`   r   ra   r
   r   N)ra   r
   r   Nr   )re   rf   rg   r   rW   rX   rY   r\   rc   r   rA   r   r   r   r   r   r   r   r   ri   rM   rK   r_   r_   g   s    00 $$770 	0"V,V4FV	V<	( '+	@@ #5c?3@ 7#	@
 
@.<G <] <t <rM   r_   )WSGIMiddleware)!rn   concurrent.futuresrW   ry   r<   rT   collectionsr   typingr   r   r   r   uvicorn._typesr   r	   r
   r   r   r   r   r   r   r   r   r   rz   rL   rO   r_   a2wsgir   ModuleNotFoundErrorri   rM   rK   <module>r      s      	 
   3 3    66!36;=::66r& &*b< b<J%% %$N%s   .A5 5A?>A?