
    gm"                    J   S SK Jr  S SKrS SKrS SKJr  S SKJrJr  S SK	J
r
Jr  S SKJrJrJrJrJr  \R$                  \/\R&                  \   4   r\R$                  \\/\R&                  \   4   r\R,                  " S5      r " S S	\5      r " S
 S5      r " S S\5      rg)    )annotationsN)collapse_excgroups)ClientDisconnectRequest)AsyncContentStreamResponse)ASGIAppMessageReceiveScopeSendTc                  :   ^  \ rS rSrSrSU 4S jjrSS jrSrU =r$ )_CachedRequest   a  
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                j   > [         TU ]  X5        SU l        SU l        U R	                  5       U l        g )NF)super__init___wrapped_rcv_disconnected_wrapped_rcv_consumedstream_wrapped_rc_stream)selfscopereceive	__class__s      R/home/matz/Project1/venv/lib/python3.13/site-packages/starlette/middleware/base.pyr   _CachedRequest.__init__   s.    ().&%*""&++-    c                f  #    U R                   (       a  SS0$ U R                  (       aW  U R                  (       a  SU l         SS0$ U R                  5       I S h  vN nUS   S:w  a  [	        SUS    35      eSU l         U$ [        U SS 5      b  SU l        SU R                  SS.$ U R                  (       a  SU l        SS	SS.$  U R                  5       nUR                  5       I S h  vN nU R                  U l        SUU R                  (       + S.$  N N,! [         a    SU l         SS0s $ f = f7f)
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_receive_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D1DA*D1#D 'D()D D1D D.+D1-D..D1)r   r   r   )r   r   r   r   returnr
   )	__name__
__module____qualname____firstlineno____doc__r   r.   __static_attributes____classcell__)r   s   @r   r   r      s    0;3 ;3r   r   c                  6    \ rS rSrSSS jjrS	S jrS
S jrSrg)BaseHTTPMiddleware]   Nc                H    Xl         Uc  U R                  U l        g UU l        g N)appdispatchdispatch_func)r   r>   r?   s      r   r   BaseHTTPMiddleware.__init__^   s    .6.>T]]Hr   c           
       ^ ^^^	^
