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}|}|j}|jD]0}t j||||jjddd}|IdHqt}z|jrr||j} |jjr.| |jjkr.d|_|j d|q|tkrb|jt krbd|_|j d|q|!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_contextserverZsocketsZSockSiteZgraceful_timeoutstartosgetpidaliveZnotifyZrequests_countZ max_requestsinfoZppidgetppid_wait_next_notify BaseExceptionZcleanup) rZappr0Zrunnerctxr:ZsockZsitepidZcntrrrr)BsX    zGunicornWebWorker._runzasyncio.Future[bool]cCs2||j}||_}|jd|j||S)Ng?)_notify_waiter_doner$Z create_futurerZ call_later)rr$waiterrrrrAzs z#GunicornWebWorker._wait_next_notify)rFrcCs4|dkr|j}|dk r t|d||jkr0d|_dS)NT)rr )rrFrrrrEs   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||dSrG)r>r7Z worker_intrErrSrTrrrrJs zGunicornWebWorker.handle_quitcCs&d|_d|_|j|tddS)NFr )r>rr7Z worker_abortr,r.rUrrrrPs 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.) sslr5rVZ ssl_versionZload_cert_chainZcertfileZkeyfileZ cert_reqsZ verify_modeZca_certsZload_verify_locationsZciphersZ set_ciphers)r7rCrrrr9s   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)rrXrrrr8s  z'GunicornWebWorker._get_valid_log_format)N)__name__ __module__ __qualname__rZ LOG_FORMATrZGunicornAccessLogFormatdefaultrYrrr%r/r)rArrErRintrrJrP staticmethodr9strr8 __classcell__rrrrr s$  8    rcs"eZdZddfdd ZZS)rNr cs0ddl}tt|tdSr)uvloopr!r"r#set_event_loop_policyEventLoopPolicyrr%)rrgrrrr%s z$GunicornUVLoopWebWorker.init_processr^r_r`r%rfrrrrrsrcs"eZdZddfdd ZZS)rNr cs0ddl}tt|tdSr)tokior!r"r#rhrirr%)rrkrrrr%s z#GunicornTokioWebWorker.init_processrjrrrrrsr)$__doc__r!r<r[rHr,typesrtypingrrrrrZgunicorn.configrraZgunicorn.workersr Zaiohttpr Zhelpersr Zweb_appr Zweb_logrrWrV ImportErrorobject__all__ZWorkerrrrrrrrs0         @