o
    òT·j!  ã                   @  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)ÚServerz˜The `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)Ú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© )ÚsuperÚ__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(   úR/home/dinkstrade/pdmp-scanner/venv/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)ÚSIGNALSÚsignalÚSIG_DFLÚSIGUSR1Úhandle_usr1Úsiginterrupt)r?   Úsr(   r(   rE   Úinit_signalsJ   s   
zUvicornWorker.init_signalsc                 C  s"   t  ¡ }| tj| jtjd¡ dS )z¡Install 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_handlerrG   ÚSIGQUITÚhandle_exit)r?   r   r(   r(   rE   Ú_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)Úwsgir>   r   r   rS   ÚserverT   ÚstartedÚsysÚexitr   ÚWORKER_BOOT_ERROR)r?   Úserverr(   r(   rE   Ú_serve_   s   €
ÿzUvicornWorker._servec                 C  s   t |  ¡ | j ¡ d�S )N)Úloop_factory)r   r\   r>   Úget_loop_factory©r?   r(   r(   rE   Úrung   s   zUvicornWorker.runc                 Ã  s   �|   ¡  d S )N)Únotifyr_   r(   r(   rE   r   j   s   €zUvicornWorker.callback_notify)r   r   r   r   r   r   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r*   rM   rS   r\   r`   r   Ú__classcell__r(   r(   rC   rE   r	      s   
 
*



r	   c                   @  s   e Zd ZdddœZdS )ÚUvicornH11WorkerrN   Úh11r   N)rb   rc   rd   r   r(   r(   r(   rE   rh   n   s    rh   )Ú
__future__r   rN   r+   rG   rX   ÚwarningsÚtypingr   Úgunicorn.arbiterr   Úgunicorn.workers.baser   Úuvicorn._compatr   Úuvicorn.configr   Úuvicorn.serverr   ÚwarnÚDeprecationWarningr	   rh   r(   r(   r(   rE   Ú<module>   s$    ýV