
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    'â7`A#  ã                   @   sê   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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 ddlmZmZmZmZ ddlmZ d	Zer°dd
lmZ ee
ege	d f  Z e!ej" #d¡ƒZ$G dd„ deƒZ%dS )é    N)	ÚIOÚTYPE_CHECKINGÚAnyÚ	AwaitableÚCallableÚListÚOptionalÚUnionÚcasté   )Úhdrs)ÚAbstractStreamWriter)ÚLooseHeaders)ÚHTTPNotModifiedÚHTTPPartialContentÚHTTPPreconditionFailedÚHTTPRequestRangeNotSatisfiable)ÚStreamResponse)ÚFileResponse)ÚBaseRequestZAIOHTTP_NOSENDFILEc                       s”   e Zd ZdZdeeejf eee	e e	e
 ddœ‡ fdd„Zeee eeedœd	d
„Zdee eeedœ‡ fdd„Zde	e dœ‡ fdd„Z‡  ZS )r   z,A response object can be used to send files.é   éÈ   N)ÚpathÚ
chunk_sizeÚstatusÚreasonÚheadersÚreturnc                    s6   t ƒ j|||d� t|tƒr&t |¡}|| _|| _d S )N)r   r   r   )ÚsuperÚ__init__Ú
isinstanceÚstrÚpathlibÚPathÚ_pathÚ_chunk_size)Úselfr   r   r   r   r   ©Ú	__class__© úK/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/web_fileresponse.pyr   ,   s
    

zFileResponse.__init__)ÚwriterÚfobjÚoffsetÚcountr   c                 Ã   s�   | j }t ¡ }| d |j|¡I d H  | d |j|¡I d H }|r~| |¡I d H  || }|dkr`q~| d |jt||ƒ¡I d H }q:| ¡ I d H  |S )Nr   )	r%   ÚasyncioÚget_event_loopÚrun_in_executorÚseekÚreadÚwriteÚminZdrain)r&   r+   r,   r-   r.   r   ÚloopÚchunkr)   r)   r*   Ú_sendfile_fallback<   s    zFileResponse._sendfile_fallbackr   )Úrequestr,   r-   r.   r   c              	   ƒ   sº   t ƒ  |¡I d H }|d k	st‚ts2tjdk s2| jrH|  ||||¡I d H S |j}|j	}|d k	s`t‚z| 
||||¡I d H  W n* tk
r¤   |  ||||¡I d H  Y S X t ƒ  ¡ I d H  |S )N)é   é   )r   ÚprepareÚAssertionErrorÚ
NOSENDFILEÚsysÚversion_infoÚcompressionr8   Z_loopÚ	transportÚsendfileÚNotImplementedErrorZ	write_eof)r&   r9   r,   r-   r.   r+   r6   rB   r'   r)   r*   Ú	_sendfileR   s    zFileResponse._sendfile)r9   r   c              
   ƒ   s\  | j }d}d|j tjd¡kr>| |jd ¡}| ¡ r>|}d}t 	¡ }| 
d |j¡I d H }|j}|d k	rš|j| ¡ krš|  tj¡ d| _tƒ  |¡I d H S |j}|d k	rÔ|j| ¡ krÔ|  tj¡ tƒ  |¡I d H S tj| jk�rt t|ƒ¡\}	}
|	süd}	d}n|�rdnd }
d}| j}|j}|}d }|j}|d k�sH|j| ¡ k�rTz|j}|j}|j }W nF t!k
�r¤   d|› �| jtj"< |  t#j¡ tƒ  |¡I d H  Y S X |d k	�sº|d k	�rT|dk �rî|d k�rî||7 }|dk �räd}|| }nt$|d k	�rþ|n||ƒ| }||k�rDd|› �| jtj"< |  t#j¡ tƒ  |¡I d H S t%j}|  |¡ |�r`|	| _&|
�rr|
| jtj'< |�r†tj| jtj(< |j| _)|| _*d	| jtj+< t,t-|ƒ}|t%jk�rÔd
 .||| d |¡| jtj"< |j/tj0k�sî| j1dk�r tƒ  |¡I d H S | 
d |j2d¡I d H }|�r"|}nd}z|  4||||¡I d H W ¢S | 
d |j3¡I d H  X d S )NFÚgzipÚ z.gzTzapplication/octet-streamzbytes */r   Úbyteszbytes {}-{}/{}r   )éÌ   i0  Úrb)5r$   r   Úgetr   ZACCEPT_ENCODINGÚ	with_nameÚnameÚis_filer/   r0   r1   ÚstatZif_modified_sinceÚst_mtimeÚ	timestampZ
set_statusr   Zstatus_codeZ_length_checkr   r<   Zif_unmodified_sincer   ZCONTENT_TYPEÚ	mimetypesZ
guess_typer!   Z_statusÚst_sizeZif_rangeZ
http_rangeÚstartÚstopÚ
ValueErrorZCONTENT_RANGEr   r5   r   Úcontent_typeZCONTENT_ENCODINGZVARYZlast_modifiedZcontent_lengthZACCEPT_RANGESr
   ÚintÚformatÚmethodZ	METH_HEADr   ÚopenÚcloserE   )r&   r9   ÚfilepathrF   Z	gzip_pathr6   ÚstZmodsinceZ
unmodsinceÚctÚencodingZshould_set_ctr   Ú	file_sizer.   rT   ZifrangeÚrngÚendZ
real_startr,   r-   r'   r)   r*   r<   g   sœ    




ÿ



 
 ÿzFileResponse.prepare)r   r   NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r!   r"   r#   rX   r   r   r   r   r   r   r8   rE   r<   Ú__classcell__r)   r)   r'   r*   r   )   s4       úù   þ   þr   )&r/   rR   Úosr"   r?   Útypingr   r   r   r   r   r   r   r	   r
   rG   r   Úabcr   Ztypedefsr   Zweb_exceptionsr   r   r   r   Zweb_responser   Ú__all__Zweb_requestr   rH   Z_T_OnChunkSentÚboolÚenvironrK   r>   r   r)   r)   r)   r*   Ú<module>   s    ,