
    vh%                    R   d dl mZ d dlmZmZmZmZmZ d dlm	Z	m
Z
mZmZ d dlZd dlmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZ e
egee   f   Ze
eegee   f   Zeeeeee	f   f   df   Zeeeee eee	f   f      Z! ed	      Z" G d
 de      Z# G d d      Z$ G d de      Z%y)    )annotations)AsyncGeneratorAsyncIterable	AwaitableMappingMutableMapping)AnyCallableTypeVarUnionN)collapse_excgroups)ClientDisconnectRequest)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      Q/var/www/html/luna/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   r4   __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    r@   rA   s      r$   r   zBaseHTTPMiddleware.__init__a   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r?   )cancel_scopecancel)funcresult
task_groups     r$   wrapz[BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnect.<locals>.wrapw   s,     '+v"//668% ".s   1/!1)rJ   zCallable[[], Awaitable[T]]r6   r   )is_setanyiocreate_task_group
start_soonwait)rM   messagerL   response_sentr4   s     @r$   receive_or_disconnectzMBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnectq   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r?   )sendrO   BrokenResourceError)rS   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r?   )r@   	Exception)excapp_excrU   r!   r    rZ   rY   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(  r|   y | d   dk(  s
J d|         | j                  dd      }|r| | j                  dd      rV y 7 S6 y w)	Nr'   zhttp.response.pathsendhttp.response.bodyzUnexpected message: r+   r%   r,   F)get)rS   r+   recv_streams     r$   body_streamzCBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.body_stream   s~     %0 	 	'v*BB%"6?.BBdFZ[bZcDddB";;vs3D"
";;{E:	[s,   A"A AA AA"A"A  A"status)status_codecontentr`   headersr5   )rS   r   r6   None)r6   rl   )r6   BodyStreamGenerator)rQ   r"   re   rO   EndOfStreamr.   _StreamingResponseraw_headers)requestr_   rS   r`   rg   responserU   rZ   r^   exception_already_raisedrf   rT   r!   r    rY   rL   r4   s         @@r$   	call_nextz.BaseHTTPMiddleware.__call__.<locals>.call_nextp   s     && & !!$'
< + 3 3 55{{6406?&;;@P$/$7$7$99G 6?&;;;;
 *gh6GQ\Q^eijH#*9#5H O7 6 :$$ <&/3,!M"#:;;<s@   *CB2 B.3B2 7B08B2 <2C.B2 0B2 2%CC)rq   r   r6   r   )r@   r   r4   rO   Eventcreate_memory_object_streamr   rP   rB   setclose)r    r!   r"   rW   rq   rt   streamsrr   r^   rs   rf   rT   rY   rL   r4   s   ``      @@@@@@@r$   __call__zBaseHTTPMiddleware.__call__e   sq    =F"((5'4000 0!11$(#( B	 B	H ?D>_>_>a#* [ 	$+ 	$'9'; 	$..0 $ $J!%!3!3GY!GGuot<<<!!#!!#	$ $	$ 	$ 	$ '?M (@k 1`$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r?   )NotImplementedError)r    rq   rt   s      r$   rA   zBaseHTTPMiddleware.dispatch   s     !##s   r?   )r@   r   rA   zDispatchFunction | Noner6   rl   r!   r   r"   r   rW   r   r6   rl   )rq   r   rt   RequestResponseEndpointr6   r   )r7   r8   r9   r   rz   rA    r%   r$   r=   r=   `   s    MXt$r%   r=   c                  <    e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZddZy)ro   Nc                l    || _         || _        || _        || _        | j	                  |       d | _        y r?   )r`   body_iteratorri   
media_typeinit_headers
background)r    rj   ri   rk   r   r`   s         r$   r   z_StreamingResponse.__init__   s7     	$&$'"r%   c                  K   | j                    |d| j                   d       d {     |d| j                  | j                  d       d {    d}| j                  2 3 d {   }t	        |t
              rd} ||       d {    , |d|dd       d {    A7 {7 U7 @7  7 6 |r |dd	dd       d {  7   | j                  r| j                          d {  7   y y w)
Nra   )r'   r`   rb   )r'   rh   rk   TFrd   r*   r%   )r`   ri   rp   r   
isinstancedictr   )r    r!   r"   rW   should_close_bodyr3   s         r$   rz   z_StreamingResponse.__call__   s    99  5tyyIJJJ-**++
 	
 	
 !-- 	Y 	Y%%&$)!5k!! 4eRVWXXX! K	
	Y "X .  4cPUVWWW??//### s   %C,B#'C,B%C,"B-&B''B-*C,B)	C,B+C,%C,'B-)C,+C,-C,?C $C,$C'%C,)   NNN)rj   AsyncContentStreamri   intrk   zMapping[str, str] | Noner   z
str | Noner`   zMapping[str, Any] | Noner6   rl   r}   )r7   r8   r9   r   rz   r   r%   r$   ro   ro      sT     ,0!%)-#  *	
  ' 
$r%   ro   )&
__future__r   collections.abcr   r   r   r   r   typingr	   r
   r   r   rO   starlette._utilsr   starlette.requestsr   r   starlette.responsesr   starlette.typesr   r   r   r   r   r~   DispatchFunctionbytesstrrm   
memoryviewr   r   r   r=   ro   r   r%   r$   <module>r      s    " ] ] 0 0  / 8 ( B B"G9i.A#AB W&=>	(@SST $U5.c2J+J%KT%QR "5eZPSUXPXAY)Y#Z[ CLI3W I3X`$ `$F($ ($r%   