
    }Oin2              
          d dl Zd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlZd dl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 ej        dk    rd dlmZ nd dl mZ dej!        j"        j#        d<   	 d#dej$        e%df         de&dej'        ej(        e%         ej(        e%         f         fdZ G d d          Z) G d de)          Z* G d de)          Z+ G d de)          Z, G d de)          Z-ej$        e%e.f         Z/ej0        e/         Z1ej2        e/         Z3ej$        e3e1f         Z4 G d d e)          Z5 G d! d"e)          Z6dS )$    N)
formatdate)partial)
guess_type)quote)md5_hexdigest)BackgroundTask)iterate_in_threadpool)URLMutableHeaders)ReceiveScopeSend      )LiteralSameSitesamesiteTurlos.PathLike[str]strictreturnc                 j    t           j        dk     rt          j        |           } t	          | |          S )Nr   )sysversion_infoosfspathmimetypes_guess_type)r   r   s     n/var/www/html/web/mlink/mlink_AI_Server/mlink-backend/venv/lib/python3.11/site-packages/starlette/responses.pyr   r      s/     &  innV,,,    c                   H   e Zd ZdZdZ	 	 	 	 	 d"dej        dedej        ej	        e
e
f                  dej        e
         dej        e         d	dfd
Zdej        d	efdZ	 d#dej        ej	        e
e
f                  d	dfdZed	efd            Z	 	 	 	 	 	 	 	 d$de
de
dej        e         dej        e         de
dej        e
         dededej        ed                  d	dfdZ	 	 	 	 	 d%de
de
dej        e
         dededej        ed                  d	dfdZdeded ed	dfd!ZdS )&ResponseNutf-8   contentstatus_codeheaders
media_type
backgroundr   c                     || _         ||| _        || _        |                     |          | _        |                     |           d S N)r&   r(   r)   renderbodyinit_headersselfr%   r&   r'   r(   r)   s         r   __init__zResponse.__init__*   sM     '!(DO$KK((	'"""""r    c                 l    |dS t          |t                    r|S |                    | j                  S )Nr    )
isinstancebytesencodecharsetr0   r%   s     r   r,   zResponse.render9   s7    ?3gu%% 	N~~dl+++r    c                    |g }d}d}n2d |                                 D             }d |D             }d|v}d|v}t          | dd           }|\|rZ| j        dk     sO| j        dv sFt          t	          |                    }|                    d|                    d	          f           | j        }|N|rL|                    d
          r|d| j	        z   z  }|                    d|                    d	          f           || _
        d S )NTc                     g | ]A\  }}|                                                     d           |                    d           fBS )latin-1)lowerr5   ).0kvs      r   
<listcomp>z)Response.init_headers.<locals>.<listcomp>H   sS       Aq !!),,ahhy.A.AB  r    c                     g | ]
}|d          S )r    )r<   hs     r   r?   z)Response.init_headers.<locals>.<listcomp>L   s    ...QAaD...r    s   content-lengths   content-typer-   r$   )   i0  r:   ztext/z
; charset=)itemsgetattrr&   strlenappendr5   r(   
startswithr6   raw_headers)	r0   r'   rJ   populate_content_lengthpopulate_content_typekeysr-   content_lengthcontent_types	            r   r.   zResponse.init_headers@   sP    ?CEK&*#$(!! #MMOO  K /.+...D&7t&C#$34$?!tVT**' %++t/?:/M/M T^^N 1>3H3H3S3STUUU#(=#&&w// <t| ;;1D1DY1O1OPQQQ&r    c                 d    t          | d          st          | j                  | _        | j        S )N_headers)raw)hasattrr   rJ   rQ   )r0   s    r   r'   zResponse.headersa   s2    tZ(( 	A*t/?@@@DM}r     /Flaxkeyvaluemax_ageexpirespathdomainsecurehttponlyr   )rV   r   nonec
                    t           j                                        }
