
    ui1                       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j'        e(e)f         Z*ej+        e*         Z,ej-        e*         Z.ej'        e.e,f         Z/ G d de"          Z0 G d de"          Z1dS )    )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	 	 	 	 	 d1d2dZd3dZd4d5dZed6d            Z		 	 	 	 	 	 	 	 d7d8d(Z
	 	 	 	 	 d9d:d)Zd;d0ZdS )<ResponseNutf-8   content
typing.Anystatus_codeintheaderstyping.Mapping[str, str] | None
media_type
str | None
backgroundBackgroundTask | NonereturnNonec                    || _         ||| _        || _        |                     |          | _        |                     |           d S N)r   r   r   renderbodyinit_headersselfr   r   r   r   r   s         F/var/www/icac/venv/lib/python3.11/site-packages/starlette/responses.py__init__zResponse.__init__   sM     '!(DO$KK((	'"""""    bytesc                l    |dS t          |t                    r|S |                    | j                  S )Nr+   )
isinstancer,   encodecharsetr(   r   s     r)   r$   zResponse.render,   s7    ?3gu%% 	N~~dl+++r+   c                B   |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        }|d|rb|                    d
          r#d|	                                vr|d| j
        z   z  }|                    d|                    d	          f           || _        d S )NTc                    g | ]A\  }}|                                                     d           |                    d           fBS )latin-1)lowerr/   ).0kvs      r)   
<listcomp>z)Response.init_headers.<locals>.<listcomp>9   sS       Aq !!),,ahhy.A.AB  r+   c                    g | ]
}|d          S )r    )r6   hs     r)   r9   z)Response.init_headers.<locals>.<listcomp>=   s    ...QAaD...r+   s   content-lengths   content-typer%   r   )   i0  r4   ztext/zcharset=z
; charset=)itemsgetattrr   strlenappendr/   r   
startswithr5   r0   raw_headers)	r(   r   rD   populate_content_lengthpopulate_content_typekeysr%   content_lengthcontent_types	            r)   r&   zResponse.init_headers3   se   ?57K&*#$(!! #MMOO  K /.+...D&7t&C#$34$?!tVT**' %++t/?:/M/M T^^N 1>3H3H3S3STUUU#(=#''00<l&8&8&:&:::t| ;;1D1DY1O1OPQQQ&r+   r   c                d    t          | d          st          | j                  | _        | j        S )N_headers)raw)hasattrr   rD   rK   )r(   s    r)   r   zResponse.headersU   s2    tZ(( 	A*t/?@@@DM}r+    /Flaxkeyr@   valuemax_age
int | Noneexpiresdatetime | str | int | Nonepathdomainsecureboolhttponlysamesite.typing.Literal['lax', 'strict', 'none'] | Nonec
                P   t           j                                        }
||
|<   |||
|         d<   |;t          |t                    rt          |d          |
|         d<   n||
|         d<   |||
|         d<   |||
|         d<   |rd|
|         d<   |rd|
|         d<   |	+|	                                d	v s
J d
            |	|
|         d<   |
                    d                                          }| j	        
                    d|                    d          f           d S )Nzmax-ageTusegmtrU   rW   rX   rY   r[   )strictrP   nonez1samesite must be either 'strict', 'lax' or 'none'r\   rN   )headers
   set-cookier4   )httpcookiesSimpleCookier.   r   r   r5   outputstriprD   rB   r/   )r(   rQ   rR   rS   rU   rW   rX   rY   r[   r\   cookie
cookie_vals               r)   
set_cookiezResponse.set_cookie[   sg    04|/H/H/J/Js%,F3K	"'8,, 1)8)N)N)NsI&&)0sI&"&F3K$*F3K! 	)$(F3K! 	+&*F3K
#>>## (    C	  
 '/F3K
#]]"]--3355

0A0A)0L0L MNNNNNr+   c           
     @    |                      |dd|||||           d S )Nr   )rS   rU   rW   rX   rY   r[   r\   )rk   )r(   rQ   rW   rX   rY   r[   r\   s          r)   delete_cookiezResponse.delete_cookie   sA     	 	 		
 		
 		
 		
 		
r+   scoper   receiver   sendr   c                   K   |d         dk    rdnd} ||dz   | j         | j        d           d {V   ||dz   | j        d           d {V  | j        |                                  d {V  d S d S )	Ntype	websocketz
websocket.rN   http.response.startrr   statusr   http.response.body)rr   r%   )r   rD   r%   r   )r(   rn   ro   rp   prefixs        r)   __call__zResponse.__call__   s      !&v+!=!=2d!66*+ 
 
 	
 	
 	
 	
 	
 	
 	
 dF%9949MMNNNNNNNNN?&//########### '&r+   )Nr   NNNr   r   r   r   r   r   r   r   r   r   r    r!   r   r   r    r,   r#   )r   r   r    r!   )r    r   )rN   NNrO   NFFrP   )rQ   r@   rR   r@   rS   rT   rU   rV   rW   r@   rX   r   rY   rZ   r[   rZ   r\   r]   r    r!   )rO   NFFrP   )rQ   r@   rW   r@   rX   r   rY   rZ   r[   rZ   r\   r]   r    r!   rn   r   ro   r   rp   r   r    r!   )__name__
__module____qualname__r   r0   r*   r$   r&   propertyr   rk   rm   ry   r;   r+   r)   r   r      s       JG #37!%,0# # # # #, , , , '  '  '  '  'D    X "/3!CH%O %O %O %O %OT !CH
 
 
 
 
($ $ $ $ $ $r+   r   c                      e Zd ZdZdS )HTMLResponsez	text/htmlNr}   r~   r   r   r;   r+   r)   r   r      s        JJJr+   r   c                      e Zd ZdZdS )PlainTextResponse
text/plainNr   r;   r+   r)   r   r      s        JJJr+   r   c                  6     e Zd ZdZ	 	 	 	 dd fdZddZ xZS )JSONResponsezapplication/jsonr   Nr   r   r   r   r   r   r   r   r   r   r    r!   c                R    t                                          |||||           d S r#   )superr*   )r(   r   r   r   r   r   	__class__s         r)   r*   zJSONResponse.__init__   s+     	+w
JOOOOOr+   r,   c                Z    t          j        |ddd d                              d          S )NF),:)ensure_ascii	allow_nanindent
separatorsr   )jsondumpsr/   r1   s     r)   r$   zJSONResponse.render   s7    z!
 
 
 &//	r+   r   NNNrz   r{   )r}   r~   r   r   r*   r$   __classcell__r   s   @r)   r   r      sp        #J
 37!%,0P P P P P P P       r+   r   c                  (     e Zd Z	 	 	 dd fdZ xZS )RedirectResponse3  Nurl	str | URLr   r   r   r   r   r   r    r!   c                    t                                          d|||           t          t          |          d          | j        d<   d S )Nr+   )r   r   r   r   z:/%#?=@[]!$&'()*+,;)safelocation)r   r*   r	   r@   r   )r(   r   r   r   r   r   s        r)   r*   zRedirectResponse.__init__   sW     	['j 	 	
 	
 	
 $)S8M#N#N#NZ   r+   )r   NN)
r   r   r   r   r   r   r   r   r    r!   )r}   r~   r   r*   r   r   s   @r)   r   r      sX         37,0
O 
O 
O 
O 
O 
O 
O 
O 
O 
O 
Or+   r   c                  D    e Zd ZU ded<   	 	 	 	 dddZddZddZddZdS ) StreamingResponseAsyncContentStreambody_iteratorr   Nr   ContentStreamr   r   r   r   r   r   r   r   r    r!   c                    t          |t          j                  r|| _        nt	          |          | _        || _        || j        n|| _        || _        |                     |           d S r#   )	r.   typingAsyncIterabler   r   r   r   r   r&   r'   s         r)   r*   zStreamingResponse.__init__   sp     gv344 	@!(D!6w!?!?D&-7-?$//Z$'"""""r+   ro   r   c                F   K   	  |             d {V }|d         dk    rd S )NTrr   zhttp.disconnectr;   )r(   ro   messages      r)   listen_for_disconnectz'StreamingResponse.listen_for_disconnect   s<      	#GIIooooooGv"333	r+   rp   r   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 )Nrt   ru   rw   Trr   r%   	more_bodyr+   F)r   rD   r   r.   r,   r/   r0   )r(   rp   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rn   r   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    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    r!   )anyiocreate_task_group
start_soonr   r   r   r   )r(   rn   ro   rp   r   r   s        @r)   ry   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   )r   r   r   r   r   r   r   r   r   r   r    r!   )ro   r   r    r!   )rp   r   r    r!   r|   )r}   r~   r   __annotations__r*   r   r   ry   r;   r+   r)   r   r      s         %%%%
 37!%,0# # # # #"   T T T T$ $ $ $ $ $r+   r   c                  <    e Zd ZdZ	 	 	 	 	 	 	 	 d!d"dZd#dZd$d ZdS )%FileResponsei   r   N
