
    Pi                    .   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    j/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/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           t          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)aiofilesModuleNotFoundErrorr2   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    %B   	
  &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t          d          | j         j        }t          |          }d|j         d|j         d| | j        d<   t          |          | j        d<   d S )Nz(No stat result to set range headers withzbytes -/zcontent-rangezcontent-length)r:   
ValueErrorst_sizer   r   r   r5   str)r   r4   total_lengthcontent_lengths       r   set_range_headersz$RangedFileResponse.set_range_headersT   sz     	IGHHH'/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)r[   body	more_body)r:   aio_statr2   st_moder   S_ISREGRuntimeErrorFileNotFoundErrorr4   r/   rO   rS   rA   openseekr   raw_headersrE   r   r-   
chunk_sizeread)r   rT   rU   rV   r:   rY   fnfe
byte_rangefileremaining_bytesrg   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=   )rT   r   rU   r   rV   r   r   r=   )r    r!   r"   rg   rJ   rS   rn   r$   r   r   r1   r1   /   sl        J *.!%#-1! '  '  '  '  'D	 	 	 	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_resultrT   r   status_coder   r   r	   c                    t          |          }|                    d          r|                     |||          }n%t                                          ||||          }d|j        d<   |S )NrT   r4   )r:   rT   )r:   rT   rt   byteszaccept-ranges)r   getranged_file_responsesuperfile_responser5   )r   rr   r:   rT   rt   request_headersresponse	__class__s          r   r{   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<   rv   r4   i  r   r   )r:   r<   )r   RANGE_REGEXsearchr   groupr&   r   r1   )r   rr   r:   rT   r<   r|   range_headermatchr   r   r4   s              r   ry   z&RangedStaticFiles.ranged_file_response   s     x!...&w/""<00 	%$$$[[))5;;u+=+=s#e**#&?c#hhh4@@!u+f
 
 
 	
r   )rq   )
rr   r3   r:   rs   rT   r   rt   r   r   r	   )rr   r3   r:   rs   rT   r   r   r	   )r    r!   r"   r{   ry   __classcell__)r~   s   @r   rp   rp      s[               (
 
 
 
 
 
 
 
r   rp   )
__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   rp   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?@@    *   ' ' ' ' '
 ' ' 'a a a a a a a aH*
 *
 *
 *
 *
 *
 *
 *
 *
 *
r   