
    ,h#                    J   d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
mZ d dlmZmZmZmZmZ ej$                  egej&                  e   f   Zej$                  eegej&                  e   f   Z ej,                  d      Z G d d	e      Z G d
 d      Z G d de      Zy)    )annotationsN)collapse_excgroups)ClientDisconnectRequest)AsyncContentStreamResponse)ASGIAppMessageReceiveScopeSendTc                  ,     e Zd ZdZd fdZddZ xZS )_CachedRequesta  
    If the user calls Request.body() from their dispatch function
    we cache the entire request body in memory and pass that to downstream middlewares,
    but if they call Request.stream() then all we do is send an
    empty body so that downstream things don't hang forever.
    c                l    t         |   ||       d| _        d| _        | j	                         | _        y )NF)super__init___wrapped_rcv_disconnected_wrapped_rcv_consumedstream_wrapped_rc_stream)selfscopereceive	__class__s      [/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/starlette/middleware/base.pyr   z_CachedRequest.__init__   s0    ().&%*""&++-    c                0  K   | j                   rddiS | j                  rQ| j                  rd| _         ddiS | j                          d {   }|d   dk7  rt	        d|d          d| _         |S t        | dd       d| _        d| j                  ddS | j                  rd| _        dd	ddS 	 | j                         }|j                          d {   }| j                  | _        d|| j                   dS 7 7 (# t        $ r d| _         ddicY S w xY ww)
Ntypehttp.disconnectTzUnexpected message received: _bodyzhttp.requestFr   body	more_bodyr   )r   r   _is_disconnectedr   RuntimeErrorgetattrr!   _stream_consumedr   	__anext__r   )r   msgr   chunks       r   wrapped_receivez_CachedRequest.wrapped_receive   s]    )) -..%% $$ 26. 122 &C6{// #%B3v;-#PQQ-1D*J 4$'3)-D&&

" 
 "" *.D&&" 3$..00-1-B-B**!%)%:%:!: C '> 1 $ 315. 1223sI   AD	C8
A#D.#C< C:%C< 7D:C< <DDDD)r   r   r   r   returnr
   )__name__
__module____qualname____doc__r   r,   __classcell__)r   s   @r   r   r      s    0;3r   r   c                  &    e Zd ZdddZddZddZy)	BaseHTTPMiddlewareNc                H    || _         || j                  | _        y || _        y N)appdispatchdispatch_func)r   r8   r9   s      r   r   zBaseHTTPMiddleware.__init__^   s!    .6.>T]]Hr   c           
        	
K   d   dk7  r j                  ||       d {    y t        |      }|j                  t        j                         d d	d	
 f	d}t        j
                         }|\  

5  5  t               5  t        j                         4 d {    j                  ||       d {   } ||       d {    j                          
j                          d d d       d {    d d d        d d d        d d d        	sy y 7 7 7 k7 [7 -# 1 d {  7  sw Y   =xY w# 1 sw Y   AxY w# 1 sw Y   ExY w# 1 sw Y   IxY ww)Nr   httpFc                  	K   dfddfddfd}j                  |       	 
j                          d {   }|j                  dd       }|d   dk(  r|
j                          d {   }|d   d	k(  sJ d
fd
}t        |d    |       |      }|d   |_        |S 7 j7 8# t        j                  $ r d	t        d      w xY ww)Nc                 V  K   j                         rddiS t        j                         4 d {   dfd} j                  | j                          |        d {   }d d d       d {    j                         rddiS S 7 \7 ,7 # 1 d {  7  sw Y   .xY ww)Nr   r    c                f   K    |         d {   }j                   j                          |S 7  wr7   )cancel_scopecancel)funcresult
task_groups     r   wrapz[BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnect.<locals>.wrapt   s,     '+v"//668% ".s   1/!1)rB   z(typing.Callable[[], typing.Awaitable[T]]r.   r   )is_setanyiocreate_task_group
start_soonwait)rE   messagerD   response_sentr,   s     @r   receive_or_disconnectzMBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnectn   s      '')"$566 224 : :
&
 ))$0B0BC$($99G: : !'')"$566: :: : : :sV   -B)BB).B#B$B(B)3B4B)BB)B&BB&"B)c                x   K   	 j                  |        d {    y 7 # t        j                  $ r Y y w xY wwr7   )sendrG   BrokenResourceError)rK   send_streams    r   send_no_errorzEBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.send_no_error   s7     %**733300 s(   :! ! :! 7:7:c                    K   5  	 j                         d {    d d d        y 7 # t        $ r} | Y d } ~ d } ~ ww xY w# 1 sw Y   y xY wwr7   )r8   	Exception)excapp_excrM   r   r   rR   rQ   s    r   coroz<BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro   sY      ! &&"hhu.C]SSS& &S$ &"%&& &sD   AA.,.	A.	A>AAAAAinfor   http.response.debugTzNo response returned.http.response.startc                   K   2 3 d {   } | d   dk(  sJ | j                  dd      }|r| | j                  dd      r? y 7 <6 y w)Nr   http.response.bodyr#   r   r$   F)get)rK   r#   recv_streams     r   body_streamzCBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.body_stream   sW     %0  '"6?.BBB";;vs3D"
";;{E:[s+   AA	AA	6AAA		Astatus)status_codecontentrX   headersr-   )rK   r
   r.   None)r.   rd   )r.   z"typing.AsyncGenerator[bytes, None])rI   r   r]   rG   EndOfStreamr&   _StreamingResponseraw_headers)requestrW   rK   rX   r_   responserM   rR   rV   exception_already_raisedr^   rL   r   r   rQ   rD   r,   s         @@r   	call_nextz.BaseHTTPMiddleware.__call__.<locals>.call_nextm   s     && & !!$'
