o
    Ci/                     @  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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 d dlZd dlmZ erld 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kr}e!ej"f7 Z!e#dZ$G dd dZ%G dd dZ&dS )    )annotationsN)
formatdate)	FrameType)TYPE_CHECKINGSequenceUnion)Config)H11Protocol)HttpToolsProtocol)WebSocketProtocol)
WSProtocolwin32zuvicorn.errorc                   @  s   e Zd ZdZdddZdS )ServerStatezP
    Shared servers state that is available between all protocol instances.
    returnNonec                 C  s    d| _ t | _t | _g | _d S )Nr   )total_requestssetconnectionstasksdefault_headers)self r   f/var/www/html/fyndo/python/python_agents/rag_suite/venv/lib/python3.10/site-packages/uvicorn/server.py__init__+   s   
zServerState.__init__Nr   r   )__name__
__module____qualname____doc__r   r   r   r   r   r   &   s    r   c                   @  s   e Zd Zd&ddZd'd(d
dZd'd(ddZd'd(ddZd)ddZd*ddZd+ddZ	d'd(ddZ
d*ddZd*dd Zd,d$d%ZdS )-Serverconfigr   r   r   c                 C  s*   || _ t | _d| _d| _d| _d| _d S )NFg        )r    r   server_statestartedshould_exit
force_exitlast_notified)r   r    r   r   r   r   3   s   
zServer.__init__Nsocketslist[socket.socket] | Nonec                 C  s   | j   t| j|dS )Nr&   )r    setup_event_loopasynciorunserve)r   r&   r   r   r   r+   <   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|id 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    messager0   r   r   r   r,   @   s$   zServer.servec              
     s4  j  I d H  j jrd_d S j 	 dd fdd}t }|d ur\dd
d}g _|D ]'}t dk} j	dkrD|rD||}|j
|| j jdI d H }j| q1|}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_loop asyncio.AbstractEventLoop | Noner   asyncio.Protocolc                   s    j  jjj| dS )N)r    r!   	app_staterC   )http_protocol_classr!   r8   state)rC   r    r   r   r   create_protocola   s   z'Server.startup.<locals>.create_protocolsocksocket.SocketTypec                 S  s"   ddl m} | t }||S )Nr   )	fromshare)socketrM   sharer3   r4   )rK   rM   	sock_datar   r   r   _share_socketr   s   z%Server.startup.<locals>._share_socketWindows   )rK   sslbacklogi  )pathrT   rU   )hostportrT   rU   N)rC   rD   r   rE   )rK   rL   r   rL   )&r8   r>   r#   r    r*   get_running_loopserversplatformsystemworkerscreate_serverrT   rU   appendfdrN   fromfdAF_UNIXSOCK_STREAMr&   udsr3   rV   existsstatst_modecreate_unix_serverchmodrW   rX   OSErrorr<   errorr@   sysexit_log_started_messager"   )r   r&   rJ   looprQ   rK   
is_windowsserver	listeners	uds_permsexcr   rI   r   r>   Y   sz   









zServer.startuprs   Sequence[socket.SocketType]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]:%drS   httpshttpzUvicorn running on z (Press CTRL+C to quit)T)boldr0   r1   )r    ra   r<   r=   getsocknamere   rW   rX   rT   r:   r;   )
r   rs   r    rK   addr_formatrW   rX   protocol_namerB   r0   r   r   r   ro      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   rS   i / 皙?)on_tickr*   sleep)r   counterr#   r   r   r   r?      s   zServer.main_loopr   intboolc                   s   |d dkrAt   }t|dd }| jjrd|fg}ng }|| jj | j_| jjd urA|| j	 | jj
krA|| _	| j I d H  | jrFdS | jjd urT| 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   r   r   r   r      s$   
zServer.on_tickc                   s   t d | jD ]}|  q	|pg D ]}|  qt| jjD ]}|  q!t	dI d H  ztj
|  | jjdI d H  W n+ tjyk   t dt| jj | jjD ]}tjdk rb|  qV|jdd qVY nw | jsy| j I d H  d S d S )NzShutting downr~   )timeoutz=Cancel %s running task(s), timeout graceful shutdown exceeded)   	   z2Task cancelled, timeout graceful shutdown exceeded)msg)r<   r=   r[   closelistr!   r   r@   r*   r   wait_for_wait_tasks_to_completer    timeout_graceful_shutdownTimeoutErrorrl   lenr   rm   version_infocancelr$   r8   )r   r&   rr   rK   
connectiontr   r   r   r@     s8   







zServer.shutdownc                   s   | j jr%| js%d}t| | j jr%| js%tdI d H  | j jr%| jr| j jrI| jsId}t| | j jrI| jsItdI d H  | j jrI| jr:| jD ]	}|	 I d H  qLd S )Nz8Waiting for connections to close. (CTRL+C to force quit)r~   z@Waiting for background tasks to complete. (CTRL+C to force quit))
r!   r   r$   r<   r=   r*   r   r   r[   wait_closed)r   r   rr   r   r   r   r   +  s    


zServer._wait_tasks_to_completec                 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 rY   )
	threadingcurrent_threadmain_threadr*   get_event_loopHANDLED_SIGNALSadd_signal_handlerhandle_exitNotImplementedErrorsignal)r   rp   sigr   r   r   r9   =  s   zServer.install_signal_handlersr   frameFrameType | Nonec                 C  s$   | j r|tjkrd| _d S d| _ d S )NT)r#   r   SIGINTr$   )r   r   r   r   r   r   r   L  s   

zServer.handle_exit)r    r   r   r   rY   )r&   r'   r   r   )rs   rv   r   r   r   )r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r+   r,   r>   ro   r?   r   r@   r   r9   r   r   r   r   r   r   2   s    
	
a
)
	
#
r   )'
__future__r   r*   loggingr3   r\   r   rN   rm   r   r   email.utilsr   typesr   typingr   r   r   r:   uvicorn.configr   uvicorn.protocols.http.h11_implr	   %uvicorn.protocols.http.httptools_implr
   ,uvicorn.protocols.websockets.websockets_implr   )uvicorn.protocols.websockets.wsproto_implr   	Protocolsr   SIGTERMr   SIGBREAK	getLoggerr<   r   r   r   r   r   r   <module>   s:    

