
     O=d[                         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e
          Z G d	 d
e          ZdS )    N)AnyDict)Arbiter)Worker)Config)Serverc                        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	Z	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httpCONFIG_KWARGSargskwargsreturnNc           	          t          t          |           j        |i | t          j        d          }| j        j        j        |_        |                    | j        j        j	                   d|_
        t          j        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                   t3          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__s         9D:\Sites\api_v1\venv\Lib\site-packages\uvicorn/workers.pyr+   zUvicornWorker.__init__   s   +mT""+T<V<<<"?33(,5*0111 "#344(-6+1222  "&("4"l#3"&"3#'8#?
 
 8? 
	-#x377	BB $ 4 8 8 D D(,(<(@(@(L(L#x377FF!%!5!9!9+!F!F $ 4 8 8 D D#x377	BB J   ,,,8Y'- 	J'+x'8'C'IM)$T/000--}--    c                     | j                                          t          t          |                                            d S N)r?   setup_event_loopr*   r
   init_process)r@   rD   s    rE   rJ   zUvicornWorker.init_process@   s9    $$&&&mT""//11111rF   c                     | j         D ]!}t          j        |t          j                   "t          j        t          j        | j                   t          j        t          j        d           d S )NF)SIGNALSsignalSIG_DFLSIGUSR1handle_usr1siginterrupt)r@   ss     rE   init_signalszUvicornWorker.init_signalsD   s^      	- 	-AM!V^,,,,fnd&6777FNE22222rF   c                     t          j                    }|                    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_handlerrM   SIGQUIThandle_exit)r@   r   s     rE   _install_sigquit_handlerz&UvicornWorker._install_sigquit_handlerO   s:     '))0@&.RVWWWWWrF   c                   K   | j         | j        _        t          | j                  }|                                  |                    | j                   d {V  |j        s t          j	        t          j                   d S d S )N)r?   )sockets)wsgir?   r   r   rZ   server\   startedsysexitr   WORKER_BOOT_ERROR)r@   servers     rE   _servezUvicornWorker._serveY   s      )t{+++%%'''ll4<l000000000~ 	0HW./////	0 	0rF   c                 N    t          j        |                                           S rH   )rU   runrd   r@   s    rE   rf   zUvicornWorker.runa   s    {4;;==)))rF   c                 2   K   |                                   d S rH   )notifyrg   s    rE   r   zUvicornWorker.callback_notifyd   s      rF   )r   N)__name__
__module____qualname____doc__r   r   strr   __annotations__r+   rJ   rS   rZ   rd   rf   r   __classcell__)rD   s   @rE   r
   r
      s         
 .4V$D$DM4S>DDD(.c (.S (.T (. (. (. (. (. (.T2 2 2 2 2 2	3 	3 	3 	3X X X X0 0 0 0* * * *       rF   r
   c                       e Zd ZdddZdS )UvicornH11WorkerrU   h11r   N)rj   rk   rl   r   r)   rF   rE   rr   rr   h   s        &66MMMrF   rr   )rU   r,   rM   r`   typingr   r   gunicorn.arbiterr   gunicorn.workers.baser   uvicorn.configr   uvicorn.mainr   r
   rr   r)   rF   rE   <module>ry      s       



         $ $ $ $ $ $ ( ( ( ( ( ( ! ! ! ! ! !      W W W W WF W W Wt7 7 7 7 7} 7 7 7 7 7rF   