
    ,hO                    n   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	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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!m"Z" d dl#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/e0e1f   Z2e	jf                  e2   Z4e	jj                  e2   Z6e	j\                  e6e4f   Z7 G d de)      Z8 G d de9      Z: G d de9      Z; ejx                  d      Z= G d  d!e)      Z>y)"    )annotationsN)datetime)format_datetime
formatdate)partial)
guess_type)	token_hex)quote)collapse_excgroups)BackgroundTask)iterate_in_threadpool)URLHeadersMutableHeaders)ClientDisconnect)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         U/var/www/html/Resume-Scraper/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.render0   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#   r9   populate_content_lengthpopulate_content_typekvhkeysr   content_lengthcontent_types               r$   r   zResponse.init_headers7   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   r9   rC   )r!   s    r$   r#   zResponse.headersS   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   r3   outputstripr9   r7   r+   )r!   keyvaluemax_agerI   rJ   rK   rL   rM   rQ   cookie
cookie_vals               r$   
set_cookiezResponse.set_cookieY   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   )r[   rI   rJ   rK   rL   rM   rQ   )r^   )r!   rY   rJ   rK   rL   rM   rQ   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.rR   http.response.startrb   statusr#   http.response.body)rb   r   )r   r9   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)Nr0   NNNr"   
typing.Anyr   intr#   typing.Mapping[str, str] | Noner   
str | Noner   BackgroundTask | NonereturnNone)r"   rn   rs   zbytes | memoryviewr   )r#   rp   rs   rt   )rs   r   )rR   NN/NFFrO   )rY   r5   rZ   r5   r[   z
int | NonerI   zdatetime | str | int | NonerJ   rq   rK   rq   rL   boolrM   rv   rQ   .typing.Literal['lax', 'strict', 'none'] | Noners   rt   )ru   NFFrO   )rY   r5   rJ   r5   rK   rq   rL   rv   rM   rv   rQ   rw   rs   rt   rh   r   ri   r   rj   r   rs   rt   )__name__
__module____qualname__r   r,   r%   r   r   propertyr#   r^   r`   rl    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ry   rz   r{   r   r}   r&   r$   r   r      s    Jr&   r   c                      e Zd ZdZy)PlainTextResponse
text/plainNr   r}   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&   r0   NNNrm   )r"   rn   rs   r)   )ry   rz   r{   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
   r5   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   ro   r#   rp   r   rr   rs   rt   )ry   rz   r{   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)Nrb   zhttp.disconnectr}   )r!   ri   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)Nrd   re   rg   Trb   r   	more_bodyr&   F)r   r9   r   r(   r)   r*   r+   r,   )r!   rj   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        t        t        |j                  di       j                  dd      j	                  d                  }|dk\  r	 | j                  |       d {    nt               5  t        j                         4 d {   dfd}j                  |t        | j
                  |              |t        | j                  |             d {    d d d       d {    d d d        | j                  | j                          d {    y y 7 # t        $ r t               w xY w7 7 ]7 O# 1 d {  7  sw Y   _xY w# 1 sw Y   cxY w7 Fw)Nasgispec_versionz2.0.)      c                d   K    |         d {    j                   j                          y 7 wr   )cancel_scopecancel)func
task_groups    r$   wrapz(StreamingResponse.__call__.<locals>.wrap	  s'     "f"//668 %s   0. 0)r   z+typing.Callable[[], typing.Awaitable[None]]rs   rt   )tuplemapro   getsplitr   OSErrorr   r   anyiocreate_task_group
start_soonr   r   r   )r!   rh   ri   rj   r   r   r   s         @r$   rl   zStreamingResponse.__call__   sO    Seii&;&?&?PU&V&\&\]`&abc6!)**4000 $% M 224 M M
9 ))$8L8Ld0STwt'A'A7KLLLM MM ??&//### ' 1 )&(()M MM M M MM M $s   AE$D$ &D"'D$ +E$6ED;EAED= E$E/D?0E4'E$E"E$"D$ $D88E$;E=E?EE	E
E	EEE$r   )r"   ContentStreamr   ro   r#   rp   r   rq   r   rr   rs   rt   )ri   r   rs   rt   )rj   r   rs   rt   rx   )ry   rz   r{   __annotations__r%   r   r   rl   r}   r&   r$   r   r      se    %%
 37!%,0## # 1	#
 # *# 
#"T$r&   r   c                      e Zd ZdddZy)MalformedRangeHeaderc                    || _         y r   )r"   r-   s     r$   r%   zMalformedRangeHeader.__init__  s	    r&   N)zMalformed range header.)r"   r5   rs   rt   ry   rz   r{   r%   r}   r&   r$   r   r     s    r&   r   c                      e Zd ZddZy)RangeNotSatisfiablec                    || _         y r   )max_size)r!   r   s     r$   r%   zRangeNotSatisfiable.__init__  s	     r&   N)r   ro   rs   rt   r   r}   r&   r$   r   r     s    !r&   r   z(\d*)-(\d*)c                      e Zd ZdZ	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZ	dd	Z
edd
       Z	 	 	 	 	 	 	 	 	 	 ddZy)FileResponsei   Nc
                   || _         || _        || _        |t        j                  dt
               |t        |xs |      d   xs d}|| _        || _        | j                  |       | j                  j                  dd       | 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accept-rangesr)   z; filename*=utf-8''z; filename=""zcontent-disposition)rJ   r   filenamewarningswarnDeprecationWarningr   r   r   r   r#   
setdefaultr
   stat_resultset_stat_headers)r!   rJ   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$$'"9==$+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
                  |j                         d      j                          d}| j                  j                  d|       | j                  j                  d|       | j                  j                  d	|       y )
NTrG   -r   F)usedforsecuritycontent-lengthlast-modifiedetag)
r5   st_sizer   st_mtimehashlibmd5r+   	hexdigestr#   r   )r!   r   r@   last_modified	etag_baser   s         r$   r   zFileResponse.set_stat_headersI  s    [001";#7#7E,,-3c+:M:M6NN	7;;y//15ISSUVVWX 0.A?-r&   c                  K   |d   j                         dk(  }| j                  	 t        j                  j	                  t
        j                  | j                         d {   }| j                  |       |j                  }t        j                  |      s%t        d| j                   d      | j                  }t        |      }|j                  d      }|j                  d      }	||	,| j                  |	      s| j!                  ||       d {    n	 | j#                  ||j$                        }
t1        |
      dk(  r0|
d   \  }}| j3                  ||||j$                  |       d {    n&| j5                  ||
|j$                  |       d {    | j6                  | j7                          d {    y y 7 a# t        $ r t        d| j                   d      w xY w7 # t&        $ r2} t)        |j*                  d	
      |||       d {  7  cY d }~S d }~wt,        $ r9}t)        ddd|j.                   i      } ||||       d {  7  cY d }~S d }~ww xY w7 7 7 w)Nr   HEADzFile at path z is not a file.z does not exist.)rh   rangezif-rangei  )r   i  zContent-Rangez*/)r   r#      r   )upperr   r   	to_threadrun_syncosstatrJ   r   st_modeS_ISREGRuntimeErrorFileNotFoundErrorr   r   _should_use_range_handle_simple_parse_range_headerr   r   r   r"   r   r   r6   _handle_single_range_handle_multiple_rangesr   )r!   rh   ri   rj   send_header_onlyr   moder#   
http_rangehttp_if_rangerangesexcresponsestartends                  r$   rl   zFileResponse.__call__S  sI    !&x!6!6!8F!B#S$)OO$<$<RWWdii$PP%%k2 #**||D)&tyyk'QRR**K&[[)
J/-";DDZDZ[hDi%%d,<===<11*k>Q>QR 6{a#AY
s//eS+BUBUWghhh224ATATVfggg??&//### 'A Q$ P"]499+=M#NOOP > ( cL.s{{LUT[]abbbb& <,Z\]`]i]i\jXkFlm%eWd;;;;< ig $s   #I1;G !G"G 7BI1G+I1G- 88I10I+1&I1I-#I1;I/<I1G #G((I1-	I(6"H#HH#I(I1#I(/)I#II#I(I1#I((I1-I1/I1c                   K    |d| j                   | j                  d       d {    |r |dddd       d {    y t        j                  | j                  d       d {   4 d {   }d	}|rR|j                  | j                         d {   }t        |      | j                  k(  } |d||d       d {    |rRd d d       d {    y 7 7 7 x7 q7 L7 "7 # 1 d {  7  sw Y   y xY ww)
Nrd   re   rg   r&   Fr   rbr   T)r   r9   r   	open_filerJ   read
chunk_sizer6   )r!   rj   r   filer   r   s         r$   r   zFileResponse._handle_simplez  s     1T=M=MZ^ZjZjklll 4cPUVWWW"__TYYTBB f fd 	"&))DOO"<<E #E
doo =I(<eZcdeee  f f f	 	mWB f =ef f f fs   $C>CC>C)C>&C'C>/C!0C>3#C)C#+C)C%C)
C>C'C>C>C>!C>#C)%C)'C>)C;/C20C;7C>c                  K   d| d|dz
   d| | j                   d<   t        ||z
        | j                   d<    |dd| j                  d	       d {    |r |d
ddd       d {    y t        j                  | j
                  d       d {   4 d {   }|j                  |       d {    d}|rt|j                  t        | j                  ||z
               d {   }|t        |      z  }t        |      | j                  k(  xr ||k  } |d
||d       d {    |rtd d d       d {    y 7 7 7 7 7 7 c7 $7 # 1 d {  7  sw Y   y xY ww)Nzbytes r   r   ru   content-ranger   rd      re   rg   r&   Fr   r   r  T)r#   r5   r9   r   r  rJ   seekr  minr  r6   )	r!   rj   r   r   	file_sizer   r  r   r   s	            r$   r   z!FileResponse._handle_single_range  sp     +1qq	9+(N_%),S5[)9%&1STM]M]^___ 4cPUVWWW"__TYYTBB f fdii&&& 	"&))Cu,M"NNESZ'E #E
doo = M%#+I(<eZcdeee	  f f f	 	`WB f& O ff f f fs   AE'EE'(E))E'EE'EE'E4E
53E(E)A E)E*E1E'<E=E'E'E'E'
EEEE'E$EE$ E'c           	       K   t        d      }| j                  |||| j                  d         \  }}d| | j                  d<   t        |      | j                  d<    |dd| j                  d       d {    |r |d	d
dd       d {    y t        j                  | j                  d       d {   4 d {   }|D ]  \  }	}
 |d	 ||	|
      dd       d {    |j                  |	       d {    |	|
k  rX|j                  t        | j                  |
|	z
               d {   }|	t        |      z  }	 |d	|dd       d {    |	|
k  rX |d	ddd       d {      |d	d| dj                  d      dd       d {    d d d       d {    y 7 57 "7 7 7 7 7 7 h7 P7 )7 # 1 d {  7  sw Y   y xY ww)N   zcontent-typezmultipart/byteranges; boundary=r  r   rd   r  re   rg   r&   Fr   r   r  T   
z
--z--
r/   )r	   generate_multipartr#   r5   r9   r   r  rJ   r	  r  r
  r  r6   r+   )r!   rj   r   r  r   boundaryr@   header_generatorr  r   r   r   s               r$   r   z$FileResponse._handle_multiple_ranges  s     R=+/+B+BHin)E,
(( +J((T_%),^)<%&1STM]M]^___ 4cPUVWWW"__TYYTBB  d"( aJE3(<FVW\^aFbquvwww))E***#+&*iiDOOS5[0Q&R RU+",@%^b#cddd  #+ (<eZ^_```a  4"&xj 5 < <Y G%*    	 	`WB w* Rd`   s   A3G5F*6GF-)G5F06G>F2?GG!F4"G:F6;4G/F80!GF:	GG+F<,(GF>GG$G %G-G0G2G4G6G8G:G<G>G GGG	GGc                N    || j                   d   k(  xs || j                   d   k(  S )Nr   r   )r#   )r!   r   s     r$   r   zFileResponse._should_use_range  s-    _ ==fRVR^R^_eRfAffr&   c                ~   g }	 | j                  dd      \  }}|j                         j	                         }|dk7  rt        d      t
        j                  |      D cg c]Y  }|dk7  rR|d   rt        |d         nt        |d         z
  |d   r'|d   r"t        |d         k  rt        |d         dz   nf[ }}t        |      dk(  rt        d      t        fd|D              rt              t        d	 |D              rt        d
      t        |      dk(  r|S g }|D ]v  \  }}t        t        |            D ]G  }	||	   \  }
}||kD  r||
k  r|j                  |	||f        Ft        ||
      t        ||      f||	<    c |j                  ||f       x |S # t        $ r t               w xY wc c}w )N=r   r)   zOnly support bytes range)rR   rR   r   z%Range header: range must be requestedc              3  F   K   | ]  \  }}d |cxk  xr k  nc    yw)r   Nr}   ).0r   _r  s      r$   	<genexpr>z3FileResponse._parse_range_header.<locals>.<genexpr>  s"     CqA**+Cs   !c              3  ,   K   | ]  \  }}||kD    y wr   r}   )r  r   r   s      r$   r  z3FileResponse._parse_range_header.<locals>.<genexpr>  s     4zucus{4s   z)Range header: start must be less than end)r   
