
    gN                    b   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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	jX                  e-e.e/f   Z0e	jb                  e0   Z2e	jf                  e0   Z4e	jX                  e4e2f   Z5 G d de'      Z6 G d de7      Z8 G d de7      Z9 ejt                  d      Z; G d d e'      Z<y)!    )annotationsN)datetime)format_datetime
formatdate)partial)
guess_type)	token_hex)quote)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         H/var/www/openai/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.render/   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"   r8   populate_content_lengthpopulate_content_typekvhkeysr   content_lengthcontent_types               r#   r   zResponse.init_headers6   s[   ?57K&*#$(!ZaZgZgZijZiRVRSUVAGGI,,Y7)9LMZiK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   r8   rB   )r    s    r#   r"   zResponse.headersR   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   r2   outputstripr8   r6   r*   )r    keyvaluemax_agerH   rI   rJ   rK   rL   rP   cookie
cookie_vals               r#   
set_cookiezResponse.set_cookieX   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   )rZ   rH   rI   rJ   rK   rL   rP   )r]   )r    rX   rI   rJ   rK   rL   rP   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.rQ   http.response.startra   statusr"   http.response.body)ra   r   )r   r8   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!   rm   rr   zbytes | memoryviewr   )r"   ro   rr   rs   )rr   r   )rQ   NN/NFFrN   )rX   r4   rY   r4   rZ   z
int | NonerH   zdatetime | str | int | NonerI   rp   rJ   rp   rK   boolrL   ru   rP   .typing.Literal['lax', 'strict', 'none'] | Nonerr   rs   )rt   NFFrN   )rX   r4   rI   r4   rJ   rp   rK   ru   rL   ru   rP   rv   rr   rs   rg   r   rh   r   ri   r   rr   rs   )__name__
__module____qualname__r   r+   r$   r   r   propertyr"   r]   r_   rk    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rx   ry   rz   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%   r/   NNNrl   )r!   rm   rr   r(   )rx   ry   rz   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
   r4   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   rn   r"   ro   r   rq   rr   rs   )rx   ry   rz   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)Nra   zhttp.disconnectr|   )r    rh   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)Nrc   rd   rf   Tra   r   	more_bodyr%   F)r   r8   r   r'   r(   r)   r*   r+   )r    ri   chunks      r#   stream_responsez!StreamingResponse.stream_response   s     -**++
 	
 	
  -- 	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 {    n}t        j                         4 d {   dfd}j                  |t        | j
                  |              |t        | j                  |             d {    d d d       d {    | j                  | j                          d {    y y 7 # t        $ r t               w xY w7 7 U7 G# 1 d {  7  sw Y   WxY w7 :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'     &LL++224 !s   0. 0)r   z+typing.Callable[[], typing.Awaitable[None]]rr   rs   )tuplemaprn   getsplitr   OSErrorr   anyiocreate_task_group
start_soonr   r   r   )r    rg   rh   ri   r   r   r   s         @r#   rk   zStreamingResponse.__call__   s    Seii&;&?&?PU&V&\&\]`&abc6!)**4000 ..00J5 %%dGD4H4H$,OP74#=#=wGHHH 10 ??&//### ' 1 )&(() 1 I 1000 $s   AED &D'D +ED(EAD.D*D.E$D,%#EE	ED D%%E*D.,E.E 4D75E <Er   )r!   ContentStreamr   rn   r"   ro   r   rp   r   rq   rr   rs   )rh   r   rr   rs   )ri   r   rr   rs   rw   )rx   ry   rz   __annotations__r$   r   r   rk   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!   r4   rr   rs   rx   ry   rz   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   rn   rr   rs   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)rI   r   filenamewarningswarnDeprecationWarningr   r   r   r   r"   
setdefaultr
   stat_resultset_stat_headers)r    rI   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 )
