
    g                        d dl mZ 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 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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)    )annotationsN)deque)Iterable)ASGIReceiveCallableASGIReceiveEventASGISendCallableASGISendEventEnvironExcInfoHTTPRequestEventHTTPResponseBodyEventHTTPResponseStartEvent	HTTPScopeStartResponseWSGIAppscoper   messager   body
io.BytesIOreturnr
   c                   |                      dd                              d                              d          }| d                             d                              d          }|                    |          r|t	          |          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.
    	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                 I/var/www/html/env/lib/python3.11/site-packages/uvicorn/middleware/wsgi.pybuild_environrK      s%    ))K,,33F;;BB8LLKf$$V,,33H==IK(( 2c+..001	/"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                       e Zd ZdddZddZdS )_WSGIMiddleware
   appr   workersintc                    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DeprecationWarningrP   
concurrentfuturesThreadPoolExecutorexecutor)selfrP   rQ   s      rJ   __init__z_WSGIMiddleware.__init__S   sF    >	
 	
 	

 "*=='=RRrL   r   r   receiver   sendr   r   Nonec                   K   |d         dk    sJ t          | j        | j        |          } |||           d {V  d S )Ntyper#   )WSGIResponderrP   r[   )r\   r   r^   r_   instances        rJ   __call__z_WSGIMiddleware.__call__\   s\       V}&&&& 4=%@@hw%%%%%%%%%%%rL   N)rO   )rP   r   rQ   rR   )r   r   r^   r   r_   r   r   r`   )__name__
__module____qualname__r]   re    rL   rJ   rN   rN   R   sF        S S S S S& & & & & &rL   rN   c                  :    e Zd ZddZddZddZ	 d d!dZd"dZdS )#rc   rP   r   r[   %concurrent.futures.ThreadPoolExecutorr   r   c                    || _         || _        || _        d | _        d | _        t          j                    | _        t                      | _	        t          j
                    | _        d| _        d | _        d S )NF)rP   r[   r   statusresponse_headersasyncioEvent
send_eventr   
send_queueget_event_looploopresponse_startedexc_info)r\   rP   r[   r   s       rJ   r]   zWSGIResponder.__init__h   sc      
 $!-//7<ww/6/E/G/G	 %(,rL   r^   r   r_   r   r   r`   c                  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   rL   	more_bodyFr   r!      )ioBytesIOr6   seekSEEK_ENDwriterK   r   ro   rs   rt   run_in_executorr[   wsgistart_responsecreate_tasksenderwait_forrr   appendrq   setrv   with_traceback)
r\   r^   r_   r   r   rx   body_messagerC   r   r   s
             rJ   re   zWSGIResponder.__call__y   sY     *1'))OOOOOOz'++fc2233KKU33	 	IIa%%% A!'))OOOOOO  

<++FC88999(,,[%@@	  A IIaLLL
GT::*,,	y((	7DL_``&&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)rr   popleftrq   waitclear)r\   r_   r   s      rJ   r   zWSGIResponder.sender   s      	( (/1133?Fd7mm########o**,,,,,,,,,%%'''	(rL   Nrm   r@   rn   Iterable[tuple[str, str]]rv   ExcInfo | Nonec                $   || _         | 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   ).0rD   rE   s      rJ   
<listcomp>z0WSGIResponder.start_response.<locals>.<listcomp>   s9    iiiuG,,ell7.C.CDiiirL   zhttp.response.start)rb   rm   r0   )
rv   ru   splitrR   rr   r   rt   call_soon_threadsaferq   r   )	r\   rm   rn   rv   status_code_strr4   status_coder0   http_response_start_events	            rJ   r   zWSGIResponder.start_response   s     !$ 	@$(D!!'c1!5!5OQo..KiiXhiiiG-%"A A%
 O""#<===I**4?+>?????	@ 	@rL   rC   r
   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)rb   r   rx   rL   F)rP   rr   r   rt   r   rq   r   )r\   rC   r   chunkresponse_body
empty_bodys         rJ   r   zWSGIResponder.wsgi   s    XXg~66 	@ 	@E,!4 4M
 O""=111I**4?+>???? )-
 -


 	z***	&&t':;;;;;rL   )rP   r   r[   rk   r   r   )r^   r   r_   r   r   r`   )r_   r   r   r`   r   )rm   r@   rn   r   rv   r   r   r`   )rC   r
   r   r   r   r`   )rf   rg   rh   r]   re   r   r   r   ri   rL   rJ   rc   rc   g   s        - - - -"V V V V4	( 	( 	( 	( $(	@ @ @ @ @(< < < < < <rL   rc   )WSGIMiddleware)r   r   r   r   r   r   r   r
   )
__future__r   ro   concurrent.futuresrX   rz   r;   rU   collectionsr   typingr   uvicorn._typesr   r   r   r	   r
   r   r   r   r   r   r   r   rK   rN   rc   a2wsgir   ModuleNotFoundErrorri   rL   rJ   <module>r      s   " " " " " "      				 



                                         4 4 4 4n& & & & & & & &*[< [< [< [< [< [< [< [<|%%%%%%%%% % % %$NNNN%s   "A* *A54A5