Viewing File: /opt/alt/python35/lib64/python3.5/site-packages/aiohttp/__pycache__/web_fileresponse.cpython-35.pyc



Z@sddlZddlZddlZddlmZddlmZmZddlm	Z	ddl
mZddlm
Z
mZmZmZddlmZdZeejjd
ZGddde	ZGd
d	d	eZdS)N)hdrs)
set_exception
set_result)StreamWriter)
server_logger)HTTPNotModifiedHTTPOkHTTPPartialContentHTTPRequestRangeNotSatisfiable)StreamResponseFileResponseZAIOHTTP_NOSENDFILEcs[eZdZfddZddZddZfddZd	d
dZS)SendfileStreamWritercs g|_tj||dS)N)_sendfile_buffersuper__init__)selfargskwargs)	__class__/web_fileresponse.pyrs	zSendfileStreamWriter.__init__cCs)|jt|7_|jj|dS)N)output_sizelenrappend)rchunkrrr_writeszSendfileStreamWriter._writec
Cs|r|j||jr#dSy.tj||||}|dkrP|}WnSttfk
rqd}Yn6tk
r}	zt||	dSWYdd}	~	XnX||kr|j||j	||||||||d	n
t
|ddS)NrT)Z
remove_writer	cancelledossendfileBlockingIOErrorInterruptedError	ExceptionrZ
add_writer_sendfile_cbr)
rfutout_fdin_fdoffsetcountloopZ
registerednexcrrrr#!s"



z!SendfileStreamWriter._sendfile_cbc
s|jjdj}|jd|j}|j}|j}|j}dj|j}zyM|j	||IdH|j
}	|j|	|||||d|	IdHWn,tk
rt
jd|jjYnXWd|jX|j|7_tjIdHdS)NsocketFzSocket error)	transportget_extra_infodupsetblockingfilenotellr)joinrZsock_sendallZ
create_futurer#r"rdebugcloserr	write_eof)
rfobjr(Z
out_socketr%r&r'r)datar$)rrrr8s$
	


zSendfileStreamWriter.sendfiler-csdS)Nr)rrrrrr7OszSendfileStreamWriter.write_eof)__name__
__module____qualname__rrr#rr7rr)rrrs
rcseZdZdZd
fddZfddZfdd	Zeed
rje	rjeZ
neZ
fddZS)r
z,A response object can be used to send files.icsGtj||t|tr1tj|}||_||_dS)N)rr
isinstancestrpathlibZPath_path_chunk_size)rpath
chunk_sizerr)rrrrVs
	zFileResponse.__init__cs|j}|jds-|jddkrJ|j|||IdH}nKt|j||j}||_tj|IdH|j	||IdH|S)NZ
sslcontextr,)
r.r/_sendfile_fallbackrprotocolr)Z_payload_writerrpreparer)rrequestr8r(r.writer)rrr_sendfile_system_s		zFileResponse._sendfile_systemcstj|IdH}|j}|j|}xE|j|IdH||}|dkr[P|jt||}q2W|jIdH|S)Nr)rrGrBreadwriteminZdrain)rrHr8r(rIrDr)rrrrE|s		
zFileResponse._sendfile_fallbackrcs|j}d}d|jjtjdkr[|j|jd}|jr[|}d}|j}|j	}|dk	r|j
|jkr|jt
jd|_tj|IdHStj|jkrtjt|\}}|sd}d}	n|r
dnd}d}	tj}
|j}|}y|j}
|
j}|
j}Wn7tk
r|jtjtj|IdHSYnX|dk	s|dk	r
|dkr|dkr||}|}n|p||}|||kr||}||kr
d}||krtj}
|j|
|	r;||_|rQ||jtj<|rjtj|jtj <|j
|_!||_"|r|j#d2}|r|j$||j%|||IdHSWdQRXtj|IdHS)	NFgzipz.gzTzapplication/octet-streamrrb)&rAZheadersgetrZACCEPT_ENCODINGZ	with_namenameis_filestatZif_modified_sincest_mtimeZ	timestampZ
set_statusrZstatus_codeZ
_length_checkrrGZCONTENT_TYPE	mimetypesZ
guess_typer?r	st_sizeZ
http_rangestartstop
ValueErrorrr
Zcontent_typeZCONTENT_ENCODINGZVARYZ
last_modifiedZcontent_lengthopenseek	_sendfile)rrHfilepathrNZ	gzip_pathstZmodsincectencodingZ
should_set_ctstatusZ	file_sizer(rngrXendr8)rrrrGsp		!						




	
		
zFileResponse.preparei)r:r;r<__doc__rrJrEhasattrr
NOSENDFILEr]rGrr)rrr
Ss		)r
)rVrr@rOrZhelpersrrZhttp_writerrlogrZweb_exceptionsrr	r
rZweb_responser__all__boolenvironrQrgrr
rrrr<module>s"?
Back to Directory File Manager