o
    [h&                     @   s   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	Z	d dl
mZ d dlmZ d dlZejejfZedZG dd dZG dd dZdS )	    N)
formatdate)Listzuvicorn.errorc                   @   s   e Zd ZdZdd ZdS )ServerStatezP
    Shared servers state that is available between all protocol instances.
    c                 C   s    d| _ t | _t | _g | _d S )Nr   )total_requestssetconnectionstasksdefault_headers)self r   u/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/uvicorn/server.py__init__   s   
zServerState.__init__N)__name__
__module____qualname____doc__r   r   r   r   r   r      s    r   c                   @   s|   e Zd Zdd ZdddZdddZddd	Zd
eej	 ddfddZ
dd ZdefddZdddZdddZdd ZdS )Serverc                 C   s*   || _ t | _d| _d| _d| _d| _d S )NFr   )configr   server_statestartedshould_exit
force_exitlast_notified)r
   r   r   r   r   r   %   s   
zServer.__init__Nc                 C   s(   | j   t }|| j|d d S )Nsockets)r   Zsetup_event_loopasyncioget_event_loopZrun_until_completeserve)r
   r   loopr   r   r   run.   s   
z
Server.runc                    s   t  }| j}|js|  ||| _|   d}dtj	ddd d }t
j||d|id | j|d	I d H  | jr>d S |  I d H  | j|d	I d H  d
}dtj	ddd d }t
jd
|d|id d S )NzStarted server process [%d]zStarted server process [z%dcyan)Zfg]color_messageextrar   zFinished server process [%d]zFinished server process [)osgetpidr   ZloadedloadZlifespan_classlifespaninstall_signal_handlersclickstyleloggerinfostartupr   	main_loopshutdown)r
   r   Z
process_idr   messager"   r   r   r   r   3   s,   
zServer.servec              
      s8  | j  I d H  | j jrd| _d S | j}tj|j|| jd}t	 }|d ur^dt
dt
fdd}g | _|D ]%}|jdkrFt dkrF||}|j|||j|jd	I d H }| j| q5|}n|jd urt
|jt
jt
j}|j|||j|jd	I d H }|jd usJ |j}|g| _n|jd urd
}	tj|jrt|jj}	|j||j|j|jdI d H }t|j|	 |jd usJ |j}|g| _nGz|j||j |j!|j|jdI d H }W n$ t"y }
 zt#$|
 | j % I d H  t&'d W Y d }
~
nd }
~
ww |jd usJ |j}|g| _|d u r| (| n	 d| _)d S )NT)r   r   sockreturnc                 S   s"   ddl m} | t }||S )Nr   )	fromshare)socketr4   Zsharer%   r&   )r2   r4   Z	sock_datar   r   r   _share_socketb   s   z%Server.startup.<locals>._share_socket   Windows)r2   sslbacklogi  )pathr9   r:   )hostportr9   r:   )*r(   r.   r   r   	functoolspartialZhttp_protocol_classr   r   r   r5   serversworkersplatformsystemcreate_serverr9   r:   appendfdfromfdAF_UNIXSOCK_STREAMr   udsr%   r;   existsstatst_modeZcreate_unix_serverchmodr<   r=   OSErrorr,   errorr0   sysexit_log_started_messager   )r
   r   r   Zcreate_protocolr   r6   r2   server	listenersZ	uds_permsexcr   r   r   r.   P   sz   







zServer.startuprU   r3   c           
      C   s   | j }|jd ur|d }td|  d S |jd ur$td|j d S d}|jd u r-dn|j}d|v r6d}|j}|dkrE|d  d }|j	rJd	nd
}d| d}dt
j|dd d }	tj||||d|	id 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]:%dr7   httpshttpzUvicorn running on z (Press CTRL+C to quit)T)boldr"   r#   )r   rF   r,   r-   getsocknamerJ   r<   r=   getpeernamer9   r*   r+   )
r
   rU   r   r2   Zaddr_formatr<   r=   Zprotocol_namer1   r"   r   r   r   rS      sB   


zServer._log_started_messagec                    sV   d}|  |I d H }|s)|d7 }|d }tdI d H  |  |I d H }|rd S d S )Nr   r7   i / 皙?)on_tickr   sleep)r
   counterr   r   r   r   r/      s   zServer.main_loopc                    s   |d dkr8t   }t|dd }d|fg| jj | j_| jjd ur8|| j | jj	kr8|| _| j I d H  | j
r=dS | jjd urK| jj| jjkS dS )N
   r   T)usegmts   dateF)timer   encoder   Zencoded_headersr   r	   Zcallback_notifyr   Ztimeout_notifyr   Zlimit_max_requestsr   )r
   r`   current_timeZcurrent_dater   r   r   r^      s"   zServer.on_tickc                    s(  t d | jD ]}|  q	|pg D ]}|  q| jD ]	}| I d H  qt| jjD ]}|  q.t	
dI d H  | jjra| jsad}t | | jjra| jsat	
dI d H  | jjra| jrR| jjr| jsd}t | | jjr| jst	
dI d H  | jjr| jrv| js| j I d H  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))r,   r-   r@   closeZwait_closedlistr   r   r0   r   r_   r   r   r(   )r
   r   rT   r2   
connectionmsgr   r   r   r0      s4   







zServer.shutdownc                 C   sl   t  t  ur
d S t }ztD ]}||| j|d  qW d S  ty5   tD ]	}t		|| j q(Y d S w N)
	threadingcurrent_threadmain_threadr   r   HANDLED_SIGNALSZadd_signal_handlerhandle_exitNotImplementedErrorsignal)r
   r   sigr   r   r   r)     s   zServer.install_signal_handlersc                 C   s   | j rd| _d S d| _ d S )NT)r   r   )r
   rr   framer   r   r   ro     s   

zServer.handle_exitrj   )r3   N)r   r   r   r   r   r   r.   r   r5   
SocketTyperS   r/   boolr^   r0   r)   ro   r   r   r   r   r   $   s    
	

V)	

"r   )r   r>   loggingr%   rB   rq   r5   rQ   rk   rc   email.utilsr   typingr   r*   SIGINTSIGTERMrn   	getLoggerr,   r   r   r   r   r   r   <module>   s&    
