U
    Rh7                     @  s   d dl m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
 d dlmZ d dlmZ d dlmZ ede G d	d
 d
eZG dd deZdS )    )annotationsN)Any)Arbiter)Worker)Config)ServerzThe `uvicorn.workers` module is deprecated. Please use `uvicorn-worker` package instead.
For more details, see https://github.com/Kludex/uvicorn-worker.c                      s   e Zd ZU dZdddZded< dddd fd	d
Zdd fddZddddZddddZ	ddddZ
ddddZddddZ  ZS )UvicornWorkerzv
    A worker class for Gunicorn that interfaces with an ASGI consumer callable,
    rather than a WSGI callable.
    autoloopZhttpzdict[str, Any]CONFIG_KWARGSr   None)argskwargsreturnc              	     s2  t  j|| td}| jjj|_|| jjj d|_	td}| jj
j|_|| jj
j d|_	d d | jj| j| j| j| jjd}| jjr| jjd| jjd| jjd| jjd| jjd	| jjd
| jjdd}|| | jjd jr| jjd j|d< || j tf || _d S )Nzuvicorn.errorFzuvicorn.access)appZ
log_configZtimeout_keep_aliveZtimeout_notifycallback_notifyZlimit_max_requestsforwarded_allow_ipsZkeyfileZcertfileZpasswordssl_versionZ	cert_reqsZca_certsZciphers)Zssl_keyfileZssl_certfileZssl_keyfile_passwordr   Zssl_cert_reqsZssl_ca_certsZssl_ciphersZbacklog)super__init__loggingZ	getLoggerlogZ	error_logZhandlersZsetLevellevelZ	propagateZ
access_logZcfgZ	keepalivetimeoutr   Zmax_requestsr   Zis_sslZssl_optionsgetupdateZsettingsvaluer   r   config)selfr   r   loggerZconfig_kwargsZ
ssl_kwargs	__class__ 5./venv/lib/python3.8/site-packages/uvicorn/workers.pyr      s>    


	
zUvicornWorker.__init__)r   c                   s   | j   t   d S N)r   Zsetup_event_loopr   init_processr   r!   r#   r$   r&   I   s    
zUvicornWorker.init_processc                 C  s<   | j D ]}t|tj qttj| j ttjd d S )NF)ZSIGNALSsignalSIG_DFLSIGUSR1Zhandle_usr1siginterrupt)r   sr#   r#   r$   init_signalsM   s    
zUvicornWorker.init_signalsc                 C  s"   t  }|tj| jtjd dS )zInstall a SIGQUIT handler on workers.

        - https://github.com/encode/uvicorn/issues/1116
        - https://github.com/benoitc/gunicorn/issues/2604
        N)asyncioZget_running_loopZadd_signal_handlerr(   SIGQUITZhandle_exit)r   r   r#   r#   r$   _install_sigquit_handlerX   s    z&UvicornWorker._install_sigquit_handlerc                   sH   | j | j_t| jd}|   |j| jdI d H  |jsDt	t
j d S )N)r   )sockets)Zwsgir   r   r   r0   Zserver1   startedsysexitr   ZWORKER_BOOT_ERROR)r   Zserverr#   r#   r$   _serveb   s    
zUvicornWorker._servec                 C  s   t |  S r%   )r.   runr5   r'   r#   r#   r$   r6   j   s    zUvicornWorker.runc                   s   |    d S r%   )notifyr'   r#   r#   r$   r   m   s    zUvicornWorker.callback_notify)__name__
__module____qualname____doc__r   __annotations__r   r&   r-   r0   r5   r6   r   __classcell__r#   r#   r!   r$   r      s   
*
r   c                   @  s   e Zd ZdddZdS )UvicornH11Workerr.   Zh11r
   N)r8   r9   r:   r   r#   r#   r#   r$   r>   q   s   r>   )Z
__future__r   r.   r   r(   r3   warningstypingr   Zgunicorn.arbiterr   Zgunicorn.workers.baser   Zuvicorn.configr   Zuvicorn.serverr   warnDeprecationWarningr   r>   r#   r#   r#   r$   <module>   s    Z