
    bCi1-                     `   % S SK r S SKrS SKrS SKrS SKJrJrJrJrJ	r	J
r
JrJrJrJrJrJr  SSKJr  SSKJr  SSKJrJrJr  SSKJrJr  SSKJrJrJrJ r   SS	K!J"r"  S
r#\(       a  SSK$J%r%  \\	\&/\S   4      r'\(" \RR                  RU                  S5      5      r+\
\(   \,S'    " S S\"5      r-g)    N)IOTYPE_CHECKINGAny	AwaitableCallableFinalIteratorListOptionalTupleUnioncast   )hdrs)AbstractStreamWriter)ETAG_ANYETagmust_be_empty_body)LooseHeadersPathLike)HTTPNotModifiedHTTPPartialContentHTTPPreconditionFailedHTTPRequestRangeNotSatisfiable)StreamResponse)FileResponse)BaseRequestAIOHTTP_NOSENDFILE
NOSENDFILEc                     ^  \ rS rSrSr    SS\S\S\S\\   S\\	   S	S4U 4S
 jjjr
S\S\\   S\S\S	\4
S jrSSS\\   S\S\S	\4
U 4S jjr\S\S\\S4   S	\4S j5       rSSS\S\S	\\   4U 4S jjrSSS	\\   4U 4S jjrS\S	\\R2                  \R6                  \4   4S jrSSS	\\   4U 4S jjrSrU =r$ )r   ,   z,A response object can be used to send files.Npath
chunk_sizestatusreasonheadersreturnc                 d   > [         TU ]  X4US9  [        R                  " U5      U l        X l        g )N)r$   r%   r&   )super__init__pathlibPath_path_chunk_size)selfr"   r#   r$   r%   r&   	__class__s         R/home/james-whalen/.local/lib/python3.13/site-packages/aiohttp/web_fileresponse.pyr*   FileResponse.__init__/   s-     	wG\\$'
%    writerfobjoffsetcountc                   #    U R                   n[        R                  " 5       nUR                  S UR                  U5      I S h  vN   UR                  S UR
                  U5      I S h  vN nU(       a[  UR                  U5      I S h  vN   XE-
  nUS::  a  O7UR                  S UR
                  [        XT5      5      I S h  vN nU(       a  M[  UR                  5       I S h  vN   U$  N N Nd N- N7fNr   )	r.   asyncioget_event_looprun_in_executorseekreadwritemindrain)r/   r4   r5   r6   r7   r#   loopchunks           r1   _sendfile_fallbackFileResponse._sendfile_fallback<   s      %%
%%'""4F;;;**4JGG,,u%%%&Ez..tTYYJ@VWWE e lln 	<G% Xs`   AC4C*$C4)C,*C4	C.
8C4C0C4C4#C2$C4,C4.C40C42C4requestr   c                   >#    [         TU ]  U5      I S h  vN nUc   e[        (       d  U R                  (       a  U R	                  XRX45      I S h  vN $ UR
                  nUR                  nUc   e UR                  XrX45      I S h  vN   [         TU ]%  5       I S h  vN   U$  N NV N ! [         a    U R	                  XRX45      I S h  vN  s $ f = f N77fN)
r)   preparer   compressionrD   _loop	transportsendfileNotImplementedError	write_eof)	r/   rF   r5   r6   r7   r4   rB   rL   r0   s	           r1   	_sendfileFileResponse._sendfileR   s      ww//!!!:))00vMMM}}%%	$$$	N--	??? g!!!! 0 N @" 	N00vMMMM	N 	"so   CB&:CB(!C4B, 	B*
B, CC C(C*B, ,CCCCCC
etag_valueetags.c                 |   ^  [        U5      S:X  a  US   R                  [        :X  a  g[        U 4S jU 5       5      $ )Nr   r   Tc              3   f   >#    U  H&  oR                   (       a  M  UR                  T:H  v   M(     g 7frH   )is_weakvalue).0etagrR   s     r1   	<genexpr>2FileResponse._strong_etag_match.<locals>.<genexpr>k   s!     R\\+4::+s   11)lenrW   r   any)rR   rS   s   ` r1   _strong_etag_matchFileResponse._strong_etag_matchg   s1    u:?uQx~~9RRRRr3   last_modifiedc                    >#    U R                  [        R                  5        SU l        X l        X0l        [        TU ]  U5      I S h  vN $  N7f)NF)
set_statusr   status_code_length_checkrY   r`   r)   rI   )r/   rF   rR   r`   r0   s       r1   _not_modifiedFileResponse._not_modifiedm   sD      	334"	* W_W----s   AAA	Ac                    >#    U R                  [        R                  5        SU l        [        TU ]  U5      I S h  vN $  N7fr9   )rb   r   rc   content_lengthr)   rI   )r/   rF   r0   s     r1   _precondition_failed!FileResponse._precondition_failedx   s8      	.::;W_W----s   9AAAcheck_for_gzipped_filec                     U R                   nU(       a1  UR                  UR                  S-   5      n X3R                  5       S4$ X"R                  5       S4$ ! [         a     Nf = f)zReturn the file path, stat result, and gzip status.

This method should be called from a thread executor
since it calls os.stat which may block.
z.gzTF)r-   	with_namenamestatOSError)r/   rk   filepath	gzip_paths       r1   _get_file_path_stat_and_gzip)FileResponse._get_file_path_stat_and_gzip   sg     ::! **8==5+@AI .."2D88
 %//	  s   A 
