
    ;3hJ                    d   d dl mZ 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
 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 e
r	  e ej,                  d	d
            Z e ej,                  dd            Z ej,                  dd      Z e ej,                  dd            Zer" ej,                  dd      j9                  d      ng Z ej,                  dd      Z ej,                  dd      Z ej,                  dd      Z  G d dejB                        Z!	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ"y)    )annotationsN)partial)TYPE_CHECKING)Config)ServerFailedToStartError)App)SourceFileReloaderwatchfnGRADIO_SERVER_PORT7860GRADIO_NUM_PORTS100GRADIO_SERVER_NAMEz	127.0.0.1GRADIO_WATCH_DIRS ,GRADIO_WATCH_MODULE_NAMEappGRADIO_WATCH_DEMO_NAMEdemoGRADIO_WATCH_DEMO_PATHc                  @     e Zd Z	 d	 	 	 	 	 d fdZd Zd Zd Z xZS )Serverc                    |j                   | _        t        |   |       || _        | j                  r9t        j                         | _        t        t        | j                        | _
        y y N)r   running_appsuper__init__reloader	threadingEventeventr   r
   watch)selfconfigr   	__class__s      R/var/www/html/audio-gradio/venv/lib/python3.12/site-packages/gradio/http_server.pyr   zServer.__init__%   sQ     "::  =="*DJ $--8DJ     c                     y r    r$   s    r'   install_signal_handlerszServer.install_signal_handlers/   s    r(   c                   t        j                  | j                  d      | _        | j                  r@t        j                  | j
                  d      | _        | j                  j                          | j                  j                          t        j                         }| j                  sHt        j                  d       t        j                         |z
  dkD  rt        d      | j                  sGy y )NT)targetdaemongMbP?   z@Server failed to start. Please check that the port is available.)r    Threadrunthreadr   r#   watch_threadstarttimestartedsleepr   )r$   r5   s     r'   run_in_threadzServer.run_in_thread2   s    &&dhhtD== ) 0 0

4 PD##%		,,JJtyy{U"Q&.V  ,,r(   c                    d| _         | j                  r4| j                  j                          | j                  j	                          | j
                  j	                  d       y )NTr0   )timeout)should_exitr   stopr4   joinr3   r+   s    r'   closezServer.close@   sH    ==MM ""$#r(   r   )r%   r   r   zSourceFileReloader | NonereturnNone)__name__
__module____qualname__r   r,   r9   r?   __classcell__)r&   s   @r'   r   r   $   s2    DH99(A9	9$r(   r   c                v   ||t        d      |xs t        }|dk(  rdn|}|j                  d      r|j                  d      r|dd }n|}||gnt	        t
        t
        t        z         }|D ]  }		 t        j                         }
|
j                  t        j                  t        j                  d       |
j                  t        |	f       |
j                          t        j                  | |	|d	|||
      }d}t        rEt!        | t        t"        t$        t'        j(                         t*        t,        j.                  d         }t1        ||      }|j3                           n% t5        dt9        |       dt;        |       d      |
d| d|	 d}n	d| d|	 d}||	||fS # t4        t6        f$ r Y Hw xY w)a(  Launches a local server running the provided Interface
    Parameters:
        app: the FastAPI app object to run
        server_name: to make app accessible on local network, set this to "0.0.0.0". Can be set by environment variable GRADIO_SERVER_NAME.
        server_port: will start gradio app on this port (if available). Can be set by environment variable GRADIO_SERVER_PORT.
        auth: If provided, username and password (or list of username-password tuples) required to access the Blocks. Can also provide function that takes username and password and returns True if valid login.
        ssl_keyfile: If a path to a file is provided, will use this as the private key file to create a local server running on https.
        ssl_certfile: If a path to a file is provided, will use this as the signed certificate for https. Needs to be provided if ssl_keyfile is provided.
        ssl_keyfile_password: If a password is provided, will use this with the ssl certificate for https.

    Returns:
        server_name: the name of the server (default is "localhost")
        port: the port number the server is running on
        path_to_local_server: the complete address that the local server can be accessed at
        server: the server object that is a subclass of uvicorn.Server (used to close the server)
    Nz9ssl_certfile must be provided if ssl_keyfile is provided.z0.0.0.0	localhost[]   warning)r   porthost	log_levelssl_keyfilessl_certfilessl_keyfile_password__main__)r   
watch_dirswatch_module_name	demo_name
stop_event	demo_filewatch_module)r%   r   z!Cannot find empty port in range: -z. You can specify a different port by setting the GRADIO_SERVER_PORT environment variable or passing the `server_port` parameter to `launch()`.zhttps://:/zhttp://)
ValueErrorLOCALHOST_NAME
startswithendswithrangeINITIAL_PORT_VALUETRY_NUM_PORTSsocket
setsockopt
SOL_SOCKETSO_REUSEADDRbindr?   uvicornr   r   r	   r   r   r    r!   r   sysmodulesr   r9   OSErrorr   minmax)r   server_nameserver_portrP   rQ   rR   url_host_namerN   server_portsrM   sr%   r   serverpath_to_local_servers                  r'   start_serverrv   H   s   0 <#7TUU/K#.)#;KM
 c"{';';C'@1R  " 
%'9M'IJ   *
%	 ALL**F,?,?C FFND)*GGI ^^#')%9F H -0&>4(04!$Z!8 6H=F  "I*
P /L0A/B!CDUCV  Wf  g
 	
 !)-$qA!(qa@2F:: 12 		s   3C0F%%F87F8)NNNNN)r   r   ro   
str | Nonerp   z
int | NonerP   rw   rQ   rw   rR   rw   r@   ztuple[str, int, str, Server])#
__future__r   osrd   rj   r    r6   	functoolsr   typingr   ri   uvicorn.configr   gradio.exceptionsr   gradio.routesr   gradio.utilsr	   r
   intgetenvrb   rc   r^   boolshould_watchsplitr   r   r   r   r   rv   r*   r(   r'   <module>r      sd   " 	  
       ! 6  4 #7@A IBII0%89/=IBII12675AIBII!2&,,S1r  %299%?G "#;VD "#;R@ !$W^^ !$L #""#'+];	];]; ]; 	];
 ]; %]; "];r(   