
­­­­­­­­­­­­­­­­­­
<!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rd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|\}	}
|	sd}	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 rd}|| }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'< |rtj| jtj(< |j| _)|| _*d	| jtj+< t,t-|}|t%jkrd
.||| 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    ,