
    ui5"                    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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 dS )    )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.
    scoper   receiver   c                    t                                          ||           d| _        d| _        |                                 | _        d S )NF)super__init___wrapped_rcv_disconnected_wrapped_rcv_consumedstream_wrapped_rc_stream)selfr   r   	__class__s      L/var/www/icac/venv/lib/python3.11/site-packages/starlette/middleware/base.pyr   z_CachedRequest.__init__   sC    ((().&%*""&++--    returnr   c                   K   | j         rddiS | j        rR| j        rd| _         ddiS |                                  d {V }|d         dk    rt	          d|d                    |S t          | dd           d| _        d| j        ddS | j        rd| _        dd	ddS 	 |                                 }|	                                 d {V }| j        | _        d|| j         dS # t          $ r d| _         ddicY S w xY 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     ) 	/ -..% 	 $ 3 26. 122 &&&&&&C6{/// ##P3v;#P#PQQQJ 4$''3)-D&&
"  
 " 	3 *.D&&"  3$..00000000-1-B**!%)%:!:  
 $ 3 3 315. 122223s   AC% %C=<C=)r   r   r   r   r"   r   )__name__
__module____qualname____doc__r   r0   __classcell__r   s   @r    r   r      s[         0 0 0 0 0 0:3 :3 :3 :3 :3 :3 :3 :3r!   r   c                  (    e Zd ZdddZddZddZdS )BaseHTTPMiddlewareNappr   dispatchDispatchFunction | Noner"   Nonec                4    || _         || j        n|| _        d S N)r:   r;   dispatch_func)r   r:   r;   s      r    r   zBaseHTTPMiddleware.__init__a   s"    .6.>T]]Hr!   r   r   r   r   sendr   c                    	K   d         dk    r                      ||           d {V  d S t          |          }|j        	t          j                    d 	fd}t                      5  t          j                    4 d {V                      ||           d {V } |	|           d {V                                   d d d           d {V  n# 1 d {V swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nr$   httprequestr	   r"   r   c                \  	
K   d t          j                    \  	dfdd	fd}dfd
d
fd}                    |                               |           	 	                                 d {V }|                    d	d           }|d
         dk    r|	                                 d {V }n&# t           j        $ r t          d          w xY w|d
         dk    sJ d	fd}t          |d          |            |          }|d         |_        |S )Nr"   r   c                 L  K                                    rddiS t          j                    4 d {V dfd}                     | j                    |            d {V }d d d           d {V  n# 1 d {V swxY w Y                                    rddiS |S )	Nr$   r%   func(typing.Callable[[], typing.Awaitable[T]]r"   r   c                ^   K    |              d {V }j                                          |S r?   )cancel_scopecancel)rG   result
task_groups     r    wrapz[BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnect.<locals>.wrapz   s8      '+tvv"/66888%r!   )rG   rH   r"   r   )is_setanyiocreate_task_group
start_soonwait)rN   messagerM   response_sentr0   s     @r    receive_or_disconnectzMBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnectt   sd      '')) 7"$566 244 : : : : : : :
& & & & & &
 ))$0BCCC$(D$9$9999999G: : : : : : : : : : : : : : : : : : : : : : : : : : : !'')) 7"$566s   3A;;
