
    Њ1i/                       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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jD                  fz  Z! ejF                  d      Z$ G d d      Z% G d d      Z&y)    )annotationsN)
formatdate)	FrameType)TYPE_CHECKINGSequenceUnion)Config)H11Protocol)HttpToolsProtocol)WebSocketProtocol)
WSProtocolwin32zuvicorn.errorc                      e Zd ZdZddZy)ServerStatezP
    Shared servers state that is available between all protocol instances.
    c                \    d| _         t               | _        t               | _        g | _        y )Nr   )total_requestssetconnectionstasksdefault_headers)selfs    W/var/www/html/treecensus/species_ai/venv/lib/python3.12/site-packages/uvicorn/server.py__init__zServerState.__init__+   s%    +.5.1e
:<    NreturnNone)__name__
__module____qualname____doc__r    r   r   r   r   &   s    =r   r   c                  l    e Zd Z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ddZddZy)Serverc                h    || _         t               | _        d| _        d| _        d| _        d| _        y )NFg        )configr   server_statestartedshould_exit
force_exitlast_notified)r   r&   s     r   r   zServer.__init__3   s1    'M  r   Nc                    | j                   j                          t        j                  | j	                  |            S )Nsockets)r&   setup_event_loopasynciorunserve)r   r.   s     r   r1   z
Server.run<   s,    $$&{{4::g:677r   c                r  K   t        j                         }| j                  }|j                  s|j	                          |j                  |      | _        | j                          d}dt        j                  dd      z   dz   }t        j                  ||d|i       | j                  |	       d {    | j                  ry | j                          d {    | j                  |	       d {    d
}dt        j                  dd      z   dz   }t        j                  ||d|i       y 7 }7 Z7 Bw)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&   messager7   s         r   r2   zServer.serve@   s	    YY[
}}KKM--f5$$&/2U[[&5QQTWWGZ/OPll7l+++nnmmGm,,,03ekk$66RRUXXGZ/OP 	, 	,s6   B1D73D14$D7D3D72D53?D73D75D7c                   K    j                   j                          d {     j                   j                  rd _        y  j                  	 d
	 	 	 d fd}t	        j
                         }|	 	 	 	 dd}g  _        |D ]~  }t        j                         dk(  }j                  dkD  r
|r ||      }|j                  ||j                  j                         d {   } j                  j                  |        |}nj                  t        j                   j                  t        j"                  t        j$                        }|j                  ||j                  j                         d {   }|j&                  J |j&                  }|g _        nGj(                  d}	t*        j,                  j/                  j(                        r)t+        j0                  j(                        j2                  }	|j5                  |j(                  j                  j                         d {   }t+        j6                  j(                  |	       |j&                  J |j&                  }|g _        ni	 |j                  |j8                  j:                  j                  j                  	       d {   }j&                  J |j&                  }|g _        | jI                  |       d _%        y 	 d _%        y 7 7 27 7 7 U# t<        $ rW}
t>        jA                  |
        j                   jC                          d {  7   tE        jF                  d       Y d }
