
    jir0                       d dl mZ 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jN                  e(e)e*f   Z+ejX                  e+   Z-ej\                  e+   Z/ejN                  e/e-f   Z0 G d de"      Z1 G d de"      Z2y)    )annotationsN)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dZddZdddZedd       Z		 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ
	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZdd	Zy)ResponseNutf-8c                    || _         ||| _        || _        | j                  |      | _        | j                  |       y N)status_code
media_type
backgroundrenderbodyinit_headersselfcontentr   headersr   r   s         i/home/techsaathi/public_html/it_helpdesk_chatbot/venv/lib/python3.12/site-packages/starlette/responses.py__init__zResponse.__init__   s>     '!(DO$KK(	'"    c                n    |yt        |t        t        f      r|S |j                  | j                        S )Nr#   )
isinstancebytes
memoryviewencodecharsetr   r   s     r!   r   zResponse.render,   s1    ?gz23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                  }|Y|rW|j                  d	      r$d
|j                         v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=z
; charset=)itemslowerr(   getattrr   strlenappendr   
startswithr)   raw_headers)r   r    r6   populate_content_lengthpopulate_content_typekvhkeysr   content_lengthcontent_types               r!   r   zResponse.init_headers3   sW   ?57K&*#$(!ZaZgZgZijRVRSUVAGGI,,Y7)9LMjKj"-.QAaD.D.&7t&C#$34$?!tVT*'%%+t/?/?:/M T^N 1>3H3H3STU#(=&&w/JlFXFXFZ4Zt|| ;;1D1DY1OPQ&) k.s   :EEc                h    t        | d      st        | j                        | _        | j                  S )N_headers)raw)hasattrr   r6   r@   )r   s    r!   r    zResponse.headersO   s(    tZ(*t/?/?@DM}}r#   c
                   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usegmtexpirespathdomainsecurehttponly)strictlaxnonez1samesite must be either 'strict', 'lax' or 'none'samesite )headers
   set-cookier,   )httpcookiesSimpleCookier%   r   r   r0   outputstripr6   r4   r(   )r   keyvaluemax_agerF   rG   rH   rI   rJ   rN   cookie
cookie_vals               r!   
set_cookiezResponse.set_cookieU   s.    04||/H/H/J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   )rX   rF   rG   rH   rI   rJ   rN   )r[   )r   rV   rG   rH   rI   rJ   rN   s          r!   delete_cookiezResponse.delete_cookie|   s-     	 	 		
r#   c                  K   |d   dk(  rdnd} ||dz   | j                   | j                  d       d {     ||dz   | j                  d       d {    | j                  | j                          d {    y y 7 J7 ,7 
w)	Ntype	websocketz
websocket.rO   http.response.startr_   statusr    http.response.body)r_   r   )r   r6   r   r   )r   scopereceivesendprefixs        r!   __call__zResponse.__call__   s     !&v+!=2!66**++
 	
 	
 F%99499MNNN??&//### '	
 	O $s3   3BB BB#B9B:BBB)Nr-   NNNr   
typing.Anyr   intr    typing.Mapping[str, str] | Noner   
str | Noner   BackgroundTask | NonereturnNone)r   rk   rp   zbytes | memoryviewr   )r    rm   rp   rq   )rp   r   )rO   NN/NFFrL   )rV   r2   rW   r2   rX   z
int | NonerF   zdatetime | str | int | NonerG   rn   rH   rn   rI   boolrJ   rs   rN   .typing.Literal['lax', 'strict', 'none'] | Nonerp   rq   )rr   NFFrL   )rV   r2   rG   r2   rH   rn   rI   rs   rJ   rs   rN   rt   rp   rq   re   r   rf   r   rg   r   rp   rq   )__name__
__module____qualname__r   r)   r"   r   r   propertyr    r[   r]   ri    r#   r!   r   r      sh   JG #37!%,0## # 1	#
 # *# 
#,'8   "/3!CH%O%O %O 	%O
 -%O %O %O %O %O A%O 
%OT !CH

 
 	

 
 
 A
 

($r#   r   c                      e Zd ZdZy)HTMLResponsez	text/htmlNrv   rw   rx   r   rz   r#   r!   r|   r|      s    Jr#   r|   c                      e Zd ZdZy)PlainTextResponse
text/plainNr}   rz   r#   r!   r   r      s    Jr#   r   c                  L     e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d fdZddZ xZS )JSONResponsezapplication/jsonc                ,    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-   NNNrj   )r   rk   rp   r&   )rv   rw   rx   r   r"   r   __classcell__r   s   @r!   r   r      sa    #J
 37!%,0PP P 1	P
 P *P 
