wce$dZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z m Z ddlmZddlmZddlmZdd lmZdd lmZdd lmZ ddlZej8Zd ZGd dej@Z!Gdde!Z"y#e$rdZeZY.wxYw)z%Async gunicorn worker for aiohttp.webN) FrameType)Any AwaitableCallableOptionalUnion)AccessLogFormat)base)web) set_result) Application) AccessLogger)GunicornWebWorkerGunicornUVLoopWebWorkerceZdZejZejZde de ddffd Z dfd Z ddZ ddZ dd Z dd ed ddfd Zdd ZdedeeddfdZdedeeddfdZede ddfdZdedefdZxZS)rargskwreturnNcNt||i|d|_d|_d|_yNr)super__init___task exit_code_notify_waiter)selfrr __class__s 0/usr/lib/python3/dist-packages/aiohttp/worker.pyrzGunicornWebWorker.__init__%s+ $%"%37 >Bctjjtj|_tj |jt |yN)asyncioget_event_loopclosenew_event_looploopset_event_loopr init_process)rrs rr)zGunicornWebWorker.init_process,sE &&(**, tyy) r c|jj|j|_ |jj |j|jj |jj|jjtj|jy#t $r|j jdYwxYw)NzException in gunicorn worker) r' create_task_runrrun_until_complete Exceptionlog exceptionshutdown_asyncgensr%sysexitrrs rrunzGunicornWebWorker.run5sYY**499;7  ? II ( ( 4 $$TYY%A%A%CD    ? HH  = > ?s%C$C)(C)c ^Kd}t|jtr |j}ntj|jrD|jd{}t|t j r|}|j}n'|}n$tdj|j||jjr|jjnd}t j ||j|jj||j|jj |jj"dz dz}|j%d{|jj&r|j)|jnd}|}|J|j*}|J|j,D]2}t j.|||}|j1d{4t3j4} |j6r|j9|j:} |j<r3| |j<kDr$d|_|jj?d|nt| t3j4k(rE|j@t3jBk7r$d|_|jj?d|n|jEd{|j6r|jId{y777#73#tF$rY/wxYw7w) NzUwsgi app should be either Application or async function returning Application, got {}d_)loggerkeepalive_timeout access_logaccess_log_formatshutdown_timeout) ssl_contextFzMax requests, shutting down: %sz!Parent changed, shutting down: %s)% isinstancewsgirr#iscoroutinefunctionr AppRunnerapp RuntimeErrorformatcfg accesslogr/r; keepalive_get_valid_log_formatr<graceful_timeoutsetupis_ssl_create_ssl_contextserversocketsSockSitestartosgetpidalivenotifyrequests_count max_requestsinfoppidgetppid_wait_next_notify BaseExceptioncleanup) rrunnerrCr@r;ctxrNsocksitepidcnts rr,zGunicornWebWorker._runAs dii -))C  ( ( 3$D$ .jj??Evdii?P  >040B0B,,J]]xx"&(("4"4%"&"<"<HH..#"&!:!:S!@2!E Flln48HHOOd&&txx0!!!!!!LL D<<D **,    iik ** ++$$t/@/@)@!&DJHHMM"CTJBIIK'DII,E!&DJHHMM"EtL00222** nnw%0  "3    s{AL-LD L-,L-BL-4L5L-CL&L'L8L- L+ L-L-L-L L(%L-'L((L-asyncio.Future[bool]c|j|j}|J|jx|_}|jj d|j||S)Ng?)_notify_waiter_doner' create_futurer call_later)rr'waiters rr[z#GunicornWebWorker._wait_next_notifysZ   "yy'+'9'9';;f S$":":FC r rich| |j}| t|d||jurd|_yy)NT)rr )rris rrfz%GunicornWebWorker._notify_waiter_dones? >((F   vt $ T(( ("&D  )r c|jjtj|jtjd|jjtj |j tj d|jjtj|jtjd|jjtj|jtjd|jjtj|jtjd|jjtj|jtjdtjtj dtjtjdyNF)r'add_signal_handlersignalSIGQUIT handle_quitSIGTERM handle_exitSIGINTSIGWINCH handle_winchSIGUSR1 handle_usr1SIGABRT handle_abort siginterruptr4s r init_signalszGunicornWebWorker.init_signalss. $$ NND,,fnnd  $$ NND,,fnnd  $$ MM4++V]]D  $$ OOT..  $$ NND,,fnnd  $$ NND--v~~t FNNE2FNNE2r sigframechd|_|jj||jyrl)rTrF worker_intrfrr|r}s rrpzGunicornWebWorker.handle_quits+  D!   "r cd|_d|_|jj|t j dy)NFr )rTrrF worker_abortr2r3rs rryzGunicornWebWorker.handle_aborts-  d#  r rF SSLContextcpt tdtj|j}|j |j |j |j|_|jr|j|j|jr|j|j|S)z~Creates SSLContext instance for usage in asyncio.create_server. See ssl.SSLSocket.__init__ for more details. zSSL is not supported.) sslrDr ssl_versionload_cert_chaincertfilekeyfile cert_reqs verify_modeca_certsload_verify_locationsciphers set_ciphers)rFr_s rrMz%GunicornWebWorker._create_ssl_contexts ;67 7nnS__- CLL#++6-- <<  % %cll 3 ;; OOCKK ( r source_formatc~||jk(r |jStjd|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_FORMATDEFAULT_AIOHTTP_LOG_FORMATresearch ValueError)rrs rrIz'GunicornWebWorker._get_valid_log_formatsD D<< <22 2 YY~} 5( ! r rN)rrdr")__name__ __module__ __qualname__r LOG_FORMATrGunicornAccessLogFormatdefaultrrrr)r5r,r[rrfr{intrrpry staticmethodrMstrrI __classcell__rs@rrr s!-!8!8"9"A"ACcCCC !@D:> '56 '  '3D#s#8I+>#4#HY,?D " !3 !3 !r rc eZdZdfd ZxZS)rcddl}tjjtj|j t |yr)uvloopr#r$r%set_event_loop_policyEventLoopPolicyrr))rrrs rr)z$GunicornUVLoopWebWorker.init_processsA  &&( %%f&<&<&>? r r)rrrr)rrs@rrrs   r r)#__doc__r#rRrrnr2typesrtypingrrrrrgunicorn.configr rgunicorn.workersr aiohttpr helpersr web_apprweb_logrrr ImportErrorobject__all__Workerrrr rrs+ <<F! !J ;G! G!T / e CJsB BB