Ë
    Eü´j@  ã                   ó  — U d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlm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mZ dd	lmZ dd
l m!Z! ddl"m#Z#m$Z$m%Z%m&Z& ddl'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 dZ3erddl4m5Z5 eee6ged   f      Z7 e8ejr                  ju                  d«      «      Z;ee8   e<d<    e«       Z=ee   e<d<    edD � ci c]  } | e=j|                  |    “Œ c} «      Z?dZ@ eddddddœ«      ZA G d„ de«      ZBe=j|                  j‡                  «        eAj‰                  «       D ]  \  ZEZFe=j�                  eEeF«       Œ  eH«       ZIeHe j”                  d      e<d<    G d„ d e2«      ZKyc c} w )!é    N)Úsuppress)ÚEnumÚauto)Ú	MimeTypes)ÚS_ISREG)ÚMappingProxyType)ÚIOÚTYPE_CHECKINGÚAnyÚ	AwaitableÚCallableÚFinalÚIteratorÚListÚOptionalÚSetÚTupleÚUnionÚcasté   )Úhdrs)ÚAbstractStreamWriter)ÚDEFAULT_CHUNK_SIZEÚETAG_ANYÚETagÚmust_be_empty_body)ÚLooseHeadersÚPathLike)ÚHTTPForbiddenÚHTTPNotFoundÚHTTPNotModifiedÚHTTPPartialContentÚHTTPPreconditionFailedÚHTTPRequestRangeNotSatisfiable)ÚStreamResponse)ÚFileResponse)ÚBaseRequestÚAIOHTTP_NOSENDFILEÚ
NOSENDFILEÚCONTENT_TYPES)ú.brú.gzzapplication/octet-streamr,   r+   z.bz2z.Zz.xz)zapplication/gzipzapplication/x-brotlizapplication/x-bzip2zapplication/x-compresszapplication/x-xzc                   óH   — e Zd ZdZ e«       Z e«       Z e«       Z e«       Zy)Ú_FileResponseResultz The result of the file response.N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú	SEND_FILEÚNOT_ACCEPTABLEÚPRE_CONDITION_FAILEDÚNOT_MODIFIED© ó    úV/root/workspace/ytshorts/venv/lib/python3.12/site-packages/aiohttp/web_fileresponse.pyr.   r.   J   s"   „ Ù*á“€IÙ“V€NÙ›6ÐÙ“6�Lr8   r.   Ú_CLOSE_FUTURESc                   ó4  ‡ — e Zd ZdZedddfdededededz  dedz  d	dfˆ fd
„Z	de
e   deded	e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d	efd„«       Zdddeded	edz  fˆ fd„Zddd	edz  fˆ fd„Zddded	eeej6                  dz  ej:                  edz  f   fd„Zded	eej@                  dz  ej:                  edz  f   fd„Z!ddd	edz  fˆ fd„Z"dddej6                  d ej:                  d!edz  d	edz  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@   rA   )ÚsuperÚ__init__ÚpathlibÚPathÚ_pathÚ_chunk_size)Úselfr=   r>   r?   r@   rA   Ú	__class__s         €r9   rE   zFileResponse.__init___   s1   ø€ ô 	‰Ñ ¨v¸wÐÔGä—\‘\ $Ó'ˆŒ
Ø%ˆÕr8   ÚfobjÚoffsetc                 óF   — |j                  |«       |j                  |«      S ©N)ÚseekÚread)rJ   rL   rM   r>   s       r9   Ú_seek_and_readzFileResponse._seek_and_readl   s   € Ø�	‰	�&ÔØ�y‰y˜Ó$Ð$r8   ÚwriterÚcountc           
   ƒ   ó²  K  — | j                   }t        j                  «       }|j                  d | j                  ||t        ||«      «      ƒ d {  –—† }|r_|j                  |«      ƒ d {  –—†  |t        |«      z
  }|dk  rn2|j                  d |j                  t        ||«      «      ƒ d {  –—† }|rŒ_|j                  «       ƒ d {  –—†  |S 7 Œ7 Œf7 Œ%7 Œ­w©Nr   )
