
    ;3h                     J   d Z ddl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
mZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ e
rddlZej6                  Zn	 ddlZej6                  ZdZ G d dej>                        Z  G d de       Z!y# e$ r dZeZY .w xY w)z%Async gunicorn worker for aiohttp.web    N)	FrameType)TYPE_CHECKINGAnyOptional)AccessLogFormat)base)web   )
set_result)Application)AccessLogger)GunicornWebWorkerGunicornUVLoopWebWorkerc                        e Zd Zej                  Zej                  Zde	de	ddf fdZ
d fdZddZddZdd
Z	 dded	   ddfdZddZdedee   ddfdZdedee   ddfdZede	ddfd       ZdedefdZ xZS )r   argskwreturnNc                 N    t        |   |i | d | _        d| _        d | _        y Nr   )super__init___task	exit_code_notify_waiter)selfr   r   	__class__s      N/var/www/html/audio-gradio/venv/lib/python3.12/site-packages/aiohttp/worker.pyr   zGunicornWebWorker.__init__+   s+    $%"%37
>B    c                     t        j                         j                          t        j                         | _        t        j
                  | j                         t        |           y N)asyncioget_event_loopclosenew_event_looploopset_event_loopr   init_process)r   r   s    r   r'   zGunicornWebWorker.init_process2   sE     &&(**,	tyy)r   c                    | j                   j                  | j                               | _        	 | j                   j	                  | j                         | j                   j	                  | j                   j                                | j                   j                          t        j                  | j                         y # t
        $ r | j                  j                  d       Y w xY w)NzException in gunicorn worker)r%   create_task_runr   run_until_complete	Exceptionlog	exceptionshutdown_asyncgensr#   sysexitr   r   s    r   runzGunicornWebWorker.run;   s    YY**499;7
	?II((4 			$$TYY%A%A%CD		   	?HH=>	?s   %C $C)(C)c           	        K   d }t        | j                  t              r| j                  }nt        j                  | j                        s2t
        j                  dk  rct        j                  | j                        rD| j                          d {   }t        |t        j                        r|}|j                  }n'|}n$t        dj                  | j                              || j                  j                  r| j                  j                   nd }t        j                  || j                  | j                  j"                  || j%                  | j                  j&                        | j                  j(                  dz  dz        }|j+                          d {    | j                  j,                  r| j/                  | j                        nd }|}|J |j0                  }|J | j2                  D ]2  }t        j4                  |||      }|j7                          d {    4 t9        j:                         }		 | j<                  r| j?                          |j@                  }
| jB                  r3|
| jB                  kD  r$d| _        | j                  jE                  d|        nt|	t9        j:                         k(  rE| jF                  t9        jH                         k7  r$d| _        | j                  jE                  d	|        n| jK                          d {    | j<                  r|jO                          d {    y 7 7 7 #7 3# tL        $ r Y /w xY w7 w)
N)      zUwsgi app should be either Application or async function returning Application, got {}d   _   )loggerkeepalive_timeout
access_logaccess_log_formatshutdown_timeout)ssl_contextFzMax requests, shutting down: %sz!Parent changed, shutting down: %s)(
isinstancewsgir   inspectiscoroutinefunctionr0   version_infor!   r	   	AppRunnerappRuntimeErrorformatcfg	accesslogr-   r;   	keepalive_get_valid_log_formatr<   graceful_timeoutsetupis_ssl_create_ssl_contextserversocketsSockSitestartosgetpidalivenotifyrequests_countmax_requestsinfoppidgetppid_wait_next_notifyBaseExceptioncleanup)r   runnerrE   r@   r;   ctxrP   socksitepidcnts              r   r*   zGunicornWebWorker._runG   s    dii-))C((3w&7+F+Ftyy+Q$D$.jj??Evdii?P 
 >040B0B,,J]]xx"&(("4"4%"&"<"<HH..# "&!:!:S!@2!E	F lln48HHOOd&&txx0!!!!!!LL 	D<<D
 **,	 iik	**++$$t/@/@)@!&DJHHMM"CTJBIIK'DII,E!&DJHHMM"EtL00222 **  nnw %0 	 " 3 		 	s{   BMMDMMBM&M	'MCM MM *M=M>MM	MM 	MMMMasyncio.Future[bool]c                     | j                          | j                  }|J |j                         x| _        }| j                  j	                  d| j                   |       |S )Ng      ?)_notify_waiter_doner%   create_futurer   
