
    bf1-                     z   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j)        *                    d                    Z+e
e(         e,d<    G d de"          Z-dS )    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j        ej        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                     t                                          |||           t          j        |          | _        || _        d S )N)r%   r&   r'   )super__init__pathlibPath_path_chunk_size)selfr#   r$   r%   r&   r'   	__class__s         R/var/www/html/Alfredo/env/lib/python3.11/site-packages/aiohttp/web_fileresponse.pyr+   zFileResponse.__init__/   sC     	vwGGG\$''
%    writerfobjoffsetcountc                   K   | j         }t          j                    }|                    d |j        |           d {V  |                    d |j        |           d {V }|rY|                    |           d {V  ||z
  }|dk    rn2|                    d |j        t          ||                     d {V }|Y|                                 d {V  |S Nr   )	r/   asyncioget_event_looprun_in_executorseekreadwritemindrain)r0   r4   r5   r6   r7   r$   loopchunks           r2   _sendfile_fallbackzFileResponse._sendfile_fallback<   s       %
%''""4F;;;;;;;;;**4JGGGGGGGG 	X,,u%%%%%%%%%J&Ezz..tTYJPU@V@VWWWWWWWWE  	X llnnr3   requestr   c                   K   t                                          |           d {V }|J t          s| j        r|                     ||||           d {V S |j        }|j        }|J 	 |                    ||||           d {V  n.# t          $ r! |                     ||||           d {V cY S w xY wt                      	                                 d {V  |S N)
r*   preparer   compressionrD   _loop	transportsendfileNotImplementedError	write_eof)	r0   rE   r5   r6   r7   r4   rB   rK   r1   s	           r2   	_sendfilezFileResponse._sendfileR   sJ      www////////!!! 	N) 	N00vuMMMMMMMMM}%	$$$	N--	4??????????" 	N 	N 	N00vuMMMMMMMMMMM	N gg!!!!!!!!!s   .B (B87B8
etag_valueetags.c                      t          |          dk    r|d         j        t          k    rdS t           fd|D                       S )Nr   r   Tc              3   <   K   | ]}|j         	|j        k    V  d S rG   )is_weakvalue).0etagrP   s     r2   	<genexpr>z2FileResponse._strong_etag_match.<locals>.<genexpr>k   s1      RRT\R4:+RRRRRRr3   )lenrU   r   any)rP   rQ   s   ` r2   _strong_etag_matchzFileResponse._strong_etag_matchg   sJ    u::??uQx~994RRRRRRRRRRr3   last_modifiedc                    K   |                      t          j                   d| _        || _        || _        t                                          |           d {V S )NF)
set_statusr   status_code_length_checkrW   r\   r*   rH   )r0   rE   rP   r\   r1   s       r2   _not_modifiedzFileResponse._not_modifiedm   s_       	3444"	* WW__W---------r3   c                    K   |                      t          j                   d| _        t	                                          |           d {V S r9   )r^   r   r_   content_lengthr*   rH   )r0   rE   r1   s     r2   _precondition_failedz!FileResponse._precondition_failedx   sO       	.:;;;WW__W---------r3   check_for_gzipped_filec                     | j         }|rE|                    |j        dz             }	 ||                                dfS # t          $ r Y nw xY w||                                dfS )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)r0   re   filepath	gzip_paths       r2   _get_file_path_stat_and_gzipz)FileResponse._get_file_path_stat_and_gzip   s     :! 	 **8=5+@AAI ).."2"2D88    %//s   ? 
AAc                 
  K   t          j                    }d|j                            t          j        d                                          v }|                    d | j        |           d {V \  }}}|j	        dd|j
        d}|j        }|j        }	|	1|                     ||	          s|                     |           d {V S |j        }
|
:|	8|j        |
                                k    r|                     |           d {V S |j        }|3|                     ||          r|                     |||           d {V S |j        }|<|:|j        |                                k    r|                     |||           d {V S t          j        | j        vr+t+          j        t/          |                    \  }}|sd}d}n|rdnd }d}| j        }|j
        }|}d }|j        }||j        |                                k    r>	 |j        }|j        }|j        }nm# t:          $ r` d| | j        t          j        <   |                     t@          j!                   tE                      #                    |           d {V cY S w xY w|||d	k     r|||z  }|d	k     rd	}||z
  }ntI          ||n||          |z
  }||k    r]d| | j        t          j        <   |                     t@          j!                   tE                      #                    |           d {V S tJ          j!        }|                     |           |r|| _&        |r|| j        t          j'        <   |r%t          j        | j        t          j(        <   d| _)        || _*        |j        | _+        || _,        d
