
    _jF4                       U 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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mZ d dlmZ d dlmZ d d	lmZmZ er1d 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 e"z  e(z  e$z  e&z  Z)de*d<   e	j+        e	j,        fZ-ej        dk    re-e	j.        fz  Z- ej/        d          Z0 G d d          Z1 G d d          Z2dS )    )annotationsN)	GeneratorSequence)
formatdate)	FrameType)TYPE_CHECKING	TypeAlias)style)asyncio_run)STARTUP_FAILUREConfig)H11Protocol)HttpToolsProtocol)WebSocketProtocol)WebSocketsSansIOProtocol)
WSProtocolr	   	Protocolswin32zuvicorn.errorc                      e Zd ZdZddZdS )ServerStatezP
    Shared servers state that is available between all protocol instances.
    returnNonec                n    d| _         t                      | _        t                      | _        g | _        d S Nr   )total_requestssetconnectionstasksdefault_headersselfs    B/home/drrone/.local/lib/python3.11/site-packages/uvicorn/server.py__init__zServerState.__init__0   s/    +.55.1ee
:<    Nr   r   )__name__
__module____qualname____doc__r#    r$   r"   r   r   +   s2         = = = = = =r$   r   c                      e Zd ZddZej        d d            Zd!d"dZd!d"dZd!d"dZ	d!d"dZ
d#dZd$dZd%dZd!d"dZd$dZej        d&d            Zd'dZdS )(Serverconfigr   r   r   c                    || _         t                      | _        d| _        d| _        d| _        d| _        g | _        d S )NFg        )r-   r   server_statestartedshould_exit
force_exitlast_notified_captured_signals)r!   r-   s     r"   r#   zServer.__init__8   sA    'MM  ,.r$   
int | Nonec                v    | j         j        d S | j         j        t          j        d| j         j                  z   S r   )r-   limit_max_requestsrandomrandintlimit_max_requests_jitterr    s    r"   r7   zServer.limit_max_requestsC   s3    ;)14{-q$+Bg0h0hhhr$   Nsocketslist[socket.socket] | Nonec                z    t          |                     |          | j                                                  S )Nr;   )loop_factory)r   server-   get_loop_factoryr!   r;   s     r"   runz
Server.runI   s1    4::g:66T[EaEaEcEcddddr$   c                   K   |                                  5  |                     |           d {V  d d d            d S # 1 swxY w Y   d S N)capture_signals_serverB   s     r"   r@   zServer.serveL   s      !!## 	' 	'++g&&&&&&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   A  AAc                L  K   t          j                    }| j        }|j        s|                                 |                    |          | _        d}dt          dd          z   dz   }t          	                    ||d|i           | 
                    |	           d {V  | j        s|                                  d {V  | j        rV|                     |	           d {V  d
}dt          dd          z   dz   }t          	                    ||d|i           d S 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lifespanr
   loggerinfostartupr1   	main_loopr0   shutdown)r!   r;   
process_idr-   messagerL   s         r"   rG   zServer._serveP   sW     Y[[
} 	KKMMM--f55/2U4F5K5K5KKcQGZ/OPPPll7l+++++++++ 	#.."""""""""< 	U---0000000004G7%:P:P:PPSVVMKKO]3SKTTTTT	U 	Ur$   c                   K    j                                          d {V   j         j        rt          j        t
                      j        	 dd fd}t          j                    }|dd}g  _	        |D ]t}t          j                    d	k    }j        d
k    r|r ||          }|                    ||j        j                   d {V } j	                            |           u|}n܉j        rt%          j        j        t$          j        t$          j                  }|                    ||j        j                   d {V }|j        J |j        }|g _	        ncj        d}	t0          j                            j                  rt1          j        j                  j        }	|                    |j        j        j                   d {V }t1          j        j        |	           |j        J |j        }|g _	        n	 |                    |j        j         j        j                   d {V }ni# tB          $ r\}
tD          #                    |
            j         $                                 d {V  t          j        t
                     Y d }
