ó
    ‚¤jþ  ã                  ó  • S SK Jr  S SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJr  S SKJr  S S	KJrJrJr  S S
KJr  S SKJr  \R4                  " S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)é    )ÚannotationsN)Ú
NamedTuple)Úquote)ÚHeaders)ÚHTTPException)ÚResponseÚ
guess_type)ÚStaticFiles)ÚReceiveÚScopeÚSend)Úaiofiles)Ústatz#^bytes=(?P<start>\d+)-(?P<end>\d*)$c                  ó>   • \ rS rSr% S\S'   S\S'   S	S jrS
S jrSrg)ÚClosedRangeé   ÚintÚstartÚendc                ó:   • U R                   U R                  -
  S-   $ )Né   )r   r   ©Úselfs    Ú¤C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\gradio/ranged_response.pyÚ__len__ÚClosedRange.__len__   s   € Ø�x‰x˜$Ÿ*™*Ñ$ qÑ(Ð(ó    c                ó   • [        U 5      S:„  $ )Nr   )Úlenr   s    r   Ú__bool__ÚClosedRange.__bool__   s   € Ü�4‹y˜1‰}Ðr   © N)Úreturnr   )r#   Úbool)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r   r    Ú__static_attributes__r"   r   r   r   r      s   ‡ ØƒJØ	ƒHô)÷r   r   c                  ó8   • \ rS rSr% S\S'   SrS\S'   S	S jrSrg)