| j        t          j-        <   t]          t^          |          }|tJ          j!        k    r/d0                    |||z   dz
  |          | j        t          j        <   |d	k    stc          |j2        | j3                  r'tE                      #                    |           d {V S |                    d |j4        d           d {V }|r|}nd	}	 | 5                    ||||           d {V 	 t          j6        |                    d |j7                             d {V  S # t          j6        |                    d |j7                             d {V  w xY w)Ngzip x-zapplication/octet-streamTFzbytes */r   byteszbytes {}-{}/{}r   rb)8r:   r;   r'   getr   ACCEPT_ENCODINGlowerr<   rm   st_mtime_nsst_sizest_mtimeif_matchr[   rd   if_unmodified_since	timestampif_none_matchra   if_modified_sinceCONTENT_TYPE	mimetypes
guess_typestr_statusif_range
http_rangestartstop
ValueErrorCONTENT_RANGEr^   r   r_   r*   rH   r@   r   content_typeCONTENT_ENCODINGVARY_compressionrW   r\   rc   ACCEPT_RANGESr   intformatr   methodr%   openrO   shieldclose)r0   rE   rB   re   rk   stro   rP   r\   ifmatch
unmodsinceifnonematchmodsincectencodingshould_set_ctr%   	file_sizer7   r   ifrangerngend
real_startr5   r6   r1   s                             r2   rH   zFileResponse.prepare   s     %'' go))$*>CCIIKKK 	 $(#7#7$35K$
 $
 
 
 
 
 
 
"d 9992:999
 "t'>'>z7'S'S227;;;;;;;;;0
"j224444227;;;;;;;;;+"t'>'>z;'W'W"++GZOOOOOOOOO, #x113333++GZOOOOOOOOODL00$/H>>LB 0/ MM!%/vv4H!MJ	"?bkW->->-@-@@@6(	h 6 6 6 4Ji3I3IT/0 > JKKK"WW__W555555555556   CO199Y&Eqyy !"%-EE 3?CC	9MMPUU  I%% 8N)7M7MDL!34OO$B$NOOO!&!9!99999999+7 ''' 	# "D 	;2:DL./ 	&&*&:DL# !&D	[#+2T'(#u%%
'333/?/F/FJ.2I0 0DL+,
 A::+GNDKHH:111111111))$tDDDDDDDD 	FFF	IvuEEEEEEEEE.!5!5dDJ!G!GHHHHHHHHHH'.!5!5dDJ!G!GHHHHHHHHHHs   H$ $A'JJS 5T)r!   r"   NN)__name__
__module____qualname____doc__r   r   r   r   r   r+   r   r   r   rD   rO   staticmethodr   r   boolr[   floatra   rd   r,   r-   osstat_resultrm   rH   __classcell__)r1   s   @r2   r   r   ,   s^       66
 % $*.& && & 	&
 & ,'& 
& & & & & &*24S'CFOR	   ,$,.sG=@IL	     * Ss S5s3C S S S S \S
	.$	.25	.FK	.	&	'	. 	. 	. 	. 	. 	..$.	&	'. . . . . .0&*0	w|R^T1	20 0 0 0&_I] _Ix@T7U _I _I _I _I _I _I _I _I _I _Ir3   r   ).r:   r   r   r,   typingr   r   r   r   r   r   r	   r
   r   r   r   r   rp   r   abcr   helpersr   r   r   typedefsr   r   web_exceptionsr   r   r   r   web_responser   __all__web_requestr   rs   _T_OnChunkSentr   environru   r   __annotations__r    r3   r2   <module>r      s        				                                   % % % % % % 7 7 7 7 7 7 7 7 7 7 , , , , , , , ,            ) ( ( ( ( (
 )(((((( (E7IdO#;<= $rz~~.BCCDD
E$K D D DEI EI EI EI EI> EI EI EI EI EIr3   