
    gh                     B   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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j4                  Zn	 ddlZej4                  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      C/var/www/openai/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_process1   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                        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 |j*                  }|J | j,                  D ]2  }t        j.                  |||      }|j1                          d {    4 t3        j4                         }		 | j6                  r| j9                          |j:                  }
| j<                  r3|
| j<                  kD  r$d| _        | j                  j?                  d|        nt|	t3        j4                         k(  rE| j@                  t3        jB                         k7  r$d| _        | j                  j?                  d|        n| jE                          d {    | j6                  r|jI                          d {    y 7 7 7 #7 3# tF        $ r Y /w xY w7 w)	NzUwsgi 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   r!   iscoroutinefunctionr	   	AppRunnerappRuntimeErrorformatcfg	accesslogr-   r9   	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   runnerrA   r>   r9   ctxrL   socksitepidcnts              r   r*   zGunicornWebWorker._runF   s    dii-))C((3$D$.jj??Evdii?P 
 >040B0B,,J]]xx"&(("4"4%"&"<"<HH..# "&!:!:S!@2!E	F lln48HHOOd&&txx0!!!!!!LLD<<D
 **, ! iik	**++$$t/@/@)@!&DJHHMM"CTJBIIK'DII,E!&DJHHMM"EtL00222 **  nnw %0 	 " 3 		 	s{   AL-LDL-,L-BL-4L5L-CL &L'L 8L-L+L-L-L-L 	L(%L-'L((L-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   rY   z#GunicornWebWorker._wait_next_notify   sZ      "yy'+'9'9';;f		S$":":FCr   rg   c                 h    || j                   }|t        |d       || j                   u rd | _         y y )NT)r   r   )r   rg   s     r   rd   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 rj   )rR   rD   
worker_intrd   r   rz   r{   s      r   rn   zGunicornWebWorker.handle_quit   s+    
 	D! 	  "r   c                     d| _         d| _        | j                  j                  |        t	        j
                  d       y )NFr
   )rR   r   rD   worker_abortr0   r1   r~   s      r   rw   zGunicornWebWorker.handle_abort   s-    
d#r   rD   
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.)sslrB   r   ssl_versionload_cert_chaincertfilekeyfile	cert_reqsverify_modeca_certsload_verify_locationsciphersset_ciphers)rD   r]   s     r   rK   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   rG   z'GunicornWebWorker._get_valid_log_format   sD    D<<<222YY~}5(  ! r   r   N)r   rb   r    )__name__
__module____qualname__r   
LOG_FORMATr   GunicornAccessLogFormatdefaultr   r   r   r'   r3   r*   rY   r   rd   ry   intr   rn   rw   staticmethodrK   strrG   __classcell__r   s   @r   r   r   %   s    !-!8!8"9"A"ACc C C C
!@D :>	'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!   rP   r   rl   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^^
 ;G! G!T/ e  
s   B 	BB