Ú	OpenRangeé"   r   r   Nz
int | Noner   c                ó¬   • [        U R                  U5      n[        S U R                  U4 5       5      n[        X25      n[        X25      n[	        X25      $ )Nc              3  ó6   #   • U  H  o(       d  M  Uv •  M     g 7f)Nr"   )Ú.0Úxs     r   Ú	<genexpr>Ú"OpenRange.clamp.<locals>.<genexpr>(   s   é € Ð2š_˜³—!‘!š_ùs   ‚
�	)Úmaxr   Úminr   r   )r   r   r   Úbegins       r   ÚclampÚOpenRange.clamp&   sG   € Ü�D—J‘J Ó&ˆÜÑ2˜dŸh™h¨™_Ó2Ó2ˆä�E“ˆÜ�%‹oˆä˜5Ó&Ð&r   r"   )r   r   r   r   r#   r   )r%   r&   r'   r(   r)   r   r7   r*   r"   r   r   r,   r,   "   s   ‡ ØƒJØ€CˆÓ÷'r   r,   c                  ób   • \ rS rSrSr     S               S	S jjrS
S jrSS jrSrg)ÚRangedFileResponseé0   i   Nc                óø  • [         c  [        S5      eXl        X l        XPl        S U l        US L=(       a    UR                  5       S:H  U l        Uc   [        U=(       d    U5      S   =(       d    SnX@l	        U R                  U=(       d    0 5        U R                  bV  [        U R                  5      nX€R                  :w  a  SU 3n	OSU R                   S3n	U R                  R                  SU	5        X`l        g )	Nz0'aiofiles' must be installed to use FileResponseÚHEADr   z
text/plainzattachment; filename*=utf-8''zattachment; filename="Ú"zcontent-disposition)r   ÚModuleNotFoundErrorÚpathÚrangeÚfilenameÚ
backgroundÚupperÚsend_header_onlyr	   Ú
media_typeÚinit_headersr   ÚheadersÚ
setdefaultÚstat_result)
r   r@   rA   rH   rF   rB   rJ   ÚmethodÚcontent_disposition_filenameÚcontent_dispositions
             r   Ú__init__ÚRangedFileResponse.__init__3   sê   € ô ÑÜ%ØBóð ð Œ	ØŒ
Ø ŒØˆŒØ &¨dÐ 2× O°v·|±|³~ÈÑ7OˆÔØÑÜ# H×$4°Ó5°aÑ8×H¸LˆJØ$ŒØ×Ñ˜'Ÿ- RÔ(Ø�=‰=Ñ$Ü+0°·±Ó+?Ð(Ø+¯}©}Ó<à3Ð4PÐ3QÐRñ $ð )?¸t¿}¹}¸oÈQÐ&OÐ#Ø�L‰L×#Ñ#Ð$9Ð;NÔOØ&Õr   c                ó  • U R                   (       d  [        S5      eU R                   R                  n[        U5      nSUR                   SUR
                   SU 3U R                  S'   [        U5      U R                  S'   g )Nz(No stat result to set range headers withzbytes Ú-Ú/zcontent-rangezcontent-length)rJ   Ú
ValueErrorÚst_sizer   r   r   rH   Ústr)r   rA   Útotal_lengthÚcontent_lengths       r   Úset_range_headersÚ$RangedFileResponse.set_range_headersU   sv   € Ø××ÜÐGÓHÐHØ×'Ñ'×/Ñ/ˆÜ˜U›ˆà�U—[‘[�M  5§9¡9 +¨Q¨|¨nÐ=ð 	�‰�_Ñ%ô *-¨^Ó)<ˆ�‰Ð%Ñ&Ør   c              ƒ  ó   #   • U R                   ce   [        U R                  5      I S h  v•N nX@l         UR                  n[        R
                  " U5      (       d  [        SU R                   S35      e U R                  R                  SU R                   R                  5      nU R                  U5        [        R                  " U R                  SS9 IS h  v•N nUR                  UR                  5      I S h  v•N   U" SSU R                   S	.5      I S h  v•N   U R"                  (       a  U" S
SSS.5      I S h  v•N   Oš[%        U5      n	U(       d&  U" S
SSS.5      I S h  v•N    S S S 5      IS h  v•N   g U	S:”  a\  ['        U R(                  U	5      n
UR+                  U
5      I S h  v•N nU	[%        U5      -  n	U" S
UU	S:„  S.5      I S h  v•N   U	S:”  a  M\  S S S 5      IS h  v•N   g  GNÇ! [         a  n[        SU R                   S35      UeS nAff = f GNF GN& GN Nè NÃ N´ N€ N] NG! , IS h  v•N  (       d  f       g = f7f)NzFile at path z is not a file.z does not exist.r   Úrb)Úmodezhttp.response.startéÎ   )ÚtypeÚstatusrH   zhttp.response.bodyr   F)r^   ÚbodyÚ	more_body)rJ   Úaio_statr@   Úst_moder   ÚS_ISREGÚRuntimeErrorÚFileNotFoundErrorrA   r7   rT   rX   r   ÚopenÚseekr   Úraw_headersrE   r   r5   Ú
chunk_sizeÚread)r   ÚscopeÚreceiveÚsendrJ   r\   ÚfnfeÚ
byte_rangeÚfileÚremaining_bytesrj   Úchunks               r   Ú__call__ÚRangedFileResponse.__call__`   s-  é € Ø×ÑÑ#ð
SÜ$,¨T¯Y©YÓ$7×7�Ø#.Ô ð #×*Ñ*�Ü—|’| D×)Ñ)Ü&¨°t·y±y°kÀÐ'QÓRÐRð *ð —Z‘Z×%Ñ% a¨×)9Ñ)9×)AÑ)AÓBˆ
Ø×Ñ˜zÔ*ä—=’= §¡°×6Ò6¸$Ø—)‘)˜J×,Ñ,Ó-×-Ð-Ùà1Ø!Ø#×/Ñ/ñó÷ ð ð ×$×$ÙØ1¸3ÈUÑSó÷ ñ ô #& j£/�æ!ÙØ!5¸sÐQVÑWó÷ ð ð ÷) 7×6Ð6ð, &¨Ó)Ü!$ T§_¡_°oÓ!F�JØ"&§)¡)¨JÓ"7×7�EØ#¤s¨5£zÑ1�OÙà$8Ø$)Ø)8¸1Ñ)<ñó÷ ð ð	 &¨Õ)÷- 7×6Ð6ò 8øä$ó Ü"Ø# D§I¡I ;Ð.>Ð?óàðûðúò 7Ú-òñññ# 7ñ0 8ñ÷5 7×6×6Ð6üs  ‚I‘G3 ©G0ª
G3 ´B%IÃHÃIÃH4Ã<H"Ã=H4ÄH%Ä$H4Ä?H(Å &H4Å&H*Å'H4Å,IÅ7H,Å8IÅ=0H4Æ-H.Æ.$H4ÇH0Ç
H4ÇIÇ*H2Ç+IÇ0G3 Ç3
HÇ=HÈHÈIÈ"H4È%H4È(H4È*H4È,IÈ.H4È0H4È2IÈ4IÈ:H=È;IÉI)rC   rB   rF   r@   rA   rE   rJ   )NNNNN)r@   ústr | os.PathLikerA   r,   rH   zdict[str, str] | NonerF   ú
str | NonerB   rw   rJ   zos.stat_result | NonerK   rw   r#   ÚNone)rA   r   r#   rx   )rl   r   rm   r   rn   r   r#   rx   )	r%   r&   r'   r(   rj   rN   rX   rt   r*   r"   r   r   r:   r:   0   sv   † Ø€Jð *.Ø!%Ø#Ø-1Ø!ð 'àð 'ð ð 'ð 'ð	 'ð
 ð 'ð ð 'ð +ð 'ð ð 'ð 
õ 'ôD	÷1r   r:   c                  ó^   ^ • \ rS rSr S         SU 4S jjjr        SS jrSrU =r$ )ÚRangedStaticFilesé”   c                ó¢   >• [        US9nUR                  S5      (       a  U R                  XUS9nO[        TU ]  XX4S9nSUR
                  S'   U$ )N©rl   rA   )rJ   rl   )rJ   rl   Ústatus_codeÚbyteszaccept-ranges)r   ÚgetÚranged_file_responseÚsuperÚfile_responserH   )r   Ú	full_pathrJ   rl   r~   Úrequest_headersÚresponseÚ	__class__s          €r   rƒ   ÚRangedStaticFiles.file_response•   sl   ø€ ô "¨Ñ.ˆà×Ñ˜w×'Ñ'Ø×0Ñ0Ø¸%ð 1ð ‰Hô ‘wÑ,Ø¸%ð -ð ˆHð -4ˆ×Ñ˜Ñ)Øˆr   c                ó  • US   n[        US9nUS   n[        R                  U5      nU(       d  [        S5      eUR	                  S5      UR	                  S5      p˜[        [        U5      U	(       a  [        U	5      OS 5      n
[        XX$S9$ )NrK   r}   rA   i�  r   r   )rJ   rK   )r   ÚRANGE_REGEXÚsearchr   Úgroupr,   r   r:   )r   r„   rJ   rl   rK   r…   Úrange_headerÚmatchr   r   rA   s              r   r�   Ú&RangedStaticFiles.ranged_file_response©   s‚   € ð �x‘ˆÜ!¨Ñ.ˆà& wÑ/ˆä×"Ñ" <Ó0ˆÞÜ Ó$Ð$à—[‘[ Ó)¨5¯;©;°uÓ+=ˆsäœ#˜e›*¶#¤c¨#¤h¸4Ó@ˆä!Ø¨+ñ
ð 	
r   r"   )éÈ   )
r„   rv   rJ   úos.stat_resultrl   r   r~   r   r#   r   )r„   rv   rJ   r‘   rl   r   r#   r   )r%   r&   r'   r(   rƒ   r�   r*   Ú__classcell__)r‡   s   @r   rz   rz   ”   sr   ø† ð ðà$ðð $ðð ð	ð
 ðð 
÷ð ð(
à$ð
ð $ð
ð ð	
ð
 
÷
ò 
r   rz   ) Ú
__future__r   ÚosÚrer   Útypingr   Úurllib.parser   Ústarlette.datastructuresr   Ústarlette.exceptionsr   Ústarlette.responsesr   r	   Ústarlette.staticfilesr
   Ústarlette.typesr   r   r   Úgradio._vendorr   Úgradio._vendor.aiofiles.osrb   ÚcompilerŠ   r   r,   r:   rz   r"   r   r   Ú<module>r       ss   ðõ #ã 	Û 	Û Ý Ý å ,Ý .ß 4Ý -ß 0Ñ 0å #Ý 7à�jŠjÐ?Ó@€ô�*ô ô'�
ô 'ôa˜ô aôH*
˜õ *
r   