HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/aiohttp/__pycache__/web_fileresponse.cpython-310.pyc
o

���gx@�@s�UddlZddlZddlZddlZddlZddlmZddlmZm	Z	ddl
mZddlm
Z
ddlmZddlmZmZmZmZmZmZmZmZmZmZmZmZmZdd	lmZdd
l m!Z!ddl"m#Z#m$Z$m%Z%ddl&m'Z'm(Z(dd
l)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ddl0m1Z1dZ2er�ddl3m4Z4eee5gedfZ6e7ej8�9d��Z:ee7e;d<e�Z<eee;d<edd�dD��Z=dZ>edddddd��Z?Gdd�de�Z@e<jA�B�e?�C�D]
\ZDZEe<�FeDeE�q�eG�ZHeejIde;d <Gd!d"�d"e1�ZJdS)#�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_TYPEScCsi|]}|tj|�qS�)r(�
encodings_map)�.0�extr)r)�C/usr/local/lib/python3.10/dist-packages/aiohttp/web_fileresponse.py�
<dictcomp>8sr.)�.br�.gzzapplication/octet-streamr0r/z.bz2z.Zz.xz)zapplication/gzipzapplication/x-brotlizapplication/x-bzip2zapplication/x-compresszapplication/x-xzc@s(eZdZdZe�Ze�Ze�Ze�ZdS)�_FileResponseResultz The result of the file response.N)	�__name__�
__module__�__qualname__�__doc__r�	SEND_FILE�NOT_ACCEPTABLE�PRE_CONDITION_FAILED�NOT_MODIFIEDr)r)r)r-r1Js
r1�_CLOSE_FUTURESc
s�eZdZdZ				d/dedededeed	eed
df�fdd�
Z	d
e
ededed
efdd�Z
ded
e
ededed
ef
dd�Zddd
e
ededed
ef
�fdd�Zededeedfded
efdd��Zdddeded
eef�fd d!�Zddd
eef�fd"d#�Zddd$ed
eeeejejeeffd%d&�Zd$ed
eeej ejeeffd'd(�Z!ddd
eef�fd)d*�Z"ddd
ejd+ejd,eed
eef
�fd-d.�Z#�Z$S)0r$z,A response object can be used to send files.���N�path�
chunk_size�status�reason�headers�returncs(t�j|||d�t�|�|_||_dS)N)r?r@rA)�super�__init__�pathlib�Path�_path�_chunk_size)�selfr=r>r?r@rA��	__class__r)r-rD_s
zFileResponse.__init__�fobj�offsetcCs|�|�|�|�S�N)�seek�read)rIrLrMr>r)r)r-�_seek_and_readls

zFileResponse._seek_and_read�writer�countc�s��|j}t��}|�d|j|||�IdH}|r8|�|�IdH||}|dkr(n|�d|jt||��IdH}|s|��IdH|S�Nr)	rH�asyncio�get_event_loop�run_in_executorrQ�writerP�min�drain)rIrRrLrMrSr>�loop�chunkr)r)r-�_sendfile_fallbackps�
��zFileResponse._sendfile_fallback�requestr%c	�s��t��|�IdH}|dusJ�ts|jr |�||||�IdHS|j}|j}|dus,J�z
|�||||�IdHWntyM|�||||�IdHYSwt��	�IdH|SrN)
rC�preparer'�compressionr]�_loop�	transport�sendfile�NotImplementedError�	write_eof)rIr^rLrMrSrRr[rbrJr)r-�	_sendfile�s�
�zFileResponse._sendfile�
etag_value�etags.�weakcs6t|�dkr|djtkrdSt��fdd�|D��S)NrrTc3s$�|]
}�s	|js|j�kVqdSrN)�is_weak�value)r+�etag�rgrir)r-�	<genexpr>�s���
�z+FileResponse._etag_match.<locals>.<genexpr>)�lenrkr�any)rgrhrir)rmr-�_etag_match�s
�zFileResponse._etag_match�
last_modifiedc�s2�|�tj�d|_||_||_t��|�IdHS)NF)�
set_statusr�status_code�
_length_checkrlrrrCr_)rIr^rgrrrJr)r-�
_not_modified�s�zFileResponse._not_modifiedc�s&�|�tj�d|_t��|�IdHSrT)rsr!rt�content_lengthrCr_)rIr^rJr)r-�_precondition_failed�s�z!FileResponse._precondition_failed�accept_encodingcCsB|�|�\}}}|stjd|dfS|jd�d|jd��}|j}dur2|j||dd�s2tjd||fS|j}durK|durK|j	|�
�krKtjd||fS|j}	dura|j||	dd�ratjd||fS|j
}
durz|	durz|j	|
�
�krztjd||fS|�d�}tt��t�|���}Wd�n1s�wYtj|||fS)aReturn 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)riT�rb)�_get_file_path_stat_encodingr1r7�st_mtime_ns�st_size�if_matchrqr8�if_unmodified_since�st_mtime�	timestamp�
if_none_matchr9�if_modified_since�openr�OSError�os�stat�filenor6)rIr^ry�	file_path�st�
file_encodingrg�ifmatch�
unmodsince�ifnonematch�modsincerLr)r)r-�_make_response�s6