||
|<   |||
|         d<   |||
|         d<   |||
|         d<   |||
|         d<   |rd|
|         d<   |rd|
|         d<   |	+|	                                dv s
J d	            |	|
|         d
<   |
                    d                                          }| j                            d|                    d          f           d S )Nzmax-agerZ   r[   r\   Tr]   r^   )r   rV   r_   z1samesite must be either 'strict', 'lax' or 'none'r   rT   )headers
   set-cookier:   )	httpcookiesSimpleCookier;   outputstriprJ   rH   r5   )r0   rW   rX   rY   rZ   r[   r\   r]   r^   r   cookie
cookie_vals               r   
set_cookiezResponse.set_cookieg   s7    261J1J1L1Ls%,F3K	"%,F3K	""&F3K$*F3K! 	)$(F3K! 	+&*F3K
#>>## (    C	  
 '/F3K
#]]"]--3355

0A0A)0L0L MNNNNNr    c           
      @    |                      |dd|||||           d S )Nr   )rY   rZ   r[   r\   r]   r^   r   )ri   )r0   rW   r[   r\   r]   r^   r   s          r   delete_cookiezResponse.delete_cookie   sA     	 	 		
 		
 		
 		
 		
r    scopereceivesendc                    K    |d| j         | j        d           d {V   |d| j        d           d {V  | j        |                                  d {V  d S d S )Nhttp.response.starttypestatusr'   http.response.body)rr   r-   )r&   rJ   r-   r)   )r0   rl   rm   rn   s       r   __call__zResponse.__call__   s      d-*+ 
 
 	
 	
 	
 	
 	
 	
 	
 d0$)DDEEEEEEEEE?&//########### '&r    )Nr$   NNNr+   )rT   NNrU   NFFrV   )rU   NFFrV   )__name__
__module____qualname__r(   r6   typingAnyintOptionalMappingrF   r   r1   r4   r,   r.   propertyr   r'   boolr   ri   rk   r   r   r   ru   rA   r    r   r"   r"   &   s       JG #=A+/6:# ## # S!9:	#
 OC(# ON3# 
# # # #,fj ,U , , , , DH' 'v~c3h'?@'	' ' ' 'B     X (,(,'+FK"O "O"O "O %	"O
 %"O "O $"O "O "O /'*A"BC"O 
"O "O "O "ON '+FK
 

 
 $	

 
 
 /'*A"BC
 

 
 
 
($E $G $4 $D $ $ $ $ $ $r    r"   c                       e Zd ZdZdS )HTMLResponsez	text/htmlNrv   rw   rx   r(   rA   r    r   r   r      s        JJJr    r   c                       e Zd ZdZdS )PlainTextResponse
text/plainNr   rA   r    r   r   r      s        JJJr    r   c                        e Zd ZdZ	 	 	 	 ddej        dedej        ej        e	e	f                  dej        e	         dej        e
         d	df fd
Zdej        d	efdZ xZS )JSONResponsezapplication/jsonr$   Nr%   r&   r'   r(   r)   r   c                 R    t                                          |||||           d S r+   )superr1   )r0   r%   r&   r'   r(   r)   	__class__s         r   r1   zJSONResponse.__init__   s+     	+w
JOOOOOr    c                 Z    t          j        |ddd d                              d          S )NF),:)ensure_ascii	allow_nanindent
separatorsr#   )jsondumpsr5   r7   s     r   r,   zJSONResponse.render   s7    z!
 
 
 &//	r    r$   NNN)rv   rw   rx   r(   ry   rz   r{   r|   DictrF   r   r1   r4   r,   __classcell__r   s   @r   r   r      s        #J
 :>+/6:P PP P S#X!67	P
 OC(P ON3P 
P P P P P Pfj U        r    r   c                        e Zd Z	 	 	 d	dej        eef         dedej        ej	        eef                  dej        e
         ddf
 fdZ xZS )
RedirectResponse3  Nr   r&   r'   r)   r   c                     t                                          d|||           t          t          |          d          | j        d<   d S )Nr    )r%   r&   r'   r)   z:/%#?=@[]!$&'()*+,;)safelocation)r   r1   r   rF   r'   )r0   r   r&   r'   r)   r   s        r   r1   zRedirectResponse.__init__   sW     	['j 	 	
 	
 	
 $)S8M#N#N#NZ   r    )r   NN)rv   rw   rx   ry   UnionrF   r
   r{   r|   r}   r   r1   r   r   s   @r   r   r      s         =A6:
