
    l0j                    .   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	Z	d dl
mZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZmZ  ej        d          Z G d de          Z G d de          Z G d de          Z G d de          ZdS )    )annotationsN)
NamedTuple)quote)stat)Headers)HTTPException)Response
guess_type)StaticFiles)ReceiveScopeSendz#^bytes=(?P<start>\d+)-(?P<end>\d*)$c                  4    e Zd ZU ded<   ded<   d	dZd
dZdS )ClosedRangeintstartendreturnc                &    | j         | j        z
  dz   S )N   )r   r   selfs    Y/home/wildlama/miniconda3/envs/lam/lib/python3.11/site-packages/gradio/ranged_response.py__len__zClosedRange.__len__   s    x$*$q((    boolc                (    t          |           dk    S )Nr   )lenr   s    r   __bool__zClosedRange.__bool__   s    4yy1}r   N)r   r   )r   r   )__name__
__module____qualname____annotations__r   r    r   r   r   r      sP         JJJHHH) ) ) )     r   r   c                  0    e Zd ZU ded<   dZded<   d	dZdS )
	OpenRanger   r   Nz
int | Noner   r   r   c                    t          | j        |          }t          d | j        |fD                       }t          ||          }t          ||          }t	          ||          S )Nc              3     K   | ]}||V  	d S )Nr$   ).0xs     r   	<genexpr>z"OpenRange.clamp.<locals>.<genexpr>'   s'      222!222222r   )maxr   minr   r   )r   r   r   begins       r   clampzOpenRange.clamp%   s_    DJ&&22dh_22222E3%oo5#&&&r   )r   r   r   r   r   r   )r    r!   r"   r#   r   r/   r$   r   r   r&   r&   !   sD         JJJC' ' ' ' ' 'r   r&   c                  6    e Zd ZdZ	 	 	 	 	 dddZddZddZdS )RangedFileResponsei   Npathstr | os.PathLikeranger&   headersdict[str, str] | None
media_type
str | Nonefilenamestat_resultos.stat_result | Nonemethodr   Nonec                   t           
J d            || _        || _        || _        d | _        |d uo|                                dk    | _        |t          |p|          d         pd}|| _        | 	                    |pi            | j        Kt          | j                  }|| j        k    rd| }	nd| j         d}	| j                            d|	           || _        d S )	Nz0'aiofiles' must be installed to use FileResponseHEADr   z
text/plainzattachment; filename*=utf-8''zattachment; filename=""zcontent-disposition)aiofilesr2   r4   r9   
backgrounduppersend_header_onlyr
   r7   init_headersr   r5   
