
    gx@                        U 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mZmZmZmZmZmZmZmZmZmZmZ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'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1 dZ2erddl3m4Z4 eee5ged   f      Z6 e7ejp                  js                  d            Z:ee7   e;d<    e       Z<ee   e;d<    edD  ci c]  } | e<jz                  |     c}       Z>dZ? edddddd      Z@ G d de      ZAe<jz                  j                          e@j                         D ]  \  ZDZEe<j                  eDeE         eG       ZHee j                  d      e;d<    G d d e1      ZJyc c} w )!    N)suppress)Enumauto)	MimeTypes)S_ISREG)MappingProxyType)IOTYPE_CHECKINGAny	AwaitableCallableFinalIteratorListOptionalSetTupleUnioncast   )hdrs)AbstractStreamWriter)ETAG_ANYETagmust_be_empty_body)LooseHeadersPathLike)HTTPForbiddenHTTPNotFoundHTTPNotModifiedHTTPPartialContentHTTPPreconditionFailedHTTPRequestRangeNotSatisfiable)StreamResponse)FileResponse)BaseRequestAIOHTTP_NOSENDFILE
NOSENDFILECONTENT_TYPES).br.gzzapplication/octet-streamr+   r*   z.bz2z.Zz.xz)zapplication/gzipzapplication/x-brotlizapplication/x-bzip2zapplication/x-compresszapplication/x-xzc                   H    e Zd ZdZ e       Z e       Z e       Z e       Zy)_FileResponseResultz The result of the file response.N)	__name__
__module____qualname____doc__r   	SEND_FILENOT_ACCEPTABLEPRE_CONDITION_FAILEDNOT_MODIFIED     M/var/www/openai/venv/lib/python3.12/site-packages/aiohttp/web_fileresponse.pyr-   r-   J   s"    *IVN66Lr7   r-   _CLOSE_FUTURESc                   4    e Zd ZdZ	 	 	 	 d"dedededee   dee   ddf fd	Z	d
e
e   dededefdZded
e
e   dededef
dZddd
e
e   dededef
 fdZededeedf   dedefd       Zdddededee   f fdZdddee   f fdZdddedeeeej6                     ej:                  ee   f   fdZdedeeej@                     ej:                  ee   f   fdZ!dddee   f fdZ"ddd
ej6                  dej:                  d ee   dee   f
 fd!Z# xZ$S )#r%   z,A response object can be used to send files.Npath
chunk_sizestatusreasonheadersreturnc                 l    t         |   |||       t        j                  |      | _        || _        y )N)r=   r>   r?   )super__init__pathlibPath_path_chunk_size)selfr;   r<   r=   r>   r?   	__class__s         r8   rC   zFileResponse.__init___   s1     	vwG\\$'
%r7   fobjoffsetc                 F    |j                  |       |j                  |      S N)seekread)rH   rJ   rK   r<   s       r8   _seek_and_readzFileResponse._seek_and_readl   s    		&yy$$r7   writercountc                   K   | j                   }t        j                         }|j                  d | j                  |||       d {   }|rV|j                  |       d {    ||z
  }|dk  rn2|j                  d |j                  t        ||             d {   }|rV|j                          d {    |S 7 v7 ]7 %7 wNr   )	rG   asyncioget_event_looprun_in_executorrP   writerO   mindrain)rH   rQ   rJ   rK   rR   r<   loopchunks           r8   _sendfile_fallbackzFileResponse._sendfile_fallbackp   s      %%