O 
O\#s(#
O 
O S!9:	
O
 ON3
O 

O 
O 
O 
O 
O 
O 
O 
O 
O 
Or    r   c                       e Zd ZU eed<   	 	 	 	 ddededej        ej	        e
e
f                  dej        e
         dej        e         d	dfd
Zded	dfdZded	dfdZdededed	dfdZdS )StreamingResponsebody_iteratorr$   Nr%   r&   r'   r(   r)   r   c                     t          |t          j                  r|| _        nt	          |          | _        || _        || j        n|| _        || _        |                     |           d S r+   )	r3   ry   AsyncIterabler   r	   r&   r(   r)   r.   r/   s         r   r1   zStreamingResponse.__init__   sp     gv344 	@!(D!6w!?!?D&-7-?$//Z$'"""""r    rm   c                 F   K   	  |             d {V }|d         dk    rd S )NTrr   zhttp.disconnectrA   )r0   rm   messages      r   listen_for_disconnectz'StreamingResponse.listen_for_disconnect   s<      	#GIIooooooGv"333	r    rn   c                   K    |d| j         | j        d           d {V  | j        2 3 d {V }t          |t                    s|                    | j                  } |d|dd           d {V  L6  |dddd           d {V  d S )Nrp   rq   rt   Trr   r-   	more_bodyr    F)r&   rJ   r   r3   r4   r5   r6   )r0   rn   chunks      r   stream_responsez!StreamingResponse.stream_response   s     d-*+ 
 
 	
 	
 	
 	
 	
 	
 	
  - 	Y 	Y 	Y 	Y 	Y 	Y 	Y%eU++ 3T\22$ 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Ss   A5rl   c                 r  K   t          j                    4 d {V dfd}                    |t          | j        |                      |t          | j        |                     d {V  d d d           d {V  n# 1 d {V swxY w Y   | j        |                                  d {V  d S d S )Nfunc+typing.Callable[[], typing.Awaitable[None]]r   c                 ^   K    |              d {V  j                                          d S r+   )cancel_scopecancel)r   
task_groups    r   wrapz(StreamingResponse.__call__.<locals>.wrap  s9      dff'..00000r    )r   r   r   N)anyiocreate_task_group
start_soonr   r   r   r)   )r0   rl   rm   rn   r   r   s        @r   ru   zStreamingResponse.__call__	  s     *,, 	E 	E 	E 	E 	E 	E 	E
1 1 1 1 1 1 !!$0Dd(K(KLLL$wt97CCDDDDDDDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E ?&//########### '&s   AB
BBr   )rv   rw   rx   AsyncContentStream__annotations__ContentStreamr{   ry   r|   r}   rF   r   r1   r   r   r   r   r   ru   rA   r    r   r   r      s        %%%%
 =A+/6:# ## # S!9:	#
 OC(# ON3# 
# # # #"7 t    T$ T4 T T T T$E $G $4 $D $ $ $ $ $ $r    r   c                   H   e Zd ZdZ	 	 	 	 	 	 	 	 ddej        edf         dedej        ej	        eef                  d	ej        e         d
ej        e
         dej        e         dej        ej                 dej        e         deddfdZdej        ddfdZdedededdfdZdS )FileResponsei   r$   N
attachmentr[   r   r&   r'   r(   r)   filenamestat_resultmethodcontent_disposition_typer   c
                    || _         || _        || _        |d uo|                                dk    | _        |t          |p|          d         pd}|| _        || _        |                     |           | j        lt          | j                  }
|
| j        k    rd
                    |	|
          }nd
                    |	| j                  }| j                            d|           || _        ||                     |           d S d S )NHEADr   r   z{}; filename*=utf-8''{}z{}; filename="{}"zcontent-disposition)r[   r&   r   uppersend_header_onlyr   r(   r)   r.   r   formatr'   
setdefaultr   set_stat_headers)r0   r[   r&   r'   r(   r)   r   r   r   r   content_disposition_filenamecontent_dispositions               r   r1   zFileResponse.__init__  s,    	&  &d 2 Ov||~~7O#H$455a8HLJ$$'"""=$+0+?+?(+t}<<&?&F&F,.J' '## ':&@&@,dm' '# L##$9;NOOO&"!!+..... #"r    c                    t          |j                  }t          |j        d          }t          |j                  dz   t          |j                  z   }t	          |                                d          }| j                            d|           | j                            d|           | j                            d|           d S )	NT)usegmt-F)usedforsecurityzcontent-lengthzlast-modifiedetag)rF   st_sizer   st_mtimer   r5   r'   r   )r0   r   rN   last_modified	etag_baser   s         r   r   zFileResponse.set_stat_headers>  s    [011";#7EEE,--3c+:M6N6NN	Y--//GGG 0.AAA???-----r    rl   rm   rn   c                 ^  K   | j         	 t          j                            t          j        | j                   d {V }|                     |           |j        }t          j	        |          st          d| j         d          n&# t          $ r t          d| j         d          w xY w |d| j        | j        d           d {V  | j        r |dddd	           d {V  nt          j        | j        d
           d {V 4 d {V }d}|rO|                    | j                   d {V }t%          |          | j        k    } |d||d	           d {V  |O	 d d d           d {V  n# 1 d {V swxY w Y   | j        |                                  d {V  d S d S )NzFile at path z is not a file.z does not exist.rp   rq   rt   r    Fr   rb)modeT)r   r   	to_threadrun_syncr   statr[   r   st_modeS_ISREGRuntimeErrorFileNotFoundErrorr&   rJ   r   	open_fileread
chunk_sizerG   r)   )	r0   rl   rm   rn   r   r   filer   r   s	            r   ru   zFileResponse.__call__H  s     #S$)O$<$<RWdi$P$PPPPPPP%%k222 #*|D)) S&'Qty'Q'Q'QRRRS	 % P P P"#N49#N#N#NOOOP d-*+ 
 
 	
 	
 	
 	
 	
 	
 	
   	$ 4cPUVVWWWWWWWWWW"_TYTBBBBBBBBB       d 	 	"&))DO"<"<<<<<<<E #E

