
    =hk1                        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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  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jJ                  e&e'f   Z(ejR                  e(   Z*ejV                  e(   Z,ejJ                  e,e*f   Z- G d de       Z. G d de       Z/y)    N)datetime)format_datetime
formatdate)partial)
guess_type)quote)md5_hexdigest)BackgroundTask)iterate_in_threadpool)URLMutableHeaders)ReceiveScopeSendc                      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j,                  d      ddfdZ	 	 	 	 	 d de
de
dej                  e
   dededej                  ej,                  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
backgroundreturnc                     || _         ||| _        || _        | j                  |      | _        | j                  |       y N)r   r   r   renderbodyinit_headersselfr   r   r   r   r   s         c/var/www/html/phonemate/phone_mate_backend/venv/lib/python3.12/site-packages/starlette/responses.py__init__zResponse.__init__   s>     '!(DO$KK(	'"    c                 b    |yt        |t              r|S |j                  | j                        S )Nr#   )
isinstancebytesencodecharsetr    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lowerr'   getattrr   strlenappendr   
startswithr(   raw_headers)r    r   r5   populate_content_lengthpopulate_content_typekvhkeysr   content_lengthcontent_types               r!   r   zResponse.init_headers1   sV    ?CEK&*#$(! $MMO+DAq !!),ahhy.AB+   #..+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   r5   r?   )r    s    r!   r   zResponse.headersR   s(    tZ(*t/?/?@DM}}r#   keyvaluemax_ageexpirespathdomainsecurehttponlysamesite)laxstrict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usegmtrE   rF   rG   rH   rI   )rL   rK   rM   z1samesite must be either 'strict', 'lax' or 'none'rJ    )headers
   set-cookier+   )httpcookiesSimpleCookier%   r   r   r/   outputstripr5   r3   r'   )r    rB   rC   rD   rE   rF   rG   rH   rI   rJ   cookie
cookie_vals               r!   
set_cookiezResponse.set_cookieX   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   )rD   rE   rF   rG   rH   rI   rJ   )rZ   )r    rB   rF   rG   rH   rI   rJ   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)rc   r   )r   r5   r   r   )r    r]   r^   r_   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   )rQ   NN/NFFrK   )rg   NFFrK   )__name__
__module____qualname__r   r(   typingAnyintOptionalMappingr1   r
   r"   r&   r   r   propertyr   r   Unionr   boolLiteralrZ   r\   r   r   r   rf    r#   r!   r   r      sO   JG #=A+/6:## # S!9:	#
 OOC(# OON3# 
#,fjj ,U , DH'v~~c3h'?@'	'B    (,EI'+MR%O%O %O %	%O
 hS.@!AB%O %O $%O %O %O //&..1H"IJ%O 
%OT '+MR

 
 $	

 
 
 //&..1H"IJ
 

($E $G $4 $D $r#   r   c                       e Zd ZdZy)HTMLResponsez	text/htmlNrh   ri   rj   r   rt   r#   r!   rv   rv      s    Jr#   rv   c                       e Zd ZdZy)PlainTextResponse
text/plainNrw   rt   r#   r!   ry   ry      s    Jr#   ry   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   )superr"   )r    r   r   r   r   r   	__class__s         r!   r"   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dumpsr'   r)   s     r!   r   zJSONResponse.render   s-    zz!
 &/	r#   r,   NNN)rh   ri   rj   r   rk   rl   rm   rn   ro   r1   r
   r"   r&   r   __classcell__r   s   @r!   r|   r|      s    #J
 =A+/6:PP P S!9:	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 )	RedirectResponseNurlr   r   r   r   c                 r    t         |   d|||       t        t        |      d      | j                  d<   y )Nr#   )r   r   r   r   z:/%#?=@[]!$&'()*+,;)safelocation)r~   r"   r   r1   r   )r    r   r   r   r   r   s        r!   r"   zRedirectResponse.__init__   s<     	['j 	 	
 $)S8M#NZ r#   )i3  NN)rh   ri   rj   rk   rq   r1   r   rm   rn   ro   r
   r"   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   )	r%   rk   AsyncIterabler   r   r   r   r   r   r   s         r!   r"   zStreamingResponse.__init__   sX     gv334!(D!6w!?D&-7-?$//Z$'"r#   r^   c                 B   K   	  |        d {   }|d   dk(  ry 7 w)Nrc   zhttp.disconnectrt   )r    r^   messages      r!   listen_for_disconnectz'StreamingResponse.listen_for_disconnect   s*     #IoGv"33 %s   r_   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)Nra   rb   re   Trc   r   	more_bodyr#   F)r   r5   r   r%   r&   r'   r(   )r    r_   chunks      r!   stream_responsez!StreamingResponse.stream_response   s     -**++
 	
 	
  -- 	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r]   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   )r    r]   r^   r_   r   r   s        @r!   rf   zStreamingResponse.__call__   s     **,,