rI   ÚasyncioÚget_event_loopÚrun_in_executorrR   ÚminÚwriteÚlenrQ   Údrain)rJ   rS   rL   rM   rT   r>   ÚloopÚchunks           r9   Ú_sendfile_fallbackzFileResponse._sendfile_fallbackp   sÑ   è ø€ ð ×%Ñ%ˆ
Ü×%Ñ%Ó'ˆØ×*Ñ*Ø�$×%Ñ% t¨V´S¸ÀUÓ5Kó
÷ 
ˆñ Ø—,‘,˜uÓ%×%Ð%ØœC ›JÑ&ˆEØ˜ŠzØØ×.Ñ.¨t°T·Y±YÄÀJÐPUÓ@VÓW×WˆEò ð �l‰l‹n×ÐØˆð
øð &øð XøàúsO   ‚ACÁCÁCÁ*CÁ+ACÂ-CÂ.CÂ5CÃCÃ	CÃCÃCÃCÚrequestr'   c              ƒ   óº  •K  — t         ‰| �  |«      ƒ d {  –—† }|€J ‚t        s| j                  r| j	                  ||||«      ƒ d {  –—† S |j
                  }|j                  }|€t        d«      ‚	 |j                  ||||«      ƒ d {  –—†  t         ‰| �)  «       ƒ d {  –—†  |S 7 Œ�7 Œ`7 Œ # t        $ r  | j	                  ||||«      ƒ d {  –—†7  cY S w xY w7 Œ8­w)NzConnection lost)rD   Úpreparer)   Úcompressionr`   Ú_loopÚ	transportÚConnectionResetErrorÚsendfileÚNotImplementedErrorÚ	write_eof)	rJ   ra   rL   rM   rT   rS   r^   rf   rK   s	           €r9   Ú	_sendfilezFileResponse._sendfile…   sí   øè ø€ ô ‘w‘ wÓ/×/ˆØÐ!Ð!Ð!å˜×)Ò)Ø×0Ñ0°¸¸vÀuÓM×MÐMà�}‰}ˆØ×%Ñ%ˆ	ØÐÜ&Ð'8Ó9Ð9ð	NØ—-‘- 	¨4°¸Ó?×?Ð?ô ‰gÑÓ!×!Ð!Øˆð# 0øð Nøð @ùÜ"ò 	NØ×0Ñ0°¸¸vÀuÓM×MÐMÒMð	Núð 	"úso   ƒC–B'—1CÁB)Á	)CÁ3B- Â
B+ÂB- ÂCÂ CÂ!CÂ)CÂ+B- Â- CÃCÃCÃCÃCÃCÚ
etag_valueÚetags.Úweakc                óz   ‡ ‡— t        |«      dk(  r|d   j                  t        k(  ryt        ˆ ˆfd„|D «       «      S )Nr   r   Tc              3   óZ   •K  — | ]"  }‰s|j                   rŒ|j                  ‰k(  –— Œ$ y ­wrO   )Úis_weakÚvalue)Ú.0Úetagrl   rn   s     €€r9   ú	<genexpr>z+FileResponse._etag_match.<locals>.<genexpr>Ÿ   s'   øè ø€ ò 
Ø)-¹$ÀdÇlÃlˆD�J‰J˜*Õ$ñ
ùs   ƒ+—+)r\   rr   r   Úany)rl   rm   rn   s   ` `r9   Ú_etag_matchzFileResponse._etag_match›   s:   ù€ äˆu‹:˜Š?˜u Q™xŸ~™~´Ò9ØÜô 
Ø16ô
ó 
ð 	
r8   Úlast_modifiedc              ƒ   ó¦   •K  — | j                  t        j                  «       d| _        || _        || _        t        ‰| �  |«      ƒ d {  –—† S 7 Œ­w)NF)Ú
set_statusr!   Ústatus_codeÚ_length_checkrt   rx   rD   rc   )rJ   ra   rl   rx   rK   s       €r9   Ú_not_modifiedzFileResponse._not_modified£   sI   øè ø€ ð 	�‰œ×3Ñ3Ô4Ø"ˆÔØˆŒ	Ø*ˆÔô ‘W‘_ WÓ-×-Ð-Ð-ús   ƒAAÁ
AÁAc              ƒ   óŠ   •K  — | j                  t        j                  «       d| _        t        ‰| �  |«      ƒ d {  –—† S 7 Œ­wrV   )rz   r#   r{   Úcontent_lengthrD   rc   )rJ   ra   rK   s     €r9   Ú_precondition_failedz!FileResponse._precondition_failed®   s9   øè ø€ ð 	�‰Ô.×:Ñ:Ô;ØˆÔÜ‘W‘_ WÓ-×-Ð-Ð-ús   ƒ9A¼A½AÚaccept_encodingc                 óF  — | j                  |«      \  }}}|st        j                  d|dfS |j                  d›d|j                  d›�}|j
                  x}�(| j                  ||d¬«      st        j                  d||fS |j                  x}�3|€1|j                  |j                  «       kD  rt        j                  d||fS |j                  x}	�(| j                  ||	d¬«      rt        j                  d||fS |j                  x}
