
    df[3              
          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	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jF                  jH                  jJ                  d<   	 d#dejL                  e'df   de(dejR                  ejT                  e'   ejT                  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jL                  e'e0f   Z1ejd                  e1   Z3ejh                  e1   Z5ejL                  e5e3f   Z6 G d d e+      Z7 G d! d"e+      Z8y)$    N)datetime)format_datetime
formatdate)partial)
guess_type)quote)md5_hexdigest)BackgroundTask)iterate_in_threadpool)URLMutableHeaders)ReceiveScopeSend      )LiteralSameSitesamesite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     L/home/api-vastappli/venv/lib/python3.12/site-packages/starlette/responses.pyr   r      s,     & iinV,,    c                      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j&                  ee
ef      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y)!ResponseNutf-8contentstatus_codeheaders
media_type
backgroundr   c                     || _         ||| _        || _        | j                  |      | _        | j                  |       y N)r'   r)   r*   renderbodyinit_headersselfr&   r'   r(   r)   r*   s         r!   __init__zResponse.__init__+   s>     '!(DO$KK(	'"r"   c                 b    |yt        |t              r|S |j                  | j                        S )Nr"   )
isinstancebytesencodecharsetr1   r&   s     r!   r-   zResponse.render:   s,    ?gu%N~~dll++r"   c                    |g }d}d}nj|j                         D cg c]5  \  }}|j                         j                  d      |j                  d      f7 }}}|D cg c]  }|d   	 }}d|v}d|v}t        | dd       }	|	U|rS| j                  dk  sD| j                  dv s6t        t        |	            }
|j                  d|
j                  d      f       | j                  }|G|rE|j                  d	      r|d
| j                  z   z  }|j                  d|j                  d      f       || _        y c c}}w c c}w )NTlatin-1r   s   content-lengths   content-typer.      )   i0  ztext/z
; charset=)itemslowerr6   getattrr'   strlenappendr)   
startswithr7   raw_headers)r1   r(   rD   populate_content_lengthpopulate_content_typekvhkeysr.   content_lengthcontent_types               r!   r/   zResponse.init_headersA   sR    ?CEK&*#$(! $MMOAq !!),ahhy.ABK  #..QAaD.D.&7t&C#$34$?!tVT*'%%+t/?/?:/M T^N 1>3H3H3STU#(=&&w/t|| ;;1D1DY1OPQ&/ /s   :D5D;c                 h    t        | d      st        | j                        | _        | j                  S )N_headers)raw)hasattrr   rD   rN   )r1   s    r!   r(   zResponse.headersb   s(    tZ(*t/?/?@DM}}r"   keyvaluemax_ageexpirespathdomainsecurehttponlyr   )laxr   nonec
                    t         j                  j                         }
||
|<   |||
|   d<   |,t        |t              rt        |d      |
|   d<   n||
|   d<   |||
|   d<   |||
|   d<   |rd|
|   d<   |rd|
|   d<   |	!|	j                         d	v sJ d
       |	|
|   d<   |
j                  d      j                         }| j                  j                  d|j                  d      f       y )Nzmax-ageTusegmtrT   rU   rV   rW   rX   )r   rY   rZ   z1samesite must be either 'strict', 'lax' or 'none'r    )headers
   set-cookier:   )httpcookiesSimpleCookier4   r   r   r>   outputstriprD   rB   r6   )r1   rQ   rR   rS   rT   rU   rV   rW   rX   r   cookie
cookie_vals               r!   
set_cookiezResponse.set_cookieh   s)    261J1J1Ls%,F3K	"'8,)8)NsI&)0sI&"&F3K$*F3K!$(F3K!&*F3K
#>># (  C C	C
 '/F3K
#]]"]-335

0A0A)0L MNr"   c           
      6    | j                  |dd|||||       y )Nr   )rS   rT   rU   rV   rW   rX   r   )rg   )r1   rQ   rU   rV   rW   rX   r   s          r!   delete_cookiezResponse.delete_cookie   s-     	 	 		
r"   scopereceivesendc                    K    |d| j                   | j                  d       d {     |d| j                  d       d {    | j                  | j                          d {    y y 7 G7 ,7 
w)Nhttp.response.starttypestatusr(   http.response.body)rp   r.   )r'   rD   r.   r*   )r1   rj   rk   rl   s       r!   __call__zResponse.__call__   s}     -**++
 	
 	
 0$))DEEE??&//### '	
 	F $s3   $A4A.A4A0#A4'A2(A40A42A4)Nr;   NNNr,   )r^   NN/NFFrY   )rt   NFFrY   )__name__
