o
    i!                     @  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 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)asyncio_run)Config)ServerzThe `uvicorn.workers` module is deprecated. Please use `uvicorn-worker` package instead.
For more details, see https://github.com/Kludex/uvicorn-worker.c                      sh   e Zd ZU dZdddZded< d fddZdddZdddZdddZ	dddZ
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httpzdict[str, Any]CONFIG_KWARGSargsr   kwargsreturnNonec              	     s8  t  j|i | 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di || _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 )super__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__r   F/home/app/Keep/.python/lib/python3.10/site-packages/uvicorn/workers.pyr        s>   



	zUvicornWorker.__init__c                 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)r0   sr   r   r4   init_signalsJ   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/Kludex/uvicorn/issues/1116
        - https://github.com/benoitc/gunicorn/issues/2604
        N)asyncioget_running_loopadd_signal_handlerr5   SIGQUITZhandle_exit)r0   r   r   r   r4   _install_sigquit_handlerU   s   z&UvicornWorker._install_sigquit_handlerc                   sN   | j | j_t| jd}|   |j| jdI d H  |js%t	t
j d S d S )N)r/   )sockets)Zwsgir/   r   r   r?   Zserver@   startedsysexitr   ZWORKER_BOOT_ERROR)r0   serverr   r   r4   _serve_   s   
zUvicornWorker._servec                 C  s   t |  | j dS )N)Zloop_factory)r   rE   r/   Zget_loop_factoryr0   r   r   r4   rung   s   zUvicornWorker.runc                   s   |    d S )N)notifyrF   r   r   r4   r   j   s   zUvicornWorker.callback_notify)r   r   r   r   r   r   )r   r   )__name__
__module____qualname____doc__r   __annotations__r    r:   r?   rE   rG   r   __classcell__r   r   r2   r4   r	      s   
 
*



r	   c                   @  s   e Zd ZdddZdS )UvicornH11Workerr;   Zh11r   N)rI   rJ   rK   r   r   r   r   r4   rO   n   s    rO   )
__future__r   r;   r!   r5   rB   warningstypingr   Zgunicorn.arbiterr   Zgunicorn.workers.baser   Zuvicorn._compatr   Zuvicorn.configr   Zuvicorn.serverr   warnDeprecationWarningr	   rO   r   r   r   r4   <module>   s$    V