setdefaultr:   )
r   r2   r4   r5   r7   r9   r:   r<   content_disposition_filenamecontent_dispositions
             r   __init__zRangedFileResponse.__init__2   s    ##%W###	
  &d 2 Ov||~~7O#H$455a8HLJ$'-R(((=$+0+?+?(+t}<<R4PRR $# 'Pt}&O&O&O#L##$9;NOOO&r   r   c                    | j         sJ | j         j        }t          |          }d|j         d|j         d| | j        d<   t          |          | j        d<   d S )Nzbytes -/zcontent-rangezcontent-length)r:   st_sizer   r   r   r5   str)r   r4   total_lengthcontent_lengths       r   set_range_headersz$RangedFileResponse.set_range_headersQ   ss    '/U >U[==59==|== 		
 *-^)<)<%&r   scoper   receiver   sendr   c                  K   | j         	 t          | j                   d {V }|| _         |j        }t	          j        |          st          d| j         d          n+# t          $ r}t          d| j         d          |d }~ww xY w| j        	                    d| j         j
                  }|                     |           t          j        | j        d          4 d {V }|                    |j                   d {V   |dd| j        d	           d {V  | j        r |d
ddd           d {V  nt%          |          }	|s) |d
ddd           d {V  	 d d d           d {V  d S |	dk    rat'          | j        |	          }
|                    |
           d {V }|	t%          |          z  }	 |d
||	dk    d           d {V  |	dk    a	 d d d           d {V  d S # 1 d {V swxY w Y   d S )NzFile at path z is not a file.z does not exist.r   rb)modezhttp.response.start   )typestatusr5   zhttp.response.bodyr   F)rY   body	more_body)r:   aio_statr2   st_moder   S_ISREGRuntimeErrorFileNotFoundErrorr4   r/   rM   rQ   rA   openseekr   raw_headersrD   r   r-   
chunk_sizeread)r   rR   rS   rT   r:   rW   fnfe
byte_rangefileremaining_bytesre   chunks               r   __call__zRangedFileResponse.__call__[   s     #
S$,TY$7$7777777#.  #*|D)) S&'Qty'Q'Q'QRRRS %   "?DI???  Z%%a)9)ABB
z***=666  	  	  	  	  	  	  	$))J,---------$1!#/          $ d13USS          #&j//! $!5sQVWW         ) 	  	  	  	  	  	  	  	  	  	  	  	  	  	, &))!$T_o!F!FJ"&))J"7"7777777E#s5zz1O$$8$))81)<         	 &)))- 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	s1   !A   
B*BB&A?G38A'G33
G= G=)NNNNN)r2   r3   r4   r&   r5   r6   r7   r8   r9   r8   r:   r;   r<   r8   r   r=   )r4   r   r   r=   )rR   r   rS   r   rT   r   r   r=   )r    r!   r"   re   rI   rQ   rl   r$   r   r   r1   r1   /   sk        J *.!%#-1!' ' ' ' '>   1 1 1 1 1 1r   r1   c                  ,     e Zd Z	 dd fdZddZ xZS )RangedStaticFiles   	full_pathr3   r:   os.stat_resultrR   r   status_coder   r   r	   c                    t          |          }|                    d          r|                     |||          }n%t                                          ||||          }d|j        d<   |S )NrR   r4   )r:   rR   )r:   rR   rr   byteszaccept-ranges)r   getranged_file_responsesuperfile_responser5   )r   rp   r:   rR   rr   request_headersresponse	__class__s          r   ry   zRangedStaticFiles.file_response   s     "...w'' 	00{% 1  HH ww,,{%[ -  H -4)r   c                n   |d         }t          |          }|d         }t                              |          }|st          d          |                    d          |                    d          }	}t          t          |          |	rt          |	          nd           }
t          ||
||          S )Nr<   rt   r4   i  r   r   )r:   r<   )r   RANGE_REGEXsearchr   groupr&   r   r1   )r   rp   r:   rR   r<   rz   range_headermatchr   r   r4   s              r   rw   z&RangedStaticFiles.ranged_file_response   s     x!...&w/""<00 	%$$$[[))5;;u+=+=s#e**#&?c#hhh4@@!u+f
 
 
 	
r   )ro   )
rp   r3   r:   rq   rR   r   rr   r   r   r	   )rp   r3   r:   rq   rR   r   r   r	   )r    r!   r"   ry   rw   __classcell__)r|   s   @r   rn   rn      s[               (
 
 
 
 
 
 
 
r   rn   )
__future__r   osrer   typingr   urllib.parser   rA   aiofiles.osr]   starlette.datastructuresr   starlette.exceptionsr   starlette.responsesr	   r
   starlette.staticfilesr   starlette.typesr   r   r   compiler~   r   r&   r1   rn   r$   r   r   <module>r      s   # " " " " " 				 				               ( ( ( ( ( ( , , , , , , . . . . . . 4 4 4 4 4 4 4 4 - - - - - - 0 0 0 0 0 0 0 0 0 0bj?@@    *   ' ' ' ' '
 ' ' '] ] ] ] ] ] ] ]@*
 *
 *
 *
 *
 *
 *
 *
 *
 *
r   