
    Fg                       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	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  \R2                  " S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)    )annotationsN)
NamedTuple)quote)stat)Headers)HTTPException)Response
guess_type)StaticFiles)ReceiveScopeSendz#^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    g/Users/admin/workspace/ai/PDFMathTranslate/myenv/lib/python3.13/site-packages/gradio/ranged_response.py__len__ClosedRange.__len__   s    xx$**$q((    c                    [        U 5      S:  $ )Nr   )lenr   s    r   __bool__ClosedRange.__bool__   s    4y1}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    DJJ&2dhh_22E%o5&&r   r!   )r   r   r   r   r"   r   )r$   r%   r&   r'   r(   r   r6   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/   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XR                  :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)aiofiles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__2   s     %B  	
  &d 2 Ov||~7O#H$45a8HLJ$'-R(==$+0+?(+}}<34P3QR $ )?t}}oQ&O#LL##$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_headersT   sv    GHH''//UU[[M599+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   r6   rT   rX   r>   openseekr   raw_headersrE   r   r4   
chunk_sizeread)r   scopereceivesendrJ   r\   fnfe
byte_rangefileremaining_bytesrj   chunks               r   __call__RangedFileResponse.__call___   s-    #
S$,TYY$77#.  #**||D))&tyyk'QRR * ZZ%%a)9)9)A)AB
z*==66$))J,,---1!#//   $$13US   #&j/!!5sQVW   ) 766, &)!$T__o!FJ"&))J"77E#s5z1O$8$))81)<  	 &)- 766 8$ "#DII;.>? 7-# 70 85 7666s  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   r9   r9   /   sv    J *.!%#-1! ' '  ' '	 '
  '  ' + '  ' 
 'D	1r   r9   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   r9   )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#h4@!+
 	
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   r>   aiofiles.osrb   starlette.datastructuresr   starlette.exceptionsr   starlette.responsesr	   r
   starlette.staticfilesr   starlette.typesr   r   r   compiler   r   r+   r9   rz   r!   r   r   <module>r      ss    # 	 	     ( , . 4 - 0 0jj?@* '
 'a aH*
 *
r   