ValueErrorr   rX   r3   _RANGE_PATTERNfindallro   r6   anyr   r   insertr
  maxr7   )r   r  r   unitsrange_r  resultr   r   pp_startp_ends    `          r$   r   z FileResponse._parse_range_header  s   (*	)&,,S!4ME6 ##%G&'ABB $++F3

 H}	 qTAaD	y3qt9'<!"1!A$3qt9y3HAaD	Ai
 
 v;!&'NOOCFCC%i004V44&'RSSv;!M )+  	,JE33v;' ,!'5=7]MM!eS\2!$UG!4c#uo FF1I, ucl+	, [  	)&((	)
s   F# AF:#F7c                    t              }d|z   t              z   t        t                    z   t        fd|D              d|z   z   }|fdfS )a  
        Multipart response headers generator.

        ```
        --{boundary}\n
        Content-Type: {content_type}\n
        Content-Range: bytes {start}-{end-1}/{max_size}\n
        \n
        ..........content...........\n
        --{boundary}\n
        Content-Type: {content_type}\n
        Content-Range: bytes {start}-{end-1}/{max_size}\n
        \n
        ..........content...........\n
        --{boundary}--\n
        ```
        ,   c              3     K   | ]<  \  }}t        t        |            t        t        |d z
              z   z   ||z
  z    > yw)r   N)r6   r5   )r  r   r   static_header_part_lens      r$   r  z2FileResponse.generate_multipart.<locals>.<genexpr>  sK      
 s U_s3sQw<003IIU{
s   AA   c                L    d d d|  d|dz
   d dj                  d      S )	Nz--z
Content-Type: z
Content-Range: bytes r   r   ru   z

r/   )r+   )r   r   r  rA   r   s     r$   <lambda>z1FileResponse.generate_multipart.<locals>.<lambda>  sG    XJ.|n<STYSZZ[\_bc\c[ddefneoostfY r&   )r6   r5   sum)r!   r   r  r   rA   boundary_lenr@   r)  s     ```  @r$   r  zFileResponse.generate_multipart  sn    0 8}!#l!2S5F!FSQY]I[![ 
 %
 

 
  
 	
