
    3Cf                     $   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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 	 ddlZej8                  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)Any	AwaitableCallableOptionalUnion)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/highfloat_scraper/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_process,   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.run5   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/   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   runnerrC   r@   r;   ctxrN   socksitepidcnts              r   r,   zGunicornWebWorker._runA   s    dii-))C((3$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{   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   r[   z#GunicornWebWorker._wait_next_notify   sZ      "yy'+'9'9';;f		S$":":FCr    ri   c                 h    || j                   }|t        |d       || j                   u rd | _         y y )NT)r   r   )r   ri   s     r   rf   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siginterruptr4   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 rl   )rT   rF   
worker_intrf   r   r|   r}   s      r   rp   zGunicornWebWorker.handle_quit   s+    
 	D! 	  "r    c                     d| _         d| _        | j                  j                  |        t	        j
                  d       y )NFr   )rT   r   rF   worker_abortr2   r3   r   s      r   ry   zGunicornWebWorker.handle_abort   s-    
d#r    rF   
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.)sslrD   r   ssl_versionload_cert_chaincertfilekeyfile	cert_reqsverify_modeca_certsload_verify_locationsciphersset_ciphers)rF   r_   s     r   rM   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   rI   z'GunicornWebWorker._get_valid_log_format   sD    D<<<222YY~}5(  ! r    r   N)r   rd   r"   )__name__
__module____qualname__r   
LOG_FORMATr   GunicornAccessLogFormatdefaultr   r   r   r)   r5   r,   r[   r   rf   r{   intr   rp   ry   staticmethodrM   strrI   __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#   rR   r   rn   r2   typesr   typingr   r   r   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  
CJs   B 	BB