
    -h#                    J   d dl mZ d dlZd dl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)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      V/var/www/FlaskApp/flask-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)r6   r7   dispatch_func)r   r6   r7   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 d	d		
 f	d}t          j                    }|\  

5  5  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            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   	sd S d S )
Nr    httpFrequestr   r   r   c                  	K   dfddfddfd}                     |           	 
                                 d {V }|                    dd           }|d	         d
k    r|
                                 d {V }n(# t          j        $ r d	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)rC   result
task_groups     r   wrapz[BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnect.<locals>.wrapt   s8      '+tvv"/66888%r   )rC   rD   r   r   )is_setanyiocreate_task_group
start_soonwait)rJ   messagerI   response_sentr-   s     @r   receive_or_disconnectzMBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnectn   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rP   r9   c                p   K   	                      |            d {V  d S # t          j        $ r Y d S w xY wr;   )r=   rL   BrokenResourceError)rP   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   5  	                                 d {V  n# t          $ r} | Y d } ~ nd } ~ ww xY wd d d            d S # 1 swxY w Y   d S r;   )r6   	Exception)excapp_excrR   r   r   rV   rU   s    r   coroz<BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro   s       ! & &&"hhu.C]SSSSSSSSSS$ & & &"%&& & & & & & & & & & & & & & & & & &s0   A&A
<7A<AAAinfor    http.response.debugTzNo response returned.http.response.start"typing.AsyncGenerator[bytes, None]c                   K   2 3 d {V } | d         dk    sJ |                      dd          }|r|W V  |                      dd          s d S L6 d S )Nr    http.response.bodyr$   r   r%   F)get)rP   r$   recv_streams     r   body_streamzCBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.body_stream   s      %0       '"6?.BBBBB";;vs33D #"



";;{E::  &1[[s   Astatus)status_codecontentr\   headersr.   )rP   r
   r   r9   )r   r9   )r   r_   )rN   r   rb   rL   EndOfStreamr'   _StreamingResponseraw_headers)r@   r[   rP   r\   rd   responserR   rV   rZ   exception_already_raisedrc   rQ   r   r   rU   rI   r-   s         @@r   	call_nextz.BaseHTTPMiddleware.__call__.<locals>.call_nextm   s           &     & & & & & & & & & & & !!$'''
< + 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$ < < <&/3,!M"#:;;;< 6?&;;;;;      *gh6GQ\Q\Q^Q^eijjjH#*9#5H Os   AB %B2)r@   r   r   r   )r6   r   r-   rL   Eventcreate_memory_object_streamr   rM   r<   setclose)r   r   r   r=   r@   rn   streamsrl   rZ   rm   rc   rQ   rU   rI   r-   s   ``      @@@@@@@r   __call__zBaseHTTPMiddleware.__call__b   s=     =F""((5'4000000000F 00!1$(#( ?	 ?	 ?	 ?	 ?	 ?	 ?	 ?	 ?	 ?	 ?	 ?	 ?	 ?	B ?D>_>a>a#* [ 	$ 	$+ 	$ 	$'9';'; 	$ 	$.00 $ $ $ $ $ $ $J!%!3!3GY!G!GGGGGGGhuot<<<<<<<<<!!###!!###	$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ '?M s   E.EE 9AD#	E #
D--E 0D-1E 4E EEEEE.E	E.E	E..E25E2r@   r   rn   RequestResponseEndpointr   c                "   K   t                      r;   )NotImplementedError)r   r@   rn   s      r   r7   zBaseHTTPMiddleware.dispatch   s      !###r   r;   )r6   r	   r7   r8   r   r9   r   r   r   r   r=   r   r   r9   )r@   r   rn   ru   r   r   )r/   r0   r1   r   rt   r7    r   r   r5   r5   ]   s_        M M M M MU U U Un$ $ $ $ $ $r   r5   c                  (    e Zd Z	 	 	 	 dddZddZdS )rj      Nrg   r   rf   intrh   typing.Mapping[str, str] | None
media_type
str | Noner\   &typing.Mapping[str, typing.Any] | Noner   r9   c                v    || _         || _        || _        || _        |                     |           d | _        d S r;   )r\   body_iteratorrf   r~   init_headers
background)r   rg   rf   rh   r~   r\   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 )
Nr]   )r    r\   r^   )r    re   rh   ra   Tr#   r   F)r\   rf   rk   r   r   )r   r   r   r=   r,   s        r   rt   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)rg   r   rf   r|   rh   r}   r~   r   r\   r   r   r9   rx   )r/   r0   r1   r   rt   ry   r   r   rj   rj      sO         37!%7;    $ $ $ $ $ $r   rj   )
__future__r   typingrL   starlette._utilsr   starlette.requestsr   r   starlette.responsesr   r   starlette.typesr	   r
   r   r   r   Callable	Awaitableru   DispatchFunctionTypeVarr   r   r5   rj   ry   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]$ ]$ ]$ ]$ ]$ ]$ ]$ ]$@!$ !$ !$ !$ !$ !$ !$ !$ !$ !$r   