
    *Gj@                     :   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j9        :                    d                    Z;ee8         e<d<    e            Z=ee         e<d<    ed dD                       Z>dZ? edddddd          Z@ G d de          ZAe=jB        C                                 e@D                                D ]\  ZEZFe=G                    eEeF            eH            ZIeHe jJ        d                  e<d<    G d  d!e2          ZKdS )"    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_TYPESc                 4    i | ]}|t           j        |         S  )r*   encodings_map).0exts     `/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/aiohttp/web_fileresponse.py
<dictcomp>r1   8   s"    EEEsS-
%c
*EEE    ).br.gzzapplication/octet-streamr4   r3   z.bz2z.Zz.xz)zapplication/gzipzapplication/x-brotlizapplication/x-bzip2zapplication/x-compresszapplication/x-xzc                   b    e Zd ZdZ e            Z e            Z e            Z e            ZdS )_FileResponseResultz The result of the file response.N)	__name__
__module____qualname____doc__r   	SEND_FILENOT_ACCEPTABLEPRE_CONDITION_FAILEDNOT_MODIFIEDr,   r2   r0   r6   r6   J   sA        **ITVVN466466LLLr2   r6   _CLOSE_FUTURESc                   "    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j        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j        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                     t                                          |||           t          j        |          | _        || _        d S )N)rD   rE   rF   )super__init__pathlibPath_path_chunk_size)selfrB   rC   rD   rE   rF   	__class__s         r0   rJ   zFileResponse.__init___   sC     	vwGGG\$''
%r2   fobjoffsetc                 V    |                     |           |                    |          S N)seekread)rO   rQ   rR   rC   s       r0   _seek_and_readzFileResponse._seek_and_readl   s&    		&yy$$$r2   writercountc           
        K   | j         }t          j                    }|                    d | j        ||t          ||                     d {V }|rf|                    |           d {V  |t          |          z
  }|dk    rn2|                    d |j        t          ||                     d {V }|f|	                                 d {V  |S Nr   )
rN   asyncioget_event_looprun_in_executorrW   minwritelenrV   drain)rO   rX   rQ   rR   rY   rC   loopchunks           r0   _sendfile_fallbackzFileResponse._sendfile_fallbackp   s      %
%''**$%tVSU5K5K
 
 
 
 
 
 
 
  	X,,u%%%%%%%%%CJJ&Ezz..tTYJPU@V@VWWWWWWWWE  	X llnnr2   requestr'   c                   K   t                                          |           d {V }|J t          s| j        r|                     ||||           d {V S |j        }|j        }|t          d          	 |                    ||||           d {V  n.# t          $ r! |                     ||||           d {V cY S w xY wt                      
                                 d {V  |S )NzConnection lost)rI   preparer)   compressionre   _loop	transportConnectionResetErrorsendfileNotImplementedError	write_eof)	rO   rf   rQ   rR   rY   rX   rc   rk   rP   s	           r0   	_sendfilezFileResponse._sendfile   sS      www////////!!! 	N) 	N00vuMMMMMMMMM}%	&'8999	N--	4??????????" 	N 	N 	N00vuMMMMMMMMMMM	N gg!!!!!!!!!s   ;B (CC
etag_valueetags.weakc                     t          |          dk    r|d         j        t          k    rdS t           fd|D                       S )Nr   r   Tc              3   @   K   | ]}s|j         |j        k    V  d S rT   )is_weakvalue)r.   etagrq   rs   s     r0   	<genexpr>z+FileResponse._etag_match.<locals>.<genexpr>   sM       
 
)-$
FJl
J*$
 
 
 
 
 
r2   )ra   rw   r   any)rq   rr   rs   s   ` `r0   _etag_matchzFileResponse._etag_match   se    u::??uQx~994 
 
 
 
 
16
 
 
 
 
 	
