
    hx@                     6   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j8        9                    d                    Z:ee7         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          Z@e<jA        B                                 e?C                                D ]\  ZDZEe<F                    eDeE            eG            ZHee jI        d                  e;d<    G d  d!e1          ZJd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)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     Z/var/www/html/prod/cognitive/venv/lib/python3.11/site-packages/aiohttp/web_fileresponse.py
<dictcomp>r0   8   s"    EEEsS-
%c
*EEE    ).br.gzzapplication/octet-streamr3   r2   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+   r1   r/   r5   r5   J   sA        **ITVVN466466LLLr1   r5   _CLOSE_FUTURESc                   d    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j                 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j        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                     t                                          |||           t          j        |          | _        || _        d S )N)rD   rE   rF   )super__init__pathlibPath_path_chunk_size)selfrB   rC   rD   rE   rF   	__class__s         r/   rJ   zFileResponse.__init___   sC     	vwGGG\$''
%r1   fobjoffsetc                 V    |                     |           |                    |          S N)seekread)rO   rQ   rR   rC   s       r/   _seek_and_readzFileResponse._seek_and_readl   s&    		&yy$$$r1   writercountc                 p  K   | j         }t          j                    }|                    d | j        |||           d {V }|rY|                    |           d {V  ||z
  }|dk    rn2|                    d |j        t          ||                     d {V }|Y|                                 d {V  |S Nr   )	rN   asyncioget_event_looprun_in_executorrW   writerV   mindrain)rO   rX   rQ   rR   rY   rC   loopchunks           r/   _sendfile_fallbackzFileResponse._sendfile_fallbackp   s      %
%''**$%tVZ
 
 
 
 
 
 
 
  	X,,u%%%%%%%%%J&Ezz..tTYJPU@V@VWWWWWWWWE  	X llnnr1   requestr&   c                   K   t                                          |           d {V }|J t          s| j        r|                     ||||           d {V S |j        }|j        }|J 	 |                    ||||           d {V  n.# t          $ r! |                     ||||           d {V cY S w xY wt                      	                                 d {V  |S rT   )
rI   preparer(   compressionrd   _loop	transportsendfileNotImplementedError	write_eof)	rO   re   rQ   rR   rY   rX   rb   rj   rP   s	           r/   	_sendfilezFileResponse._sendfile   sJ      www////////!!! 	N) 	N00vuMMMMMMMMM}%	$$$	N--	4??????????" 	N 	N 	N00vuMMMMMMMMMMM	N gg!!!!!!!!!s   .B (B87B8
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-   etagro   rq   s     r/   	<genexpr>z+FileResponse._etag_match.<locals>.<genexpr>   sM       
 
)-$
FJl
J*$
 
 
 
 
 
r1   )lenru   r   any)ro   rp   rq   s   ` `r/   _etag_matchzFileResponse._etag_match   se    u::??uQx~994 
 
 
 
 
16
 
 
 
 
 	
r1   last_modifiedc                    K   |                      t          j                   d| _        || _        || _        t                                          |           d {V S )NF)
set_statusr    status_code_length_checkrv   r{   rI   rg   )rO   re   ro   r{   rP   s       r/   _not_modifiedzFileResponse._not_modified   s_       	3444"	* WW__W---------r1   c                    K   |                      t          j                   d| _        t	                                          |           d {V S r[   )r}   r"   r~   content_lengthrI   rg   )rO   re   rP   s     r/   _precondition_failedz!FileResponse._precondition_failed   sO       	.:;;;WW__W---------r1   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)rq   Trb)_get_file_path_stat_encodingr5   r;   st_mtime_nsst_sizeif_matchrz   r<   if_unmodified_sincest_mtime	timestampif_none_matchr=   if_modified_sinceopenr   OSErrorosstatfilenor:   )rO   re   r   	file_pathstfile_encodingro   ifmatch
unmodsinceifnonematchmodsincerQ   s               r/   _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          r/   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   rg   r   r   r5   r;   r<   r   r=   r   r   r   r   _prepare_open_filecloser>   addadd_done_callbackremove)rO   re   rb   r   response_resultrQ   r   r   ro   r{   close_futurerP   s              r/   rg   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    r5|	}|J d%                    |||z   d	z
  |          | j	        t          j        <   |dk    stM          |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   rg   r`   r!   CONTENT_TYPEsysversion_infor)   guess_file_type
guess_typerM   FALLBACK_CONTENT_TYPEcontent_typeCONTENT_ENCODINGr   VARY_compressionr   rv   r{   r   ACCEPT_RANGESformatr   methodrn   )rO   re   rQ   r   r   rD   	file_size
file_mtimerY   r   ifrangerngendguesser
real_startrR   rP   s                   r/   r   zFileResponse._prepare_open_file,  sJ      	K
#''G0J'BSBSBUBU4U4U6(	%(X 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)))0@0G0GJ.2I1 1DM$,-
 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 )r@   rA   NN)%r6   r7   r8   r9   r   intr   strr   rJ   r	   r   r   rW   r   rd   rn   staticmethodr   r   boolrz   floatr   r   r5   ioBufferedReaderr   stat_resultr   rK   rL   r   rg   r   __classcell__)rP   s   @r/   r%   r%   \   sb       66
 % $*.& && & 	&
 & ,'& 
& & & & & &%2c7 %C %S %U % % % %*24S'CFOR	   *$,.sG=@IL	     * 
 
E$),< 
t 
PT 
 
 
 \
	.$	.25	.FK	.	&	'	. 	. 	. 	. 	. 	..$.	&	'. . . . . .6F$6F7:6F	Xb&78".(SV-W
6F 6F 6F 6FpD"D	x%r~x}D	ED D D D&+B] +Bx@T7U +B +B +B +B +B +BZvBvB vB N	vB
  }vB 
&	'vB vB vB vB vB vB vB vB vB vBr1   r%   )Kr\   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   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_TYPESr5   r,   clearr   r   	extensionadd_typesetr>   Futurer%   r+   r1   r/   <module>r      s    				 				  



                           " " " " " "                                     % % % % % % 7 7 7 7 7 7 7 7 7 7 , , , , , , , ,                ) ( ( ( ( (
 )(((((( (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FB FB FB FB FB> FB FB FB FB FBr1   