NTrF   -r   F)usedforsecuritycontent-lengthlast-modifiedetag)
r4   st_sizer   st_mtimehashlibmd5r*   	hexdigestr"   r   )r    r   r?   last_modified	etag_baser   s         r#   r   zFileResponse.set_stat_headersG  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.)rg   rangezif-rangei  )r   i  zContent-Rangez*/)r   r"      r   )upperr   r   	to_threadrun_syncosstatrI   r   st_modeS_ISREGRuntimeErrorFileNotFoundErrorr   r   _should_use_range_handle_simple_parse_range_headerr   r   r   r!   r   r   r5   _handle_single_range_handle_multiple_rangesr   )r    rg   rh   ri   send_header_onlyr   moder"   
http_rangehttp_if_rangerangesexcresponsestartends                  r#   rk   zFileResponse.__call__Q  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)
Nrc   rd   rf   r%   Fr   rbr   T)r   r8   r   	open_filerI   read
chunk_sizer5   )r    ri   r   filer   r   s         r#   r   zFileResponse._handle_simplex  s     1T=M=MZ^ZjZjklll 4cPUVWWW"__TYYTBBBBd 	"&))DOO"<<E #E
doo =I(<eZcdeee   CBB	 	mWBB =e CBBBs   $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   rt   content-ranger   rc      rd   rf   r%   Fr   r   r   T)r"   r4   r8   r   r  rI   seekr  minr  r5   )	r    ri   r   r   	file_sizer   r  r   r   s	            r#   r   z!FileResponse._handle_single_range  sX     +1qq	9+(N_%),S5[)9%&1STM]M]^___ 4cPUVWWW"__TYYTBBBBdii&&& 	"&))Cu,M"NNESZ'E #E
doo = M%#+I(<eZcdeee	   CBB	 	`WBB& O f CBBBs   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   rc   r  rd   rf   r%   Fr   r   r   T   
z
--z--
r.   )r	   generate_multipartr"   r4   r8   r   r  rI   r  r  r	  r  r5   r*   )r    ri   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BBd"(JE3(<FVW\^aFbquvwww))E***#+&*iiDOOS5[0Q&R RU+",@%^b#cddd  #+ (<eZ^_``` #)  4"&xj 5 < <Y G%*   CBB	 	`WBBw* Rd` CBBBs   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)rQ   rQ   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#     CFqA**+Fs   !c              3  ,   K   | ]  \  }}||kD    y wr   r|   )r  r   r   s      r#   r  z3FileResponse._parse_range_header.<locals>.<genexpr>  s     4Vzucus{Vs   z)Range header: start must be less than end)r   
ValueErrorr   rW   r2   _RANGE_PATTERNfindallrn   r5   anyr   r   insertr	  maxr6   )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

 4H}	 qTAaD	y3qt9'<!"1!A$3qt9y3HAaD	Ai 4 	 
 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)r5   r4   )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   rt   z

r.   )r*   )r   r   r  r@   r   s     r#   <lambda>z1FileResponse.generate_multipart.<locals>.<lambda>  sJ    XJ !!- /((-waAwaz B fY  r%   )r5   r4   sum)r    r   r  r   r@   boundary_lenr?   r(  s     ```  @r#   r  zFileResponse.generate_multipart  sn    0 8}!#l!2S5F!FSQY]I[![ 
 %
 

 
  
 	
r%   )r/   NNNNNN
attachment)rI   zstr | os.PathLike[str]r   rn   r"   ro   r   rp   r   rq   r   rp   r   zos.stat_result | Noner   rp   r   r4   rr   rs   )r   zos.stat_resultrr   rs   rw   )ri   r   r   ru   rr   rs   )ri   r   r   rn   r   rn   r
  rn   r   ru   rr   rs   )
ri   r   r   list[tuple[int, int]]r
  rn   r   ru   rr   rs   )r   r4   rr   ru   )r   r4   r
  rn   rr   r/  )
r   z typing.Sequence[tuple[int, int]]r  r4   r   rn   r@   r4   rr   z.tuple[int, typing.Callable[[int, int], bytes]])rx   ry   rz   r  r$   r   rk   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.cookiesrS   r   r   rer   r   r   r   email.utilsr   r   	functoolsr   	mimetypesr   secretsr	   urllib.parser
   r   anyio.to_threadstarlette.backgroundr   starlette.concurrencyr   starlette.datastructuresr   r   r   starlette.requestsr   starlette.typesr   r   r   r   r~   r   r   r   Unionr4   r(   r)   ContentIterableSyncContentStreamr   r   r   r   	Exceptionr   r   compiler  r   r|   r%   r#   <module>rE     s   "    	 	     3        / 7 A A / 0 0C$ C$L8  8 .	Ox 	O ,,sE:-
.OOG, ))'2 /1BBC<$ <$~9 
!) !
 N+z
8 z
r%   