
    [Fi)                     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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         j/var/www/html/BankruptcyAI-uat/bankruptcy-ai/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c                 4  K   | j                   }d}d|j                  j                  t        j                  d      v r2|j                  |j                  dz         }|j                         r|}d}t        j                         }|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(t1        j2                  t5        |            \  }}|sd}d}n|rdnd }d}| j6                  }|j                  }|}d }|j8                  }||j                  |j'                         k  r	 |j:                  }|j<                  }|j>                  }|||d
k  r|||z  }|d
k  rd
}||z
  }ntO        ||n||      |z
  }||k\  rVd	| | j                  t        jB                  <   | jE                  tF        jH                         tJ        |   |       d {   S tP        jH                  }| jE                  |       |r| _)        |r|| j                  t        jT                  <   |r+t        j                  | j                  t        jV                  <   || _,        |j                  | _-        || _.        d| j                  t        j^                  <   ta        tb        |      }|tP        jH                  k(  r4dje                  |||z   dz
  |      | j                  t        jB                  <   |d
k(  s tg        |jh                  | jj                        rtJ        |   |       d {   S |j                  d |jl                  d       d {   }|r|}nd
}	 | jo                  ||||       d {   t        jp                  |j                  d |jr                               d {    S 7 87 7 7 ^7 # t@        $ rZ d	| | j                  t        jB                  <   | jE                  tF        jH                         tJ        |   |       d {  7  cY S w xY w7 ?7 7 7 7 # t        jp                  |j                  d |jr                               d {  7   w xY ww)NFgzip z.gzTx-zapplication/octet-streamzbytes */r   byteszbytes {}-{}/{}r   rb):r,   r%   getr   ACCEPT_ENCODING	with_namenameis_filer8   r9   r:   stat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VARYrU   rZ   ra   ACCEPT_RANGESr   intformatr   methodr#   openrM   shieldclose)r.   rC   filepathrd   	gzip_pathr@   strN   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    ::W__(()=)=rBB **8==5+@AI  "$%%'#'#7#7hmm#LL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#	[[#+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He M < < P P<  6 6>i[3IT//0 > J JK"W_W55556` :: 2D FH'..!5!5dDJJ!GHHHs	  B V#S$A!VSAVS!:VS$AVS'BV'$S* BVUEVU$V;U<VU U U #2VUVV!V$V'V*AUUU
VUVVVU V3VVVV)i      NN)__name__
__module____qualname____doc__r   r   r   r{   r   r)   r   r   r   rB   rM   staticmethodr   r   boolrY   floatr_   rb   rF   __classcell__)r/   s   @r0   r   r   ,   sa   6
 % $*.&& & 	&
 & ,'& 
&*24S'CFOR	,$,.sG=@IL	* Ss S5s3C S S S
	.$	.25	.FK	.	&	'	..$.	&	'.^I] ^Ix@T7U ^I ^Ir1   r   ).r8   ry   osr*   typingr   r   r   r   r   r   r	   r
   r   r   r   r   re   r   abcr   helpersr   r   r   typedefsr   r   web_exceptionsr   r   r   r   web_responser   __all__web_requestr   rh   _T_OnChunkSentr   environrj   r   __annotations__r    r1   r0   <module>r      s      	      % 7 7 ,  )
( (E7IdO#;<= rzz~~.BCD
E$K DqI> qIr1   