%%'**$%%tVZ
 
 ,,u%%%J&Ez..tTYYJPU@VWWE  lln
 & XsN   ACB<C B>!9CC C"C5C6C>C CCrequestr&   c                   K   t         |   |       d {   }|J t        s| j                  r| j	                  ||||       d {   S |j
                  }|j                  }|J 	 |j                  ||||       d {    t         | %          d {    |S 7 7 W7  # t        $ r  | j	                  ||||       d {  7  cY S w xY w7 8wrM   )
rB   preparer(   compressionr]   _loop	transportsendfileNotImplementedError	write_eof)	rH   r^   rJ   rK   rR   rQ   r[   rc   rI   s	           r8   	_sendfilezFileResponse._sendfile   s      ww//!!!))00vuMMM}}%%	$$$	N--	4??? g!!!! 0 N @" 	N00vuMMMM	N 	"so   CB1CB 	 C*B$ B"B$ CCC C"B$ $ CCC
CCC
etag_valueetags.weakc                z     t        |      dk(  r|d   j                  t        k(  ryt         fd|D              S )Nr   r   Tc              3   Z   K   | ]"  }s|j                   r|j                  k(   $ y wrM   )is_weakvalue).0etagrh   rj   s     r8   	<genexpr>z+FileResponse._etag_match.<locals>.<genexpr>   s&      
16$dllDJJ*$s   ++)lenrn   r   any)rh   ri   rj   s   ` `r8   _etag_matchzFileResponse._etag_match   s:    u:?uQx~~9 
16
 
 	
r7   last_modifiedc                    K   | j                  t        j                         d| _        || _        || _        t        |   |       d {   S 7 w)NF)
set_statusr    status_code_length_checkrp   ru   rB   r`   )rH   r^   rh   ru   rI   s       r8   _not_modifiedzFileResponse._not_modified   sI      	334"	* W_W----s   AA
AAc                    K   | j                  t        j                         d| _        t        |   |       d {   S 7 wrT   )rw   r"   rx   content_lengthrB   r`   )rH   r^   rI   s     r8   _precondition_failedz!FileResponse._precondition_failed   s9      	.::;W_W----s   9AAAaccept_encodingc                 F   | j                  |      \  }}}|st        j                  d|dfS |j                  dd|j                  d}|j
                  x}(| j                  ||d      st        j                  d||fS |j                  x}3|1|j                  |j                         kD  rt        j                  d||fS |j                  x}	(| j                  ||	d      rt        j                  d||fS |j                  x}
3|	1|j                  |
j                         k  rt        j                  d||fS |j                  d      }t        t               5  t#        j$                  |j'                               }ddd       t        j(                  |||fS # 1 sw Y   xY w)a  Return the response result, io object, stat result, and encoding.

        If an uncompressed file is returned, the encoding is set to
        :py:data:`None`.

        This method should be called from a thread executor
        since it calls os.stat which may block.
        Nx-F)rj   Trb)_get_file_path_stat_encodingr-   r3   st_mtime_nsst_sizeif_matchrt   r4   if_unmodified_sincest_mtime	timestampif_none_matchr5   if_modified_sinceopenr   OSErrorosstatfilenor2   )rH   r^   r~   	file_pathstfile_encodingrh   ifmatch
