U '7`A#@sddlZddlZddlZddlZddlZddlmZmZmZm Z m Z m Z m Z m Z mZddlmZddlmZddlmZddlmZmZmZmZddlmZd Zerdd lmZe e ege dfZ e!ej"#d Z$Gd d d eZ%dS)N) IO TYPE_CHECKINGAny AwaitableCallableListOptionalUnioncast)hdrs)AbstractStreamWriter) LooseHeaders)HTTPNotModifiedHTTPPartialContentHTTPPreconditionFailedHTTPRequestRangeNotSatisfiable)StreamResponse) FileResponse) BaseRequestZAIOHTTP_NOSENDFILEcseZdZdZdeeejfeee ee e ddfdd Z e e eeee dd d Zd e eeee d fd d Zd e e dfdd ZZS)rz,A response object can be used to send files.N)path chunk_sizestatusreasonheadersreturncs6tj|||dt|tr&t|}||_||_dS)N)rrr)super__init__ isinstancestrpathlibPath_path _chunk_size)selfrrrrr __class__K/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/web_fileresponse.pyr,s   zFileResponse.__init__)writerfobjoffsetcountrcs|j}t}|d|j|IdH|d|j|IdH}|r~||IdH||}|dkr`q~|d|jt||IdH}q:|IdH|S)Nr) r%asyncioget_event_looprun_in_executorseekreadwriteminZdrain)r&r+r,r-r.rloopchunkr)r)r*_sendfile_fallback<szFileResponse._sendfile_fallbackr)requestr,r-r.rc st|IdH}ts&tjdks&|jr<|||||IdHS|j}|j}z| ||||IdHWn*t k r|||||IdHYSXt IdH|S)N)) rprepare NOSENDFILEsys version_infoZ compressionr8Z_loop transportsendfileNotImplementedErrorZ write_eof)r&r9r,r-r.r+r6r@r'r)r* _sendfileRszFileResponse._sendfile)r9rc s\|j}d}d|jtjdkr>||jd}|r>|}d}t }| d|j IdH}|j }|dk r|j |kr|tjd|_t|IdHS|j}|dk r|j |kr|tjt|IdHStj|jkrtt|\} } | sd} d} n|r dnd} d} |j} |j} | }d}|j}|dksH|j |krTz|j}|j}|j }WnFt!k rd| |jtj"<|t#jt|IdHYSX|dk s|dk rT|dkr|dkr|| 7}|dkrd}| |}nt$|dk r|n| | |}|| krDd| |jtj"<|t#jt|IdHSt%j} || | r`| |_&| rr| |jtj'<|rtj|jtj(<|j |_)||_*d |jtj+<t,t-|}| t%jkrd .|||d | |jtj"<|j/tj0ks|j1d krt|IdHS| d|j2d IdH}|r"|}nd}z|4||||IdHWS| d|j3IdHXdS)NFgzipz.gzTzapplication/octet-streamzbytes */rbyteszbytes {}-{}/{}r )i0rb)5r$rgetr ZACCEPT_ENCODINGZ with_namenameis_filer/r0r1statZif_modified_sincest_mtimeZ timestampZ set_statusrZ status_codeZ _length_checkrr<Zif_unmodified_sincerZ CONTENT_TYPE mimetypesZ guess_typer!Z_statusst_sizeZif_rangeZ http_rangestartstop ValueErrorZ CONTENT_RANGErr5rZ content_typeZCONTENT_ENCODINGZVARYZ last_modifiedZcontent_lengthZ ACCEPT_RANGESr intformatmethodZ METH_HEADropencloserC)r&r9filepathrDZ gzip_pathr6stZmodsinceZ unmodsinceZctencodingZ should_set_ctr file_sizer.rPZifrangerngendZ real_startr,r-r'r)r*r<gs                zFileResponse.prepare)rrNN)__name__ __module__ __qualname____doc__r r!r"r#rSrrrr rrr8rCr< __classcell__r)r)r'r*r)s4  r)&r/rNosr"r>typingrrrrrrrr r rEr abcr ZtypedefsrZweb_exceptionsrrrrZ web_responser__all__Z web_requestrrFZ_T_OnChunkSentboolenvironrIr=rr)r)r)r*s ,