
    CCf1                       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)f   Z*ejV                  e*   Z,ejZ                  e*   Z.ejN                  e.e,f   Z/ G d de"      Z0 G d de"      Z1y)    )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         S/var/www/highfloat_scraper/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                  }|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    r5   populate_content_lengthpopulate_content_typekvhkeysr   content_lengthcontent_types               r!   r   zResponse.init_headers3   sa   ?57K&*#$(! $MMOAq !!),ahhy.ABK  #..QAaD.D.&7t&C#$34$?!tVT*'%%+t/?/?:/M T^N 1>3H3H3STU#(=''0l&8&8&::t|| ;;1D1DY1OPQ&5 /s   :EEc                h    t        | d      st        | j                        | _        | j                  S )N_headers)raw)hasattrr   r5   r?   )r   s    r!   r    zResponse.headersU   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   r/   outputstripr5   r3   r'   )r   keyvaluemax_agerE   rF   rG   rH   rI   rM   cookie
cookie_vals               r!   
set_cookiezResponse.set_cookie[   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   )rW   rE   rF   rG   rH   rI   rM   )rZ   )r   rU   rF   rG   rH   rI   rM   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.rN   http.response.startr^   statusr    http.response.body)r^   r   )r   r5   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   rj   ro   r&   r   )r    rl   ro   rp   )ro   r   )rN   NN/NFFrK   )rU   r1   rV   r1   rW   z
int | NonerE   zdatetime | str | int | NonerF   r1   rG   rm   rH   boolrI   rs   rM   .typing.Literal['lax', 'strict', 'none'] | Nonero   rp   )rr   NFFrK   )rU   r1   rF   r1   rG   rm   rH   rs   rI   rs   rM   rt   ro   rp   rd   r   re   r   rf   r   ro   rp   )__name__
__module____qualname__r   r(   r"   r   r   propertyr    rZ   r\   rh    r#   r!   r   r      si   JG #37!%,0## # 1	#
 # *# 
#, 'D   "/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,   NNNri   rq   )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	   r1   r    )r   urlr   r    r   r   s        r!   r"   zRedirectResponse.__init__   s<     	['j 	 	
 $)S8M#NZ r#   )i3  NN)
r   z	str | URLr   rk   r    rl   r   rn   ro   rp   )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   re   messages      r!   listen_for_disconnectz'StreamingResponse.listen_for_disconnect   s*     #IoGv"33 %s   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)Nr`   ra   rc   Tr^   r   	more_bodyr#   F)r   r5   r   r%   r&   r'   r(   )r   rf   chunks      r!   stream_responsez!StreamingResponse.stream_response   s     -**++
 	
 	
  -- 	Y 	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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]]ro   rp   )anyiocreate_task_group
start_soonr   r   r   r   )r   rd   re   rf   r   r   s        @r!   rh   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   rk   r    rl   r   rm   r   rn   ro   rp   )re   r   ro   rp   )rf   r   ro   rp   ru   )rv   rw   rx   __annotations__r"   r   r   rh   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                  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   r   z{}; filename*=utf-8''{}z{}; filename="{}"zcontent-disposition)rF   r   filenamewarningswarnDeprecationWarningr   r   r   r   r	   formatr    
setdefaultstat_resultset_stat_headers)r   rF   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}}<&?&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 )
NTrC   -"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_headers:  s    [001";#7#7E,,-3c+:M:M6NN	=!1!1!3UKLAN 0.A?-r#   c                d  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 {    nd|v r.d|d   v r' |dt        | j                        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 # t        $ r t        d| j                   d      w xY w7 I7 "7 7 7 7 7 t7 c# 1 d {  7  sw Y   sxY w7 Vw)NzFile at path z is not a file.z does not exist.r`   ra   r   HEADrc   r#   Fr   
extensionszhttp.response.pathsend)r^   rF   rb)modeT)r   r   	to_threadrun_syncosstatrF   r   st_modeS_ISREGRuntimeErrorFileNotFoundErrorr   r5   upperr1   	open_fileread
chunk_sizer2   r   )	r   rd   re   rf   r   r   filer   r   s	            r!   rh   zFileResponse.__call__D  s    #S$)OO$<$<RWWdii$PP%%k2 #**||D)&tyyk'QRR-**++
 	
 	
 ?  "f, 4cPUVWWWU"'?5CV'V 8#dii.QRRR"__TYYTBB  d 	"&))DOO"<<E #E
doo =I$8$))2      ??&//### 'A Q$ P"]499+=M#NOOP	
 XRB  =    $s   H0;G! GG! !AH0>H?)H0(H
)1H0H)H0HH0HH0#H4H5+H H!H(H03H4#H0H.H0G! !#HH0
H0H0H0H0HHH0H+H" H+'H0)r,   NNNNNN
attachment)rF   zstr | os.PathLike[str]r   rk   r    rl   r   rm   r   rn   r   rm   r   zos.stat_result | Noner   rm   r   r1   ro   rp   )r   zos.stat_resultro   rp   ru   )rv   rw   rx   r   r"   r   rh   rz   r#   r!   r   r     s    J
 37!%,0#-1!(4&/$&/ &/ 1	&/
 &/ *&/ &/ +&/ &/ #&&/ 
&/P.$$r#   r   )2
__future__r   http.cookiesrP   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   Unionr1   r&   ContentIterableSyncContentStreamr   r   r   r   r   rz   r#   r!   <module>r      s    "   	     3       + / 7 8 0 0I$ I$X8  8 .Ox O ,,sEz
"OOG, ))'2 /1BBC4$ 4$nY$8 Y$r#   