���

�zFileResponse._make_responsec	Cs�|j}t��D]<\}}||vrq|�|j|�}tt��|��}t|j	�r4|||fWd�SWd�n1s>wYq|�
�}t|j	�rR||dfSd|dfSrN)rG�ENCODING_EXTENSIONS�items�with_suffix�suffixrr��lstatr�st_moder�)rIryr��file_extensionr��compressed_pathr�r)r)r-r}�s

���z)FileResponse._get_file_path_stat_encodingc
�s��t��}|j�tjd���}z|�d|j||�IdH\}}}}Wn/t	y9|�
tj�t
��|�IdHYStyP|�
tj�t
��|�IdHYSw|tjure|�
tj�t
��|�IdHS|tjurr|�|�IdHS|tjur�|jd�d|jd��}|j}	|�|||	�IdHS|dus�J�z|�||||�IdHW|�d|j�}
t�|
�|
�tj�S|�d|j�}
t�|
�|
�tj�w)N�rzr{) rU�get_running_looprA�getr�ACCEPT_ENCODING�lowerrWr��PermissionErrorrsrrtrCr_r�rr1r7r8rxr9r~rr�rv�_prepare_open_file�closer:�add�add_done_callback�remove)rIr^r[ry�response_resultrLr�r�rgrr�close_futurerJr)r-r_�s@�
��



�
zFileResponse.preparer�r�c�s6�|j}|j}|j}|}d}	|j}
dus||
��kr�z|j}|j}	|j}Wn!tyGd|��|j	t
j<|�t
j�t��|�IdHYSw|	dur�|	dkrc|durc|	|7}	|	dkr^d}	||	}n
t|durj|n||�|	}|	|kr�d|��|j	t
j<|�t
j�t��|�IdHStj}|�|�t
j|j	vr�tjdkr�tj}
ntj}
|
|j�dp�t|_|r�||j	t
j<t
j|j	t
j<d|_|j d�d|jd��|_!||_"||_#d|j	t
j$<|tjkr�|	}|dus�J�d�%|||d	|�|j	t
j<|dk�st&|j'|��rt��|�IdHS|	�pd}|�(||||�IdHS)
Nzbytes */r)��
Frzr{�byteszbytes {}-{}/{}r))�_statusrr��if_ranger��
http_range�start�stop�
ValueError�_headersr�
CONTENT_RANGErsr"rtrCr_rYr �CONTENT_TYPE�sys�version_infor(�guess_file_type�
guess_typerG�FALLBACK_CONTENT_TYPE�content_type�CONTENT_ENCODINGr��VARY�_compressionr~rlrrrw�
ACCEPT_RANGES�formatr�methodrf)rIr^rLr�r�r?�	file_size�
file_mtimerSr��ifrange�rng�end�guesser�
real_startrMrJr)r-r�,sj�

�

�



�
zFileResponse._prepare_open_file)r;r<NN)%r2r3r4r5r�intr�strrrDrr
r�rQrr]rf�staticmethodrr�boolrq�floatrvrxr1�io�BufferedReaderr��stat_resultr�rErFr}r_r��
__classcell__r)r)rJr-r$\s��������
����
������$���������
�8�
�-�����r$)KrUr�r�rEr��
contextlibr�enumrr�	mimetypesrr�r�typesr�typingrr	r
rrr
rrrrrrrr�r�abcr�helpersrrr�typedefsrr�web_exceptionsrrrr r!r"�web_responser#�__all__�web_requestr%r��_T_OnChunkSentr��environr�r'�__annotations__r(r�r��ADDITIONAL_CONTENT_TYPESr1r*�clearr�r��	extension�add_type�setr:�Futurer$r)r)r)r-�<module>sR
< ���