B
    Ce[                 @   s   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 de
ZG d	d
 d
eZdS )    N)AnyDict)Arbiter)Worker)Config)Serverc                   s   e Zd ZU dZdddZeeef ed< ee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)loophttpCONFIG_KWARGSN)argskwargsreturnc          	      s6  t 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_ipskeyfilecertfilepasswordssl_version	cert_reqsca_certsciphers)Zssl_keyfileZssl_certfileZssl_keyfile_passwordr   Zssl_cert_reqsZssl_ca_certsZssl_ciphersbacklog)superr   __init__logging	getLoggerlogZ	error_loghandlerssetLevellevel	propagateZ
access_logcfg	keepalivetimeoutr   Zmax_requestsr   Zis_sslZssl_optionsgetupdatesettingsvaluer   r   config)selfr   r   loggerZconfig_kwargsZ
ssl_kwargs)	__class__ c/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/uvicorn/workers.pyr      s:    


zUvicornWorker.__init__)r   c                s   | j   tt|   d S )N)r+   Zsetup_event_loopr   r   init_process)r,   )r.   r/   r0   r1   @   s    
zUvicornWorker.init_processc             C   s@   x| j D ]}t|tj qW ttj| j ttjd d S )NF)ZSIGNALSsignalSIG_DFLSIGUSR1Zhandle_usr1siginterrupt)r,   sr/   r/   r0   init_signalsD   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)asyncioget_running_loopadd_signal_handlerr2   SIGQUITZhandle_exit)r,   r
   r/   r/   r0   _install_sigquit_handlerO   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   r<   Zserver=   startedsysexitr   ZWORKER_BOOT_ERROR)r,   serverr/   r/   r0   _serveY   s    
zUvicornWorker._servec             C   s   t |  S )N)r8   runrB   )r,   r/   r/   r0   rC   a   s    zUvicornWorker.runc                s   |    d S )N)notify)r,   r/   r/   r0   r   d   s    zUvicornWorker.callback_notify)__name__
__module____qualname____doc__r   r   strr   __annotations__r   r1   r7   r<   rB   rC   r   __classcell__r/   r/   )r.   r0   r      s   
*
r   c               @   s   e Zd ZdddZdS )UvicornH11Workerr8   Zh11)r
   r   N)rE   rF   rG   r   r/   r/   r/   r0   rL   h   s   rL   )r8   r   r2   r?   typingr   r   Zgunicorn.arbiterr   Zgunicorn.workers.baser   Zuvicorn.configr   Zuvicorn.mainr   r   rL   r/   r/   r/   r0   <module>   s   Z