1 !!$0D0Dd(KLwt997CDDD -, ??&//### ' - E -,,, $sc   CB'CAB-,B)-B-1C<B+=#C C!C)B-+C-B?3B64B?;Cr   )rh   ri   rj   AsyncContentStream__annotations__ContentStreamrm   rk   rn   ro   r1   r
   r"   r   r   r   r   r   rf   rt   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   NrF   zos.PathLike[str]r   r   r   r   filenamestat_resultmethodcontent_disposition_typer   c
                     || _         || _        || _        |t        j                  dt
               |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 )Nz;The 'method' parameter is not used, and it will be removed.r   rz   z{}; filename*=utf-8''{}z{}; filename="{}"zcontent-disposition)rF   r   r   warningswarnDeprecationWarningr   r   r   r   r   formatr   
setdefaultr   set_stat_headers)r    rF   r   r   r   r   r   r   r   r   content_disposition_filenamecontent_dispositions               r!   r"   zFileResponse.__init__  s     	& MMM" #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   }dt	        |j                         d       d}| j                  j                  d|       | j                  j                  d|       | j                  j                  d	|       y )
NTrO   -"F)usedforsecurityzcontent-lengthzlast-modifiedetag)r1   st_sizer   st_mtimer	   r'   r   r   )r    r   r<   last_modified	etag_baser   s         r!   r   zFileResponse.set_stat_headers6  s    [001";#7#7E,,-3c+:M:M6NN	=!1!1!3UKLAN 0.A?-r#   r]   r^   r_   c                   K   | j                   	 t        j                  j                  t        j
                  | j                         d {   }| j                  |       |j                  }t        j                  |      st        d| j                   d       |d| j                  | j                  d       d {    |d   j                         dk(  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 a# 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.ra   rb   r   HEADre   r#   Fr   rb)modeT)r   r   	to_threadrun_syncosstatrF   r   st_modeS_ISREGRuntimeErrorFileNotFoundErrorr   r5   upper	open_fileread
chunk_sizer2   r   )	r    r]   r^   r_   r   r   filer   r   s	            r!   rf   zFileResponse.__call__@  s    #S$)OO$<$<RWWdii$PP%%k2 #**||D)&tyyk'QRR-**++
 	
 	
 ?  "f, 4cPUVWWW"__TYYTBBBBd 	"&))DOO"<<E #E
doo =I$8$))2     CB ??&//### '= Q$ P"]499+=M#NOOP	
 XBB = CBBB $s   G;;F/ F,F/ !AG;>G?)G;(G))G;GG;GG;#G$G+G$.G /G$6G;G"#G;%G9&G;,F/ /#GG;G;G;G;G$ G$"G;$G6*G-+G62G;)r,   NNNNNN
attachment)rh   ri   rj   r   rk   rq   r1   rm   rn   ro   r
   r   r   r"   r   r   r   r   rf   rt   r#   r!   r   r     s   J
 =A+/6:)-7;'+(4&/ll3 223&/ &/ S!9:	&/
 OOC(&/ OON3&/ //#&&/ __R^^4&/ $&/ #&&/ 
&/P.BNN .t ."$E "$G "$4 "$D "$r#   r   )0http.cookiesrS   r   r   r   rk   r   r   email.utilsr   r   	functoolsr   	mimetypesr   urllib.parser   r   anyio.to_threadstarlette._compatr	   starlette.backgroundr
   starlette.concurrencyr   starlette.datastructuresr   r   starlette.typesr   r   r   r   rv   ry   r|   r   rq   r1   r&   ContentIterableSyncContentStreamr   r   r   r   r   rt   r#   r!   <module>r      s      	     3       + / 7 8 0 0G$ G$T8  8 .Ox O ,,sEz
"OOG, ))'2 /1BBC4$ 4$nW$8 W$r#   