o
    Õ­j5  ã                   @  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)ÚServerz˜The `uvicorn.workers` module is deprecated. Please use `uvicorn-worker` package instead.
For more details, see https://github.com/Kludex/uvicorn-worker.c                      sv   e Zd ZU dZdddœZded< d‡ 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Ú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'   úL/var/www/html/CropPilot/venv/lib/python3.10/site-packages/uvicorn/workers.pyr)      s>   

ù
ù
	zUvicornWorker.__init__c                   s   | j  ¡  tƒ  ¡  d S ©N)r=   Úsetup_event_loopr(   Úinit_process©r>   rB   r'   rD   rG   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)ÚSIGNALSÚsignalÚSIG_DFLÚSIGUSR1Úhandle_usr1Úsiginterrupt)r>   Úsr'   r'   rD   Úinit_signalsM   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/encode/uvicorn/issues/1116
        - https://github.com/benoitc/gunicorn/issues/2604
        N)ÚasyncioÚget_running_loopÚadd_signal_handlerrJ   ÚSIGQUITÚhandle_exit)r>   r   r'   r'   rD   Ú_install_sigquit_handlerX   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   rV   ÚserverW   ÚstartedÚsysÚexitr   ÚWORKER_BOOT_ERROR)r>   Úserverr'   r'   rD   Ú_serveb   s   €
ÿzUvicornWorker._servec                 C  s   t  |  ¡ ¡S rE   )rQ   Úrunr_   rH   r'   r'   rD   r`   j   s   zUvicornWorker.runc                 Ã  s   �|   ¡  d S rE   )ÚnotifyrH   r'   r'   rD   r   m   s   €zUvicornWorker.callback_notify)r   r   r   r   r   r   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r)   rG   rP   rV   r_   r`   r   Ú__classcell__r'   r'   rB   rD   r      s   
 *




r   c                   @  s   e Zd ZdddœZdS )ÚUvicornH11WorkerrQ   Úh11r
   N)rb   rc   rd   r   r'   r'   r'   rD   rh   q   s    rh   )Ú
__future__r   rQ   r*   rJ   r[   ÚwarningsÚtypingr   Úgunicorn.arbiterr   Úgunicorn.workers.baser   Úuvicorn.configr   Úuvicorn.mainr   ÚwarnÚDeprecationWarningr   rh   r'   r'   r'   rD   Ú<module>   s"    ýZ