
    dh!                        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j&                  d	e        G d
 de      Z G d de      Zy)    )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                  b     e Zd ZU dZdddZded<   d fdZddZddZdd	Z	dd
Z
ddZ x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_KWARGSc           	        t        |   |i | t        j                  d      }| j                  j
                  j                  |_        |j                  | j                  j
                  j                         d|_	        t        j                  d      }| j                  j                  j                  |_        |j                  | j                  j                  j                         d|_	        d d | j                  j                  | j                  | j                  | j                  | j                  j                   d}| j                  j"                  r| j                  j$                  j'                  d      | j                  j$                  j'                  d      | j                  j$                  j'                  d      | j                  j$                  j'                  d      | j                  j$                  j'                  d	      | j                  j$                  j'                  d
      | j                  j$                  j'                  d      d}|j)                  |       | j                  j*                  d   j,                  r&| j                  j*                  d   j,                  |d<   |j)                  | j.                         t1        di || _        y )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)selfargskwargsloggerconfig_kwargs
ssl_kwargs	__class__s         B/var/www/zara/venv/lib/python3.12/site-packages/uvicorn/workers.pyr)   zUvicornWorker.__init__    s   $)&)""?3((,,55**001 ""#34((--66++112  "&(("4"4"ll#33"&"3"3#'88#?#?
 88??#xx3377	B $ 4 4 8 8 D(,(<(<(@(@(L#xx3377F!%!5!5!9!9+!F $ 4 4 8 8 D#xx3377	BJ   ,88Y'--'+xx'8'8'C'I'IM)$T//0-}-    c                   | j                   D ]&  }t        j                  |t        j                         ( t        j                  t        j                  | j                         t        j
                  t        j                  d       y )NF)SIGNALSsignalSIG_DFLSIGUSR1handle_usr1siginterrupt)r>   ss     rE   init_signalszUvicornWorker.init_signalsJ   sW      	-AMM!V^^,	- 	fnnd&6&67FNNE2rF   c                    t        j                         }|j                  t        j                  | j
                  t        j                  d       y)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_handlerrI   SIGQUIThandle_exit)r>   r   s     rE   _install_sigquit_handlerz&UvicornWorker._install_sigquit_handlerU   s5     '')0@0@&..RVWrF   c                :  K   | j                   | j                  _        t        | j                        }| j	                          |j                  | j                         d {    |j                  s$t        j                  t        j                         y y 7 5w)N)r=   )sockets)wsgir=   r   r	   rV   serverX   startedsysexitr   WORKER_BOOT_ERROR)r>   servers     rE   _servezUvicornWorker._serve_   sj     ))t{{+%%'ll4<<l000~~HHW../  	1s   A!B#B$6Bc                h    t        | j                         | j                  j                               S )N)loop_factory)r   r`   r=   get_loop_factoryr>   s    rE   runzUvicornWorker.rung   s"    4;;=t{{7S7S7UVVrF   c                ,   K   | j                          y w)N)notifyrd   s    rE   r   zUvicornWorker.callback_notifyj   s     s   )r?   r   r@   r   returnNone)rh   ri   )__name__
__module____qualname____doc__r   __annotations__r)   rO   rV   r`   re   r   __classcell__)rD   s   @rE   r   r      s:    
 .4V$DM>D(.T	3X0WrF   r   c                      e Zd ZdddZy)UvicornH11WorkerrQ   h11r   N)rj   rk   rl   r   r'   rF   rE   rq   rq   n   s    &6MrF   rq   )
__future__r   rQ   r*   rI   r\   warningstypingr   gunicorn.arbiterr   gunicorn.workers.baser   uvicorn._compatr   uvicorn.configr   uvicorn.serverr	   warnDeprecationWarningr   rq   r'   rF   rE   <module>r}      s[    "    
   $ ( ' ! ! FSF Sl7} 7rF   