
    F/j1                        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m	Z	 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 dd
lmZ erd dlmZ n	 d dlmZ dZ G d de      Zd dZ G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d de"      Z# G d de"      Z$y# e$ r eZY sw xY w)!    N)ABCabstractmethod)TYPE_CHECKINGAny)URL   )AbstractAccessLogger)PathLike)Application)AccessLogger)Server)
SSLContext)	BaseSiteTCPSiteUnixSiteNamedPipeSiteSockSite
BaseRunner	AppRunnerServerRunnerGracefulExitc                       e Zd ZdZy)r   r   N)__name__
__module____qualname__code     P/var/www/html/maxservice/venv/lib/python3.12/site-packages/aiohttp/web_runner.pyr   r   %   s    Dr   r   c                      t               N)r   r   r   r   _raise_graceful_exitr"   )   s
    
.r   c                   v    e Zd ZdZddddddded	edz  d
eddf
dZee	de
fd              Ze	dd       ZddZy)r   )_runner_ssl_context_backlog_server      N@N   shutdown_timeoutssl_contextbacklogrunnerr   r+   r,   r-   returnc                    |j                   t        d      |dk7  r%d}t        j                  |t        d       ||_        || _        || _        || _        d | _	        y )Nz(Call runner.setup() before making a siter(   z,shutdown_timeout should be set on BaseRunner   )
stacklevel)
serverRuntimeErrorwarningswarnDeprecationWarning_shutdown_timeoutr$   r%   r&   r'   )selfr.   r+   r,   r-   msgs         r   __init__zBaseSite.__init__0   s]     == IJJt#@CMM#1a@'7F$'6:r   c                      y r!   r   r9   s    r   namezBaseSite.nameC   s     	r   c                 B   K   | j                   j                  |        y wr!   )r$   	_reg_siter=   s    r   startzBaseSite.startH   s     t$s   c                    K   | j                   j                  |        | j                  | j                  j                          | j                   j	                  |        y wr!   )r$   _check_siter'   close_unreg_siter=   s    r   stopzBaseSite.stopL   sD       &<<#LL   &s   AA r/   N)r   r   r   	__slots__floatr   intr;   propertyr   strr>   rA   rF   r   r   r   r   r   -   s    BI #')-;;  	;
  $&; ; 
;& c    % %'r   r   c                        e Zd ZdZ	 	 ddddddddddedz  d	edz  d
ededz  dededz  dedz  ddf fdZ	e
defd       Ze
defd       Zd fdZ xZS )r   )_host_port_bound_port_reuse_address_reuse_portNr(   r)   )r+   r,   r-   reuse_address
reuse_portr.   r   hostportr+   r,   r-   rS   rT   r/   c                    t         	|   ||||       || _        || j                  rdnd}|| _        d | _        || _        || _        y )Nr*   i   i  )superr;   rN   r%   rO   rP   rQ   rR   )
r9   r.   rU   rV   r+   r,   r-   rS   rT   	__class__s
            r   r;   zTCPSite.__init__W   s_     	-#	 	 	
 
<,,4$D
'++%r   c                 J    | j                   | j                   S | j                  S )a  The port the server is listening on.

        If the server hasn't been started yet, this returns the requested port
        (which might be 0 for a dynamic port).
        After the server starts, it returns the actual bound port. This is
        especially useful when port=0 was requested, as it allows retrieving the
        dynamically assigned port after the site has started.
        )rP   rO   r=   s    r   rV   zTCPSite.portq   s&     '###zzr   c                     | j                   rdnd}| j                  sdn| j                  }t        t        j                  ||| j
                              S )Nhttpshttpz0.0.0.0schemerU   rV   )r%   rN   rL   r   buildrV   )r9   r_   rU   s      r   r>   zTCPSite.name   s>     --6 $

y