r2   last_modifiedc                    K   |                      t          j                   d| _        || _        || _        t                                          |           d {V S )NF)
set_statusr!   status_code_length_checkrx   r|   rI   rh   )rO   rf   rq   r|   rP   s       r0   _not_modifiedzFileResponse._not_modified   s_       	3444"	* WW__W---------r2   c                    K   |                      t          j                   d| _        t	                                          |           d {V S r[   )r~   r#   r   content_lengthrI   rh   )rO   rf   rP   s     r0   _precondition_failedz!FileResponse._precondition_failed   sO       	.:;;;WW__W---------r2   accept_encodingc                    |                      |          \  }}}|st          j        d|dfS |j        dd|j        d}|j        x}(|                     ||d          st          j        d||fS |j        x}/|-|j	        |
                                k    rt          j        d||fS |j        x}	(|                     ||	d          rt          j        d||fS |j        x}
/|	-|j	        |

                                k    rt          j        d||fS |                    d          }t          t                     5  t#          j        |                                          }ddd           n# 1 swxY w Y   t          j        |||fS )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)rs   Trb)_get_file_path_stat_encodingr6   r<   st_mtime_nsst_sizeif_matchr{   r=   if_unmodified_sincest_mtime	timestampif_none_matchr>   if_modified_sinceopenr   OSErrorosstatfilenor;   )rO   rf   r   	file_pathstfile_encodingrq   ifmatch
unmodsinceifnonematchmodsincerQ   s               r0   _make_responsezFileResponse._make_response   s    (,'H'H(
 (
$	2}  	F&5tREE9992:999
 ''G4T=M=Me >N >
 >
4 ';T2}TT #66ZCj224444&;T2}TT #00K=$BRBR$ CS C
 C
= '3T2}LL !22X?#x113333&3T2}LL~~d##g 	( 	(
 ''B	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( #,dBEEs   :'E--E14E1c                    | j         }t                                          D ]\  }}||vr
|                    |j        |z             }t          t                    5  |                                }t          |j	                  r|||fcd d d            c S 	 d d d            n# 1 swxY w Y   |
                                }t          |j	                  r|nd |d fS rT   )rM   ENCODING_EXTENSIONSitemswith_suffixsuffixr   r   lstatr   st_moder   )rO   r   r   file_extensionr   compressed_pathr   s          r0   r   z)FileResponse._get_file_path_stat_encoding   sM    J	-@-F-F-H-H 		> 		>)NMO33'33I4D~4UVVO'"" > >$**,,2:&& >*B=	> > > > > > > > > >>> > > > > > > > > > > > > > > ^^#BJ//9yyT2tCCs   -B%%B)	,B)	c                 d  K   t          j                    }|j                            t          j        d                                          }	 |                    d | j        ||           d {V \  }}}}n# t          $ rI | 
                    t          j                   t                                          |           d {V cY S t          $ rI | 
                    t           j                   t                                          |           d {V cY S w xY w|t"          j        u rF| 
                    t          j                   t                                          |           d {V S |t"          j        u r|                     |           d {V S |t"          j        u r7|j        dd|j        d}|j        }	|                     |||	           d {V S |J 	 |                     ||||           d {V 	 |                    d |j                  }
t8                              |
           |
                    t8          j                   S # |                    d |j                  }
t8                              |
           |
                    t8          j                   w xY w)N r   r   ) r\   get_running_looprF   getr   ACCEPT_ENCODINGlowerr^   r   PermissionErrorr~   r   r   rI   rh   r   r    r6   r<   r=   r   r>   r   r   r   r   _prepare_open_filecloser?   addadd_done_callbackremove)rO   rf   rc   r   response_resultrQ   r   r   rq   r|   close_futurerP   s              r0   rh   zFileResponse.prepare   s     ')) "/--d.BBGGMMOO	2=A=Q=Qd)7O> > 8 8 8 8 8 84OT2}}  	2 	2 	2OOM566611111111111 	2 	2 	2 OOL455511111111111		2 1@@@OOM56661111111111FFF227;;;;;;;;;1>>>N===rz===JKM++GZOOOOOOOOO	B00$MRRRRRRRRR  //djAAL |,,,**>+@AAAA	  //djAAL |,,,**>+@AAAAs'   (A8 8AD
ADD&I AJ/r   r   c                   K   | j         }|j        }|j        }|}d }	|j        x}
||
                                k    r<	 |j        }|j        }	|j        }nm# t          $ r` d| | j	        t          j        <   |                     t          j                   t                                          |           d {V cY S w xY w|	|	dk     r||	|z  }	|	dk     rd}	||	z
  }nt#          ||n||          |	z
  }|	|k    r]d| | j	        t          j        <   |                     t          j                   t                                          |           d {V S t$          j        }|                     |           t          j        | j	        vrKt(          j        dk    rt,          j        }nt,          j        } || j                  d         pt4          | _        |r9|| j	        t          j        <   t          j        | j	        t          j        <   d| _        |j         dd|j        d| _!        || _"        || _#        d| j	        t          j$        <   |t$          j        k    r)|	}|J d| d||z   d	z
   d
