
    gO2                       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mZ d dlmZ d dl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k    re#ej$        fz  Z# ej%        d          Z& G d d          Z' G d d          Z(dS )    )annotationsN)
formatdate)	FrameType)TYPE_CHECKING	GeneratorSequenceUnion)Config)H11Protocol)HttpToolsProtocol)WebSocketProtocol)
WSProtocol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    @/var/www/html/env/lib/python3.11/site-packages/uvicorn/server.py__init__zServerState.__init__,   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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__4   sA    'MM  ,.r   Nsocketslist[socket.socket] | Nonec                    | j                                          t          j        |                     |                    S )Nr.   )r&   setup_event_loopasynciorunserver   r.   s     r   r4   z
Server.run?   s4    $$&&&{4::g:66777r   c                   K   |                                  5  |                     |           d {V  d d d            d S # 1 swxY w Y   d S N)capture_signals_server6   s     r   r5   zServer.serveC   s      !!## 	' 	'++g&&&&&&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   A  AAc                R  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extrar1   zFinished server process [%d]zFinished server process [)osgetpidr&   loadedloadlifespan_classlifespanclickstyleloggerinfostartupr*   	main_loopshutdown)r   r.   
process_idr&   messager?   s         r   r:   zServer._serveG   sJ     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 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 _        n^j        d}	t*          j                            j                  rt+          j        j                  j        }	|                    |j        j        j                   d {V }t+          j        j        |	           |j        J |j        }|g _        n	 |
                    |j        j        j        j                   d {V }nd# t<          $ rW}
t>                               |
            j         !                                 d {V  tE          j#        d           Y d }
~
nd }
~
ww xY w|j        J |j        }|g _        | $                    |           n	 d _%        d S )NT_loop asyncio.AbstractEventLoop | Noner   asyncio.Protocolc                T                         j        j        j        |           S )N)r&   r(   	app_staterR   )http_protocol_classr(   rG   state)rR   r&   r   s    r   create_protocolz'Server.startup.<locals>.create_protocolf   s6     --!.--	 .   r   socksocket.SocketTypec                p    ddl m} |                     t          j                              } ||          S )Nr   )	fromshare)socketr]   sharerB   rC   )rZ   r]   	sock_datas      r   _share_socketz%Server.startup.<locals>._share_socketw   s=    
 -,,,,, JJry{{33	 y+++r   Windows   )rZ   sslbacklogi  )pathrd   re   )hostportrd   re   r8   )rR   rS   r   rT   )rZ   r[   r   r[   )&rG   rL   r*   r&   r3   get_running_loopserversplatformsystemworkerscreate_serverrd   re   appendfdr^   fromfdAF_UNIXSOCK_STREAMr.   udsrB   rf   existsstatst_modecreate_unix_serverchmodrg   rh   OSErrorrJ   errorrN   sysexit_log_started_messager)   )r   r.   rY   loopra   rZ   
is_windowsserver	listeners	uds_permsexcr&   s   `          @r   rL   zServer.startup^   s     m##%%%%%%%%%=$ 	#DF 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   
4H? ?
J 	AJJ 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          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]:%drc   httpshttpzUvicorn running on z (Press CTRL+C to quit)T)boldr?   r@   )r&   rp   rJ   rK   getsocknamert   rg   rh   rd   rH   rI   )
r   r   r&   rZ   addr_formatrg   rh   protocol_namerP   r?   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1EKRV4W4W4WWZssM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   rc   i / 皙?)on_tickr3   sleep)r   counterr*   s      r   rM   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        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 0;dk>Y0YD- {*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 ]}|                                 t	          | j        j                  D ]}|                                 t          j	        d           d {V  	 t          j
        |                                 | j        j                   d {V  n# t          j        $ r t                               dt!          | j        j                             | j        j        D ]=}t$          j        dk     r|                                 '|                    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 exceeded)   	   z2Task cancelled, timeout graceful shutdown exceeded)msg)rJ   rK   rj   closelistr(   r   rN   r3   r   wait_for_wait_tasks_to_completer&   timeout_graceful_shutdownTimeoutErrorr{   lenr   r|   version_infocancelr+   rG   )r   r.   r   rZ   
connectionts         r   rN   zServer.shutdown  s     O$$$ l 	 	FLLNNNNMr 	 	DJJLLLL t0<== 	" 	"J!!!!mC         	W",,..=           # 		W 		W 		WLLOD%+,,   &, W W#f,,HHJJJJHH!UHVVVV	W W		W  	+-((***********	+ 	+s   !8C B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   r+   rJ   rK   r3   r   r   rj   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>>  s*    bbb3S&-T5E"F"Fbbbr   )		threadingcurrent_threadmain_threadHANDLED_SIGNALSitemsr   reversedr-   raise_signal)r   original_handlersr   handlercaptured_signals   `    r   r9   zServer.capture_signals6  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)r-   ro   r*   r   SIGINTr+   )r   r   r   s      r   r   zServer.handle_exitJ  sI    %%c*** 	$v} 4 4"DOOO#Dr   )r&   r
   r   r   r8   )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   r4   r5   r:   rL   r~   rM   r   rN   r   
contextlibcontextmanagerr9   r   r#   r   r   r%   r%   3   s:       	/ 	/ 	/ 	/8 8 8 8 8' ' ' ' 'Q Q Q Q Q.[ [ [ [ [z! ! ! !F6 6 6 6   4!+ !+ !+ !+ !+F' ' ' '$ 1 1 1 1&$ $ $ $ $ $r   r%   ))
__future__r   r3   r   loggingrB   rk   r   r^   r|   r   r   email.utilsr   typesr   typingr   r   r   r	   rH   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	getLoggerrJ   r   r%   r#   r   r   <module>r      s   " " " " " "       				    



      " " " " " "       < < < < < < < < < < < <  ! ! ! ! ! ! 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 <7))O		?	+	+	= 	= 	= 	= 	= 	= 	= 	=\$ \$ \$ \$ \$ \$ \$ \$ \$ \$r   