
    Wh#                    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j2                  d      Z G d	 d
e      Z G d d      Z G d de      Zy)    )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.
    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      d/var/www/html/api.bullseye.mysouth.io/venv/lib/python3.12/site-packages/starlette/middleware/base.pyr   z_CachedRequest.__init__   s0    ().&%*""&++-    c                0  K   | j                   rddiS | j                  rQ| j                  rd| _         ddiS | j                          d {   }|d   dk7  rt	        d|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    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D	C8
A#D.#C< C:%C< 7D:C< <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                  &    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___   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r9   )cancel_scopecancel)funcresult
task_groups     r   wrapz[BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnect.<locals>.wrapx   s,     '+v"//668% ".s   1/!1)rD   z(typing.Callable[[], typing.Awaitable[T]]r0   r   )is_setanyiocreate_task_group
start_soonwait)rG   messagerF   response_sentr.   s     @r   receive_or_disconnectzMBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnectr   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r9   )rL   close)recv_streamrN   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r9   )sendrI   BrokenResourceError)rM   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r9   )r:   	Exception)excapp_excrO   r   r   rX   rW   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.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!   http.response.bodyr%   r   r&   F)get)rM   r%   r\   rR   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^   headersr/   )r0   None)rM   r   r0   ri   )r0   z"typing.AsyncGenerator[bytes, None])	rI   create_memory_object_streamrK   r   rc   EndOfStreamr(   _StreamingResponseraw_headers)requestrS   r]   rM   r^   rd   responser\   rO   rR   rX   rW   rN   r   r   rF   r.   s          @@@@@r   	call_nextz.BaseHTTPMiddleware.__call__.<locals>.call_nextl   s    (,G (-'H'H'J$K&$& & !!"DE!!$'< + 3 3 55{{6406?&;;@P$/$7$7$99G 6?&;;;;" *gh6GQ\Q^eijH#*9#5H O5 6 :$$ <&!M"#:;;<sB   AD$C' 7C#83C' +C%,C' 03D#C' %C' '#D

D)rn   r   r0   r
   )	r:   r   r.   rI   Eventr   rJ   r<   set)
r   r   r   rU   rn   rp   ro   rN   rF   r.   s
   ``     @@@r   __call__zBaseHTTPMiddleware.__call__c   s     =F"((5'4000 0!11K	 K	Z  ! 	$..0 $ $J!%!3!3GY!GGuot<<<!!#$ $	$ 	$i 1j$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r9   )NotImplementedError)r   rn   rp   s      r   r;   zBaseHTTPMiddleware.dispatch   s     !##s   r9   )r:   r   r;   zDispatchFunction | Noner0   ri   r   r   r   r   rU   r   r0   ri   )rn   r   rp   RequestResponseEndpointr0   r
   )r1   r2   r3   r   rs   r;    r   r   r7   r7   ^   s    MZ$x$r   r7   c                  <    e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZddZy)rl   Nc                l    || _         || _        || _        || _        | j	                  |       d | _        y r9   )r^   body_iteratorrf   
media_typeinit_headers
background)r   rg   rf   rh   r|   r^   s         r   r   z_StreamingResponse.__init__   s7     	$&$'"r   c                  K   | j                    |d| j                   d       d {     |d| j                  | j                  d       d {    | j                  2 3 d {   } |d|dd       d {    7 V7 07 7 6  |ddd	d       d {  7   | j                  r| j	                          d {  7   y y w)
Nr_   )r!   r^   r`   )r!   re   rh   rb   Tr$   r   F)r^   rf   rm   r{   r~   )r   r   r   rU   r-   s        r   rs   z_StreamingResponse.__call__   s     99  5tyyIJJJ-**++
 	
 	
  -- 	Y 	Y% 4eRVWXXX K	
	YX . 0#ERSSS??//### so   %CA>'CB C B$B%B(C8B9C CBCCB$C;B><C)   NNN)rg   r	   rf   intrh   ztyping.Mapping[str, str] | Noner|   z
str | Noner^   z&typing.Mapping[str, typing.Any] | Noner0   ri   rv   )r1   r2   r3   r   rs   rx   r   r   rl   rl      sT     37!%7;#  1	
  5 
$r   rl   )
__future__r   typingrI   	anyio.abcr   r   starlette._utilsr   starlette.requestsr   r   starlette.responsesr	   r
   starlette.typesr   r   r   r   r   Callable	Awaitablerw   DispatchFunctionTypeVarr   r   r7   rl   rx   r   r   <module>r      s    "   ; / 8 < B B //7)V5E5Eh5O*OP ??G-D#EvGWGWX`Ga#ab FNN3I3W I3Xb$ b$J!$ !$r   