o
    h[                     @   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< dededdf fd	d
Z	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httpCONFIG_KWARGSargskwargsreturnNc              	      s<  t 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)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__r&   E/var/www/html/ai/venv/lib/python3.10/site-packages/uvicorn/workers.pyr(      s>   



	zUvicornWorker.__init__c                    s   | j   tt|   d S N)r<   setup_event_loopr'   r   init_processr=   rA   r&   rC   rF   @   s   
zUvicornWorker.init_processc                 C   s<   | j D ]	}t|tj qttj| j ttjd d S )NF)SIGNALSsignalSIG_DFLSIGUSR1handle_usr1siginterrupt)r=   sr&   r&   rC   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_handlerrI   SIGQUIThandle_exit)r=   r   r&   r&   rC   _install_sigquit_handlerO   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)wsgir<   r   r   rU   serverV   startedsysexitr   WORKER_BOOT_ERROR)r=   serverr&   r&   rC   _serveY   s   
zUvicornWorker._servec                 C   s   t |  S rD   )rP   runr^   rG   r&   r&   rC   r_   a   s   zUvicornWorker.runc                    s   |    d S rD   )notifyrG   r&   r&   rC   r   d   s   zUvicornWorker.callback_notify)r   N)__name__
__module____qualname____doc__r   r   strr   __annotations__r(   rF   rO   rU   r^   r_   r   __classcell__r&   r&   rA   rC   r      s   
 *




r   c                   @   s   e Zd ZdddZdS )UvicornH11WorkerrP   h11r
   N)ra   rb   rc   r   r&   r&   r&   rC   rh   h   s    rh   )rP   r)   rI   rZ   typingr   r   gunicorn.arbiterr   gunicorn.workers.baser   uvicorn.configr   uvicorn.mainr   r   rh   r&   r&   r&   rC   <module>   s    Z