�3|	€1|j                  |
j                  «       k  rt        j                  d||fS |j                  d«      }t        t         «      5  t#        j$                  |j'                  «       «      }ddd«       t        j(                  |||fS # 1 sw Y   ŒxY w)a  Return the response result, io object, stat result, and encoding.

        If an uncompressed file is returned, the encoding is set to
        :py:data:`None`.

        This method should be called from a thread executor
        since it calls os.stat which may block.
        NÚxú-F)rn   TÚrb)Ú_get_file_path_stat_encodingr.   r4   Úst_mtime_nsÚst_sizeÚif_matchrw   r5   Úif_unmodified_sinceÚst_mtimeÚ	timestampÚif_none_matchr6   Úif_modified_sinceÚopenr   ÚOSErrorÚosÚstatÚfilenor3   )rJ   ra   r�   Ú	file_pathÚstÚfile_encodingrl   ÚifmatchÚ
unmodsinceÚifnonematchÚmodsincerL   s               r9   Ú_make_responsezFileResponse._make_responseµ   s¼  € ð (,×'HÑ'HØó(
Ñ$ˆ	�2�}ñ Ü&×5Ñ5°t¸RÀÐEÐEàŸ™ qÐ)¨¨2¯:©:°a¨.Ð9ˆ
ð ×'Ñ'Ð'ˆGÐ4¸T×=MÑ=MØ˜ eð >Nô >
ô '×;Ñ;¸TÀ2À}ÐTÐTð #×6Ñ6Ð6ˆZÐCØ�Ø—‘˜j×2Ñ2Ó4Ò4ä&×;Ñ;¸TÀ2À}ÐTÐTð #×0Ñ0Ð0ˆKÐ=À$×BRÑBRØ˜¨$ð CSô C
ô '×3Ñ3°T¸2¸}ÐLÐLð !×2Ñ2Ð2ˆXÐ?ØÐ#Ø—‘˜x×1Ñ1Ó3Ò3ä&×3Ñ3°T¸2¸}ÐLÐLà�~‰~˜dÓ#ˆÜ”gÓñ 	(ô
 —‘˜Ÿ™›Ó'ˆB÷	(ô #×,Ñ,¨d°B¸ÐEÐE÷	(ð 	(ús   Å$FÆF c                 óª  — | j                   }t        j                  «       D ]v  \  }}||vrŒ|j                  |j                  |z   «      }t        t        «      5  |j                  «       }t        |j                  «      r|||fcd d d «       c S 	 d d d «       Œx |j                  «       }t        |j                  «      r||d fS d |d fS # 1 sw Y   Œ±xY wrO   )rH   ÚENCODING_EXTENSIONSÚitemsÚwith_suffixÚsuffixr   r�   Úlstatr   Úst_moder’   )rJ   r�   r”   Úfile_extensionr–   Úcompressed_pathr•   s          r9   r†   z)FileResponse._get_file_path_stat_encodingí   s×   € ð —J‘Jˆ	Ü-@×-FÑ-FÓ-Hò 		>Ñ)ˆN˜MØ OÑ3Øà'×3Ñ3°I×4DÑ4DÀ~Ñ4UÓVˆOÜœ'Ó"ñ >à$×*Ñ*Ó,�Ü˜2Ÿ:™:Ô&Ø*¨B°Ð=÷	>ó >ð '÷>ð >ð		>ð �^‰^ÓˆÜ# B§J¡JÔ/ˆy¸2¸tÐCÐC°T¸2¸tÐCÐC÷>ð >ús   Á*C	Ã	C	c              ƒ   óD  •K  — t        j                  «       }|j                  j                  t        j
                  d«      j                  «       }	 |j                  d | j                  ||«      ƒ d {  –—† \  }}}}|t"        j$                  u r6| j                  t        j                  «       t        ‰| �9  |«      ƒ d {  –—† S |t"        j&                  u r| j)                  |«      ƒ d {  –—† S |t"        j*                  u rD|j,                  d›d|j.                  d›�}|j0                  }	| j3                  |||	«      ƒ d {  –—† S |€J ‚	 | j5                  ||||«      ƒ d {  –—† |j                  d |j6                  «      }
t8        j;                  |
«       |
j=                  t8        j>                  «       S 7 �ŒD# t        $ r: | j                  t        j                  «       t        ‰| �9  |«      ƒ d {  –—†7  cY S t        $ r: | j                  t         j                  «       t        ‰| �9  |«      ƒ d {  –—†7  cY S w xY w7 �Œ�7 �ŒY7 �Œ7 Œç# |j                  d |j6                  «      }
t8        j;                  |
«       |
j=                  t8        j>                  «       w xY w­w)NÚ rƒ   r„   ) rW   Úget_running_looprA   Úgetr   ÚACCEPT_ENCODINGÚlowerrY   r›   ÚPermissionErrorrz   r   r{   rD   rc   r�   r    r.   r4   r5   r€   r6   r‡   rˆ   r‹   r}   Ú_prepare_open_fileÚcloser:   ÚaddÚadd_done_callbackÚremove)rJ   ra   r^   r�   Úresponse_resultrL   r•   r–   rl   rx   Úclose_futurerK   s              €r9   rc   zFileResponse.prepare   s=  øè ø€ Ü×'Ñ'Ó)ˆð "Ÿ/™/×-Ñ-¬d×.BÑ.BÀBÓG×MÑMÓOˆð	2Ø=A×=QÑ=QØ�d×)Ñ)¨7°Oó>÷ 8Ñ4ˆO˜T 2 }ð Ô1×@Ñ@Ñ@Ø�O‰OœM×5Ñ5Ô6Ü™™¨Ó1×1Ð1àÔ1×FÑFÑFØ×2Ñ2°7Ó;×;Ð;àÔ1×>Ñ>Ñ>ØŸN™N¨1Ð-¨Q¨r¯z©z¸!¨nÐ=ˆJØŸK™KˆMØ×+Ñ+¨G°ZÀÓO×OÐOàÐÐÐð	BØ×0Ñ0°¸$ÀÀMÓR×Rð  ×/Ñ/°°d·j±jÓAˆLô ×Ñ˜|Ô,Ø×*Ñ*¬>×+@Ñ+@ÕAðK8úô ò 	2Ø�O‰OœM×5Ñ5Ô6Ü™™¨Ó1×1Ð1Ò1Üò 	2ð �O‰OœL×4Ñ4Ô5Ü™™¨Ó1×1Ð1Ò1ð		2úð 2ùð <ùð
 Pùð Sùð  ×/Ñ/°°d·j±jÓAˆLô ×Ñ˜|Ô,Ø×*Ñ*¬>×+@Ñ+@ÕAüs¾   ƒAJ Á!F9 Á2F6Á3	F9 Á<AJ Â?I Ã *J Ã*IÃ+AJ Å IÅJ Å
