
    ,h                        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 y# e$ r eZY yw xY w)    )annotationsN)deque)Iterable)ASGIReceiveCallableASGIReceiveEventASGISendCallableASGISendEventEnvironExcInfoHTTPRequestEventHTTPResponseBodyEventHTTPResponseStartEvent	HTTPScopeStartResponseWSGIAppc                (   | 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)scopemessagebodyscript_name	path_infoenvironr$   r)   namevaluename_strcorrected_name	value_strcorrected_name_environs                 Y/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/uvicorn/middleware/wsgi.pybuild_environrI      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"+,  N    c                  .    e Zd ZdddZ	 	 	 	 	 	 	 	 ddZy)_WSGIMiddlewarec                    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DeprecationWarningapp
concurrentfuturesThreadPoolExecutorexecutor)selfrR   workerss      rH   __init__z_WSGIMiddleware.__init__S   s8    u	
 "**=='=RrJ   c                   K   |d   dk(  sJ t        | j                  | j                  |      } |||       d {    y 7 w)Ntyper   )WSGIResponderrR   rV   )rW   r<   receivesendinstances        rH   __call__z_WSGIMiddleware.__call__[   s=      V}&& 4==%@w%%%s   8AA AN)
   )rR   r   rX   int)r<   r   r]   r   r^   r   returnNone)__name__
__module____qualname__rY   r`    rJ   rH   rL   rL   R   s3    S&& %& 	&
 
&rJ   rL   c                  R    e Zd Z	 	 	 	 	 	 ddZddZd	dZ	 d
	 	 	 	 	 	 	 ddZddZy)r\   c                    || _         || _        || _        d | _        d | _        t        j                         | _        t               | _	        t        j                         | _        d| _        d | _        y )NF)rR   rV   r<   statusresponse_headersasyncioEvent
send_eventr   
send_queueget_event_looploopresponse_startedexc_info)rW   rR   rV   r<   s       rH   rY   zWSGIResponder.__init__g   s]      
 $!--/7<w/6/E/E/G	 %(,rJ   c                  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>   rJ   	more_bodyFr   r      )ioBytesIOr1   seekSEEK_ENDwriterI   r<   rm   rq   rr   run_in_executorrV   wsgistart_responsecreate_tasksenderwait_forrp   appendro   setrt   with_traceback)
rW   r]   r^   r=   r>   rv   body_messagerA   r~   r   s
             rH   r`   zWSGIResponder.__call__x   s    *1)Ozz'++fc23KKU3	IIa%!)O  

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

GT:**,	yy((		7DL_L_`&&t{{4'89	1""4...OO""4(OO!""64000==$--"11$--2BDMMRSDTUU %- %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)rp   popleftro   waitclear)rW   r^   r=   s      rH   r   zWSGIResponder.sender   sk     //113?7m##oo**,,,%%' 
 $,s!   6A?A;"A?A= A?=A?Nc                   || _         | 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[   rk   r+   )rt   rs   splitrb   r2   rp   r   rr   call_soon_threadsafero   r   )rW   rk   rl   rt   status_code_strr/   status_coderB   rC   r+   http_response_start_events              rH   r   zWSGIResponder.start_response   s     !$$$(D!!'c1!5OQo.KXhiuG,ell7.CDiGi-%"A%
 OO""#<=II**4??+>+>? % js    ,C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>   rv   rJ   F)rR   rp   r   rr   r   ro   r   )rW   rA   r   chunkresponse_body
empty_bodys         rH   r~   zWSGIResponder.wsgi   s    XXg~6 	@E,!4M
 OO""=1II**4??+>+>?	@ )-


 	z*		&&t':':;rJ   )rR   r   rV   z%concurrent.futures.ThreadPoolExecutorr<   r   )r]   r   r^   r   rc   rd   )r^   r   rc   rd   r   )rk   r;   rl   zIterable[tuple[str, str]]rt   zExcInfo | Nonerc   rd   )rA   r
   r   r   rc   rd   )re   rf   rg   rY   r`   r   r   r~   rh   rJ   rH   r\   r\   f   sh    -- 8- 	-"V4	( $(	@@ 4@ !	@
 
@(<rJ   r\   )WSGIMiddleware)r<   r   r=   r   r>   z
io.BytesIOrc   r
   )
__future__r   rm   concurrent.futuresrS   rx   r6   rO   collectionsr   collections.abcr   uvicorn._typesr   r   r   r	   r
   r   r   r   r   r   r   r   rI   rL   r\   a2wsgir   ModuleNotFoundErrorrh   rJ   rH   <module>r      sj    "   	 
   $    4n& &([< [<|%% %$N%s   A# #A-,A-