^^#    TS   S:w  a  T R                  TX#5      I S h  vN   g [        TU5      nUR                  m[        R                  " 5       m	SUU	UU U
UU4S jjn[        R
                  " 5       nUu  m
mT   T
   [        5          [        R                  " 5        IS h  vN mT R                  XE5      I S h  vN nU" TTU5      I S h  vN   T	R                  5         TR                  5         S S S 5      IS h  vN   S S S 5        S S S 5        S S S 5        g  N Nz Nc NS N%! , IS h  vN  (       d  f       N:= f! , (       d  f       NC= f! , (       d  f       NL= f! , (       d  f       g = f7f)Nr!   httpc                  >^^^#    S mSU
U4S jjmSU4S jjmSUUUUUU4S jjnTR                  U5         T	R                  5       I S h  vN nUR                  SS 5      nUS   S:X  a  Ub  T	R                  5       I S h  vN nUS   S:X  d   eSUU	4S	 jjn[        US
   U" 5       US9nUS   Ul        U$  Nm N9! [        R                   a    Tb  Te[        S5      ef = f7f)Nc                 z  >^#    TR                  5       (       a  SS0$ [        R                  " 5        IS h  vN mSU4S jjn TR                  U TR                  5        U " T5      I S h  vN nS S S 5      IS h  vN   TR                  5       (       a  SS0$ W$  Nc N1 N#! , IS h  vN  (       d  f       N8= f7f)Nr!   r"   c                f   >#    U " 5       I S h  vN nTR                   R                  5         U$  N 7fr=   )cancel_scopecancel)funcresult
task_groups     r   wrap[BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnect.<locals>.wrapt   s+     '+v"//668% ".s   1/!1)rI   z(typing.Callable[[], typing.Awaitable[T]]r1   r   )is_setanyiocreate_task_group
start_soonwait)rL   messagerK   response_sentr.   s     @r   receive_or_disconnectMBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnectn   s      ''))"$566 2244
&
 ))$0B0BC$($99G 54 !''))"$566 5 : 5444sV   3B;BB;0B!+B,B!0B;;B< B;B!B;!B8'B*(B84B;c                z   >#     TR                  U 5      I S h  vN   g  N! [        R                   a     g f = f7fr=   )sendrO   BrokenResourceError)rS   send_streams    r   send_no_errorEBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.send_no_error   s6     %**733300 s(   ;! ! ;! 8;8;c                    >#    T    TR                  TTT5      I S h  vN   S S S 5        g  N! [         a  n U m S n A NS n A ff = f! , (       d  f       g = f7fr=   )r>   	Exception)excapp_excrU   r   r   r[   rZ   s    r   coro<BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro   sM      !&"hhu.C]SSS ![S$ &"%& ![sD   AA.,.	A.
A?AAA
AAinfor!   http.response.debugzNo response returned.http.response.startc                   >#    T  S h  vN n U S   S:X  d   eU R                  SS5      nU(       a  U7v   U R                  SS5      (       a  MK    Tb  Teg  NM
 N
7f)Nr!   http.response.bodyr%   r   r&   F)get)rS   r%   r`   recv_streams     r   body_streamCBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.body_stream   sf     %0 '"6?.BBBB";;vs3D"
";;{E::&!M '[s+   AAAA?AAAAstatus)status_codecontentrc   headersr0   )rS   r
   r1   None)r1   rp   )r1   z"typing.AsyncGenerator[bytes, None])rQ   r   rh   rO   EndOfStreamr(   _StreamingResponseraw_headers)requestra   rS   rc   rj   responser`   rU   r[   ri   rT   r   r   rZ   rK   r.   s         @@@r   	call_next.BaseHTTPMiddleware.__call__.<locals>.call_nextk   s     (,G && & !!$'< + 3 3 55{{6406?&;;@P$/$7$7$99G 6?&;;;;
" 
" *gh6GQ\Q^eijH#*9#5H O3 6 :$$ <&!M"#:;;<s@   2C&B> B:5B> B<B> 3C&:B> <B> >%C##C&)rt   r   r1   r   )r>   r   r.   rO   Eventcreate_memory_object_streamr   rP   r@   setclose)r   r   r   rX   rt   rv   streamsru   ri   rT   rZ   rK   r.   s   ``      @@@@@r   __call__BaseHTTPMiddleware.__call__b   s    =F"((5'000 0!11B	 B	H ?D>_>_>a#* [+'9';..00J!%!3!3G!GGuot<<<!!#!!#	 10 (<+[[[ 1\ 1G< 1000 (<';++[[s   E=D&AE=E,EE
-D(.E
1D0	D*D0	D,$D0	=E
D.
	E
EE,
E=(E
*D0	,D0	.E
0E6D97EE


EE
E)	%E,,
E:6E=c                   #    [        5       e7fr=   )NotImplementedError)r   rt   rv   s      r   r?   BaseHTTPMiddleware.dispatch   s     !##s   )r>   r@   r=   )r>   r	   r?   zDispatchFunction | Noner1   rp   r   r   r   r   rX   r   r1   rp   )rt   r   rv   RequestResponseEndpointr1   r   )r2   r3   r4   r5   r   r}   r?   r7    r   r   r:   r:   ]   s    MT$l$r   r:   c                  J    \ rS rSr    S           SS jjrSS jrSrg)	rr      Nc                d    XPl         Xl        X l        X@l        U R	                  U5        S U l        g r=   )rc   body_iteratorrm   
media_typeinit_headers
background)r   rn   rm   ro   r   rc   s         r   r   _StreamingResponse.__init__   s/     	$&$'"r   c                  #    U R                   b  U" SU R                   S.5      I S h  vN   U" SU R                  U R                  S.5      I S h  vN   U R                    S h  vN nU" SUSS.5      I S h  vN   M   NW N1 N N
 U" SSS	S.5      I S h  vN    U R                  (       a  U R	                  5       I S h  vN    g g 7f)
Nrd   )r!   rc   re   )r!   rl   ro   rg   Tr$   r   F)rc   rm   rs   r   r   )r   r   r   rX   r-   s        r   r}   _StreamingResponse.__call__   s     99  5tyyIJJJ-**++
 	
 	
  -- 	Y% 4eRVWXXX K	
	YX . 0#ERSSS??//### so   &C
B 'C
BC
!B%B&B)C
9B:C
C
BC
C
B)C
CC
)r   r   rc   r   rm   )   NNN)rn   r   rm   intro   ztyping.Mapping[str, str] | Noner   z
str | Nonerc   z&typing.Mapping[str, typing.Any] | Noner1   rp   r   )r2   r3   r4   r5   r   r}   r7   r   r   r   rr   rr      sT     37!%7;#  1	
  5 
$r   rr   )
__future__r   typingrO   starlette._utilsr   starlette.requestsr   r   starlette.responsesr   r   starlette.typesr	   r
   r   r   r   Callable	Awaitabler   DispatchFunctionTypeVarr   r   r:   rr   r   r   r   <module>r      s    "   / 8 < B B //7)V5E5Eh5O*OP ??G-D#EvGWGWX`Ga#ab 
NN3I3W I3X\$ \$~!$ !$r   