unmodsinceifnonematchmodsincerJ   s               r8   _make_responsezFileResponse._make_response   s    (,'H'H(
$	2} &55tREEq)2::a.9
 '''G4T=M=Me >N >
 ';;T2}TT #666ZCj2244&;;T2}TT #000K=$BRBR$ CS C
 '33T2}LL !222X?#x1133&33T2}LL~~d#g
 'B  #,,dBEE s   $FF c                    | j                   }t        j                         D ]v  \  }}||vr|j                  |j                  |z         }t        t              5  |j                         }t        |j                        r|||fcd d d        c S 	 d d d        x |j                         }t        |j                        r||d fS d |d fS # 1 sw Y   xY wrM   )rF   ENCODING_EXTENSIONSitemswith_suffixsuffixr   r   lstatr   st_moder   )rH   r~   r   file_extensionr   compressed_pathr   s          r8   r   z)FileResponse._get_file_path_stat_encoding   s     JJ	-@-F-F-H)NMO3'33I4D4D~4UVO'"$**,2::&*B=	 #" ' #" .I ^^#BJJ/y2tCCT2tCC #"s   *C		C	c                 D  K   t        j                         }|j                  j                  t        j
                  d      j                         }	 |j                  d | j                  ||       d {   \  }}}}|t"        j$                  u r6| j                  t        j                         t        | 9  |       d {   S |t"        j&                  u r| j)                  |       d {   S |t"        j*                  u rD|j,                  dd|j.                  d}|j0                  }	| j3                  |||	       d {   S |J 	 | j5                  ||||       d {   |j                  d |j6                        }
t8        j;                  |
       |
j=                  t8        j>                         S 7 D# t        $ r: | j                  t        j                         t        | 9  |       d {  7  cY S t        $ r: | j                  t         j                         t        | 9  |       d {  7  cY S w xY w7 7 Y7 7 # |j                  d |j6                        }
t8        j;                  |
       |
j=                  t8        j>                         w xY ww)N r   r   ) rU   get_running_loopr?   getr   ACCEPT_ENCODINGlowerrW   r   PermissionErrorrw   r   rx   rB   r`   r   r   r-   r3   r4   r}   r5   r   r   r   rz   _prepare_open_filecloser9   addadd_done_callbackremove)rH   r^   r[   r~   response_resultrJ   r   r   rh   ru   close_futurerI   s              r8   r`   zFileResponse.prepare   s=    '') "//--d.B.BBGMMO	2=A=Q=Qd))7O> 84OT2} 1@@@OOM5561111FFF227;;;1>>>NN1-Qrzz!n=JKKM++GZOOO	B00$MRR  //djjAL |,**>+@+@AK8  	2OOM5561111 	2 OOL4451111		2 2 <
 P S  //djjAL |,**>+@+@As   AJ !F9 2F63	F9 <AJ ?I  *J *I+AJ  IJ 
I !I	"I %AJ 6F9 9:H=3G64H=9J ;9H=4H75H=:J <H==J J J 	I AJJ r   r   c                 x  K   | j                   }|j                  }|j                  }|}d }	|j                  x}
||
j	                         k  r	 |j
                  }|j                  }	|j                  }|	|	dk  r||	|z  }	|	dk  rd}	||	z
  }nt#        ||n||      |	z
  }|	|k\  rVd| | j                  t        j                  <   | j                  t        j                         t        | A  |       d {   S t$        j                  }| j                  |       t        j&                  | j                  vrVt(        j*                  dk\  rt,        j.                  }nt,        j0                  } || j2                        d   xs t4        | _        |rO|| j                  t        j8                  <   t        j:                  | j                  t        j<                  <   d| _        |j@                  dd|j                  d| _!        || _"        || _#        d| j                  t        jH                  <   |t$        j                  k(  r:|	}|J djK                  |||z   d	z
  |      | j                  t        j                  <   |dk(  stM        |jN                  |      rt        | A  |       d {   S |	xs d}| jQ                  ||||       d {   S # t        $ rZ d| | j                  t        j                  <   | j                  t        j                         t        | A  |       d {  7  cY S w xY w7 =7 7 ow)
Nzbytes */r   )      Fr   r   byteszbytes {}-{}/{}r   ))_statusr   r   if_ranger   
http_rangestartstop
ValueError_headersr   CONTENT_RANGErw   r#   rx   rB   r`   rY   r!   CONTENT_TYPEsysversion_infor)   guess_file_type
guess_typerF   FALLBACK_CONTENT_TYPEcontent_typeCONTENT_ENCODINGr   VARY_compressionr   rp   ru   r|   ACCEPT_RANGESformatr   methodrg   )rH   r^   rJ   r   r   r=   	file_size
file_mtimerR   r   ifrangerngendguesser
real_startrK   rI   s                   r8   r   zFileResponse._prepare_open_file,  s      	KK
#'''G0J'BSBSBU4U6((		%(XX"  19Y&Eqy !"%-E 3?C	9MPUU  I% ;C9+8NDMM$"4"45OO$B$N$NO!&!999+77 '
 DMM17*'77'22 '

 3A 6 O:OD3@DMM$//0'+';';DMM$))$ !&D~~a("**Q8	'#,3d(()'333J)))0@0G0GJ.2I1DMM$,,-
 A:+GNNFC111 !^^GT65AAA{  6 7?yk4Jd001 > J JK"W_W55556` :P 2
 Bsi   A
L:$K 2BL:6L37F/L:&L6'!L:L8	L:AL0'L*(L0-L:/L00L:6L:8L:)i      NN)%r.   r/   r0   r1   r   intr   strr   rC   r	   r   r   rP   r   r]   rg   staticmethodr   r   boolrt   floatrz   r}   r-   ioBufferedReaderr   stat_resultr   rD   rE   r   r`   r   __classcell__)rI   s   @r8   r%   r%   \   sX   6
 % $*.&& & 	&
 & ,'& 
&%2c7 %C %S %U %*24S'CFOR	*$,.sG=@IL	* 
 
E$),< 
t 
PT 
 
	.$	.25	.FK	.	&	'	..$.	&	'.6F$6F7:6F	Xb&7&78"..(SV-W
6FpD"D	x%r~~x}D	ED&+B] +Bx@T7U +BZvBvB vB NN	vB
  }vB 
&	'vB vBr7   r%   )KrU   r   r   rD   r   
contextlibr   enumr   r   	mimetypesr   r   r   typesr   typingr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   abcr   helpersr   r   r   typedefsr   r   web_exceptionsr   r   r    r!   r"   r#   web_responser$   __all__web_requestr&   r   _T_OnChunkSentr   environr   r(   __annotations__r)   encodings_mapr   r   ADDITIONAL_CONTENT_TYPESr-   clearr   r   	extensionadd_typesetr9   Futurer%   )exts   0r8   <module>r      s    	 	  
     "      % 7 7 ,  )
( (E7IdO#;<= rzz~~.BCD
E$K D"++uY - '6DEnsS-
%
%c
**nE  3  ,! %%"&! $     ! ! #7==?L)<3  @ -0EGNN4() 1FB> FBI Fs   F