call_later)r   r%   waiters      r   r]   z#GunicornWebWorker._wait_next_notify   sZ      "yy'+'9'9';;f		S$":":FCr   rk   c                 h    || j                   }|t        |d       || j                   u rd | _         y y )NT)r   r   )r   rk   s     r   rh   z%GunicornWebWorker._notify_waiter_done   s?     >((Fvt$T((("&D )r   c                    | j                   j                  t        j                  | j                  t        j                  d        | j                   j                  t        j
                  | j                  t        j
                  d        | j                   j                  t        j                  | j                  t        j                  d        | j                   j                  t        j                  | j                  t        j                  d        | j                   j                  t        j                  | j                  t        j                  d        | j                   j                  t        j                  | j                  t        j                  d        t        j                  t        j
                  d       t        j                  t        j                  d       y NF)r%   add_signal_handlersignalSIGQUIThandle_quitSIGTERMhandle_exitSIGINTSIGWINCHhandle_winchSIGUSR1handle_usr1SIGABRThandle_abortsiginterruptr2   s    r   init_signalszGunicornWebWorker.init_signals   s.    			$$NND,,fnnd	
 			$$NND,,fnnd	
 			$$MM4++V]]D	
 			$$OOT..	
 			$$NND,,fnnd	
 			$$NND--v~~t	
 	FNNE2FNNE2r   sigframec                 h    d| _         | j                  j                  |        | j                          y rn   )rV   rH   
worker_intrh   r   r~   r   s      r   rr   zGunicornWebWorker.handle_quit   s+    
 	D! 	  "r   c                     d| _         d| _        | j                  j                  |        t	        j
                  d       y )NFr
   )rV   r   rH   worker_abortr0   r1   r   s      r   r{   zGunicornWebWorker.handle_abort   s-    
d#r   rH   
SSLContextc                 p   t         t        d      t        j                  | j                        }|j	                  | j
                  | j                         | j                  |_        | j                  r|j                  | j                         | j                  r|j                  | j                         |S )z~Creates SSLContext instance for usage in asyncio.create_server.

        See ssl.SSLSocket.__init__ for more details.
        zSSL is not supported.)sslrF   r   ssl_versionload_cert_chaincertfilekeyfile	cert_reqsverify_modeca_certsload_verify_locationsciphersset_ciphers)rH   ra   s     r   rO   z%GunicornWebWorker._create_ssl_context   s     ;677nnS__-CLL#++6--<<%%cll3;;OOCKK(
r   source_formatc                 ~    || j                   k(  r| j                  S t        j                  d|      rt	        d      |S )Nz%\([^\)]+\)zGunicorn's style options in form of `%(name)s` are not supported for the log formatting. Please use aiohttp's format specification to configure access log formatting: http://docs.aiohttp.org/en/stable/logging.html#format-specification)DEFAULT_GUNICORN_LOG_FORMATDEFAULT_AIOHTTP_LOG_FORMATresearch
ValueError)r   r   s     r   rK   z'GunicornWebWorker._get_valid_log_format   sD    D<<<222YY~}5(  ! r   r   N)r   rf   r    )__name__
__module____qualname__r   
LOG_FORMATr   GunicornAccessLogFormatdefaultr   r   r   r'   r3   r*   r]   r   rh   r}   intr   rr   r{   staticmethodrO   strrK   __classcell__r   s   @r   r   r   &   s    !-!8!8"9"A"ACc C C C
!BH :>	'56	'		'3D#s #8I+> #4 # HY,? D     "!3 !3 !r   r   c                         e Zd Zd fdZ xZS )r   c                     dd l }t        j                         j                          t        j                  |j                                t        |           y r   )uvloopr!   r"   r#   set_event_loop_policyEventLoopPolicyr   r'   )r   r   r   s     r   r'   z$GunicornUVLoopWebWorker.init_process   sA     	 &&(
 	%%f&<&<&>?r   r   )r   r   r   r'   r   r   s   @r   r   r      s     r   r   )"__doc__r!   rA   rT   r   rp   r0   typesr   typingr   r   r   gunicorn.configr   r   gunicorn.workersr   aiohttpr	   helpersr   web_appr   web_logr   r   r   ImportErrorobject__all__Workerr   r    r   r   <module>r      s    +   	 	  
  / / F !     !J^^
 ;I! I!X/ i  
s   #B 	B"!B"