399FDIIFGGr   c           	        K   t         |           d {    t        j                         }| j                  j
                  }|J |j                  || j                  | j                  | j                  | j                  | j                  | j                         d {   | _        | j                  j                  r0| j                  j                  d   j                         d   | _        y | j                  | _        y 7 7 cw)N)sslr-   rS   rT   r   r   )rX   rA   asyncioget_event_loopr$   r3   create_serverrN   rO   r%   r&   rQ   rR   r'   socketsgetsocknamerP   r9   loopr3   rY   s      r   rA   zTCPSite.start   s     gmo%%'$$!!!!//JJJJ!!MM--'' 0 
 
 <<#||33A6BBDQGD#zzD! 	
s#   DDB	DD A"DD)NNrG   )r   r   r   rH   rL   rJ   rI   r   boolr;   rK   rV   r>   rA   __classcell__rY   s   @r   r   r   T   s    RI
  	& #')-%)"&&& Dj& Dj	&  &  $&& & d{& 4K& 
&4 c   Hc H H
* *r   r   c                   n     e Zd ZdZddddddded	ed
edz  deddf fdZe	de
fd       Zd fdZ xZS )r   _pathr(   Nr)   r*   r.   r   pathr+   r,   r-   r/   c                :    t         |   ||||       || _        y )Nr*   )rX   r;   ro   )r9   r.   rp   r+   r,   r-   rY   s         r   r;   zUnixSite.__init__   s,     	-#	 	 	
 
r   c                 F    | j                   rdnd}| d| j                   dS )Nr\   r]   ://unix::)r%   ro   )r9   r_   s     r   r>   zUnixSite.name   s(     --6$**Q//r   c                   K   t         |           d {    t        j                         }| j                  j
                  }|J |j                  || j                  | j                  | j                         d {   | _
        y 7 s7 w)N)rb   r-   )rX   rA   rc   rd   r$   r3   create_unix_serverro   r%   r&   r'   rh   s      r   rA   zUnixSite.start   s     gmo%%'$$!!!!44JJ!!MM	 5 
 
	 	
"   BB	A(B>B?BBrG   )r   r   r   rH   r
   rI   r   rJ   r;   rK   rL   r>   rA   rk   rl   s   @r   r   r      s|    I #')- 
    $&  
" 0c 0 0

 

r   r   c            	       \     e Zd ZdZdddddededd	f fd
Zedefd       Zd fdZ	 xZ
S )r   rn   r(   r+   r.   r   rp   r+   r/   Nc                    t        j                         }t        |t         j                        st	        d      t
        |   ||       || _        y )Nz9Named Pipes only available in proactor loop under windowsry   )rc   rd   
isinstanceProactorEventLoopr4   rX   r;   ro   )r9   r.   rp   r+   ri   rY   s        r   r;   zNamedPipeSite.__init__   sT     %%''++
 K  	2BC
r   c                     | j                   S r!   rn   r=   s    r   r>   zNamedPipeSite.name       zzr   c                    K   t         |           d {    t        j                         }| j                  j
                  }|J |j                  || j                         d {   }|d   | _        y 7 a7 wNr   )	rX   rA   rc   rd   r$   r3   start_serving_pipero   r'   )r9   ri   r3   r'   rY   s       r   rA   zNamedPipeSite.start   su     gmo%%'$$!!!//DJJ
 
 qz 	
