
    3Cf1-                     V   U 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mZmZmZ ddlmZ ddlmZ ddlmZmZmZ ddlmZmZ ddlmZmZmZm Z  dd	l!m"Z" d
Z#erddl$m%Z% ee	e&ged   f      Z' e(ejR                  jU                  d            Z+e
e(   e,d<    G d de"      Z-y)    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                   \    e Zd ZdZ	 	 	 	 ddedededee   dee   ddf fd	Z	d
e
dee   dedede
f
dZdddee   dedede
f
 fdZededeedf   defd       Zdddededee
   f fdZdddee
   f fdZdedeej0                  ej4                  ef   fdZdddee
   f fdZ xZS )r   z,A response object can be used to send files.Npath
chunk_sizestatusreasonheadersreturnc                 l    t         |   |||       t        j                  |      | _        || _        y )N)r#   r$   r%   )super__init__pathlibPath_path_chunk_size)selfr!   r"   r#   r$   r%   	__class__s         X/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/aiohttp/web_fileresponse.pyr)   zFileResponse.__init__/   s1     	vwG\\$'
%    writerfobjoffsetcountc                   K   | j                   }t        j                         }|j                  d |j                  |       d {    |j                  d |j
                  |       d {   }|rV|j                  |       d {    ||z
  }|dk  rn2|j                  d |j
                  t        ||             d {   }|rV|j                          d {    |S 7 7 x7 _7 '7 wNr   )	r-   asyncioget_event_looprun_in_executorseekreadwritemindrain)r.   r2   r3   r4   r5   r"   loopchunks           r0   _sendfile_fallbackzFileResponse._sendfile_fallback<   s      %%
%%'""4F;;;**4JGG,,u%%%J&Ez..tTYYJPU@VWWE  lln 	<G% Xs`   AC)C$C)(C!)C)C#9C)=C%>C)C)C'C)!C)#C)%C)'C)requestr   c                   K   t         |   |       d {   }|J t        s| j                  r| j	                  ||||       d {   S |j
                  }|j                  }|J 	 |j                  ||||       d {    t         | %          d {    |S 7 7 W7  # t        $ r  | j	                  ||||       d {  7  cY S w xY w7 8wN)
r(   preparer   compressionrB   _loop	transportsendfileNotImplementedError	write_eof)	r.   rC   r3   r4   r5   r2   r@   rI   r/   s	           r0   	_sendfilezFileResponse._sendfileR   s      ww//!!!))00vuMMM}}%%	$$$	N--	4??? g!!!! 0 N @" 	N00vuMMMM	N 	"so   CB1CB 	 C*B$ B"B$ CCC C"B$ $ CCC
CCC
etag_valueetags.c                 v     t        |      dk(  r|d   j                  t        k(  ryt         fd|D              S )Nr   r   Tc              3   V   K   | ]   }|j                   r|j                  k(   " y wrE   )is_weakvalue).0etagrN   s     r0   	<genexpr>z2FileResponse._strong_etag_match.<locals>.<genexpr>k   s      RT\\4::+Rs   )))lenrS   r   any)rN   rO   s   ` r0   _strong_etag_matchzFileResponse._strong_etag_matchg   s1    u:?uQx~~9RRRRr1   last_modifiedc                    K   | j                  t        j                         d| _        || _        || _        t        |   |       d {   S 7 w)NF)
set_statusr   status_code_length_checkrU   rZ   r(   rF   )r.   rC   rN   rZ   r/   s       r0   _not_modifiedzFileResponse._not_modifiedm   sI      	334"	* W_W----s   AA
AAc                    K   | j                  t        j                         d| _        t        |   |       d {   S 7 wr7   )r\   r   r]   content_lengthr(   rF   )r.   rC   r/   s     r0   _precondition_failedz!FileResponse._precondition_failedx   s9      	.::;W_W----s   9AAAcheck_for_gzipped_filec                     | j                   }|r2|j                  |j                  dz         }	 ||j                         dfS ||j                         dfS # t        $ r Y w xY w)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.   rc   filepath	gzip_paths       r0   _get_file_path_stat_and_gzipz)FileResponse._get_file_path_stat_and_gzip   sk     ::! **8==5+@AI ).."2D88
 %//	  s   A 	A A c                 
  K   t        j                         }d|j                  j                  t        j
                  d      j                         v }|j                  d | j                  |       d {   \  }}}|j                  dd|j                  d}|j                  }|j                  }	|	+| j                  ||	      s| j                  |       d {   S |j                  }