| | j	        t          j        <   |dk    stK          |j&        |          r't                                          |           d {V S |	pd}| '                    ||||           d {V S )Nzbytes */r   )      Fr   r   byteszbytes r   /)(_statusr   r   if_ranger   
http_rangestartstop
ValueError_headersr   CONTENT_RANGEr~   r$   r   rI   rh   r_   r"   CONTENT_TYPEsysversion_infor*   guess_file_type
guess_typerM   FALLBACK_CONTENT_TYPEcontent_typeCONTENT_ENCODINGr   VARY_compressionr   rx   r|   r   ACCEPT_RANGESr   methodrp   )rO   rf   rQ   r   r   rD   	file_size
file_mtimerY   r   ifrangerngendguesser
real_startrR   rP   s                   r0   r   zFileResponse._prepare_open_file-  sN      	K
 ''G0J'BSBSBUBU4U4U6(	"%( 6 6 6 5Ky4J4Jd01 > JKKK"WW__W555555555556   199Y&Eqyy !"%-EE 3?CC	9MMPUU  I%% 9O98N8NDM$"45OO$B$NOOO!&!9!99999999+7 '''
 DM117**'7'2 '
 3 3A 6 O:OD 	&3@DM$/0'+';DM$)$ !&D~888"*888	'#,3d()'333J)))JJJj5&81&<JJyJJ M$,-
 A::+GNFCC:111111111 !^^GT65AAAAAAAAAs    A A'C ?C )%r7   r8   r9   r:   r   r   intstrr   rJ   r	   r   r   rW   r   re   rp   staticmethodtupler   boolr{   floatr   r   r6   ioBufferedReaderr   stat_resultr   rK   rL   r   rh   r   __classcell__)rP   s   @r0   r&   r&   \   s^       6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 6F 6F 6FpD"D	w|d"BNC$J>	?D D D D&+B] +B7Kd7R +B +B +B +B +B +BZvBvB vB N	vB
 TzvB 
	$vB vB vB vB vB vB vB vB vB vBr2   r&   )Lr\   r   r   rK   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*   r   r   ADDITIONAL_CONTENT_TYPESr6   r-   clearr   r   	extensionadd_typesetr?   Futurer&   r,   r2   r0   <module>r      s    				 				  



                           " " " " " "                                     % % % % % % K K K K K K K K K K K K , , , , , , , ,                ) ( ( ( ( (
 )(((((( (E7IdO#;<= $rz~~.BCCDD
E$K D D D"+)++uY - - - '&EEnEEE   3  ,+! %%"&!       $      ! ! # # #7==?? 4 4L)<3333 -0CEEGN4() 1 1 1GB GB GB GB GB> GB GB GB GB GBr2   