attachmentrW   str | os.PathLike[str]r   r   r   r   r   r   r   r   filenamestat_resultos.stat_result | Nonemethodcontent_disposition_typer@   r    r!   c
                
   || _         || _        || _        |t          j        dt
                     |t          |p|          d         pd}|| _        || _        | 	                    |           | j        lt          | j                  }
|
| j        k    rd                    |	|
          }nd                    |	| j                  }| j                            d|           || _        ||                     |           d S d S )Nz;The 'method' parameter is not used, and it will be removed.r   r   z{}; filename*=utf-8''{}z{}; filename="{}"zcontent-disposition)rW   r   r   warningswarnDeprecationWarningr   r   r   r&   r	   formatr   
setdefaultr   set_stat_headers)r(   rW   r   r   r   r   r   r   r   r   content_disposition_filenamecontent_dispositions               r)   r*   zFileResponse.__init__  s/    	& MM"   #H$455a8HLJ$$'"""=$+0+?+?(+t}<<&?&F&F,.J' '## ':&@&@,dm' '# L##$9;NOOO&"!!+..... #"r+   os.stat_resultc                   t          |j                  }t          |j        d          }t          |j                  dz   t          |j                  z   }dt	          |                                d           d}| j                            d|           | j                            d|           | j                            d	|           d S )
NTr_   -"F)usedforsecurityzcontent-lengthzlast-modifiedetag)r@   st_sizer   st_mtimer
   r/   r   r   )r(   r   rH   last_modified	etag_baser   s         r)   r   zFileResponse.set_stat_headers:  s    [011";#7EEE,--3c+:M6N6NN	N=!1!1!3!3UKKKNNN 0.AAA???-----r+   rn   r   ro   r   rp   r   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  |d                                         dk    r |dd	d
d           d {V  nd|v r1d|d         v r' |dt          | j                  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.rt   ru   r   HEADrw   r+   Fr   
extensionszhttp.response.pathsend)rr   rW   rb)modeT)r   r   	to_threadrun_syncosstatrW   r   st_modeS_ISREGRuntimeErrorFileNotFoundErrorr   rD   upperr@   	open_fileread
chunk_sizerA   r   )	r(   rn   ro   rp   r   r   filer   r   s	            r)   ry   zFileResponse.__call__D  se     #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-*+ 
 
 	
 	
 	
 	
 	
 	
 	
 ?  ""f,,$ 4cPUVVWWWWWWWWWWU""'?5CV'V'V$ 8#di..QQRRRRRRRRRR"_TYTBBBBBBBBB       d 	 	"&))DO"<"<<<<<<<E #E

do =I$$8$))2            	 	                           ?&//########### '&s   A
B	 	#B,AG
GG)r   NNNNNNr   )rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r@   r    r!   )r   r   r    r!   r|   )r}   r~   r   r   r*   r   ry   r;   r+   r)   r   r     su        J
 37!%,0#-1!(4&/ &/ &/ &/ &/P. . . .$$ $$ $$ $$ $$ $$r+   r   )2
__future__r   http.cookiesrd   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   Unionr@   r,   ContentIterableSyncContentStreamr   r   r   r   r   r;   r+   r)   <module>r      s   " " " " " "      				          3 3 3 3 3 3 3 3                              + + + + + + / / / / / / 7 7 7 7 7 7 8 8 8 8 8 8 8 8 0 0 0 0 0 0 0 0 0 0I$ I$ I$ I$ I$ I$ I$ I$X    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Y$ Y$ Y$ Y$ Y$8 Y$ Y$ Y$ Y$ Y$r+   