
    9Cg#                    Z   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
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dS )    )annotationsN)ObjectReceiveStreamObjectSendStream)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.
    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      K/var/www/api/venv/lib/python3.11/site-packages/starlette/middleware/base.pyr   z_CachedRequest.__init__   sC    ((().&%*""&++--    returnr   c                  K   | j         rddiS | j        rY| j        rd| _         ddiS |                                  d {V }|d         dk    rt	          d|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-1D*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, ,DD)r   r   r   r   r    r   )__name__
__module____qualname____doc__r   r/   __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)r8   r9   dispatch_func)r   r8   r9   s      r   r   zBaseHTTPMiddleware.__init___   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)rE   result
task_groups     r   wrapz[BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnect.<locals>.wrapx   s8      '+tvv"/66888%r   )rE   rF   r    r   )is_setanyiocreate_task_group
start_soonwait)rL   messagerK   response_sentr/   s     @r   receive_or_disconnectzMBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnectr   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=   )rQ   close)recv_streamrS   s   r   "close_recv_stream_on_response_sentzZBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.close_recv_stream_on_response_sent   sC      #((*********!!#####r   rR   c                p   K   	                      |            d {V  d S # t          j        $ r Y d S w xY wr=   )r?   rN   BrokenResourceError)rR   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=   )r8   	Exception)excapp_excrT   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.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"   http.response.bodyr&   r   r'   F)get)rR   r&   r`   rW   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contentrb   headersr0   )r    r;   )rR   r   r    r;   )r    re   )	rN   create_memory_object_streamrP   r   rh   EndOfStreamr)   _StreamingResponseraw_headers)rB   rX   ra   rR   rb   ri   responser`   rT   rW   r\   r[   rS   r   r   rK   r/   s          @@@@@r   	call_nextz.BaseHTTPMiddleware.__call__.<locals>.call_nextl   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?&;;;;;" " " " " " " *gh6GQ\Q\Q^Q^eijjjH#*9#5H Os   +AC #C')rB   r   r    r
   )	r8   r   r/   rN   Eventr   rO   r>   set)
r   r   r   r?   rB   rs   rr   rS   rK   r/   s
   ``     @@@r   __call__zBaseHTTPMiddleware.__call__c   s2     =F""((5'4000000000F 00!1K	 K	 K	 K	 K	 K	 K	 K	 K	 K	Z  !! 	$ 	$.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rB   r   rs   RequestResponseEndpointr
   c                "   K   t                      r=   )NotImplementedError)r   rB   rs   s      r   r9   zBaseHTTPMiddleware.dispatch   s      !###r   r=   )r8   r   r9   r:   r    r;   r   r   r   r   r?   r   r    r;   )rB   r   rs   rw   r    r
   )r1   r2   r3   r   rv   r9    r   r   r7   r7   ^   s_        M M M M MZ$ Z$ Z$ Z$x$ $ $ $ $ $r   r7   c                  (    e Zd Z	 	 	 	 dddZddZdS )rp      Nrl   r	   rk   intrm   typing.Mapping[str, str] | None
media_type
str | Nonerb   &typing.Mapping[str, typing.Any] | Noner    r;   c                v    || _         || _        || _        || _        |                     |           d | _        d S r=   )rb   body_iteratorrk   r   init_headers
background)r   rl   rk   rm   r   rb   s         r   r   z_StreamingResponse.__init__   sA     	$&$'"""r   r   r   r   r   r?   r   c                B  K   | j          |d| j         d           d {V   |d| j        | j        d           d {V  | j        2 3 d {V } |d|dd           d {V  6  |ddd	d           d {V  | j        r|                                  d {V  d S d S )
Nrc   )r"   rb   rd   )r"   rj   rm   rg   Tr%   r   F)rb   rk   rq   r   r   )r   r   r   r?   r.   s        r   rv   z_StreamingResponse.__call__   s[     9 $ 5tyIIJJJJJJJJJd-*+ 
 
 	
 	
 	
 	
 	
 	
 	
  - 	Y 	Y 	Y 	Y 	Y 	Y 	Y%$ 4eRVWWXXXXXXXXXX . d0#ERRSSSSSSSSS? 	$//###########	$ 	$s   	A&)r}   NNN)rl   r	   rk   r~   rm   r   r   r   rb   r   r    r;   rz   )r1   r2   r3   r   rv   r{   r   r   rp   rp      sO         37!%7;    $ $ $ $ $ $r   rp   )
__future__r   typingrN   	anyio.abcr   r   starlette._utilsr   starlette.requestsr   r   starlette.responsesr	   r
   starlette.typesr   r   r   r   r   Callable	Awaitablerw   DispatchFunctionTypeVarr   r   r7   rp   r{   r   r   <module>r      s   " " " " " "   ; ; ; ; ; ; ; ; / / / / / / 8 8 8 8 8 8 8 8 < < < < < < < < B B B B B B B B B B B B B B /7)V5Eh5O*OP ?G-D#EvGWX`Ga#ab FN3I3 I3 I3 I3 I3W I3 I3 I3Xb$ b$ b$ b$ b$ b$ b$ b$J!$ !$ !$ !$ !$ !$ !$ !$ !$ !$r   