
     @gf                     
   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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)DequeIterableOptionalTuple)ASGIReceiveCallableASGIReceiveEventASGISendCallableASGISendEventEnvironExcInfoHTTPRequestEventHTTPResponseBodyEventHTTPResponseStartEvent	HTTPScope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               K/var/www/piapp/venv/lib/python3.11/site-packages/uvicorn/middleware/wsgi.pybuild_environrG      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DeprecationWarningrL   
concurrentfuturesThreadPoolExecutorexecutor)selfrL   rM   s      rF   __init__z_WSGIMiddleware.__init__O   sF    >	
 	
 	

 "*=='=RRrH   r   r   receiver   sendr
   r   Nc                    K   |d         dk    sJ t          | j        | j        |          } |||           d {V  d S )Ntyper#   )WSGIResponderrL   rV   )rW   r   rY   rZ   instances        rF   __call__z_WSGIMiddleware.__call__X   s\       V}&&&& 4=%@@hw%%%%%%%%%%%rH   )rK   )r   r   rY   r   rZ   r
   r   N)__name__
__module____qualname__r   intrX   r_    rH   rF   rJ   rJ   N   s|        S SG Sc S S S 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dS )r]   rL   rV   r   r   c                     || _         || _        || _        d | _        d | _        t          j                    | _        t                      | _	        t          j
                    | _        d| _        d | _        d S )NF)rL   rV   r   statusresponse_headersasyncioEvent
send_eventr   
send_queueget_event_looploopresponse_startedexc_info)rW   rL   rV   r   s       rF   rX   zWSGIResponder.__init__d   sc      
 $!-//<AGG/6/E/G/G	 %+/rH   rY   r   rZ   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   rH   	more_bodyFr   r!      )ioBytesIOr8   seekSEEK_ENDwriterG   r   ri   rm   rn   run_in_executorrV   wsgistart_responsecreate_tasksenderwait_forrl   appendrk   setrp   with_traceback)
rW   rY   rZ   r   r   rr   body_messager?   rz   r}   s
             rF   r_   zWSGIResponder.__call__u   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)rl   popleftrk   waitclear)rW   rZ   r   s      rF   r}   zWSGIResponder.sender   s      	( (/1133?Fd7mm########o**,,,,,,,,,%%'''	(rH   rg   rh   rp   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   )r6   ).0r@   rA   s      rF   
<listcomp>z0WSGIResponder.start_response.<locals>.<listcomp>   sI       D% W%%u||G'<'<=  rH   zhttp.response.start)r\   rg   r0   )
rp   ro   splitrc   rl   r   rn   call_soon_threadsaferk   r   )	rW   rg   rh   rp   status_code_strr4   status_coder0   http_response_start_events	            rF   r{   zWSGIResponder.start_response   s     !$ 	@$(D!!'c1!5!5OQo..K #3  G
 .%"A A%
 O""#<===I**4?+>?????	@ 	@rH   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   rr   rH   F)rL   rl   r   rn   r   rk   r   )rW   r?   r{   chunkresponse_body
empty_bodys         rF   rz   zWSGIResponder.wsgi   s    XXg~66 	@ 	@E,!4 4M
 O""=111I**4?+>???? )-
 -


 	z***	&&t':;;;;;rH   )rY   r   rZ   r
   r   N)rZ   r
   r   Nr   )r`   ra   rb   r   rS   rT   rU   rX   r_   r}   r>   r   r   r   r   r{   r   r   rz   rd   rH   rF   r]   r]   c   s       00 $70 	0 0 0 0"V,V4FV	V V V V<	( 	( 	( 	( '+	@ @@ #5c?3@ 7#	@
 
@ @ @ @.<G <] <t < < < < < <rH   r]   )WSGIMiddleware)!ri   concurrent.futuresrS   rt   r9   rP   collectionsr   typingr   r   r   r   uvicorn._typesr   r	   r
   r   r   r   r   r   r   r   r   r   ru   rG   rJ   r]   a2wsgir   ModuleNotFoundErrorrd   rH   rF   <module>r      s        				 



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