
    )O=d[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j#        j$        j%        d<   	 d$dej&        e'df         de(dej)        ej*        e'         ej*        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j&        e'e0f         Z1ej2        e1         Z3ej4        e1         Z5ej&        e5e3f         Z6 G d  d!e+          Z7 G d" d#e+          Z8dS )%    N)datetime)format_datetime
formatdate)partial)
guess_type)quote)md5_hexdigest)BackgroundTask)iterate_in_threadpool)URLMutableHeaders)ReceiveScopeSend      )LiteralSameSitesamesiteT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     =D:\Sites\api_v1\venv\Lib\site-packages\starlette/responses.pyr   r      s/     &  innV,,,    c                   d   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dS )&ResponseNutf-8   contentstatus_codeheaders
media_type
backgroundr   c                     || _         ||| _        || _        |                     |          | _        |                     |           d S N)r(   r*   r+   renderbodyinit_headersselfr'   r(   r)   r*   r+   s         r!   __init__zResponse.__init__+   sM     '!(DO$KK((	'"""""r"   c                 l    |dS t          |t                    r|S |                    | j                  S )Nr"   )
isinstancebytesencodecharsetr2   r'   s     r!   r.   zResponse.render:   s7    ?3gu%% 	N~~dl+++r"   c                    |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        }|N|rL|                    d
          r|d| j	        z   z  }|                    d|                    d	          f           || _
        d S )NTc                     g | ]A\  }}|                                                     d           |                    d           fBS )latin-1)lowerr7   ).0kvs      r!   
