
    df                     (   d dl Z d dlZd dlmZ d dl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      Z G d	 d
e	      Zy)    N)BackgroundTask)Request)ContentStreamResponseStreamingResponse)ASGIAppMessageReceiveScopeSendTc                   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dispatchreturnc                 H    || _         || j                  | _        y || _        y N)r   r   dispatch_func)selfr   r   s      R/home/api-vastappli/venv/lib/python3.12/site-packages/starlette/middleware/base.py__init__zBaseHTTPMiddleware.__init__   s#     .6.>T]]H    scopereceivesendc                    K   d   dk7  r j                  ||       d {    y t        j                         dt        dt        f fd}t        j
                         4 d {   t        |      } j                  ||       d {   } |||       d {    j                          d d d       d {    y 7 7 `7 ;7 +7 # 1 d {  7  sw Y   y xY ww)Ntypehttprequestr   c                 n   	
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                          | 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   zhttp.disconnectfuncr   c                 f   K    |         d {   }j                   j                          |S 7  wr   )cancel_scopecancel)r#   result
task_groups     r   wrapz[BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnect.<locals>.wrap)   s,     '+v"//668% ".s   1/!1)
is_setanyiocreate_task_grouptypingCallable	Awaitabler   
start_soonwaitr   )r)   messager(   r    response_sents     @r   receive_or_disconnectzMBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.receive_or_disconnect#   s      '')"$566 224 : :
&V=M=Ma=P9P)Q &VW &
 ))$0B0BC$($99G: : !'')"$566: :: : : :sW   -C#CC#A(CC
C"C#-C.C#
CC#C CC C#c                  b   K   j                          d {     j                          y 7 wr   )r1   close)recv_streamr3   s   r   "close_recv_stream_on_response_sentzZBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.close_recv_stream_on_response_sent6   s*     #((***!!# +s   /-/r2   c                 x   K   	 j                  |        d {    y 7 # t        j                  $ r Y y w xY wwr   )r   r+   BrokenResourceError)r2   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   )r   	Exception)excapp_excr4   r   r   r<   r;   s    r   coroz<BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coroA   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.zhttp.response.startc                    K   4 d {    2 3 d {   } | d   dk(  sJ | j                  dd      }|s(| .7 47 +6 d d d       d {  7   n# 1 d {  7  sw Y   nxY wy w)Nr   zhttp.response.bodybodyr   )get)r2   rE   r@   r7   s     r   body_streamzCBaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.body_streamY   s     & ' ')4 ' 'g&v2FFF&{{637"&J''' ' ' ' ' &!M 'sg   A0?A0AAAAAAA0AAA0AA0A(AA($A0status)status_codecontentrB   headers)r   N)r+   create_memory_object_streamr	   r0   r   rF   EndOfStreamRuntimeErrorr-   AsyncGeneratorbytes_StreamingResponseraw_headers)r    r8   rA   r2   rB   rG   responser@   r4   r7   r<   r;   r3   r   r   r(   s   `      @@@@@r   	call_nextz.BaseHTTPMiddleware.__call__.<locals>.call_next   sF    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 O5 6 :$$ <&!M"#:;;<sC   A)D53D D3D :D;D ?AD5D D #D22D5)r   )r   r+   Eventr   r   r,   r   set)	r   r   r   r   rT   r    rS   r3   r(   s	   ``     @@r   __call__zBaseHTTPMiddleware.__call__   s     =F"((5'4000I	W I	 I	 I	V **, 	  	 
eW5G!//CCH5'4000		  	  	 a 1`	 C0	  	  	  	 s|   C*CAC*,C-C*0#CCC%C&C:C*CC*C*CCC*C'CC'#C*r    rT   c                    K   t               wr   )NotImplementedError)r   r    rT   s      r   r   zBaseHTTPMiddleware.dispatchp   s      "##s   r   )__name__
__module____qualname__r   r-   OptionalDispatchFunctionr   r   r
   r   rW   r   RequestResponseEndpointr   r    r   r   r   r      st    JNMM&,oo6F&GM	MV E V G V 4 V D V p$$+B$	$r   r   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 )rQ   NrJ   rI   rK   
media_type
backgroundrB   r   c                 :    || _         t        | 	  |||||       y r   )_infosuperr   )r   rJ   rI   rK   rb   rc   rB   	__class__s          r   r   z_StreamingResponse.__init__w   s!     
+w
JOr   r   c                    K   | j                   r |d| j                   d       d {    t        | 	  |       d {   S 7 7 w)NrC   )r   rB   )re   rf   stream_response)r   r   rg   s     r   ri   z"_StreamingResponse.stream_response   sC     :: 5tzzJKKKW,T222 L2s    %AAAA AA)   NNNN)rZ   r[   r\   r   intr-   r]   Mappingstrr   Anyr   r   ri   __classcell__)rg   s   @r   rQ   rQ   v   s     =A+/6:AE
P
P 
P S!9:	
P
 OOC(
P OON3
P oofnnS&**_=>
P 

P3$ 34 3 3r   rQ   )r-   r+   starlette.backgroundr   starlette.requestsr   starlette.responsesr   r   r   starlette.typesr   r	   r
   r   r   r.   r/   r_   r^   TypeVarr   r   rQ   r`   r   r   <module>ru      s      / & J J B B //7)V5E5Eh5O*OP ??%&(8(8(BB  FNN3b$ b$J3* 3r   