|
8|	6|j                  |
j!                         kD  r| j                  |       d {   S |j"                  }|-| j                  ||      r| j%                  |||       d {   S |j&                  }|:|8|j                  |j!                         k  r| j%                  |||       d {   S t        j(                  | j                  vr(t+        j,                  t/        |            \  }}|sd}d}n|rdnd }d}| j0                  }|j                  }|}d }|j2                  }||j                  |j!                         k  r	 |j4                  }|j6                  }|j8                  }|||d	k  r|||z  }|d	k  rd	}||z
  }ntI        ||n||      |z
  }||k\  rVd| | j                  t        j<                  <   | j?                  t@        jB                         tD        |   |       d {   S tJ        jB                  }| j?                  |       |r| _&        |r|| j                  t        jN                  <   |r2t        j
                  | j                  t        jP                  <   d| _)        || _*        |j                  | _+        || _,        d
| j                  t        jZ                  <   t]        t^        |      }|tJ        jB                  k(  r4dja                  |||z   dz
  |      | j                  t        j<                  <   |d	k(  s tc        |jd                  | jf                        rtD        |   |       d {   S |j                  d |jh                  d       d {   }|r|}nd	}	 | jk                  ||||       d {   t        jl                  |j                  d |jn                               d {    S 7 C7 7 7 e7  # t:        $ rZ d| | j                  t        j<                  <   | j?                  t@        jB                         tD        |   |       d {  7  cY S w xY w7 F7 7 7 7 # t        jl                  |j                  d |jn                               d {  7   w xY ww)Ngzip x-zapplication/octet-streamTFzbytes */r   byteszbytes {}-{}/{}r   rb)8r8   r9   r%   getr   ACCEPT_ENCODINGlowerr:   rk   st_mtime_nsst_sizest_mtimeif_matchrY   rb   if_unmodified_since	timestampif_none_matchr_   if_modified_sinceCONTENT_TYPE	mimetypes
guess_typestr_statusif_range
http_rangestartstop
ValueErrorCONTENT_RANGEr\   r   r]   r(   rF   r>   r   content_typeCONTENT_ENCODINGVARY_compressionrU   rZ   ra   ACCEPT_RANGESr   intformatr   methodr#   openrM   shieldclose)r.   rC   r@   rc   ri   strm   rN   rZ   ifmatch
unmodsinceifnonematchmodsincectencodingshould_set_ctr#   	file_sizer5   r   ifrangerngend
real_startr3   r4   r/   s                             r0   rF   zFileResponse.prepare   s    %%' goo))$*>*>CIIKK 	 $(#7#7$335K$
 
"d q)2::a.9
 ""t'>'>z7'S227;;;00
"j2244227;;;++"t'>'>z;'W++GZOOO,, #x1133++GZ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:DLL../&*&:&:DLL# !&D	[[#+2T''(#u%
'333/?/F/FJ.2I0DLL++,
 A:+GNNDKK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	  A/U22R53A%U2R8AU2R;:U2R>AU2!S"BU2:$S BU2$T*%EU20T-1$U2T/U2"T5 9T1:T5 =2U2/T30U28U2;U2>U2U2AT'T!T'$U2&T''U2-U2/U21T5 3U253U/(U+)U//U2)i      NN)__name__
__module____qualname____doc__r   r   r   r   r   r)   r   r   r   rB   rM   staticmethodr   r   boolrY   floatr_   rb   r*   r+   osstat_resultrk   rF   __classcell__)r/   s   @r0   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r1   r   ).r8   r   r   r*   typingr   r   r   r   r   r   r	   r
   r   r   r   r   rn   r   abcr   helpersr   r   r   typedefsr   r   web_exceptionsr   r   r   r   web_responser   __all__web_requestr   rq   _T_OnChunkSentr   environrs   r   __annotations__r    r1   r0   <module>r      s      	      % 7 7 ,  )
( (E7IdO#;<= rzz~~.BCD
E$K DEI> EIr1   