Pr#   r   c                  :     e Zd Z	 	 	 d	 	 	 	 	 	 	 	 	 d fdZ xZS )RedirectResponsec                r    t         |   d|||       t        t        |      d      | j                  d<   y )Nr#   )r   r   r    r   z:/%#?=@[]!$&'()*+,;)safelocation)r   r"   r	   r2   r    )r   urlr   r    r   r   s        r!   r"   zRedirectResponse.__init__   s6     	+w[ef#(S8M#NZ r#   )i3  NN)
r   z	str | URLr   rl   r    rm   r   ro   rp   rq   )rv   rw   rx   r"   r   r   s   @r!   r   r      sO     37,0OO O 1	O
 *O 
O Or#   r   c                  X    e Zd ZU ded<   	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d	dZd
dZddZddZy)StreamingResponseAsyncContentStreambody_iteratorNc                    t        |t        j                        r|| _        nt	        |      | _        || _        || j                  n|| _        || _        | j                  |       y r   )	r%   typingAsyncIterabler   r   r   r   r   r   r   s         r!   r"   zStreamingResponse.__init__   sX     gv334!(D!6w!?D&-7-?$//Z$'"r#   c                B   K   	  |        d {   }|d   dk(  ry 7 w)Nr_   zhttp.disconnectrz   )r   rf   messages      r!   listen_for_disconnectz'StreamingResponse.listen_for_disconnect   s*     #IoGv"33 %s   c                J  K    |d| j                   | j                  d       d {    | j                  2 3 d {   }t        |t        t
        f      s|j                  | j                        } |d|dd       d {    O7 _7 L7 	6  |dddd       d {  7   y w)Nra   rb   rd   Tr_   r   	more_bodyr#   F)r   r6   r   r%   r&   r'   r(   r)   )r   rg   chunks      r!   stream_responsez!StreamingResponse.stream_response   s     -**++
 	
 	
  -- 	Y 	Y%eeZ%89T\\2 4eRVWXXX	
	Y Y .
 0#ERSSSsN   $B#BB#BBBAB# B
B#B
B#B#BB#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]]rp   rq   )anyiocreate_task_group
start_soonr   r   r   r   )r   re   rf   rg   r   r   s        @r!   ri   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   )r   ContentStreamr   rl   r    rm   r   rn   r   ro   rp   rq   )rf   r   rp   rq   )rg   r   rp   rq   ru   )rv   rw   rx   __annotations__r"   r   r   ri   rz   r#   r!   r   r      se    %%
 37!%,0## # 1	#
 # *# 
#"T$r#   r   c                  `    e Zd ZdZ	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZd	dZy)
FileResponsei   Nc
                   || _         || _        || _        |t        j                  dt
               |t        |xs |      d   xs d}|| _        || _        | j                  |       | j                  Zt        | j                        }
|
| j                  k7  r|	 d|
 }n|	 d| j                   d}| j                  j                  d|       || _        || j                  |       y y )Nz;The 'method' parameter is not used, and it will be removed.r   r   z; filename*=utf-8''z; filename=""zcontent-disposition)rG   r   filenamewarningswarnDeprecationWarningr   r   r   r   r	   r    
setdefaultstat_resultset_stat_headers)r   rG   r   r    r   r   r   r   methodcontent_disposition_typecontent_disposition_filenamecontent_dispositions               r!   r"   zFileResponse.__init__
  s     	& MMM" #H$45a8HLJ$$'"==$+0+?(+t}}<)A(BBUVrUs&t#)A(B,t}}o]^&_#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 )
NTrD   -r   F)usedforsecurityzcontent-lengthzlast-modifiedetag)r2   st_sizer   st_mtimer
   r(   r    r   )r   r   r=   last_modified	etag_baser   s         r!   r   zFileResponse.set_stat_headers.  s    [001";#7#7E,,-3c+:M:M6NN	=!1!1!3UKLAN 0.A?-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   HEADrd   r#   Fr   rb)modeT)r   r   	to_threadrun_syncosstatrG   r   st_modeS_ISREGRuntimeErrorFileNotFoundErrorr   r6   upper	open_fileread
chunk_sizer3   r   )	r   re   rf   rg   r   r   filer   r   s	            r!   ri   zFileResponse.__call__8  s    #S$)OO$<$<RWWdii$PP%%k2 #**||D)&tyyk'QRR-**++
 	
 	
 ?  "f, 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   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)rG   zstr | os.PathLike[str]r   rl   r    rm   r   rn   r   ro   r   rn   r   zos.stat_result | Noner   rn   r   r2   rp   rq   )r   zos.stat_resultrp   rq   ru   )rv   rw   rx   r   r"   r   ri   rz   r#   r!   r   r     s    J
 37!%,0#-1!(4"/$"/ "/ 1	"/
 "/ *"/ "/ +"/ "/ #&"/ 
"/H."$r#   r   )3
__future__r   http.cookiesrQ   r   r   r   r   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   r|   r   r   r   Unionr2   r&   r'   ContentIterableSyncContentStreamr   r   r   r   r   rz   r#   r!   <module>r      s    "   	     3       + / 7 8 0 0C$ C$L8  8 .	Ox 	O ,,sE:-
.OOG, ))'2 /1BBC4$ 4$nS$8 S$r#   