B `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__s/private/var/folders/7j/8686xlfs15q3tgljmghtvg0r0000gn/T/pip-target-isidps9b/lib/python/aiohttp/web_fileresponse.pyr,s   zFileResponse.__init__)writerfobjoffsetcountrcs|j}t}|d|j|IdH|d|j|IdH}xF|r||IdH||}|dkrbP|d|jt||IdH}q||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 |krPy|j}|j}|j }WnBt!k rd| |jtj"<|t#jt|IdHSX|dk s|dk rP|dkr|dkr|| 7}|dkrd}| |}nt$|dk r|n| | |}|| kr@d| |jtj"<|t#jt|IdHSt%j} || | r\| |_&| rn| |jtj'<|rtj|jtj(<|j |_)||_*d |jtj+<t,t-|}| t%jkrd .|||d | |jtj"<|j/tj0ks|j1d krt|IdHS| d|j2d IdH}|r|}nd}z|3||||IdHS| d|j4IdHXdS)NFgzipz.gzTzapplication/octet-streamzbytes */rbyteszbytes {}-{}/{}r )i0rb)5r$rgetr ACCEPT_ENCODING with_namenameis_filer.r/r0statZif_modified_sincest_mtime timestampZ set_statusr status_codeZ _length_checkrr;Zif_unmodified_sincer CONTENT_TYPE mimetypes guess_typer!Z_statusst_sizeZif_rangeZ http_rangestartstop ValueErrorZ CONTENT_RANGErr4r content_typeZCONTENT_ENCODINGZVARYZ last_modifiedcontent_lengthZ ACCEPT_RANGESr intformatmethodZ METH_HEADropenrEclose)r&r8filepathrFZ gzip_pathr5stZmodsinceZ unmodsincectencodingZ should_set_ctr file_sizer-rXZifrangerngendZ real_startr+r,)r'r(r)r;gs              zFileResponse.prepare)rrNN)__name__ __module__ __qualname____doc__r r!r"r#r]rrrr rrr7rEr; __classcell__r(r()r'r)r)s  r)&r.rUosr"r>typingrrrrrrrr r rGr abcr ZtypedefsrZweb_exceptionsrrrrZ web_responser__all__Z web_requestrrHZ_T_OnChunkSentboolenvironrKr=rr(r(r(r)s ,