BBr=   c                 h   K                                     d {V                                    d S r?   )rS   close)recv_streamrU   s   r    "close_recv_stream_on_response_sentzZBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.close_recv_stream_on_response_sent   sC      #((*********!!#####r!   rT   c                p   K   	                      |            d {V  d S # t          j        $ r Y d S w xY wr?   )rA   rP   BrokenResourceError)rT   send_streams    r    send_no_errorzEBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.send_no_error   s]      %**7333333333330   FFs   " 55c                    K   4 d {V  	                                 d {V  n# t          $ r} | Y d } ~ nd } ~ ww xY wd d d           d {V  d S # 1 d {V swxY w Y   d S r?   )r:   	Exception)excapp_excrV   r   r   r^   r]   s    r    coroz<BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro   s,      ' & & & & & & & &&"hhu.C]SSSSSSSSSS$ & & &"%&& & & & & & & & & & & & & & & & & & & & & & & & & & & & & &s3   A,A
A=AAA
A"%A"infor$   http.response.debugzNo response returned.zhttp.response.start"typing.AsyncGenerator[bytes, None]c                
  K   4 d {V  2 3 d {V } | d         dk    sJ |                      dd          }|r|W V  |                      dd          s nK6 	 d d d           d {V  n# 1 d {V swxY w Y   d S )Nr$   zhttp.response.bodyr'   r!   r(   F)get)rT   r'   rb   rY   s     r    body_streamzCBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.body_stream   s\     & " " " " " " " ")4 " " " " " " "g&v2FFFFF&{{6377 '"&JJJJ&{{;>> "!E" *5" " " " " " " " " " " " " " " " " " " " " " " " " " " &!M '&s   A.AAA..
A8;A8status)status_codecontentrd   headersr1   )r"   r=   )rT   r   r"   r=   )r"   rf   )	rP   create_memory_object_streamrR   r   rh   EndOfStreamr*   _StreamingResponseraw_headers)rD   rZ   rc   rT   rd   ri   responserb   rV   rY   r^   r]   rU   r   r   rM   r0   s          @@@@@r    	call_nextz.BaseHTTPMiddleware.__call__.<locals>.call_nextn   s     (,G (-'H'J'J$K      &$ $ $ $ $ $ $     & & & & & & & & & & & !!"DEEE!!$'''< + 3 3 5 5555555{{64006?&;;;@P$/$7$7$9$9999999G$ < < <&!M"#:;;;<
 6?&;;;;;" " " " " " " *#H-{{}}4  H $+9#5H Os   +AC #C')rD   r	   r"   r   )	r:   r   r0   rP   Eventr   rQ   r@   set)
r   r   r   rA   rD   rs   rr   rU   rM   r0   s
   ``     @@@r    __call__zBaseHTTPMiddleware.__call__e   s2     =F""((5'4000000000F 00!1M	 M	 M	 M	 M	 M	 M	 M	 M	 M	^  !! 	$ 	$.00 $ $ $ $ $ $ $J!%!3!3GY!G!GGGGGGGhuot<<<<<<<<<!!###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s7   5DAC%D%
C/	/D2C/	3DD
DrD   r	   rs   RequestResponseEndpointr   c                "   K   t                      r?   )NotImplementedError)r   rD   rs   s      r    r;   zBaseHTTPMiddleware.dispatch   s       "###r!   r?   )r:   r   r;   r<   r"   r=   )r   r   r   r   rA   r   r"   r=   )rD   r	   rs   rw   r"   r   )r2   r3   r4   r   rv   r;    r!   r    r9   r9   `   s_        M M M M M\$ \$ \$ \$|$ $ $ $ $ $r!   r9   c                  8     e Zd Z	 	 	 	 	 dd fdZd fdZ xZS )rp      Nrl   r
   rk   intrm   typing.Mapping[str, str] | None
media_type
str | None
backgroundBackgroundTask | Nonerd   &typing.Mapping[str, typing.Any] | Noner"   r=   c                `    || _         t                                          |||||           d S r?   )_infor   r   )r   rl   rk   rm   r   r   rd   r   s          r    r   z_StreamingResponse.__init__   s2     
+w
JOOOOOr!   rA   r   c                   K   | j         r |d| j         d           d {V  t                                          |           d {V S )Nre   )r$   rd   )r   r   stream_response)r   rA   r   s     r    r   z"_StreamingResponse.stream_response   si      : 	L$ 5tzJJKKKKKKKKKWW,,T222222222r!   )r|   NNNN)rl   r
   rk   r}   rm   r~   r   r   r   r   rd   r   r"   r=   )rA   r   r"   r=   )r2   r3   r4   r   r   r6   r7   s   @r    rp   rp      sx         37!%,07;
P 
P 
P 
P 
P 
P 
P3 3 3 3 3 3 3 3 3 3r!   rp   )!
__future__r   typingrP   	anyio.abcr   r   starlette._utilsr   starlette.backgroundr   starlette.requestsr   r	   starlette.responsesr
   r   r   starlette.typesr   r   r   r   r   Callable	Awaitablerw   DispatchFunctionTypeVarr   r   r9   rp   rz   r!   r    <module>r      s   " " " " " "   ; ; ; ; ; ; ; ; / / / / / / / / / / / / 8 8 8 8 8 8 8 8 J J J J J J J J J J B B B B B B B B B B B B B B /7)V5Eh5O*OP ?%&(8(BB  FN3H3 H3 H3 H3 H3W H3 H3 H3Vf$ f$ f$ f$ f$ f$ f$ f$R3 3 3 3 3* 3 3 3 3 3r!   