< + 3 3 55{{6406?&;;@P$/$7$7$99G 6?&;;; *gh6GQ\Q^eijH#*9#5H O1 6 :$$ <&/3,!M"#:;;<s@   *CB2 B.3B2 7B08B2 <2C.B2 0B2 2%CC)rh   r   r.   r   )r8   r   r,   rG   Eventcreate_memory_object_streamr   rH   r:   setclose)r   r   r   rO   rh   rk   streamsri   rV   rj   r^   rL   rQ   rD   r,   s   ``      @@@@@@@r   __call__zBaseHTTPMiddleware.__call__b   so    =F"((5'4000 0!11$(#( ?	 ?	B ?D>_>_>a#* [ 	$+ 	$'9'; 	$..0 $ $J!%!3!3GY!GGuot<<<!!#!!#	$ $	$ 	$ 	$ '?M (@e 1Z$G<$ $ $ $	$ 	$ 	$ 	$ 	$ 	$s   E5D1AE5	E)EE0D41E4D<	
D6D<	D8$D<	ED:
EEE)!E54E6D<	8D<	:E<EEE
EEEE&	"E))E2.E5c                   K   t               wr7   )NotImplementedError)r   rh   rk   s      r   r9   zBaseHTTPMiddleware.dispatch   s     !##s   r7   )r8   r	   r9   zDispatchFunction | Noner.   rd   r   r   r   r   rO   r   r.   rd   )rh   r   rk   RequestResponseEndpointr.   r   )r/   r0   r1   r   rq   r9    r   r   r5   r5   ]   s    MUn$r   r5   c                  <    e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZddZy)rf   Nc                l    || _         || _        || _        || _        | j	                  |       d | _        y r7   )rX   body_iteratorra   
media_typeinit_headers
background)r   rb   ra   rc   rz   rX   s         r   r   z_StreamingResponse.__init__   s7     	$&$'"r   c                  K   | j                    |d| j                   d       d {     |d| j                  | j                  d       d {    | j                  2 3 d {   } |d|dd       d {    7 V7 07 7 6  |ddd	d       d {  7   | j                  r| j	                          d {  7   y y w)
NrY   )r   rX   rZ   )r   r`   rc   r\   Tr"   r   F)rX   ra   rg   ry   r|   )r   r   r   rO   r+   s        r   rq   z_StreamingResponse.__call__   s     99  5tyyIJJJ-**++
 	
 	
  -- 	Y 	Y% 4eRVWXXX K	
	YX . 0#ERSSS??//### so   %CA>'CB C B$B%B(C8B9C CBCCB$C;B><C)   NNN)rb   r   ra   intrc   ztyping.Mapping[str, str] | Nonerz   z
str | NonerX   z&typing.Mapping[str, typing.Any] | Noner.   rd   rt   )r/   r0   r1   r   rq   rv   r   r   rf   rf      sT     37!%7;#  1	
  5 
$r   rf   )
__future__r   typingrG   starlette._utilsr   starlette.requestsr   r   starlette.responsesr   r   starlette.typesr	   r
   r   r   r   Callable	Awaitableru   DispatchFunctionTypeVarr   r   r5   rf   rv   r   r   <module>r      s    "   / 8 < B B //7)V5E5Eh5O*OP ??G-D#EvGWGWX`Ga#ab FNN3I3W I3X]$ ]$@!$ !$r   