
    df[                         d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ  G d de
      Z G d	 d
e      Zy)    N)AnyDict)Arbiter)Worker)Config)Serverc                        e Zd ZU dZdddZeeef   ed<   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ZddZ xZS )UvicornWorkerzv
    A worker class for Gunicorn that interfaces with an ASGI consumer callable,
    rather than a WSGI callable.
    autoloophttpCONFIG_KWARGSargskwargsreturnNc           	         t        t        | 
  |i | t        j                  d      }| j
                  j                  j                  |_        |j                  | j
                  j                  j                         d|_
        t        j                  d      }| j
                  j                  j                  |_        |j                  | j
                  j                  j                         d|_
        d d | j                  j                  | j                  | j                  | j                   | j                  j"                  d}| j                  j$                  r| j                  j&                  j)                  d      | j                  j&                  j)                  d      | j                  j&                  j)                  d      | j                  j&                  j)                  d      | j                  j&                  j)                  d	      | j                  j&                  j)                  d
      | j                  j&                  j)                  d      d}|j+                  |       | j                  j,                  d   j.                  r&| j                  j,                  d   j.                  |d<   |j+                  | j0                         t3        di || _        y )Nzuvicorn.errorFzuvicorn.access)app
log_configtimeout_keep_alivetimeout_notifycallback_notifylimit_max_requestsforwarded_allow_ipskeyfilecertfilepasswordssl_version	cert_reqsca_certsciphers)ssl_keyfilessl_certfilessl_keyfile_passwordr   ssl_cert_reqsssl_ca_certsssl_ciphersbacklog )superr
   __init__logging	getLoggerlog	error_loghandlerssetLevellevel	propagate
access_logcfg	keepalivetimeoutr   max_requestsr   is_sslssl_optionsgetupdatesettingsvaluer   r   config)selfr   r   loggerconfig_kwargs
ssl_kwargs	__class__s         H/home/api-vastappli/venv/lib/python3.12/site-packages/uvicorn/workers.pyr+   zUvicornWorker.__init__   s   mT+T<V<""?3((,,55**001 ""#34((--66++112  "&(("4"4"ll#33"&"3"3#'88#?#?
 88??#xx3377	B $ 4 4 8 8 D(,(<(<(@(@(L#xx3377F!%!5!5!9!9+!F $ 4 4 8 8 D#xx3377	BJ   ,88Y'--'+xx'8'8'C'I'IM)$T//0-}-    c                 ^    | j                   j                          t        t        |           y N)r?   setup_event_loopr*   r
   init_process)r@   rD   s    rE   rJ   zUvicornWorker.init_process@   s     $$&mT/1rF   c                    | j                   D ]&  }t        j                  |t        j                         ( t        j                  t        j                  | j                         t        j
                  t        j                  d       y )NF)SIGNALSsignalSIG_DFLSIGUSR1handle_usr1siginterrupt)r@   ss     rE   init_signalszUvicornWorker.init_signalsD   sW      	-AMM!V^^,	- 	fnnd&6&67FNNE2rF   c                     t        j                         }|j                  t        j                  | j
                  t        j                  d       y)zInstall a SIGQUIT handler on workers.

        - https://github.com/encode/uvicorn/issues/1116
        - https://github.com/benoitc/gunicorn/issues/2604
        N)asyncioget_running_loopadd_signal_handlerrM   SIGQUIThandle_exit)r@   r   s     rE   _install_sigquit_handlerz&UvicornWorker._install_sigquit_handlerO   s5     '')0@0@&..RVWrF   c                 :  K   | j                   | j                  _        t        | j                        }| j	                          |j                  | j                         d {    |j                  s$t        j                  t        j                         y y 7 5w)N)r?   )sockets)wsgir?   r   r   rZ   server\   startedsysexitr   WORKER_BOOT_ERROR)r@   servers     rE   _servezUvicornWorker._serveY   sj     ))t{{+%%'ll4<<l000~~HHW../  	1s   A!B#B$6Bc                 H    t        j                  | j                               S rH   )rU   runrd   r@   s    rE   rf   zUvicornWorker.runa   s    {{4;;=))rF   c                 ,   K   | j                          y wrH   )notifyrg   s    rE   r   zUvicornWorker.callback_notifyd   s     s   )r   N)__name__
__module____qualname____doc__r   r   strr   __annotations__r+   rJ   rS   rZ   rd   rf   r   __classcell__)rD   s   @rE   r
   r
      s[    
 .4V$DM4S>D(.c (.S (.T (.T2	3X0*rF   r
   c                       e Zd ZdddZy)UvicornH11WorkerrU   h11r   N)rj   rk   rl   r   r)   rF   rE   rr   rr   h   s    &6MrF   rr   )rU   r,   rM   r`   typingr   r   gunicorn.arbiterr   gunicorn.workers.baser   uvicorn.configr   uvicorn.mainr   r
   rr   r)   rF   rE   <module>ry      s;       
  $ ( ! WF Wt7} 7rF   