
    F/j@                        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%m&Z& ddl'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 dZ3erddl4m5Z5 eee6ged   f      Z7 e8ejr                  ju                  d            Z;ee8   e<d<    e       Z=ee   e<d<    edD  ci c]  } | e=j|                  |     c}       Z?dZ@ edddddd      ZA G d de      ZBe=j|                  j                          eAj                         D ]  \  ZEZFe=j                  eEeF         eH       ZIeHe j                  d      e<d<    G d d e2      ZKy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)DEFAULT_CHUNK_SIZE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     V/var/www/html/maxservice/venv/lib/python3.12/site-packages/aiohttp/web_fileresponse.pyr.   r.   J   s"    *IVN66Lr8   r.   _CLOSE_FUTURESc                   4    e Zd ZdZedddfdededededz  dedz  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dz  f fdZddd	edz  f fdZddded	eeej6                  dz  ej:                  edz  f   fdZded	eej@                  dz  ej:                  edz  f   fdZ!ddd	edz  f fdZ"dddej6                  d ej:                  d!edz  d	edz  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@   rA   )super__init__pathlibPath_path_chunk_size)selfr=   r>   r?   r@   rA   	__class__s         r9   rE   zFileResponse.__init___   s1     	vwG\\$'
%r8   fobjoffsetc                 F    |j                  |       |j                  |      S N)seekread)rJ   rL   rM   r>   s       r9   _seek_and_readzFileResponse._seek_and_readl   s    		&yy$$r8   writercountc           
        K   | j                   }t        j                         }|j                  d | j                  ||t        ||             d {   }|r_|j                  |       d {    |t        |      z
  }|dk  rn2|j                  d |j                  t        ||             d {   }|r_|j                          d {    |S 7 7 f7 %7 wNr   )
rI   asyncioget_event_looprun_in_executorrR   minwritelenrQ   drain)rJ   rS   rL   rM   rT   r>   loopchunks           r9   _sendfile_fallbackzFileResponse._sendfile_fallbackp   s      %%
%%'**$%%tVSU5K
 
 ,,u%%%CJ&Ez..tTYYJPU@VWWE  lln
 & XsO   ACCC*C+AC-C.C5CC	CCCCrequestr'   c                   K   t         |   |       d {   }|J t        s| j                  r| j	                  ||||       d {   S |j
                  }|j                  }|t        d      	 |j                  ||||       d {    t         | )          d {    |S 7 7 `7  # t        $ r  | j	                  ||||       d {  7  cY S w xY w7 8w)NzConnection lost)rD   preparer)   compressionr`   _loop	transportConnectionResetErrorsendfileNotImplementedError	write_eof)	rJ   ra   rL   rM   rT   rS   r^   rf   rK   s	           r9   	_sendfilezFileResponse._sendfile   s      ww//!!!))00vuMMM}}%%	&'899	N--	4??? g!!!# 0 N @" 	N00vuMMMM	N 	"so   CB'1CB)	)C3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rO   )is_weakvalue).0etagrl   rn   s     r9   	<genexpr>z+FileResponse._etag_match.<locals>.<genexpr>   s'      
)-$dllDJJ*$
s   ++)r\   rr   r   any)rl   rm   rn   s   ` `r9   _etag_matchzFileResponse._etag_match   s:    u:?uQx~~9 
16
 
 	
r8   last_modifiedc                    K   | j                  t        j                         d| _        || _        || _        t        |   |       d {   S 7 w)NF)
set_statusr!   status_code_length_checkrt   rx   rD   rc   )rJ   ra   rl   rx   rK   s       r9   _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rV   )rz   r#   r{   content_lengthrD   rc   )rJ   ra   rK   s     r9   _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)rn   Trb)_get_file_path_stat_encodingr.   r4   st_mtime_nsst_sizeif_matchrw   r5   if_unmodified_sincest_mtime	timestampif_none_matchr6   if_modified_sinceopenr   OSErrorosstatfilenor3   )rJ   ra   r   	file_pathstfile_encodingrl   ifmatch
unmodsinceifnonematchmodsincerL   s               r9   _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rO   )rH   ENCODING_EXTENSIONSitemswith_suffixsuffixr   r   lstatr   st_moder   )rJ   r   r   file_extensionr   compressed_pathr   s          r9   r   z)FileResponse._get_file_path_stat_encoding   s     JJ	-@-F-F-H 		>)NMO3'33I4D4D~4UVO'" >$**,2::&*B=	> > '> >		> ^^#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   ) rW   get_running_looprA   getr   ACCEPT_ENCODINGlowerrY   r   PermissionErrorrz   r   r{   rD   rc   r   r    r.   r4   r5   r   r6   r   r   r   r}   _prepare_open_filecloser:   addadd_done_callbackremove)rJ   ra   r^   r   response_resultrL   r   r   rl   rx   close_futurerK   s              r9   rc   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                 h  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(  r2|	}|J d| d||z   d	z
   d
| | j                  t        j                  <   |dk(  stK        |jL                  |      rt        | A  |       d {   S |	xs d}| jO                  ||||       d {   S # t        $ rZ d| | j                  t        j                  <   | j                  t        j                         t        | A  |       d {  7  cY S w xY w7 57 7 ow)Nzbytes */r   )      Fr   r   byteszbytes r   /)(_statusr   r   if_ranger   
http_rangestartstop
ValueError_headersr   CONTENT_RANGErz   r$   r{   rD   rc   rZ   r"   CONTENT_TYPEsysversion_infor*   guess_file_type
guess_typerH   FALLBACK_CONTENT_TYPEcontent_typeCONTENT_ENCODINGr   VARY_compressionr   rt   rx   r   ACCEPT_RANGESr   methodrk   )rJ   ra   rL   r   r   r?   	file_size
file_mtimerT   r   ifrangerngendguesser
real_startrM   rK   s                   r9   r   zFileResponse._prepare_open_file-  s     	KK
 '''G0J'BSBSBU4U6((		"%(("  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)))Aj5&81&<%=QykJ MM$,,-
 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
L2$K 2BL26L+7F'L2L.!L2 L0L2AL(L" L(%L2'L((L2.L20L2)%r/   r0   r1   r2   r   r   intstrr   rE   r	   r   r   rR   r   r`   rk   staticmethodtupler   boolrw   floatr}   r   r.   ioBufferedReaderr   stat_resultr   rF   rG   r   rc   r   __classcell__)rK   s   @r9   r&   r&   \   sT   6
 -!'+&& & 	&
 d
& $& 
&%2c7 %C %S %U %*24S'CFOR	*$,.sG=@IL	, 
 
E$),< 
t 
PT 
 
	.$	.25	.FK	.		$	..$.		$.6F$6F7:6F	R..5r~~sTzQ
6FpD"D	w||d"BNNC$J>	?D&+B] +B7Kd7R +BZvBvB vB NN	vB
 TzvB 
	$vB vBr8   r&   )LrW   r   r   rF   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   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setr:   Futurer&   )exts   0r9   <module>r      s    	 	  
     "      % K K ,  )
( (E7IdO#;<= rzz~~.BCD
E$K D"++uY - '6DEsS-
%
%c
**E  3  ,! %%"&! $     ! ! #7==? 4L)<34 -0EGNN4() 1GB> GBI Fs    F