<listcomp>z)Response.init_headers.<locals>.<listcomp>I   sS       Aq !!),,ahhy.A.AB  r"   c                     g | ]
}|d          S )r    )r>   hs     r!   rA   z)Response.init_headers.<locals>.<listcomp>M   s    ...QAaD...r"   s   content-lengths   content-typer/   r&   )   i0  r<   ztext/z
; charset=)itemsgetattrr(   strlenappendr7   r*   
startswithr8   raw_headers)	r2   r)   rL   populate_content_lengthpopulate_content_typekeysr/   content_lengthcontent_types	            r!   r0   zResponse.init_headersA   sP    ?CEK&*#$(!! #MMOO  K /.+...D&7t&C#$34$?!tVT**' %++t/?:/M/M T^^N 1>3H3H3S3STUUU#(=#&&w// <t| ;;1D1DY1O1OPQQQ&r"   c                 d    t          | d          st          | j                  | _        | j        S )N_headers)raw)hasattrr   rL   rS   )r2   s    r!   r)   zResponse.headersb   s2    tZ(( 	A*t/?@@@DM}r"    /Flaxkeyvaluemax_ageexpirespathdomainsecurehttponlyr   )rX   r   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usegmtr\   r]   r^   r_   r`   )r   rX   ra   z1samesite must be either 'strict', 'lax' or 'none'r   rV   )headers
   set-cookier<   )httpcookiesSimpleCookier5   r   r   r=   outputstriprL   rJ   r7   )r2   rY   rZ   r[   r\   r]   r^   r_   r`   r   cookie
cookie_vals               r!   
set_cookiezResponse.set_cookieh   sg    261J1J1L1L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   )r[   r\   r]   r^   r_   r`   r   )rm   )r2   rY   r]   r^   r_   r`   r   s          r!   delete_cookiezResponse.delete_cookie   sA     	 	 		
 		
 		
 		
 		
r"   scopereceivesendc                    K    |d| j         | j        d           d {V   |d| j        d           d {V  | j        |                                  d {V  d S d S )Nhttp.response.starttypestatusr)   http.response.body)rv   r/   )r(   rL   r/   r+   )r2   rp   rq   rr   s       r!   __call__zResponse.__call__   s      d-*+ 
 
 	
 	
 	
 	
 	
 	
 	
 d0$)DDEEEEEEEEE?&//########### '&r"   )Nr&   NNNr-   )rV   NNrW   NFFrX   )rW   NFFrX   )__name__
__module____qualname__r*   r8   typingAnyintOptionalMappingrH   r
   r3   r6   r.   r0   propertyr   r)   Unionr   boolr   rm   ro   r   r   r   ry   rC   r"   r!   r$   r$   '   s       JG #=A+/6:# ## # S!9:	#
 OC(# ON3# 
# # # #,fj ,U , , , , DH' 'v~c3h'?@'	' ' ' 'B     X (,EI'+FK%O %O%O %O %	%O
 hS.@!AB%O %O $%O %O %O /'*A"BC%O 
%O %O %O %OT '+FK
 

 
 $	

 
 
 /'*A"BC
 

 
 
 
($E $G $4 $D $ $ $ $ $ $r"   r$   c                       e Zd ZdZdS )HTMLResponsez	text/htmlNrz   r{   r|   r*   rC   r"   r!   r   r      s        JJJr"   r   c                       e Zd ZdZdS )PlainTextResponse
text/plainNr   rC   r"   r!   r   r      s        JJJr"   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/jsonr&   Nr'   r(   r)   r*   r+   r   c                 R    t                                          |||||           d S r-   )superr3   )r2   r'   r(   r)   r*   r+   	__class__s         r!   r3   zJSONResponse.__init__   s+     	+w
JOOOOOr"   c                 Z    t          j        |ddd d                              d          S )NF),:)ensure_ascii	allow_nanindent
separatorsr%   )jsondumpsr7   r9   s     r!   r.   zJSONResponse.render   s7    z!
 
 
 &//	r"   r&   NNN)rz   r{   r|   r*   r}   r~   r   r   DictrH   r
   r3   r6   r.   __classcell__r   s   @r!   r   r      s        #J
 :>+/6:P PP P S#X!67	P
 OC(P ON3P 
P P P P P Pfj 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 )
RedirectResponse3  Nr   r(   r)   r+   r   c                     t                                          d|||           t          t          |          d          | j        d<   d S )Nr"   )r'   r(   r)   r+   z:/%#?=@[]!$&'()*+,;)safelocation)r   r3   r   rH   r)   )r2   r   r(   r)   r+   r   s        r!   r3   zRedirectResponse.__init__   sW     	['j 	 	
 	
 	
 $)S8M#N#N#NZ   r"   )r   NN)rz   r{   r|   r}   r   rH   r   r   r   r   r
   r3   r   r   s   @r!   r   r      s         =A6:
O 
O\#s(#
O 
O S!9:	
O
 ON3
O 

O 
O 
O 
O 
O 
O 
O 
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dS )StreamingResponsebody_iteratorr&   Nr'   r(   r)   r*   r+   r   c                     t          |t          j                  r|| _        nt	          |          | _        || _        || j        n|| _        || _        |                     |           d S r-   )	r5   r}   AsyncIterabler   r   r(   r*   r+   r0   r1   s         r!   r3   zStreamingResponse.__init__   sp     gv344 	@!(D!6w!?!?D&-7-?$//Z$'"""""r"   rq   c                 F   K   	  |             d {V }|d         dk    rd S )NTrv   zhttp.disconnectrC   )r2   rq   messages      r!   listen_for_disconnectz'StreamingResponse.listen_for_disconnect   s<      	#GIIooooooGv"333	r"   rr   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   rx   Trv   r/   	more_bodyr"   F)r(   rL   r   r5   r6   r7   r8   )r2   rr   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rp   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   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   N)anyiocreate_task_group
start_soonr   r   r   r+   )r2   rp   rq   rr   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   )rz   r{   r|   AsyncContentStream__annotations__ContentStreamr   r}   r   r   rH   r
   r3   r   r   r   r   r   ry   rC   r"   r!   r   r      s        %%%%
 =A+/6:# ## # S!9:	#
 OC(# ON3# 
# # # #"7 t    T$ T4 T T T T$E $G $4 $D $ $ $ $ $ $r"   r   c                   H   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dS )FileResponsei   r&   N
attachmentr]   r   r(   r)   r*   r+   filenamestat_resultmethodcontent_disposition_typer   c
                    || _         || _        || _        |d uo|                                dk    | _        |t          |p|          d         pd}|| _        || _        |                     |           | j        lt          | j                  }
|
| j        k    rd
                    |	|
          }nd
                    |	| j                  }| j                            d|           || _        ||                     |           d S d S )NHEADr   r   z{}; filename*=utf-8''{}z{}; filename="{}"zcontent-disposition)r]   r(   r   uppersend_header_onlyr   r*   r+   r0   r   formatr)   
setdefaultr   set_stat_headers)r2   r]   r(   r)   r*   r+   r   r   r   r   content_disposition_filenamecontent_dispositions               r!   r3   zFileResponse.__init__  s,    	&  &d 2 Ov||~~7O#H$455a8HLJ$$'"""=$+0+?+?(+t}<<&?&F&F,.J' '## ':&@&@,dm' '# L##$9;NOOO&"!!+..... #"r"   c                    t          |j                  }t          |j        d          }t          |j                  dz   t          |j                  z   }t	          |                                d          }| j                            d|           | j                            d|           | j                            d|           d S )	NTrc   -F)usedforsecurityzcontent-lengthzlast-modifiedetag)rH   st_sizer   st_mtimer	   r7   r)   r   )r2   r   rP   last_modified	etag_baser   s         r!   r   zFileResponse.set_stat_headersB  s    [011";#7EEE,--3c+:M6N6NN	Y--//GGG 0.AAA???-----r"   rp   rq   rr   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  | j        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.rt   ru   rx   r"   Fr   rb)modeT)r   r   	to_threadrun_syncr   statr]   r   st_modeS_ISREGRuntimeErrorFileNotFoundErrorr(   rL   r   	open_fileread
chunk_sizerI   r+   )	r2   rp   rq   rr   r   r   filer   r   s	            r!   ry   zFileResponse.__call__L  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-*+ 
 
 	
 	
 	
 	
 	
 	
 	
   	$ 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E99
FF)r&   NNNNNNr   )rz   r{   r|   r   r}   r   rH   r   r   r   r
   r   r   r3   r   r   r   r   ry   rC   r"   r!   r   r     sG       J
 =A+/6:)-7;'+(4"/ "/l3 223"/ "/ S!9:	"/
 OC("/ ON3"/ /#&"/ _R^4"/ $"/ #&"/ 
"/ "/ "/ "/H.BN .t . . . ."$E "$G "$4 "$D "$ "$ "$ "$ "$ "$r"   r   )T)9http.cookiesrf   r   r   r   r   r}   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_extensionsrg   Morsel	_reservedr   rH   r   Tupler   r$   r   r   r   r   r6   ContentIteratorSyncContentStreamr   r   r   r   r   rC   r"   r!   <module>r      sE        				  



        3 3 3 3 3 3 3 3       8 8 8 8 8 8        + + + + + + / / / / / / 7 7 7 7 7 7 8 8 8 8 8 8 8 8 0 0 0 0 0 0 0 0 0 0v)))))) -7  j )
 @D- -	c--	.-8<-\&/#&(<<=- - - -G$ G$ G$ G$ G$ G$ G$ G$T    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S$ S$ S$ S$ S$8 S$ S$ S$ S$ S$r"   