~
d }
~
ww xY ww)NTc                j    j                  j                  j                  j                  |       S )N)r&   r'   	app_state_loop)http_protocol_classr'   r?   state)rM   r&   r   s    r   create_protocolz'Server.startup.<locals>.create_protocola   s9     --!..----	 .  r   c                d    ddl m} | j                  t        j                               } ||      S )Nr   )	fromshare)socketrR   sharer:   r;   )sockrR   	sock_datas      r   _share_socketz%Server.startup.<locals>._share_socketr   s&    
 - JJryy{3	 ++r   Windows   )rU   sslbacklogi  )pathrZ   r[   )hostportrZ   r[   N)rM   z asyncio.AbstractEventLoop | Noner   zasyncio.Protocol)rU   socket.SocketTyper   r`   )&r?   rE   r)   r&   r0   get_running_loopserversplatformsystemworkerscreate_serverrZ   r[   appendfdrS   fromfdAF_UNIXSOCK_STREAMr.   udsr:   r\   existsstatst_modecreate_unix_serverchmodr]   r^   OSErrorrC   errorrG   sysexit_log_started_messager(   )r   r.   rP   looprW   rU   
is_windowsserver	listeners	uds_permsexcr&   s   `          @r   rE   zServer.startupY   s    mm##%%%==$$#D 7;	3		 '') ,',", >@DL ,%__.);
>>A%*(.D#11#$FJJ  2    ##F+,  IYY"==FNNF<N<NOD--d

FNN .  F >>---I"8DLZZ#Iww~~fjj)GGFJJ/77	22fjjfjj&.. 3  F HHVZZ+>>---I"8DL#11#

"NN  2    >>---I"8DL?%%i0  } 	&N  S!mm,,...s   NLC N#L$BN>L?B>N=L>ANAL LL ANNNNL 	M?(2M:MM:5N:M??Nc                   | j                   }|j                  *|d   }t        j                  d|j	                                y |j
                  !t        j                  d|j
                         y d}|j                  dn|j                  }d|v rd}|j                  }|dk(  r|d   j	                         d   }|j                  rd	nd
}d| d}dt        j                  |d      z   dz   }	t        j                  ||||d|	i       y )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]:%drY   httpshttpzUvicorn running on z (Press CTRL+C to quit)T)boldr7   r8   )r&   rh   rC   rD   getsocknamerl   r]   r^   rZ   rA   rB   )
r   rz   r&   rU   addr_formatr]   r^   protocol_namerI   r7   s
             r   rv   zServer._log_started_message   s   99 Q<DKKE  "
 ZZ#KKJFJJ
 'K & 39Dd{,;;Dqy |//1!4'-zzGvM+K=8OPG%++k56+, 
 KK&6  r   c                   K   d}| j                  |       d {   }|sD|dz  }|dz  }t        j                  d       d {    | j                  |       d {   }|sCy y 7 K7 $7 w)Nr   rY   i / 皙?)on_tickr0   sleep)r   counterr)   s      r   rF   zServer.main_loop   si      LL11qLG&G--$$$ $W 55K	  2 %5s9   A+A%(A+A'A+A)A+#A+'A+)A+c                t  K   |dz  dk(  rt        j                          }t        |d      j                         }| j                  j                  rd|fg}ng }|| j                  j
                  z   | j                  _        | j                  j                  O|| j                  z
  | j                  j                  kD  r)|| _	        | j                  j                          d {    | j                  ry| j                  j                  -| j                  j                  | j                  j                  k\  S y7 Uw)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99;L%l4@GGIL{{&& '67  dkk999 -
 {{**6$"4"44t{{7Q7QQ)5D&++55777 ;;))5$$33t{{7U7UUU 8s   CD8 D6!AD8c                x  K   t         j                  d       | j                  D ]  }|j                           |xs g D ]  }|j                           t	        | j
                  j                        D ]  }|j                           t        j                  d       d {    	 t        j                  | j                         | j                  j                         d {    | j*                  s#| j,                  j                          d {    y y 7 v7 6# t        j                  $ r t         j                  dt!        | j
                  j"                               | j
                  j"                  D ]8  }t$        j&                  dk  r|j)                          '|j)                  d       : Y w xY w7 w)NzShutting downr   )timeoutz=Cancel %s running task(s), timeout graceful shutdown exceeded)   	   z2Task cancelled, timeout graceful shutdown exceeded)msg)rC   rD   rb   closelistr'   r   rG   r0   r   wait_for_wait_tasks_to_completer&   timeout_graceful_shutdownTimeoutErrorrs   lenr   rt   version_infocancelr*   r?   )r   r.   ry   rU   
connectionts         r   rG   zServer.shutdown  sx    O$ ll 	FLLN	Mr 	DJJL	 t00<<= 	"J!	"mmC   	W"",,.==    --((*** ) 	! ## 		WLLOD%%++, &&,, W##f,HHJHH!UHV	W		W +sU   BF: D!F:&<D "D#D ')F:F8F:D BF52F:4F55F:c                  K   | j                   j                  r| j                  syd}t        j	                  |       | j                   j                  rL| j                  s@t        j                  d       d {    | j                   j                  r| j                  s@| j                   j                  r| j                  syd}t        j	                  |       | j                   j                  rL| j                  s@t        j                  d       d {    | j                   j                  r| j                  s@| j                  D ]  }|j                          d {     y 7 7 S7 w)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*   rC   rD   r0   r   r   rb   wait_closed)r   r   ry   s      r   r   zServer._wait_tasks_to_complete+  s    ((LCKK##//mmC((( ##// ""4??TCKK##))$//mmC((( ##))$// ll 	'F$$&&&	' ) ) 'sC   A4E)6E#7&E)A3E)E%&E)9"E)E'E)%E)'E)c                F   t        j                         t        j                         ury t        j                         }	 t
        D ]   }|j                  || j                  |d        " y # t        $ r. t
        D ]"  }t        j                  || j                         $ Y y w xY wr_   )
	threadingcurrent_threadmain_threadr0   get_event_loopHANDLED_SIGNALSadd_signal_handlerhandle_exitNotImplementedErrorsignal)r   rw   sigs      r   r@   zServer.install_signal_handlers=  s    ##%Y-B-B-DD%%'	5& J''T-=-=sDIJ" 	5& 5c4#3#345	5s   )A) )4B B c                `    | j                   r|t        j                  k(  rd| _        y d| _         y )NT)r)   r   SIGINTr*   )r   r   frames      r   r   zServer.handle_exitL  s%    v}} 4"DO#Dr   )r&   r	   r   r   r_   )r.   zlist[socket.socket] | Noner   r   )rz   zSequence[socket.SocketType]r   r   r   )r   intr   bool)r   r   r   zFrameType | Noner   r   )r   r   r    r   r1   r2   rE   rv   rF   r   rG   r   r@   r   r"   r   r   r$   r$   2   s>    !8Q2_B'R68!+F'$5$r   r$   )'
__future__r   r0   loggingr:   rc   r   rS   rt   r   r   email.utilsr   typesr   typingr   r   r   rA   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	getLoggerrC   r   r$   r"   r   r   <module>r      s    "   	    
   "  1 1  !;GNDk#4jBSSTI MM
NN <<7))O			?	+	= 	=^$ ^$r   