I Å!I	Å"I Å%AJ Æ6F9 Æ9:H=Ç3G6Ç4H=Ç9J Ç;9H=È4H7È5H=È:J È<H=È=J ÉJ ÉJ É	I ÉAJÊJ r•   r–   c              ƒ   óh  •K  — | j                   }|j                  }|j                  }|}d }	|j                  x}
�||
j	                  «       k  rÏ	 |j
                  }|j                  }	|j                  }|	�¨|	dk  r|€|	|z  }	|	dk  rd}	||	z
  }nt#        |�|n||«      |	z
  }|	|k\  rVd|› �| j                  t        j                  <   | j                  t        j                  «       t        ‰| �A  |«      ƒ d {  –—† S t$        j                  }| j                  |«       t        j&                  | j                  vrVt(        j*                  dk\  rt,        j.                  }nt,        j0                  } || j2                  «      d   xs t4        | _        |rO|| j                  t        j8                  <   t        j:                  | j                  t        j<                  <   d| _        |j@                  d›d|j                  d›�| _!        || _"        || _#        d| j                  t        jH                  <   |t$        j                  k(  r2|	}|€J ‚d|› d||z   d	z
  › d
|› �| j                  t        j                  <   |dk(  stK        |jL                  |«      rt        ‰| �A  |«      ƒ d {  –—† S |	xs d}| jO                  ||||«      ƒ d {  –—† S # t        $ rZ d|› �| j                  t        j                  <   | j                  t        j                  «       t        ‰| �A  |«      ƒ d {  –—†7  cY S w xY w7 �Œ57 Œ�7 Œo­w)Nzbytes */r   )é   é   Frƒ   r„   Úbyteszbytes r   ú/)(Ú_statusrˆ   r‹   Úif_rangerŒ   Ú
http_rangeÚstartÚstopÚ
ValueErrorÚ_headersr   ÚCONTENT_RANGErz   r$   r{   rD   rc   rZ   r"   ÚCONTENT_TYPEÚsysÚversion_infor*   Úguess_file_typeÚ
guess_typerH   ÚFALLBACK_CONTENT_TYPEÚcontent_typeÚCONTENT_ENCODINGr©   ÚVARYÚ_compressionr‡   rt   rx   r   ÚACCEPT_RANGESr   Úmethodrk   )rJ   ra   rL   r•   r–   r?   Ú	file_sizeÚ
file_mtimerT   r»   ÚifrangeÚrngÚendÚguesserÚ
real_startrM   rK   s                   €r9   r¬   zFileResponse._prepare_open_file-  s  øè ø€ ð —‘ˆØŸ™ˆ	ØŸK™Kˆ
ØˆØ ˆà×'Ñ'Ð'ˆGÐ0°JÀ'×BSÑBSÓBUÒ4Uð6Ø×(Ñ(�ØŸ	™	�Ø"%§(¡(�ð" Ð Ø˜1’9  Ø˜YÑ&�EØ˜q’yð !"˜Ø%¨Ñ-‘Eô  3 ?™C¸	À9ÓMÐPUÑUð ð ˜IÒ%ð ;CÀ9À+Ð8N�D—M‘M¤$×"4Ñ"4Ñ5Ø—O‘OÔ$B×$NÑ$NÔOÜ!&¡¡°Ó!9×9Ð9ä+×7Ñ7�ð —‘ Ô'ô
 ×Ñ D§M¡MÑ1Ü×Ñ 7Ò*Ü'×7Ñ7‘ä'×2Ñ2�Ù '¨¯
©
Ó 3°AÑ 6Ò OÔ:OˆDÔáØ3@ˆD�M‰Mœ$×/Ñ/Ñ0Ü'+×';Ñ';ˆD�M‰Mœ$Ÿ)™)Ñ$ð !&ˆDÔà—~‘~ aÐ(¨¨"¯*©*°Q¨Ð8ˆŒ	Ø'ˆÔØ#ˆÔà,3ˆ�‰”d×(Ñ(Ñ)àÔ'×3Ñ3Ò3ØˆJØÐ)Ð)Ð)à˜˜ A j°5Ñ&8¸1Ñ&<Ð%=¸Q¸y¸kÐJð �M‰Mœ$×,Ñ,Ñ-ð
 �AŠ:Ô+¨G¯N©N¸FÔCÜ™™¨Ó1×1Ð1ð ’˜!ˆà—^‘^ G¨T°6¸5ÓA×AÐAøô{ ò 6ð 7?¸y¸kÐ4J�—‘œd×0Ñ0Ñ1Ø—‘Ô >× JÑ JÔKÜ"™W™_¨WÓ5×5Ð5Ò5ð6úð` :ùðP 2øð
 Búsi   ƒA
L2Á$K Á2BL2Ã6L+Ã7F'L2ÊL.Ê!L2Ë L0ËL2ËAL(ÌL"Ì L(Ì%L2Ì'L(Ì(L2Ì.L2Ì0L2)%r/   r0   r1   r2   r   r   ÚintÚstrr   rE   r	   r   r¶   rR   r   r`   rk   ÚstaticmethodÚtupler   Úboolrw   Úfloatr}   r€   r.   ÚioÚBufferedReaderr‘   Ústat_resultr›   rF   rG   r†   rc   r¬   Ú__classcell__)rK   s   @r9   r&   r&   \   sT  ø„ Ù6ð
 -ØØ!Ø'+ñ&àð&ð ð&ð ð	&ð
 �d‘
ð&ð  Ñ$ð&ð 
õ&ð% 2 c¡7ð %°Cð %ÀSð %ÈUó %ðØ*ðØ24°S±'ðØCFðØORðà	óð*Ø$ðØ,.¨s©GðØ=@ðØILðà	õð, ð
 ð 
¨E°$¸°)Ñ,<ð 
Àtð 
ÐPTò 
ó ð
ð	.Ø$ð	.Ø25ð	.ØFKð	.à	 Ñ	$õ	.ð.Ø$ð.à	 Ñ	$õ.ð6FØ$ð6FØ7:ð6Fà	Ø˜R×.Ñ.°Ñ5°r·~±~ÀsÈTÁzÐQñ
ó6FðpDØ"ðDà	ˆw�|‰|˜dÑ" B§N¡N°C¸$±JÐ>Ñ	?óDð&+B ]ð +BÐ7KÈdÑ7Rõ +BðZvBàðvBð ×ÑðvBð �N‰Nð	vBð
 ˜T‘zðvBð 
 Ñ	$÷vBñ vBr8   r&   )LrW   rÙ   r‘   rF   rÁ   Ú
contextlibr   Úenumr   r   Ú	mimetypesr   r’   r   Útypesr   Útypingr	   r
   r   r   r   r   r   r   r   r   r   r   r   r¦   r   Úabcr   Úhelpersr   r   r   r   Útypedefsr   r   Úweb_exceptionsr   r    r!   r"   r#   r$   Úweb_responser%   Ú__all__Úweb_requestr'   r¶   Ú_T_OnChunkSentr×   Úenvironr¨   r)   Ú__annotations__r*   Úencodings_mapr�   rÅ   ÚADDITIONAL_CONTENT_TYPESr.   Úclearrž   rÆ   Ú	extensionÚadd_typeÚsetr:   ÚFuturer&   )Úexts   0r9   ú<module>rô      s†  ðÜ Û 	Û 	Û Û 
Ý ß Ý Ý Ý "÷÷ ÷ õ õ  Ý %ß KÓ Kß ,÷÷ õ )à
€áÝ(ð ˜( E 7¨I°d©OÐ#;Ñ<Ñ=€ñ ˜rŸz™zŸ~™~Ð.BÓCÓD€
ˆE�$‰KÓ Dá"+£+€ˆu�YÑÓ -ñ 'Ø6DÖE¨s€Sˆ-×
%Ñ
% cÑ
*Ñ*ÒEóÐ ð 3Ð ñ ,à!Ø %Ø%Ø"&Ø!ñóÐ ô˜$ô ð × Ñ × !Ñ !Ô #Ø7×=Ñ=Ó?ò 4Ñ€L�)Ø×Ñ˜<¨Õ3ð4ñ -0«E€��G—N‘N 4Ñ(Ñ)Ó 1ôGB�>õ GBùòI Fs   Ã F