U '7`V@sdZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z m Z ddlmZddlmZddlmZdd lmZdd lmZdd lmZzddlZejZWnek rdZeZYnXd ZGd ddej Z!Gddde!Z"Gddde!Z#dS)z%Async gunicorn worker for aiohttp.webN) FrameType)Any AwaitableCallableOptionalUnion)AccessLogFormat)base)web) set_result) Application) AccessLogger)GunicornWebWorkerGunicornUVLoopWebWorkerGunicornTokioWebWorkercseZdZejZejZe e ddfdd Z ddfdd Z dddd Z ddd d Z d dd dZd ed ddddZddddZeeddddZeeddddZee ddddZeedddZZS)!rN)argskwreturncs$tj||d|_d|_d|_dSNr)super__init___task exit_code_notify_waiter)selfrr __class__A/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/worker.pyr%szGunicornWebWorker.__init__rcs0tt|_t|jtdS)N)asyncioget_event_loopcloseZnew_event_looploopZset_event_loopr init_processrrrrr%,s   zGunicornWebWorker.init_processcCs||j||_z|j|jWn tk rD|jdYnXtj dkrb|j|j |j t |j dS)NzException in gunicorn worker))r$Z create_task_runrZrun_until_complete ExceptionlogZ exceptionsys version_infoZshutdown_asyncgensr#exitrr&rrrrun5s  zGunicornWebWorker.runc st|jtr|j}n,t|jr0|IdH}ntd|j|jjrP|j j nd}t j ||j |jj |||jjd}|IdH|jjr||jnd}|}|dk st|j}|dk st|jD]0}t j||||jjddd}|IdHqt}z|jr||j} |jjrF| |jjkrFd|_|j d|nB|tkrz|j t!krzd|_|j d|n|"IdHqWnt#k rYnX|$IdHdS) NzUwsgi app should be either Application or async function returning Application, got {})ZloggerZkeepalive_timeout access_logaccess_log_formatd_)Z ssl_contextZshutdown_timeoutFzMax requests, shutting down: %sz!Parent changed, shutting down: %s)% isinstanceZwsgir r!Ziscoroutinefunction RuntimeErrorformatcfgZ accesslogr+r0r Z AppRunnerZ keepalive_get_valid_log_formatr1ZsetupZis_ssl_create_ssl_contextAssertionErrorserverZsocketsZSockSiteZgraceful_timeoutstartosgetpidaliveZnotifyZrequests_countZ max_requestsinfoZppidgetppid_wait_next_notify BaseExceptionZcleanup) rZappr0Zrunnerctxr;ZsockZsitepidZcntrrrr)Bs\      zGunicornWebWorker._runzasyncio.Future[bool]cCs>||j}|dk st||_}|jd|j||S)Ng?)_notify_waiter_doner$r:Z create_futurerZ call_later)rr$waiterrrrrBzs  z#GunicornWebWorker._wait_next_notify)rGrcCs4|dkr|j}|dk r t|d||jkr0d|_dS)NT)rr )rrGrrrrFs   z%GunicornWebWorker._notify_waiter_donecCs|jtj|jtjd|jtj|jtjd|jtj|jtjd|jtj|j tjd|jtj |j tj d|jtj |j tj dttjdttj ddSNF)r$Zadd_signal_handlersignalSIGQUIT handle_quitSIGTERMZ handle_exitSIGINTSIGWINCHZ handle_winchSIGUSR1Z handle_usr1SIGABRT handle_abort siginterruptr&rrr init_signalssLzGunicornWebWorker.init_signals)sigframercCsd|_|j||dSrH)r?r7Z worker_intrFrrTrUrrrrKs zGunicornWebWorker.handle_quitcCs&d|_d|_|j|tddS)NFr )r?rr7Z worker_abortr,r.rVrrrrQs zGunicornWebWorker.handle_abort SSLContext)r7rcCs\tdkrtdt|j}||j|j|j|_|j rF| |j |j rX| |j |S)z~Creates SSLContext instance for usage in asyncio.create_server. See ssl.SSLSocket.__init__ for more details. NzSSL is not supported.) sslr5rWZ ssl_versionZload_cert_chainZcertfileZkeyfileZ cert_reqsZ verify_modeZca_certsZload_verify_locationsZciphersZ set_ciphers)r7rDrrrr9s   z%GunicornWebWorker._create_ssl_context) source_formatrcCs.||jkr|jStd|r&tdn|SdS)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_FORMATDEFAULT_AIOHTTP_LOG_FORMATresearch ValueError)rrYrrrr8s  z'GunicornWebWorker._get_valid_log_format)N)__name__ __module__ __qualname__rZ LOG_FORMATr[GunicornAccessLogFormatdefaultrZrrr%r/r)rBrrFrSintrrKrQ staticmethodr9strr8 __classcell__rrrrr s$  8    rcs"eZdZddfdd ZZS)rNr cs0ddl}tt|tdSr)uvloopr!r"r#set_event_loop_policyEventLoopPolicyrr%)rrhrrrr%s z$GunicornUVLoopWebWorker.init_processr_r`rar%rgrrrrrsrcs"eZdZddfdd ZZS)rNr cs0ddl}tt|tdSr)tokior!r"r#rirjrr%)rrlrrrr%s z#GunicornTokioWebWorker.init_processrkrrrrrsr)$__doc__r!r=r\rIr,typesrtypingrrrrrZgunicorn.configrrbZgunicorn.workersr Zaiohttpr Zhelpersr Zweb_appr Zweb_logrrXrW ImportErrorobject__all__ZWorkerrrrrrrrs0         @