r&   )r0   NNNNNN
attachment)rJ   zstr | os.PathLike[str]r   ro   r#   rp   r   rq   r   rr   r   rq   r   zos.stat_result | Noner   rq   r   r5   rs   rt   )r   zos.stat_resultrs   rt   rx   )rj   r   r   rv   rs   rt   )rj   r   r   ro   r   ro   r  ro   r   rv   rs   rt   )
rj   r   r   list[tuple[int, int]]r  ro   r   rv   rs   rt   )r   r5   rs   rv   )r   r5   r  ro   rs   r0  )
r   z typing.Sequence[tuple[int, int]]r  r5   r   ro   rA   r5   rs   z.tuple[int, typing.Callable[[int, int], bytes]])ry   rz   r{   r  r%   r   rl   r   r   r   r   staticmethodr   r  r}   r&   r$   r   r   !  s\   J
 37!%,0#-1!(4#/$#/ #/ 1	#/
 #/ *#/ #/ +#/ #/ #&#/ 
#/J.%$N
fff!$f+.f;>fRVf	f$!! &! 	!
 ! 
!Fg 1 1f&
0&
 &
 	&

 &
 
8&
r&   r   )?
__future__r   r   http.cookiesrT   r   r   rer   r   r   r   email.utilsr   r   	functoolsr   	mimetypesr   secretsr	   urllib.parser
   r   anyio.to_threadstarlette._utilsr   starlette.backgroundr   starlette.concurrencyr   starlette.datastructuresr   r   r   starlette.requestsr   starlette.typesr   r   r   r   r   r   r   r   Unionr5   r)   r*   ContentIterableSyncContentStreamr   r   r   r   	Exceptionr   r   compiler  r   r}   r&   r$   <module>rG     s    "    	 	     3        / / 7 A A / 0 0C$ C$L8  8 .	Ox 	O ,,sE:-
.OOG, ))'2 /1BBC=$ =$@9 
!) !
 N+w
8 w
r&   