A$#A$c                 j  >#    [         R                  " 5       nSUR                  R                  [        R
                  S5      R                  5       ;   nUR                  S U R                  U5      I S h  vN u  pEnUR                  S SUR                  S 3nUR                  nUR                  n	U	b/  U R                  Xy5      (       d  U R                  U5      I S h  vN $ UR                  n
U
b:  U	c7  UR                  U
R!                  5       :  a  U R                  U5      I S h  vN $ UR"                  nUb0  U R                  X{5      (       a  U R%                  XU5      I S h  vN $ UR&                  nUb;  Uc8  UR                  UR!                  5       ::  a  U R%                  XU5      I S h  vN $ [        R(                  U R                  ;  a-  [*        R,                  " [/        U5      5      u  pU(       d  SnSnOU(       a  SOS nSnU R0                  nUR                  nUnS nUR2                  nUb  UR                  UR!                  5       ::  a   UR4                  nUR6                  nUR8                  nUc  Ub  US	:  a  Uc  UU-  nUS	:  a  S	nUU-
  nO[I        Ub  UOUU5      U-
  nUU:  aV  SU 3U R                  [        R<                  '   U R?                  [@        RB                  5        [D        TU ]  U5      I S h  vN $ [J        RB                  nU R?                  U5        U(       a  WU l&        U(       a  XR                  [        RN                  '   U(       a2  [        R
                  U R                  [        RP                  '   SU l)        Xpl*        UR                  U l+        UU l,        S
U R                  [        RZ                  '   []        [^        U5      nU[J        RB                  :X  a4  SRa                  UUU-   S-
  U5      U R                  [        R<                  '   US	:X  d%  [c        URd                  U Rf                  5      (       a  [D        TU ]  U5      I S h  vN $ UR                  S URh                  S5      I S h  vN nU(       a  UnOS	n U Rk                  UUUU5      I S h  vN [         Rl                  " UR                  S URn                  5      5      I S h  vN   $  GN GN GN GN GNO! [:         aZ    SU 3U R                  [        R<                  '   U R?                  [@        RB                  5        [D        TU ]  U5      I S h  vN  s $ f = f GNa GN N N N! [         Rl                  " UR                  S URn                  5      5      I S h  vN    f = f7f)Ngzip x-zapplication/octet-streamTFzbytes */r   byteszbytes {}-{}/{}r   rb)8r:   r;   r&   getr   ACCEPT_ENCODINGlowerr<   rs   st_mtime_nsst_sizest_mtimeif_matchr^   ri   if_unmodified_since	timestampif_none_matchre   if_modified_sinceCONTENT_TYPE	mimetypes
guess_typestr_statusif_range
http_rangestartstop
ValueErrorCONTENT_RANGErb   r   rc   r)   rI   r@   r   content_typeCONTENT_ENCODINGVARY_compressionrY   r`   rh   ACCEPT_RANGESr   intformatr   methodr$   openrP   shieldclose)r/   rF   rB   rk   rq   strv   rR   r`   ifmatch
unmodsinceifnonematchmodsincectencodingshould_set_ctr$   	file_sizer7   r   ifrangerngend
real_startr5   r6   r0   s                             r1   rI   FileResponse.prepare   s    %%' goo))$*>*>CIIKK 	 $(#7#7$335K$
 
d q)2::a.9
 ""t'>'>z'S'S227;;;00
"j2244227;;;++"t'>'>z'W'W++GOOO,, #x1133++GOOODLL0$//H>LB/ M!%v4H!MJJ	""?bkkW->->-@@6((		hh"  CO19Y&Eqy !"%-E 3?C	9MPUU  I% :B)7MDLL!3!34OO$B$N$NO!&!999+77 ' "D2:LL../&*&:&:DLL# !&D	[[#+2T''(#u%
'333/?/F/FJ.2I0DLL++,
 A:+GNNDKKHH111))$tDDFF	IvuEE..!5!5dDJJ!GHHHq
 < < P P<  6 6>i[3IT//0 > J JK"W_W55556` :B 2D FH'..!5!5dDJJ!GHHHs	  A1V34S35A)V3S6AV3'S9(>V3&S<'A	V30S?1B%V3$T ;BV3U)	EV3(U,)$V3U/V3U5 6U17U5 :3V3-U3.V36V39V3<V3?V3AU&U U&#V3%U&&V3,V3/V31U5 3V354V0)V,*V00V3)r.   r   rd   r-   rh   r   rY   r`   )i      NN) __name__
__module____qualname____firstlineno____doc__r   r   r   r   r   r*   r   r   r   rD   rP   staticmethodr   r   boolr^   floatre   ri   r+   r,   osstat_resultrs   rI   __static_attributes____classcell__)r0   s   @r1   r   r   ,   s   6
 % $*.&& & 	&
 & ,'& 
& &*24S'CFOR	,$,.sG=@IL	* Ss S5s3C S S S
	.$	.25	.FK	.	&	'	..$.	&	'.0&*0	w||R^^T1	20&_I] _Ix@T7U _I _Ir3   r   ).r:   r   r   r+   typingr   r   r   r   r   r   r	   r
   r   r   r   r   rw   r   abcr   helpersr   r   r   typedefsr   r   web_exceptionsr   r   r   r   web_responser   __all__web_requestr   rz   _T_OnChunkSentr   environr|   r   __annotations__r    r3   r1   <module>r      s      	      % 7 7 ,  )
( (E7IdO#;<= rzz~~.BCD
E$K DEI> EIr3   