~
nd }
~
ww xY w|j        J |j        }|g _	        | %                    |           n	 d _&        d S )N_loop asyncio.AbstractEventLoop | Noner   asyncio.Protocolc                T                         j        j        j        |           S )N)r-   r/   	app_stater]   )http_protocol_classr/   rT   state)r]   r-   r!   s    r"   create_protocolz'Server.startup.<locals>.create_protocoln   s6     --!.--	 .   r$   socksocket.SocketTypec                p    ddl m} |                     t          j                              } ||          S )Nr   )	fromshare)socketrh   sharerO   rP   )re   rh   	sock_datas      r"   _share_socketz%Server.startup.<locals>._share_socket   s=    
 -,,,,, JJry{{33	 y+++r$   Windows   )re   sslbacklogi  )pathro   rp   )hostportro   rp   TrE   )r]   r^   r   r_   )re   rf   r   rf   )'rT   rW   r1   sysexitr   r-   asyncioget_running_loopserversplatformsystemworkerscreate_serverro   rp   appendfdri   fromfdAF_UNIXSOCK_STREAMr;   udsrO   rq   existsstatst_modecreate_unix_serverchmodrr   rs   OSErrorrU   errorrY   _log_started_messager0   )r!   r;   rd   looprl   re   
is_windowsserver	listeners	uds_permsexcr-   s   `          @r"   rW   zServer.startupg   s     m##%%%%%%%%%=$ 	&H_%%% 7;	 	 	 	 	 	 	 	 ')) , , , , >@DL , ,%_..);
>A%%*%(=..D#11/RXR\flft1uuuuuuuu##F++++IIY"=FNF<NOOD--oDfjbhbp-qqqqqqqqF>---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   4I 
J5AJ00J5r   Sequence[socket.SocketType]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          |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]:%drn   httpshttpzUvicorn running on z (Press CTRL+C to quit)T)boldrL   rM   )
r-   r~   rU   rV   getsocknamer   rr   rs   ro   r
   )
r!   r   r-   re   addr_formatrr   rs   protocol_namer[   rL   s
             r"   r   zServer._log_started_message   s<   9 Q<DKKE  ""    
 Z#KKRTZT^_____ 'K & 399Dd{{,;Dqyy |//11!4'-z=GGvMPKPPPG1E+D4Q4Q4QQTmmM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   rn   i / 皙?)on_tickrv   sleep)r!   counterr1   s      r"   rX   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   intboolc                  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        |k    rt                              d|           dS dS )N
   r   T)usegmts   datez:Maximum request limit of %d exceeded. Terminating process.F)timer   encoder-   date_headerencoded_headersr/   r   callback_notifyr3   timeout_notifyr1   r7   r   rU   rV   )r!   r   current_timecurrent_dater   max_requestss         r"   r   zServer.on_tick   s     R<19;;L%l4@@@GGIIL{& ! '67 0;dk>Y0YD- {*6$"44t{7QQQ)5D&+55777777777  	4.#(9(HL(X(XKKTVbccc4ur$   c                  K   t                               d           | j        D ]}|                                 |pg D ]}|                                 t	          | j        j                  D ]}|                                 t          j	        d           d {V  	 t          j
        |                                 | j        j                   d {V  nl# t          j        $ rZ t                               dt!          | j        j                             | j        j        D ]}|                    d           Y nw xY w| j        s!| j                                         d {V  d S d S )NzShutting downr   )timeoutz=Cancel %s running task(s), timeout graceful shutdown exceededz2Task cancelled, timeout graceful shutdown exceeded)msg)rU   rV   rx   closelistr/   r   rY   rv   r   wait_for_wait_tasks_to_completer-   timeout_graceful_shutdownTimeoutErrorr   lenr   cancelr2   rT   )r!   r;   r   re   
connectionts         r"   rY   zServer.shutdown  s     O$$$ l 	 	FLLNNNNMr 	 	DJJLLLL t0<== 	" 	"J!!!!mC         	S",,..=           # 	S 	S 	SLLOD%+,,   &, S SQRRRRS S	S  	+-((***********	+ 	+s   !8C A&EEc                  K   | 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        D ]}|	                                 d {V  d 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   r2   rU   rV   rv   r   r   rx   wait_closed)r!   r   r   s      r"   r   zServer._wait_tasks_to_complete-  sL     ( 	) 	)LCKK#/ ) )mC((((((((( #/ ) ) " 	)4? 	)TCKK#) )$/ )mC((((((((( #) )$/ ) l 	' 	'F$$&&&&&&&&&&	' 	'r$   Generator[None, None, None]c              #     K   t          j                    t          j                    urd V  d S  fdt          D             }	 d V  |                                D ]\  }}t          j        ||           n4# |                                D ]\  }}t          j        ||           w xY wt           j                  D ]}t          j        |           d S )Nc                F    i | ]}|t          j         |j                  S r*   )signalhandle_exit).0sigr!   s     r"   
<dictcomp>z*Server.capture_signals.<locals>.<dictcomp>G  s*    bbb3S&-T5E"F"Fbbbr$   )		threadingcurrent_threadmain_threadHANDLED_SIGNALSitemsr   reversedr4   raise_signal)r!   original_handlersr   handlercaptured_signals   `    r"   rF   zServer.capture_signals?  s      #%%Y-B-D-DDDEEEF cbbbRabbb	,EEE 1 7 7 9 9 , ,Wc7++++, 1 7 7 9 9 , ,Wc7++++,
  ((>?? 	1 	1O0000	1 	1s   A8 81B)r   frameFrameType | Nonec                    | j                             |           | j        r|t          j        k    r	d| _        d S d| _        d S )NT)r4   r}   r1   r   SIGINTr2   )r!   r   r   s      r"   r   zServer.handle_exitS  sI    %%c*** 	$v} 4 4"DOOO#Dr$   )r-   r   r   r   )r   r5   rE   )r;   r<   r   r   )r   r   r   r   r%   )r   r   r   r   )r   r   )r   r   r   r   r   r   )r&   r'   r(   r#   	functoolscached_propertyr7   rC   r@   rG   rW   r   rX   r   rY   r   
