
    =h["                     ^   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 j4                  d      Z G d	 d
e      Z G d d      Z G d de      Zy)    N)ObjectReceiveStreamObjectSendStream)collapse_excgroups)BackgroundTask)ClientDisconnectRequest)ContentStreamResponseStreamingResponse)ASGIAppMessageReceiveScopeSendTc                   8     e Zd ZdZdedef fdZdef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.
    scopereceivec                 l    t         |   ||       d| _        d| _        | j	                         | _        y )NF)super__init___wrapped_rcv_disconnected_wrapped_rcv_consumedstream_wrapped_rc_stream)selfr   r   	__class__s      i/var/www/html/phonemate/phone_mate_backend/venv/lib/python3.12/site-packages/starlette/middleware/base.pyr   z_CachedRequest.__init__   s0    ().&%*""&++-    returnc                 "  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)
__name__
__module____qualname____doc__r   r   r   r   r/   __classcell__r   s   @r   r   r      s'    0e 0g 0:3w :3r    r   c                   j    e Zd Z	 ddedej
                  e   ddfdZdede	de
ddfd	Zd
ededefdZy)BaseHTTPMiddlewareNappdispatchr!   c                 H    || _         || j                  | _        y || _        y N)r8   r9   dispatch_func)r   r8   r9   s      r   r   zBaseHTTPMiddleware.__init___   s#     .6.>T]]Hr    r   r   sendc                 0   	K   d   dk7  r j                  ||       d {    y t        |      }|j                  	t        j                         dt
        dt        f 	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#   httprequestr!   c                 l  	
K   d t        j                         \  	dt        ffdd	fd}dt        dd ffd
d
fd}j                  |       j                  |       	 	j	                          d {   }|j                  dd       }|d   d	k(  r|	j	                          d {   }|d   dk(  sJ dt        j                  t        d f   f	fd}t        |d    |       |      }|d   |_        |S 7 7 R# t         j                  $ r t        d
      w xY ww)Nr!   c                    K   j                         rddiS t        j                         4 d {   dt        j                  g t        j
                  t           f   dt        f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$   funcr!   c                 f   K    |         d {   }j                   j                          |S 7  wr;   )cancel_scopecancel)rC   result
task_groups     r   wrapz[BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnect.<locals>.wrapz   s,     '+v"//668% ".s   1/!1)	is_setanyiocreate_task_grouptypingCallable	Awaitabler   
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4
&V=M=Ma=P9P)Q &VW &
 ))$0B0BC$($99G 54 !'')"$566 5 : 5444sW   -CB>CACC CC#C$C CCC
CCCc                  b   K   j                          d {     j                          y 7 wr;   )rQ   close)recv_streamrS   s   r   "close_recv_stream_on_response_sentzZBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.close_recv_stream_on_response_sent   s*     #((***!!# +s   /-/rR   c                 x   K   	 j                  |        d {    y 7 # t        j                  $ r Y y w xY wwr;   )r=   rK   BrokenResourceError)rR   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;   )r8   	Exception)excapp_excrT   r   r   r\   r[   s    r   coroz<BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro   sX      ';&"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)rR   r&   r`   rW   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contentrb   headers)r!   N)rK   create_memory_object_streamr   rP   r   re   EndOfStreamr)   rM   AsyncGeneratorbytes_StreamingResponseraw_headers)r@   rX   ra   rR   rb   rf   responser`   rT   rW   r\   r[   rS   r   r   rH   r/   s          @@@@@r   	call_nextz.BaseHTTPMiddleware.__call__.<locals>.call_nextn   sK    26G (-'H'H'J$K &$W  & & !!"DE!!$'< + 3 3 55{{6406?&;;@P$/$7$7$99G 6?&;;;;"v'<'<UD['I " *#H-{}4H $+9#5H O9 6 :$$ <&!M"#:;;<sC   A)D42D D
3D 9D:D >AD4
D D #D11D4)r8   r   r/   rK   Eventr   r
   r   rL   r<   set)
r   r   r   r=   r@   rr   rq   rS   rH   r/   s
   ``     @@@r   __call__zBaseHTTPMiddleware.__call__e   s     =F"((5'4000 0!11M	W M	 M	 M	^  !..00J!%!3!3GY!GGuot<<<!!# 10 "!m 1n 1G< 1000 "!s   DC+AD8D
C-D
C5+C/,C5=C1>C5D
C3D
"
D-D
/C51C53D
5D	;C><D	D

DDr@   rr   c                    K   t               wr;   )NotImplementedError)r   r@   rr   s      r   r9   zBaseHTTPMiddleware.dispatch   s      "##s   r;   )r0   r1   r2   r   rM   OptionalDispatchFunctionr   r   r   r   ru   r   RequestResponseEndpointr
   r9    r    r   r7   r7   ^   st    JNMM&,oo6F&GM	M\$E \$G \$4 \$D \$|$$+B$	$r    r7   c                       e Zd Z	 	 	 	 	 ddededej                  ej                  eef      dej                  e   dej                  e	   dej                  ej                  eej                  f      ddf fd	Zd
eddf fdZ xZS )ro   Nri   rh   rj   
media_type
backgroundrb   r!   c                 :    || _         t        | 	  |||||       y r;   )_infor   r   )r   ri   rh   rj   r}   r~   rb   r   s          r   r   z_StreamingResponse.__init__   s!     
+w
JOr    r=   c                    K   | j                   r |d| j                   d       d {    t        | 	  |       d {   S 7 7 w)Nrc   )r#   rb   )r   r   stream_response)r   r=   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)r0   r1   r2   r	   intrM   rx   Mappingstrr   Anyr   r   r   r4   r5   s   @r   ro   ro      s     =A+/6:AE
P
P 
P S!9:	
P
 OOC(
P OON3
P oofnnS&**_=>
P 

P3$ 34 3 3r    ro   )rM   rK   	anyio.abcr   r   starlette._utilsr   starlette.backgroundr   starlette.requestsr   r   starlette.responsesr	   r
   r   starlette.typesr   r   r   r   r   rN   rO   rz   ry   TypeVarr   r   r7   ro   r{   r    r   <module>r      s      ; / / 8 J J B B //7)V5E5Eh5O*OP ??%&(8(8(BB  FNN3H3W H3Vh$ h$V3* 3r    