do =I$$8$))2            	 	                           ?&//########### '&s   A
B	 	#B,AE99
FF)r$   NNNNNNr   )rv   rw   rx   r   ry   r   rF   r{   r|   r}   r   r   r   r1   r   r   r   r   ru   rA   r    r   r   r     sG       J
 =A+/6:)-7;'+(4"/ "/l3 223"/ "/ S!9:	"/
 OC("/ ON3"/ /#&"/ _R^4"/ $"/ #&"/ 
"/ "/ "/ "/H.BN .t . . . ."$E "$G "$4 "$D "$ "$ "$ "$ "$ "$r    r   )T)7http.cookiesrb   r   r   r   r   ry   email.utilsr   	functoolsr   	mimetypesr   r   urllib.parser   r   starlette._compatr   starlette.backgroundr   starlette.concurrencyr	   starlette.datastructuresr
   r   starlette.typesr   r   r   r   r   typing_extensionsrc   Morsel	_reservedr   rF   r   Tupler|   r"   r   r   r   r   r4   ContentIteratorSyncContentStreamr   r   r   r   r   rA   r    r   <module>r      s-        				  



  " " " " " "       8 8 8 8 8 8        + + + + + + / / / / / / 7 7 7 7 7 7 8 8 8 8 8 8 8 8 0 0 0 0 0 0 0 0 0 0v)))))) -7  j )
 @D- -	c--	.-8<-\&/#&(<<=- - - -D$ D$ D$ D$ D$ D$ D$ D$N    8              8   .O O O O Ox O O O ,sEz
"OG, )'2 /1BBC4$ 4$ 4$ 4$ 4$ 4$ 4$ 4$nS$ S$ S$ S$ S$8 S$ S$ S$ S$ S$r    