contextlibcontextmanagerrF   r   r*   r$   r"   r,   r,   7   sg       	/ 	/ 	/ 	/ i i i i
e e e e e' ' ' ' 'U U U U U.Z Z Z Z Zx! ! ! !F6 6 6 6   <+ + + + +@' ' ' '$ 1 1 1 1&$ $ $ $ $ $r$   r,   )3
__future__r   rv   r   r   loggingrO   ry   r8   r   ri   rt   r   r   collections.abcr   r   email.utilsr   typesr   typingr   r	   uvicorn._ansir
   uvicorn._compatr   uvicorn.configr   r   uvicorn.protocols.http.h11_implr   %uvicorn.protocols.http.httptools_implr   ,uvicorn.protocols.websockets.websockets_implr   3uvicorn.protocols.websockets.websockets_sansio_implr   )uvicorn.protocols.websockets.wsproto_implr   r   __annotations__r   SIGTERMr   SIGBREAK	getLoggerrU   r   r,   r*   r$   r"   <module>r      sQ   " " " " " " "           				     



      / / / / / / / / " " " " " "       + + + + + + + +       ' ' ' ' ' ' 2 2 2 2 2 2 2 2 w;;;;;;GGGGGGNNNNNN\\\\\\DDDDDD&)::ZGJ[[^vvIvvvv M
N <7))O		?	+	+	= 	= 	= 	= 	= 	= 	= 	=a$ a$ a$ a$ a$ a$ a$ a$ a$ a$r$   