
     @g/                        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
k    re#ej$        fz  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)
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.
    returnNc                 n    d| _         t                      | _        t                      | _        g | _        d S )Nr   )total_requestssetconnectionstasksdefault_headers)selfs    B/var/www/piapp/venv/lib/python3.11/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                   \   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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__2   s9    'MM  r   socketsc                     | j                                          t          j        |                     |                    S )Nr.   )r'   setup_event_loopasynciorunserve)r   r.   s     r   r3   z
Server.run;   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extrar0   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'   messager9   s         r   r4   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                 0   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 ]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
}	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_staterM   )http_protocol_classr)   rA   state)rM   r'   r   s    r   create_protocolz'Server.startup.<locals>.create_protocol`   s6     --!.--	 .   r   sockc                 p    ddl m} |                     t          j                              } ||          S )Nr   )	fromshare)socketrU   sharer<   r=   )rS   rU   	sock_datas      r   _share_socketz%Server.startup.<locals>._share_socketq   s=    
 -,,,,, JJry{{33	 y+++r   Windows   )rS   sslbacklogi  )pathr\   r]   )hostportr\   r]   N)*rA   rG   r+   r'   r   r2   AbstractEventLoopProtocolget_running_looprV   
SocketTypeserversplatformsystemworkerscreate_serverr\   r]   appendfdfromfdAF_UNIXSOCK_STREAMr.   udsr<   r^   existsstatst_modecreate_unix_serverchmodr_   r`   OSErrorrE   errorrI   sysexit_log_started_messager*   )r   r.   rR   looprY   rS   
is_windowsserver	listeners	uds_permsexcr'   s   `          @r   rG   zServer.startupX   s     m##%%%%%%%%%=$ 	#DF :>	 	G56		 	 	 	 	 	 	 ')) ,',", , , , >@DL , ,%_..);
>A%%*%(=..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   4I: :
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]:%dr[   httpshttpzUvicorn running on z (Press CTRL+C to quit)T)boldr9   r:   )r'   rl   rE   rF   getsocknamerp   r_   r`   r\   rC   rD   )
r   r~   r'   rS   addr_formatr_   r`   protocol_namerK   r9   s
             r   rz   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   r[   i / 皙?)on_tickr2   sleep)r   counterr+   s      r   rH   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                 r  K   t                               d           | j        D ]}|                                 |pg D ]}|                                 | j        D ]}|                                 d {V  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)rE   rF   rf   closewait_closedlistr)   r   rI   r2   r   wait_for_wait_tasks_to_completer'   timeout_graceful_shutdownTimeoutErrorrw   lenr   rx   version_infocancelr,   rA   )r   r.   r}   rS   
connectionts         r   rI   zServer.shutdown  s.     O$$$ l 	 	FLLNNNNMr 	 	DJJLLLLl 	' 	'F$$&&&&&&&&&& 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FF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        re| j        s`d}t                              |           | j         j        r:| j        s5t          j        d           d {V  | j         j        r| j        -d S d S d S d S d S 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,   rE   rF   r2   r   r   )r   r   s     r   r   zServer._wait_tasks_to_complete,  sD     ( 	) 	)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ra   )
	threadingcurrent_threadmain_threadr2   get_event_loopHANDLED_SIGNALSadd_signal_handlerhandle_exitNotImplementedErrorsignal)r   r{   sigs      r   rB   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_exitJ  s2     	$v} 4 4"DOOO#Dr   ra   r   )r    r!   r"   r   r   r   r   rV   r3   r4   rG   r   re   rz   rH   intboolr   rI   r   rB   r   r   r$   r   r   r&   r&   1   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 _ _ _ _B'hv7H.I 'd ' ' ' 'R6 6 6 6S T    8#+ #+htFM/B&C #+t #+ #+ #+ #+J) ) ) )5 5 5 5$s $8I+> $4 $ $ $ $ $ $r   r&   ))r2   loggingr<   rg   r   rV   rx   r   r   email.utilsr   typesr   typingr   r   r   r   r	   r
   r   rC   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	getLoggerrE   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 <7))O		?	+	+	= 	= 	= 	= 	= 	= 	= 	=]$ ]$ ]$ ]$ ]$ ]$ ]$ ]$ ]$ ]$r   