
     O=d                        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mZ e	rd dlmZmZmZmZmZmZmZmZ d dlmZmZmZmZ dddd	d
ej        defdZ G d d          Z G d d          Z	 d dl m!Z! dS # e"$ r eZ!Y dS w xY w)    N)deque)TYPE_CHECKINGDequeIterableOptionalTuple)ASGIReceiveCallableASGIReceiveEventASGISendCallableASGISendEventHTTPRequestEventHTTPResponseBodyEventHTTPResponseStartEvent	HTTPScope)EnvironExcInfoStartResponseWSGIAppscoper   messager
   bodyreturnc                    | d         d| d                              d                              d          | d                             d          d| d	         z  d
|                     dd          |t          j        dddd}|                     d          }|d}|d         |d<   |d         |d<   |                     d          }||d         |d<   |                     dg           D ]\  }}|                    d          }|dk    rd}	n4|dk    rd}	n+d|                                                    dd           z  }	|                    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serverN)	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               AD:\Sites\api_v1\venv\Lib\site-packages\uvicorn/middleware/wsgi.pybuild_environrH      s     /6]))&1188BBn-44W==$u^'<< 99Xv66z ! G  YYx  F~"#AYGM#AYGM YYx  F!' yyB// , ,eH--'''-NN''+NN&)9)9)A)A#s)K)KKN h//	W$$%,^%<"4c:::::.4y@I"+N    c                   8    e Zd ZddedefdZ	 	 	 	 	 	 	 	 ddZdS )_WSGIMiddleware
   appworkersc                     t          j        dt                     || _        t          j                            |          | _        d S )NzgUvicorn's native WSGI implementation is deprecated, you should switch to a2wsgi (`pip install a2wsgi`).)max_workers)warningswarnDeprecationWarningrM   
concurrentfuturesThreadPoolExecutorexecutor)selfrM   rN   s      rG   __init__z_WSGIMiddleware.__init__N   sF    >	
 	
 	

 "*=='=RRrI   r   r   receiver	   sendr   r   Nc                    K   |d         dk    sJ t          | j        | j        |          } |||           d {V  d S )Ntyper$   )WSGIResponderrM   rW   )rX   r   rZ   r[   instances        rG   __call__z_WSGIMiddleware.__call__W   s\       V}&&&& 4=%@@hw%%%%%%%%%%%rI   )rL   )r   r   rZ   r	   r[   r   r   N)__name__
__module____qualname__r   intrY   r`    rI   rG   rK   rK   M   s|        S SG Sc S S S S&& '& !	&
 
& & & & & &rI   rK   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dS )r^   rM   rW   r   r   c                     || _         || _        || _        d | _        d | _        t          j                    | _        t                      | _	        t          j
                    | _        d| _        d | _        d S )NF)rM   rW   r   statusresponse_headersasyncioEvent
send_eventr   
send_queueget_event_looploopresponse_startedexc_info)rX   rM   rW   r   s       rG   rY   zWSGIResponder.__init__c   sc      
 $!-//<AGG/6/E/G/G	 %+/rI   rZ   r	   r[   r   r   Nc                   K    |             d {V }t          j        |                    dd                    }|                    dd          }|r|                    dt           j                   |rQ |             d {V }|                    |                    dd                     |                    dd          }|Q|                    d           t          | j        ||          }t          j	                    | _
        | j
                            | j        | j        || j                  }| j
                            |                     |                    }		 t          j        |d            d {V  | j                            d            | j                                         t          j        |	d            d {V  nS# | j                            d            | j                                         t          j        |	d            d {V  w xY w| j        7| j        d                             | j        d         | j        d                   d S )Nr   rI   	more_bodyFr   r"      )ioBytesIOr9   seekSEEK_ENDwriterH   r   rj   rn   ro   run_in_executorrW   wsgistart_responsecreate_tasksenderwait_forrm   appendrl   setrq   with_traceback)
rX   rZ   r[   r   r   rs   body_messager@   r{   r~   s
             rG   r`   zWSGIResponder.__call__t   sb      +2'))OOOOOOz'++fc2233KKU33	 	IIa%%% A!'))OOOOOO  

<++FC88999(,,[%@@	  A IIaLLL
GT::*,,	y((M49gt/B
 
 &&t{{4'8'899	1"4.........O""4(((O!!!"640000000000 O""4(((O!!!"640000000000=$-"11$-2BDMRSDTUUU %$s   #G AHc                    K   	 | j         r/| j                                         }|d S  ||           d {V  n8| j                                         d {V  | j                                         oN)rm   popleftrl   waitclear)rX   r[   r   s      rG   r~   zWSGIResponder.sender   s      	( (/1133?Fd7mm########o**,,,,,,,,,%%'''	(rI   rh   ri   rq   c                 $   || _         | j        sd| _        |                    dd          \  }}t          |          }d |D             }d||d}| j                            |           | j                            | j        j	                   d S d S )NT r"   c                 h    g | ]/\  }}|                     d           |                     d           f0S )r    )r7   ).0rA   rB   s      rG   
<listcomp>z0WSGIResponder.start_response.<locals>.<listcomp>   sI       D% W%%u||G'<'<=  rI   zhttp.response.start)r]   rh   r1   )
rq   rp   splitrd   rm   r   ro   call_soon_threadsaferl   r   )	rX   rh   ri   rq   status_code_strr5   status_coder1   http_response_start_events	            rG   r|   zWSGIResponder.start_response   s     !$ 	@$(D!!'c1!5!5OQo..K #3  G
 .%"A A%
 O""#<===I**4?+>?????	@ 	@rI   r@   r|   c                 H   |                      ||          D ]F}d|dd}| j                            |           | j                            | j        j                   Gdddd}| j                            |           | j                            | j        j                   d S )Nzhttp.response.bodyT)r]   r   rs   rI   F)rM   rm   r   ro   r   rl   r   )rX   r@   r|   chunkresponse_body
empty_bodys         rG   r{   zWSGIResponder.wsgi   s    XXg~66 	@ 	@E,!4 4M
 O""=111I**4?+>???? )-
 -


 	z***	&&t':;;;;;rI   )rZ   r	   r[   r   r   N)r[   r   r   Nr   )ra   rb   rc   r   rT   rU   rV   rY   r`   r~   r?   r   r   r   r   r|   r   r   r{   re   rI   rG   r^   r^   b   s       00 $70 	0 0 0 0"V,V4FV	V V V V<	( 	( 	( 	( '+	@ @@ #5c?3@ 7#	@
 
@ @ @ @.<G <] <t < < < < < <rI   r^   )WSGIMiddleware)#rj   concurrent.futuresrT   ru   r:   rQ   collectionsr   typingr   r   r   r   r   asgiref.typingr	   r
   r   r   r   r   r   r   uvicorn._typesr   r   r   r   rv   rH   rK   r^   a2wsgir   ModuleNotFoundErrorre   rI   rG   <module>r      s        				 



        B B B B B B B B B B B B B B 
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 D C C C C C C C C C C C22!32;=:22 2 2 2j& & & & & & & &*b< b< b< b< b< b< b< b<J%%%%%%%%% % % %$NNNN%s   7A? ?B
	B
