
    l i2                       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mZ d dlmZ d dlmZ d dlmZmZ d dlZd dlm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" d dl#m$Z$ e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)	GeneratorSequence)
formatdate)	FrameType)TYPE_CHECKINGUnion)asyncio_run)Config)H11Protocol)HttpToolsProtocol)WebSocketProtocol)WebSocketsSansIOProtocol)
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    E/var/www/findabus/venv/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__7   sA    'MM  ,.r   Nsocketslist[socket.socket] | Nonec                z    t          |                     |          | j                                                  S )Nr0   )loop_factory)r
   server(   get_loop_factoryr   r0   s     r   runz
Server.runB   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_server7   s     r   r5   zServer.serveE   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extrar3   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   r0   
process_idr(   messagerA   s         r   r<   zServer._serveI   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_staterT   )http_protocol_classr*   rI   state)rT   r(   r   s    r   create_protocolz'Server.startup.<locals>.create_protocolh   s6     --!.--	 .   r   socksocket.SocketTypec                p    ddl m} |                     t          j                              } ||          S )Nr   )	fromshare)socketr_   sharerD   rE   )r\   r_   	sock_datas      r   _share_socketz%Server.startup.<locals>._share_sockety   s=    
 -,,,,, JJry{{33	 y+++r   Windows   )r\   sslbacklogi  )pathrf   rg   )hostportrf   rg   r:   )rT   rU   r   rV   )r\   r]   r   r]   )&rI   rN   r,   r(   asyncioget_running_loopserversplatformsystemworkerscreate_serverrf   rg   appendfdr`   fromfdAF_UNIXSOCK_STREAMr0   udsrD   rh   existsstatst_modecreate_unix_serverchmodri   rj   OSErrorrL   errorrP   sysexit_log_started_messager+   )r   r0   r[   looprc   r\   
is_windowsserver	listeners	uds_permsexcr(   s   `          @r   rN   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]:%dre   httpshttpzUvicorn running on z (Press CTRL+C to quit)T)boldrA   rB   )r(   rs   rL   rM   getsocknamerw   ri   rj   rf   rJ   rK   )
r   r   r(   r\   addr_formatri   rj   protocol_namerR   rA   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   re   i / 皙?)on_tickrk   sleep)r   counterr,   s      r   rO   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        }|0| j        j        |k    r t                              d| d           dS dS )	N
   r   T)usegmts   datezMaximum request limit of z exceeded. Terminating process.F)timer   encoder(   date_headerencoded_headersr*   r   callback_notifyr.   timeout_notifyr,   limit_max_requestsr   rL   warning)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{5#(9(HL(X(XNNd|dddeee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)rL   rM   rm   closelistr*   r   rP   rk   r   wait_for_wait_tasks_to_completer(   timeout_graceful_shutdownTimeoutErrorr~   lenr   cancelr-   rI   )r   r0   r   r\   
connectionts         r   rP   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   r-   rL   rM   rk   r   r   rm   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>A  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   r;   zServer.capture_signals9  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/   rr   r,   r   SIGINTr-   )r   r   r   s      r   r   zServer.handle_exitM  sI    %%c*** 	$v} 4 4"DOOO#Dr   )r(   r   r   r   r:   )r0   r1   r   r   )r   r   r   r   r    )r   r   r   r   )r   r   )r   r   r   r   r   r   )r!   r"   r#   r   r8   r5   r<   rN   r   rO   r   rP   r   
contextlibcontextmanagerr;   r   r%   r   r   r'   r'   6   s?       	/ 	/ 	/ 	/e e e e e' ' ' ' 'Q Q Q Q Q.[ [ [ [ [z! ! ! !F6 6 6 6   <+ + + + +@' ' ' '$ 1 1 1 1&$ $ $ $ $ $r   r'   ).
__future__r   rk   r   loggingrD   rn   r   r`   r   r   r   collections.abcr   r   email.utilsr   typesr   typingr   r	   rJ   uvicorn._compatr
   uvicorn.configr   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   	Protocolsr   SIGTERMr   SIGBREAK	getLoggerrL   r   r'   r%   r   r   <module>r      s   " " " " " "       				    



      / / / / / / / / " " " " " "       ' ' ' ' ' ' ' '  ' ' ' ' ' ' ! ! ! ! ! ! o;;;;;;GGGGGGNNNNNN\\\\\\DDDDDDk#4jBSUmmnI M
N <7))O		?	+	+	= 	= 	= 	= 	= 	= 	= 	=\$ \$ \$ \$ \$ \$ \$ \$ \$ \$r   