
     O=d0,                     Z   d dl Z d dlZd dlZd dl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mZmZmZmZmZmZ d dlZd dlmZ er$d dlmZ d dlmZ d dlmZ d d	lmZ eeeeef         Z ej!        ej"        fZ# ej$        d
          Z% G d d          Z& G d d          Z'dS )    N)
formatdate)	FrameType)TYPE_CHECKINGListOptionalSequenceSetTupleUnion)Config)H11Protocol)HttpToolsProtocol)WebSocketProtocol)
WSProtocolzuvicorn.errorc                       e Zd ZdZddZdS )ServerStatezP
    Shared servers state that is available between all protocol instances.
    returnNc                 n    d| _         t                      | _        t                      | _        g | _        d S )Nr   )total_requestssetconnectionstasksdefault_headers)selfs    8D:\Sites\api_v1\venv\Lib\site-packages\uvicorn/server.py__init__zServerState.__init__(   s/    -0UU(+
:<    r   N)__name__
__module____qualname____doc__r    r   r   r   r   #   s2         = = = = = =r   r   c                   T   e Zd ZdeddfdZddeeej                          ddfdZddeeej                          ddfdZ	ddeeej                          ddfdZ
d	eej                 ddfd
ZddZdedefdZddeeej                          ddfdZddZdedee         ddfdZdS )Serverconfigr   Nc                 r    || _         t                      | _        d| _        d| _        d| _        d| _        d S )NFg        )r&   r   server_statestartedshould_exit
force_exitlast_notified)r   r&   s     r   r   zServer.__init__0   s9    'MM  r   socketsc                     | j                                          t          j        |                     |                    S )Nr-   )r&   setup_event_loopasynciorunserve)r   r-   s     r   r2   z
Server.run9   s4    $$&&&{4::g:66777r   c                 z  K   t          j                    }| j        }|j        s|                                 |                    |          | _        |                                  d}dt          j	        dd          z   dz   }t                              ||d|i           |                     |	           d {V  | j        rd S |                                  d {V  |                     |	           d {V  d
}dt          j	        dd          z   dz   }t                              ||d|i           d S )NzStarted server process [%d]zStarted server process [z%dcyan)fg]color_messageextrar/   zFinished server process [%d]zFinished server process [)osgetpidr&   loadedloadlifespan_classlifespaninstall_signal_handlersclickstyleloggerinfostartupr*   	main_loopshutdown)r   r-   
process_idr&   messager8   s         r   r3   zServer.serve=   s\     Y[[
} 	KKMMM--f55$$&&&/2U[&5Q5Q5QQTWWGZ/OPPPll7l+++++++++ 	FnnmmGm,,,,,,,,,03ek$66R6R6RRUXXGZ/OPPPPPr   c                 ,   
K    j                                          d {V   j         j        r	d _        d S  j        
	 ddt          t
          j                 dt
          j        f
 fd}t          j                    }|dt          j
        dt          j
        fd}g  _        |D ]r}
j        dk    r"t          j                    dk    r ||          }|                    ||
j        
j        	           d {V } j                            |           s|}n׉
j        rt          j        
j        t          j        t          j                  }|                    ||
j        
j        	           d {V }|j        J |j        }|g _        n^
j        d
}t2          j                            
j                  rt3          j        
j                  j        }|                    |
j        
j        
j                   d {V }t3          j        
j        |           |j        J |j        }|g _        n	 |                    |
j         
j!        
j        
j                   d {V }nd# tD          $ rW}	tF          $                    |	            j         %                                 d {V  tM          j'        d           Y d }	~	nd }	~	ww xY w|j        J |j        }|g _        | (                    |           n	 d _)        d S )NT_loopr   c                 T                         j        j        j        |           S )N)r&   r(   	app_staterL   )http_protocol_classr(   r@   state)rL   r&   r   s    r   create_protocolz'Server.startup.<locals>.create_protocol^   s6     --!.--	 .   r   sockc                 p    ddl m} |                     t          j                              } ||          S )Nr   )	fromshare)socketrT   sharer;   r<   )rR   rT   	sock_datas      r   _share_socketz%Server.startup.<locals>._share_socketo   s=    
 -,,,,, JJry{{33	 y+++r      Windows)rR   sslbacklogi  )pathr[   r\   )hostportr[   r\   N)*r@   rF   r*   r&   r   r1   AbstractEventLoopProtocolget_running_looprU   
