
    CCf5"                    j   d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZmZmZ d dlmZmZmZmZmZ ej0                  egej2                  e   f   Zej0                  eegej2                  e   f   Z ej8                  d	      Z G d
 de      Z G d d      Z G d de      Z y)    )annotationsN)ObjectReceiveStreamObjectSendStream)collapse_excgroups)BackgroundTask)ClientDisconnectRequest)ContentStreamResponseStreamingResponse)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      Y/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/starlette/middleware/base.pyr   z_CachedRequest.__init__   s0    ().&%*""&++-    c                "  K   | j                   rddiS | j                  rJ| j                  rd| _         ddiS | j                          d {   }|d   dk7  rt	        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#   sU    )) -..%% $$ 26. 122 &C6{// #%B3v;-#PQQJ 4$'3)-D&&

" 
 "" *.D&&" 3$..00-1-B-B**!%)%:%:!: A '< 1 $ 315. 1223sI   AD	C1
AD'#C5 
C3%C5 0D3C5 5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                  2    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<   r=   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 	fd}t               5  t        j                         4 d {    j                  ||       d {   } |	|       d {    j                          d d d       d {    d d d        y 7 7 [7 C7 37 # 1 d {  7  sw Y   %xY w# 1 sw Y   y xY ww)Nr#   httpc                  	
K   d t        j                         \  	dfdd	fd}dfd
d
fd}j                  |       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 k7 9# t         j
                  $ r 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>.wrapz   s,     '+v"//668% ".s   1/!1)rF   z(typing.Callable[[], typing.Awaitable[T]]r1   r   )is_setanyiocreate_task_group
start_soonwait)rI   messagerH   response_sentr/   s     @r    receive_or_disconnectzMBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnectt   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                 b   K   j                          d {     j                          y 7 wr;   )rN   close)recv_streamrP   s   r    "close_recv_stream_on_response_sentzZBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.close_recv_stream_on_response_sent   s*     #((***!!# +s   /-/c                x   K   	 j                  |        d {    y 7 # t        j                  $ r Y y w xY wwr;   )sendrK   BrokenResourceError)rO   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   4 d {    	 j                         d {    d d d       d {    y 7 17 # t        $ r} | Y d } ~ %d } ~ ww xY w7 !# 1 d {  7  sw Y   y xY wwr;   )r<   	Exception)excapp_excrQ   r   r   rZ   rY   s    r    coroz<BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro   so      ' & &&"hhu.C]SSS& & &S$ &"%&& & & &sq   A/<A/AA >A A/AA/A  	A	AAAAA/A, A#!A,(A/infor#   http.response.debugzNo response returned.zhttp.response.startc                
  K   4 d {    2 3 d {   } | d   dk(  sJ | j                  dd      }|r| | j                  dd      r? d d d       d {    y 7 [7 R6 7 # 1 d {  7  sw Y   xY ww)Nr#   zhttp.response.bodyr&   r!   r'   F)get)rO   r&   r^   rT   s     r    body_streamzCBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.body_stream   s     & " ")4 " "g&v2FFFF&{{637"&J&{{;>!" " &!M '""" " " "sj   BA&BA.A*A(A*6A.A.BA,
B(A**A.,B.B 4A75B <Bstatus)status_codecontentr`   headersr0   )r1   None)rO   r   r1   ri   )r1   z"typing.AsyncGenerator[bytes, None])	rK   create_memory_object_streamrM   r   rc   EndOfStreamr)   _StreamingResponseraw_headers)requestrU   r_   rO   r`   rd   responser^   rQ   rT   rZ   rY   rP   r   r   rH   r/   s          @@@@@r    	call_nextz.BaseHTTPMiddleware.__call__.<locals>.call_nextn   s     (,G (-'H'H'J$K&$& & !!"DE!!$'< + 3 3 55{{6406?&;;@P$/$7$7$99G 6?&;;;;" *#H-{}4H $+9#5H O9 6 :$$ <&!M"#:;;<sB   AD$C' 7C#83C' +C%,C' 03D#C' %C' '#D

D)rn   r	   r1   r   )	r<   r   r/   rK   Eventr   rL   r>   set)
r   r   r   rW   rn   rp   ro   rP   rH   r/   s
   ``     @@@r    __call__zBaseHTTPMiddleware.__call__e   s     =F"((5'4000 0!11M	 M	^  ! 	$..0 $ $J!%!3!3GY!GGuot<<<!!#$ $	$ 	$m 1n$G<$ $ $ $	$ 	$s   D
CAD
,C>C!C>	C)C# C)1C%2C)C>C'C>
D
!C>#C)%C)'C>)C;	/C20C;	7C>>DD
c                   K   t               wr;   )NotImplementedError)r   rn   rp   s      r    r=   zBaseHTTPMiddleware.dispatch   s      "##s   r;   )r<   r   r=   zDispatchFunction | Noner1   ri   )r   r   r   r   rW   r   r1   ri   )rn   r	   rp   RequestResponseEndpointr1   r   )r2   r3   r4   r   rs   r=    r!   r    r9   r9   `   s,    M\$|$$+B$	$r!   r9   c                  R     e Zd Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZd fdZ xZS )rl   c                :    || _         t        | 	  |||||       y r;   )_infor   r   )r   rg   rf   rh   
media_type
backgroundr`   r   s          r    r   z_StreamingResponse.__init__   s!     
+w
JOr!   c                   K   | j                   r |d| j                   d       d {    t        | 	  |       d {   S 7 7 w)Nra   )r#   r`   )rz   r   stream_response)r   rW   r   s     r    r~   z"_StreamingResponse.stream_response   sC     :: 5tzzJKKKW,T222 L2s    %AAAA AA)   NNNN)rg   r
   rf   intrh   ztyping.Mapping[str, str] | Noner{   z
str | Noner|   zBackgroundTask | Noner`   z&typing.Mapping[str, typing.Any] | Noner1   ri   )rW   r   r1   ri   )r2   r3   r4   r   r~   r6   r7   s   @r    rl   rl      so     37!%,07;
P
P 
P 1	
P
 
P *
P 5
P 

P3 3r!   rl   )!
__future__r   typingrK   	anyio.abcr   r   starlette._utilsr   starlette.backgroundr   starlette.requestsr   r	   starlette.responsesr
   r   r   starlette.typesr   r   r   r   r   Callable	Awaitablerv   DispatchFunctionTypeVarr   r   r9   rl   rw   r!   r    <module>r      s    "   ; / / 8 J J B B //7)V5E5Eh5O*OP ??%&(8(8(BB  FNN3H3W H3Vf$ f$R3* 3r!   