
    9Cgr0                       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)e*f         Z+ej,        e+         Z-ej.        e+         Z/ej'        e/e-f         Z0 G d de"          Z1 G d de"          Z2d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         E/var/www/api/venv/lib/python3.11/site-packages/starlette/responses.py__init__zResponse.__init__   sM     '!(DO$KK((	'"""""    bytes | memoryviewc                z    |dS t          |t          t          f          r|S |                    | j                  S )Nr+   )
isinstancebytes
memoryviewencodecharsetr(   r   s     r)   r$   zResponse.render,   s<    ?3gz233 	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)lowerr1   ).0kvs      r)   
<listcomp>z)Response.init_headers.<locals>.<listcomp>9   sF    jjjRVRSUVAGGII,,Y77)9L9LMjjjr+   c                    g | ]
}|d          S )r    )r8   hs     r)   r;   z)Response.init_headers.<locals>.<listcomp>:   s    ...QAaD...r+   s   content-lengths   content-typer%   r   )   i0  r6   ztext/zcharset=z
; charset=)itemsgetattrr   strlenappendr1   r   
startswithr7   r2   raw_headers)	r(   r   rF   populate_content_lengthpopulate_content_typekeysr%   content_lengthcontent_types	            r)   r&   zResponse.init_headers3   s\   ?57K&*#$(!!jjZaZgZgZiZijjjK..+...D&7t&C#$34$?!tVT**' %++t/?:/M/M T^^N 1>3H3H3S3STUUU#(=#&&w// <JlFXFXFZFZ4Z4Zt| ;;1D1DY1O1OPQQQ&r+   r   c                d    t          | d          st          | j                  | _        | j        S )N_headers)raw)hasattrr   rF   rM   )r(   s    r)   r   zResponse.headersO   s2    tZ(( 	A*t/?@@@DM}r+    /FlaxkeyrB   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usegmtrW   rY   rZ   r[   r]   )strictrR   nonez1samesite must be either 'strict', 'lax' or 'none'r^   rP   )headers
   set-cookier6   )httpcookiesSimpleCookier.   r   r   r7   outputstriprF   rD   r1   )r(   rS   rT   rU   rW   rY   rZ   r[   r]   r^   cookie
cookie_vals               r)   
set_cookiezResponse.set_cookieU   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   )rU   rW   rY   rZ   r[   r]   r^   )rm   )r(   rS   rY   rZ   r[   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.rP   http.response.startrt   statusr   http.response.body)rt   r%   )r   rF   r%   r   )r(   rp   rq   rr   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   )rP   NNrQ   NFFrR   )rS   rB   rT   rB   rU   rV   rW   rX   rY   r   rZ   r   r[   r\   r]   r\   r^   r_   r    r!   )rQ   NFFrR   )rS   rB   rY   rB   rZ   r   r[   r\   r]   r\   r^   r_   r    r!   rp   r   rq   r   rr   r   r    r!   )__name__
__module____qualname__r   r2   r*   r$   r&   propertyr   rm   ro   r{   r=   r+   r)   r   r      s       JG #37!%,0# # # # #, , , ,' ' ' ' '8    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dumpsr1   r3   s     r)   r$   zJSONResponse.render   s7    z!
 
 
 &//	r+   r   NNNr|   )r   r   r    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	   rB   r   )r(   r   r   r   r   r   s        r)   r*   zRedirectResponse.__init__   sM     	+w[efff#(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+   rq   r   c                F   K   	  |             d {V }|d         dk    rd S )NTrt   zhttp.disconnectr=   )r(   rq   messages      r)   listen_for_disconnectz'StreamingResponse.listen_for_disconnect   s<      	#GIIooooooGv"333	r+   rr   r   c                (  K    |d| j         | j        d           d {V  | j        2 3 d {V }t          |t          t
          f          s|                    | j                  } |d|dd           d {V  S6  |dddd           d {V  d S )Nrv   rw   ry   Trt   r%   	more_bodyr+   F)r   rF   r   r.   r/   r0   r1   r2   )r(   rr   chunks      r)   stream_responsez!StreamingResponse.stream_response   s     d-*+ 
 
 	
 	
 	
 	
 	
 	
 	
  - 	Y 	Y 	Y 	Y 	Y 	Y 	Y%eeZ%899 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   A<rp   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(   rp   rq   rr   r   r   s        @r)   r{   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!   )rq   r   r    r!   )rr   r   r    r!   r}   )r~   r   r   __annotations__r*   r   r   r{   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
attachmentrY   str | os.PathLike[str]r   r   r   r   r   r   r   r   filenamestat_resultos.stat_result | Nonemethodcontent_disposition_typerB   r    r!   c
                   || _         || _        || _        |t          j        dt
                     |t          |p|          d         pd}|| _        || _        | 	                    |           | j        Ot          | j                  }
|
| j        k    r|	 d|
 }n|	 d| j         d}| 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)rY   r   r   warningswarnDeprecationWarningr   r   r   r&   r	   r   
setdefaultr   set_stat_headers)r(   rY   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}<<)A&t&tVr&t&t##)A&_&_t}&_&_&_#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 )
NTra   -r   F)usedforsecurityzcontent-lengthzlast-modifiedetag)rB   st_sizer   st_mtimer
   r1   r   r   )r(   r   rJ   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+   rp   r   rq   r   rr   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  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.rv   rw   r   HEADry   r+   Fr   rb)modeT)r   r   	to_threadrun_syncosstatrY   r   st_modeS_ISREGRuntimeErrorFileNotFoundErrorr   rF   upper	open_fileread
chunk_sizerC   r   )	r(   rp   rq   rr   r   r   filer   r   s	            r)   r{   zFileResponse.__call__8  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-*+ 
 
 	
 	
 	
 	
 	
 	
 	
 ?  ""f,,$ 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F
FF)r   NNNNNNr   )rY   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rB   r    r!   )r   r   r    r!   r}   )r~   r   r   r   r*   r   r{   r=   r+   r)   r   r     su        J
 37!%,0#-1!(4"/ "/ "/ "/ "/H. . . ."$ "$ "$ "$ "$ "$r+   r   )3
__future__r   http.cookiesrf   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   UnionrB   r/   r0   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C$ C$ C$ C$ C$ C$ C$ C$L    8              8   .	O 	O 	O 	O 	Ox 	O 	O 	O ,sE:-
.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+   