__module____qualname__r)   r7   typingAnyintOptionalMappingr@   r
   r2   r5   r-   r/   propertyr   r(   Unionr   boolr   rg   ri   r   r   r   rs    r"   r!   r$   r$   '   sG   JG #=A+/6:## # S!9:	#
 OOC(# OON3# 
#,fjj ,U , DH'v~~c3h'?@'	'B    (,EI'+FK%O%O %O %	%O
 hS.@!AB%O %O $%O %O %O //'*A"BC%O 
%OT '+FK

 
 $	

 
 
 //'*A"BC
 

($E $G $4 $D $r"   r$   c                       e Zd ZdZy)HTMLResponsez	text/htmlNru   rv   rw   r)   r   r"   r!   r   r      s    Jr"   r   c                       e Zd ZdZy)PlainTextResponse
text/plainNr   r   r"   r!   r   r      s    Jr"   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/jsonNr&   r'   r(   r)   r*   r   c                 ,    t         |   |||||       y r,   )superr2   )r1   r&   r'   r(   r)   r*   	__class__s         r!   r2   zJSONResponse.__init__   s     	+w
JOr"   c                 T    t        j                  |ddd d      j                  d      S )NF),:)ensure_ascii	allow_nanindent
separatorsr%   )jsondumpsr6   r8   s     r!   r-   zJSONResponse.render   s-    zz!
 &/	r"   r;   NNN)ru   rv   rw   r)   rx   ry   rz   r{   Dictr@   r
   r2   r5   r-   __classcell__r   s   @r!   r   r      s    #J
 :>+/6:PP P S#X!67	P
 OOC(P OON3P 
Pfjj 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 )	RedirectResponseNr   r'   r(   r*   r   c                 r    t         |   d|||       t        t        |      d      | j                  d<   y )Nr"   )r&   r'   r(   r*   z:/%#?=@[]!$&'()*+,;)safelocation)r   r2   r   r@   r(   )r1   r   r'   r(   r*   r   s        r!   r2   zRedirectResponse.__init__   s<     	['j 	 	
 $)S8M#NZ r"   )i3  NN)ru   rv   rw   rx   r~   r@   r   rz   r{   r|   r
   r2   r   r   s   @r!   r   r      s{     =A6:
O\\#s(#
O 
O S!9:	
O
 OON3
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y)StreamingResponsebody_iteratorNr&   r'   r(   r)   r*   r   c                     t        |t        j                        r|| _        nt	        |      | _        || _        || j                  n|| _        || _        | j                  |       y r,   )	r4   rx   AsyncIterabler   r   r'   r)   r*   r/   r0   s         r!   r2   zStreamingResponse.__init__   sX     gv334!(D!6w!?D&-7-?$//Z$'"r"   rk   c                 B   K   	  |        d {   }|d   dk(  ry 7 w)Nrp   zhttp.disconnectr   )r1   rk   messages      r!   listen_for_disconnectz'StreamingResponse.listen_for_disconnect   s*     #IoGv"33 %s   rl   c                 >  K    |d| j                   | j                  d       d {    | j                  2 3 d {   }t        |t              s|j                  | j                        } |d|dd       d {    I7 Y7 F7 	6  |dddd       d {  7   y w)Nrn   ro   rr   Trp   r.   	more_bodyr"   F)r'   rD   r   r4   r5   r6   r7   )r1   rl   chunks      r!   stream_responsez!StreamingResponse.stream_response   s     -**++
 	
 	
  -- 	Y 	Y%eU+T\\2 4eRVWXXX	
	Y Y .
 0#ERSSSsM   $BB BBBB;B:B;BBBBBBrj   c                   K   t        j                         4 d {   dfd}j                  |t        | j                  |              |t        | j
                  |             d {    d d d       d {    | j                  | j                          d {    y y 7 7 <7 .# 1 d {  7  sw Y   >xY w7 !w)Nc                 d   K    |         d {    j                   j                          y 7 wr,   )cancel_scopecancel)func
task_groups    r!   wrapz(StreamingResponse.__call__.<locals>.wrap  s'     f''..0 s   0. 0)r   z+typing.Callable[[], typing.Awaitable[None]]r   N)anyiocreate_task_group
start_soonr   r   r   r*   )r1   rj   rk   rl   r   r   s        @r!   rs   zStreamingResponse.__call__  s     **, 	E 	E
1 !!$0D0Dd(KLwt997CDDD	E 	E ??&//### '	E E	E 	E 	E 	E $sc   CB'CAB-,B)-B-1C<B+=#C C!C)B-+C-B?3B64B?;Cr   )ru   rv   rw   AsyncContentStream__annotations__ContentStreamrz   rx   r{   r|   r@   r
   r2   r   r   r   r   r   rs   r   r"   r!   r   r      s    %%
 =A+/6:## # S!9:	#
 OOC(# OON3# 
#"7 t T$ T4 T$E $G $4 $D $r"   r   c                   z   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y)FileResponsei   NrU   r   r'   r(   r)   r*   filenamestat_resultmethodcontent_disposition_typer   c
                    || _         || _        || _        |d uxr |j                         dk(  | _        |t        |xs |      d   xs d}|| _        || _        | j                  |       | j                  ot        | j                        }
|
| j                  k7  rdj                  |	|
      }ndj                  |	| j                        }| j                  j                  d|       || _        || j                  |       y y )NHEADr   r   z{}; filename*=utf-8''{}z{}; filename="{}"zcontent-disposition)rU   r'   r   uppersend_header_onlyr   r)   r*   r/   r   formatr(   
setdefaultr   set_stat_headers)r1   rU   r'   r(   r)   r*   r   r   r   r   content_disposition_filenamecontent_dispositions               r!   r2   zFileResponse.__init__  s    	&  &d 2 Ov||~7O#H$45a8HLJ$$'"==$+0+?(+t}}<&?&F&F,.J'# ':&@&@,dmm'# LL##$9;NO&"!!+. #r"   c                    t        |j                        }t        |j                  d      }t        |j                        dz   t        |j                        z   }t	        |j                         d      }| j                  j                  d|       | j                  j                  d|       | j                  j                  d|       y )	NTr\   -F)usedforsecurityzcontent-lengthzlast-modifiedetag)r@   st_sizer   st_mtimer	   r6   r(   r   )r1   r   rK   last_modified	etag_baser   s         r!   r   zFileResponse.set_stat_headersB  s    [001";#7#7E,,-3c+:M:M6NN	Y--/G 0.A?-r"   rj   rk   rl   c                   K   | j                   	 t        j                  j                  t        j
                  | j                         d {   }| j                  |       |j                  }t        j                  |      st        d| j                   d       |d| j                  | j                  d       d {    | j                  r |dddd	       d {    nt        j                  | j                  d
       d {   4 d {   }d}|rR|j!                  | j"                         d {   }t%        |      | j"                  k(  } |d||d	       d {    |rRd d d       d {    | j&                  | j'                          d {    y y 7 W# t        $ r t        d| j                   d      w xY w7 7 7 7 7 7 q7 `# 1 d {  7  sw Y   pxY w7 Sw)NzFile at path z is not a file.z does not exist.rn   ro   rr   r"   Fr   rb)modeT)r   r   	to_threadrun_syncr   statrU   r   st_modeS_ISREGRuntimeErrorFileNotFoundErrorr'   rD   r   	open_fileread
chunk_sizerA   r*   )	r1   rj   rk   rl   r   r   filer   r   s	            r!   rs   zFileResponse.__call__L  s    #S$)OO$<$<RWWdii$PP%%k2 #**||D)&tyyk'QRR-**++
 	
 	
    4cPUVWWW"__TYYTBB  d 	"&))DOO"<<E #E
doo =I$8$))2      ??&//### '= Q$ P"]499+=M#NOOP	
 XB  =    $s   G1;F% F"F% !AG1>G?G1G)G1G	G1GG1#G8G9+G$G%G,G17G8#G1G/G1"F% %#GG1G1G1G1GGG1G, G#!G,(G1)r;   NNNNNN
attachment)ru   rv   rw   r   rx   r~   r@   rz   r{   r|   r
   r   r   r2   r   r   r   r   rs   r   r"   r!   r   r     s   J
 =A+/6:)-7;'+(4"/ll3 223"/ "/ S!9:	"/
 OOC("/ OON3"/ //#&"/ __R^^4"/ $"/ #&"/ 
"/H.BNN .t ."$E "$G "$4 "$D "$r"   r   )T)9http.cookiesr`   r   r   r   r   rx   r   email.utilsr   r   	functoolsr   	mimetypesr   r    urllib.parser   r   starlette._compatr	   starlette.backgroundr
   starlette.concurrencyr   starlette.datastructuresr   r   starlette.typesr   r   r   r   r   typing_extensionsra   Morsel	_reservedr~   r@   r   Tupler{   r$   r   r   r   r   r5   ContentIteratorSyncContentStreamr   r   r   r   r   r   r"   r!   <module>r      sa     	  
   3  8   + / 7 8 0 0v) -7    j )
 @D-	c--	.-8<-\\&//#&(<<=-G$ G$T8  8 .Ox O ,,sEz
"OOG, ))'2 /1BBC4$ 4$nS$8 S$r"   