s"   A;A7AA;'A9(A;9A;rG   )r   r   r   rH   rL   rI   r;   rK   r>   rA   rk   rl   s   @r   r   r      sY    I MQ"*-DI	 c  " "r   r   c                        e Zd ZdZdddddddej                  d	ed
edz  deddf fdZe	de
fd       Zd fdZ xZS )r   )_sock_namer(   Nr)   r*   r.   r   sockr+   r,   r-   r/   c                l   t         
|   ||||       || _        | j                  rdnd}t	        t
        d      r;|j                  t
        j                  k(  r| d|j                          d}|| _        y |j                         d d \  }}	t        t        j                  |||	            }|| _        y )	Nr*   r\   r]   AF_UNIXrs   rt   r1   r^   )rX   r;   r   r%   hasattrsocketfamilyr   rg   rL   r   r`   r   )r9   r.   r   r+   r,   r-   r_   r>   rU   rV   rY   s             r   r;   zSockSite.__init__   s     	-#	 	 	
 
 --669%$++*GXXd&6&6&8%9;D 
 ))+BQ/JD$syyTEFD
r   c                     | j                   S r!   )r   r=   s    r   r>   zSockSite.name   r~   r   c                   K   t         |           d {    t        j                         }| j                  j
                  }|J |j                  || j                  | j                  | j                         d {   | _
        y 7 s7 w)N)r   rb   r-   )rX   rA   rc   rd   r$   r3   re   r   r%   r&   r'   rh   s      r   rA   zSockSite.start   s}     gmo%%'$$!!!!//):):DMM 0 
 
	 	
rw   rG   )r   r   r   rH   r   rI   r   rJ   r;   rK   rL   r>   rA   rk   rl   s   @r   r   r      s    "I #')- mm
    $&  
0 c  
 
r   r   c            	           e Zd ZdZddddedededd	fd
Zede	d	z  fd       Z
edee   fd       Zedee   fd       ZddZedd       ZddZede	fd       Zedd       Zdedd	fdZdedd	fdZdedd	fdZy	)r   _handle_signals_kwargsr'   _sitesr8   Fr(   )handle_signalsr+   r   r+   kwargsr/   Nc                J    || _         || _        d | _        g | _        || _        y r!   r   )r9   r   r+   r   s       r   r;   zBaseRunner.__init__
  s)      .&*&(!1r   c                     | j                   S r!   )r'   r=   s    r   r3   zBaseRunner.server  s    ||r   c                     g }| j                   D ]F  }|j                  }||j                  }|!|D ]!  }|j                  |j	                                # H |S r!   )r   r'   rf   appendrg   )r9   retsiter3   rf   r   s         r   	addresseszBaseRunner.addresses  sc    KK 	7D\\F! ..& ' 7

4#3#3#567	7 
r   c                 ,    t        | j                        S r!   )setr   r=   s    r   siteszBaseRunner.sites'  s    4;;r   c                 :  K   t        j                         }| j                  rI	 |j                  t        j
                  t               |j                  t        j                  t               | j                          d {   | _
        y # t        $ r Y )w xY w7 wr!   )rc   rd   r   add_signal_handlersignalSIGINTr"   SIGTERMNotImplementedError_make_serverr'   r9   ri   s     r   setupzBaseRunner.setup+  sz     %%'''7KL''8LM
 "..00	 '  1s5   !BAB
 ,B?B 
B
	BBBBc                    K   yw)z8Call any shutdown hooks to help server close gracefully.Nr   r=   s    r   shutdownzBaseRunner.shutdown8  s        c                   K   t        | j                        D ]  }|j                          d {     | j                  r|t	        j
                  d       d {    | j                  j                          | j                          d {    | j                  j                  | j                         d {    | j                          d {    d | _        | j                  rTt	        j                         }	 |j                  t        j                         |j                  t        j                         y y 7 7 7 7 7 u# t         $ r Y y w xY wwr   )listr   rF   r'   rc   sleeppre_shutdownr   r8   _cleanup_serverr   get_running_loopremove_signal_handlerr   r   r   r   )r9   r   ri   s      r   cleanupzBaseRunner.cleanup<  s    
 % 	D))+	 << --"""LL%%'--/!!,,''(>(>???""$$$++-D**6==9**6>>:	   
 #!?$ ' s{   ,ED=*EE 1EE,E8E9EE+E=>E ;E EEEE	EEEEc                    K   y wr!   r   r=   s    r   r   zBaseRunner._make_serverW  	     r   c                    K   y wr!   r   r=   s    r   r   zBaseRunner._cleanup_server[  r   r   r   c                 x    || j                   v rt        d| d|        | j                   j                  |       y )NSite z! is already registered in runner )r   r4   r   r9   r   s     r   r@   zBaseRunner._reg_site_  s9    4;;tf,MdVTUU4 r   c                 B    || j                   vrt        d| d|        y Nr   z is not registered in runner )r   r4   r   s     r   rC   zBaseRunner._check_sited  s,    t{{"tf,I$PQQ #r   c                 x    || j                   vrt        d| d|        | j                   j                  |       y r   )r   r4   remover   s     r   rE   zBaseRunner._unreg_siteh  s9    t{{"tf,I$PQQ4 r   rG   )r   r   r   rH   rj   rI   r   r;   rK   r   r3   r   r   r   r   r   r   r   r   r   r   r   r@   rC   rE   r   r   r   r   r     s$   XI
  %"&	2 2  	2
 2 
2    	49 	 	  s8}    1 G G6 F    !h !4 !
R RT R! !T !r   r   c            	       Z     e Zd ZdZdZdddedededd	f fd
ZddZ	defdZ
ddZ xZS )r   zLow-level web server runner_web_serverF)r   
web_serverr   r   r/   Nc                6    t        |   dd|i| || _        y )Nr   r   )rX   r;   r   )r9   r   r   r   rY   s       r   r;   zServerRunner.__init__s  s"     	AA&A%r   c                    K   y wr!   r   r=   s    r   r   zServerRunner.shutdowny  	     r   c                 "   K   | j                   S wr!   r   r=   s    r   r   zServerRunner._make_server|  s     s   c                    K   y wr!   r   r=   s    r   r   zServerRunner._cleanup_server  r   r   rG   )r   r   r   __doc__rH   r   rj   r   r;   r   r   r   rk   rl   s   @r   r   r   n  sL    % I =B& &59&MP&	& F  r   r   c                   |     e Zd ZdZdZdeddededee	   de
d	d
f
 fdZed	efd       ZddZd	efdZddZ xZS )r   zWeb Application runner_appF)r   access_log_classappr   r   r   r/   Nc                    t        |   dd|i| t        |t              st	        d|      || j
                  d<   || _        y )Nr   z;The first argument should be web.Application instance, got r   r   )rX   r;   r{   r   	TypeErrorr   r   )r9   r   r   r   r   rY   s        r   r;   zAppRunner.__init__  sS     	AA&A#{+McWU  ,<'(	r   c                     | j                   S r!   r   r=   s    r   r   zAppRunner.app  s    yyr   c                 T   K   | j                   j                          d {    y 7 wr!   )r   r   r=   s    r   r   zAppRunner.shutdown  s     ii  """   (&(c                 |  K   t        j                         }| j                  j                  |       | j                  j                  j                          | j                  j                          d {    | j                  j                           | j                  j                  dd|i| j                  S 7 Fw)Nri   r   )	rc   rd   r   	_set_loop
on_startupfreezestartup_make_handlerr   r   s     r   r   zAppRunner._make_server  s     %%'		D!		##%ii!!!		&tyy&&ADADLLAA 	"s   A1B<3B:4AB<c                 T   K   | j                   j                          d {    y 7 wr!   )r   r   r=   s    r   r   zAppRunner._cleanup_server  s     ii!!!r   rG   )r   r   r   r   rH   r   r   rj   typer	   r   r;   rK   r   r   r   r   r   rk   rl   s   @r   r   r     s     I  %7C 	
 34  
  [  #BF B"r   r   rG   )%rc   r   r   r5   abcr   r   typingr   r   yarlr   r	   typedefsr
   web_appr   web_logr   r   r   rb   r   ImportErrorobject__all__
SystemExitr   r"   r   r   r   r   r   r   r   r   r   r   r   <module>r      s        # %  %    ! "
: $'s $'NB*h B*J#
x #
L"H ">&
x &
Rd! d!N: *&"
 &"]  
s   B? ?C	C	