SocketTypeserversworkersplatformsystemcreate_serverr[   r\   appendfdfromfdAF_UNIXSOCK_STREAMr-   udsr;   r]   existsstatst_modecreate_unix_serverchmodr^   r_   OSErrorrD   errorrH   sysexit_log_started_messager)   )r   r-   rQ   looprX   rR   server	listeners	uds_permsexcr&   s   `         @r   rF   zServer.startupV   s     m##%%%%%%%%%=$ 	#DF :>	 	G56		 	 	 	 	 	 	 ')) ,',", , , , DL , ,>A%%(/*;*;y*H*H(= D  $11#$FJ  2           ##F++++IIY"=FNF<NOOD--d
FN .        F >---I"8DLLZ#Iw~~fj)) 8GFJ//7	22fjfj&. 3        F HVZ+++>---I"8DLL#11#
"N  2              S!!!m,,.........
 >---I"8DL?%%i0000 s   4I8 8
KAKKr|   c                    | j         }|j        7|d         }t                              d|                                           d S |j        "t                              d|j                   d S d}|j        dn|j        }d|v rd}|j        }|dk    r |d                                         d         }|j        rd	nd
}d| d}dt          j
        |d          z   dz   }	t                              ||||d|	i           d S )Nr   z3Uvicorn running on socket %s (Press CTRL+C to quit)z8Uvicorn running on unix socket %s (Press CTRL+C to quit)z
%s://%s:%dz0.0.0.0:z%s://[%s]:%drY   httpshttpzUvicorn running on z (Press CTRL+C to quit)T)boldr8   r9   )r&   rk   rD   rE   getsocknamero   r^   r_   r[   rB   rC   )
r   r|   r&   rR   addr_formatr^   r_   protocol_namerJ   r8   s
             r   ry   zServer._log_started_message   sP   9 Q<DKKE  ""    
 Z#KKJFJ    
 'K & 399Dd{{,;Dqyy |//11!4'-z=GGvMPKPPPG%+k5556+, 
 KK&6      r   c                    K   d}|                      |           d {V }|sC|dz  }|dz  }t          j        d           d {V  |                      |           d {V }|Ad S d S )Nr   rY   i / 皙?)on_tickr1   sleep)r   counterr*   s      r   rG   zServer.main_loop   s       LL11111111 	6qLG&G-$$$$$$$$$ $W 5 5555555K	  	6 	6 	6 	6 	6r   r   c                   K   |dz  dk    rt          j                     }t          |d                                          }| j        j        rd|fg}ng }|| j        j        z   | j        _        | j        j        >|| j	        z
  | j        j
        k    r&|| _	        | j                                         d {V  | j        rdS | j        j        | j        j        | j        j        k    S dS )N
   r   T)usegmts   dateF)timer   encoder&   date_headerencoded_headersr(   r   callback_notifyr,   timeout_notifyr*   limit_max_requestsr   )r   r   current_timecurrent_dater   s        r   r   zServer.on_tick   s     R<19;;L%l4@@@GGIIL{& ! '67  dk99 -
 {*6$"44t{7QQQ)5D&+55777777777  	4;)5$3t{7UUUur   c                   K   t                               d           | j        D ]}|                                 |pg D ]}|                                 | j        D ]}|                                 d {V  t          | j        j                  D ]}|                                 t          j
        d           d {V  | j        j        rc| j        s\d}t                               |           | j        j        r4| j        s-t          j
        d           d {V  | j        j        r| j        -| j        j        rc| j        s\d}t                               |           | j        j        r4| j        s-t          j
        d           d {V  | j        j        r| j        -| j        s!| j                                         d {V  d S d S )NzShutting downr   z8Waiting for connections to close. (CTRL+C to force quit)z@Waiting for background tasks to complete. (CTRL+C to force quit))rD   rE   re   closewait_closedlistr(   r   rH   r1   r   r+   r   r@   )r   r-   r{   rR   
connectionmsgs         r   rH   zServer.shutdown  s0     O$$$ l 	 	FLLNNNNMr 	 	DJJLLLLl 	' 	'F$$&&&&&&&&&& t0<== 	" 	"J!!!!mC          ( 	) 	)LCKK#/ ) )mC((((((((( #/ ) ) " 	)4? 	)TCKK#) )$/ )mC((((((((( #) )$/ )  	+-((***********	+ 	+r   c                 6   t          j                    t          j                    urd S t          j                    }	 t
          D ]}|                    || j        |d             d S # t          $ r( t
          D ]}t          j	        || j                   Y d S w xY wr`   )
	threadingcurrent_threadmain_threadr1   get_event_loopHANDLED_SIGNALSadd_signal_handlerhandle_exitNotImplementedErrorsignal)r   rz   sigs      r   rA   zServer.install_signal_handlers(  s    #%%Y-B-D-DDDF%''	5& J J''T-=sDIIIIJ J" 	5 	5 	5& 5 5c4#344445 5 5	5s   'A& &.BBr   framec                 T    | j         r|t          j        k    r	d| _        d S d| _         d S )NT)r*   r   SIGINTr+   )r   r   r   s      r   r   zServer.handle_exit7  s2     	$v} 4 4"DOOO#Dr   r`   r   )r   r    r!   r   r   r   r   rU   r2   r3   rF   r   rd   ry   rG   intboolr   rH   rA   r   r   r#   r   r   r%   r%   /   s       !v !$ ! ! ! !8 88D$78 8D 8 8 8 8Q Q8D,?#@ QD Q Q Q Q2` `Xd6=.A%B `d ` ` ` `D'hv7H.I 'd ' ' ' 'R6 6 6 6S T    8 +  +htFM/B&C  +t  +  +  +  +D5 5 5 5$s $8I+> $4 $ $ $ $ $ $r   r%   )(r1   loggingr;   rg   r   rU   rw   r   r   email.utilsr   typesr   typingr   r   r   r   r	   r
   r   rB   uvicorn.configr   uvicorn.protocols.http.h11_implr   %uvicorn.protocols.http.httptools_implr   ,uvicorn.protocols.websockets.websockets_implr   )uvicorn.protocols.websockets.wsproto_implr   	Protocolsr   SIGTERMr   	getLoggerrD   r   r%   r#   r   r   <module>r      s     				    



      " " " " " "       M M M M M M M M M M M M M M M M M M  ! ! ! ! ! ! U;;;;;;GGGGGGNNNNNNDDDDDDk#4jBSSTI M
N
 
	?	+	+	= 	= 	= 	= 	= 	= 	= 	=M$ M$ M$ M$ M$ M$ M$ M$ M$ M$r   