
    de-                        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	m
Z
mZ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 n# e$ r eZY nw xY w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%dS )     N)ABCabstractmethod)Any	AwaitableCallableListOptionalSet)URL   )PathLike)Application)Server)
SSLContext)	BaseSiteTCPSiteUnixSiteNamedPipeSiteSockSite
BaseRunner	AppRunnerServerRunnerGracefulExitc                       e Zd ZdZdS )r   r   N)__name__
__module____qualname__code     2lib/python3.11/site-packages/aiohttp/web_runner.pyr   r   !   s        DDDr    r   returnc                      t                      N)r   r   r    r!   _raise_graceful_exitr%   %   s    
..r    c                       e Zd ZdZddddddded	ee         d
eddf
dZe	e
defd                        Ze
dd            ZddZdS )r   )_runner_ssl_context_backlog_server      N@N   shutdown_timeoutssl_contextbacklogrunnerr   r.   r/   r0   r"   c                    |j         t          d          |dk    r%d}t          j        |t          d           ||_        || _        || _        || _        d | _	        d S )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*   )selfr1   r.   r/   r0   msgs         r!   __init__zBaseSite.__init__,   sl     = IJJJt##@CM#1a@@@@'7F$'9=r    c                     d S r$   r   r;   s    r!   namezBaseSite.name?   s	     	r    c                 >   K   | j                             |            d S r$   )r'   	_reg_siter?   s    r!   startzBaseSite.startD   s"      t$$$$$r    c                    K   | j                             |            | j        | j                                         | j                             |            d S r$   )r'   _check_siter*   close_unreg_siter?   s    r!   stopzBaseSite.stopH   sT        &&&<#L     &&&&&r    r"   N)r   r   r   	__slots__floatr	   r   intr=   propertyr   strr@   rC   rH   r   r    r!   r   r   )   s        BI #',0> > >>  	>
 j)> > 
> > > >& c    ^ X % % % ^%' ' ' ' ' 'r    r   c                        e Zd ZdZ	 	 ddddddddddee         d	ee         d
edee         dedee	         dee	         ddf fdZ
edefd            Zd fdZ xZS )r   )_host_port_reuse_address_reuse_portNr+   r,   )r.   r/   r0   reuse_address
reuse_portr1   r   hostportr.   r/   r0   rT   rU   r"   c                    t                                          ||||           || _        || j        rdnd}|| _        || _        || _        d S )Nr-   i   i  )superr=   rP   r(   rQ   rR   rS   )
r;   r1   rV   rW   r.   r/   r0   rT   rU   	__class__s
            r!   r=   zTCPSite.__init__S   sn     	-#	 	 	
 	
 	
 
<,644$D
+%r    c                     | j         rdnd}| j        dn| j        }t          t          j        ||| j                            S )Nhttpshttpz0.0.0.0schemerV   rW   )r(   rP   rN   r   buildrQ   )r;   r_   rV   s      r!   r@   zTCPSite.namel   sF     -96 J.yyDJ39FDJGGGHHHr    c           	      (  K   t                                                       d {V  t          j                    }| j        j        }|J |                    || j        | j        | j	        | j
        | j        | j                   d {V | _        d S )N)sslr0   rT   rU   )rY   rC   asyncioget_event_loopr'   r5   create_serverrP   rQ   r(   r)   rR   rS   r*   r;   loopr5   rZ   s      r!   rC   zTCPSite.startr   s      ggmmoo%''$!!!!//JJ!M-' 0 
 
 
 
 
 
 
 
r    )NNrI   )r   r   r   rJ   r	   rN   rL   rK   r   boolr=   rM   r@   rC   __classcell__rZ   s   @r!   r   r   P   s!       CI
 #"	& #',0(,%)& & && sm& sm	&  & j)& &  ~& TN& 
& & & & & &2 Ic I I I XI

 
 
 
 
 
 
 
 
 
r    r   c                   z     e Zd ZdZddddddded	ed
ee         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-   r1   r   pathr.   r/   r0   r"   c                `    t                                          ||||           || _        d S )Nr-   )rY   r=   rm   )r;   r1   rn   r.   r/   r0   rZ   s         r!   r=   zUnixSite.__init__   s?     	-#	 	 	
 	
 	
 


r    c                 2    | j         rdnd}| d| j         dS )Nr\   r]   ://unix::)r(   rm   )r;   r_   s     r!   r@   zUnixSite.name   s,     -96//$*////r    c                   K   t                                                       d {V  t          j                    }| j        j        }|J |                    || j        | j        | j	                   d {V | _
        d S )N)rb   r0   )rY   rC   rc   rd   r'   r5   create_unix_serverrm   r(   r)   r*   rf   s      r!   rC   zUnixSite.start   s      ggmmoo%''$!!!!44J!M	 5 
 
 
 
 
 
 
 
r    rI   )r   r   r   rJ   r   rK   r	   r   rL   r=   rM   rN   r@   rC   ri   rj   s   @r!   r   r      s        I #',0   
   j)  
     " 0c 0 0 0 X0

 

 

 

 

 

 

 

 

 

r    r   c            	       b     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   rl   r+   r.   r1   r   rn   r.   r"   Nc                    t          j                    }t          |t           j                  st	          d          t                                          ||           || _        d S )Nz8Named Pipes only available in proactorloop under windowsrv   )rc   rd   
isinstanceProactorEventLoopr6   rY   r=   rm   )r;   r1   rn   r.   rg   rZ   s        r!   r=   zNamedPipeSite.__init__   so     %'''+
 
 	 M   	2BCCC


r    c                     | j         S r$   rl   r?   s    r!   r@   zNamedPipeSite.name   
    zr    c                    K   t                                                       d {V  t          j                    }| j        j        }|J |                    || j                   d {V }|d         | _        d S )Nr   )	rY   rC   rc   rd   r'   r5   start_serving_piperm   r*   )r;   rg   r5   r*   rZ   s       r!   rC   zNamedPipeSite.start   s      ggmmoo%''$!!!//DJ
 
 
 
 
 
 
 
 qzr    rI   )r   r   r   rJ   rN   rK   r=   rM   r@   rC   ri   rj   s   @r!   r   r      s        I MQ  "*-DI	      c    X" " " " " " " " " "r    r   c                        e Zd ZdZdddddddej        d	ed
ee         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-   r1   r   sockr.   r/   r0   r"   c                   t                                          ||||           || _        | j        rdnd}t	          t
          d          r0|j        t
          j        k    r| d|                                 d}nC|                                d d         \  }}	t          t          j        |||	                    }|| _        d S )	Nr-   r\   r]   AF_UNIXrq   rr   r3   r^   )rY   r=   r   r(   hasattrsocketfamilyr   getsocknamerN   r   r`   r   )r;   r1   r   r.   r/   r0   r_   r@   rV   rW   rZ   s             r!   r=   zSockSite.__init__   s     	-#	 	 	
 	
 	
 
 -9669%% 	G$+*G*G;;d&6&6&8&8;;;DD))++BQB/JD$syTEEEFFD


r    c                     | j         S r$   )r   r?   s    r!   r@   zSockSite.name   r{   r    c                   K   t                                                       d {V  t          j                    }| j        j        }|J |                    || j        | j        | j	                   d {V | _
        d S )N)r   rb   r0   )rY   rC   rc   rd   r'   r5   re   r   r(   r)   r*   rf   s      r!   rC   zSockSite.start   s      ggmmoo%''$!!!!//):DM 0 
 
 
 
 
 
 
 
r    rI   )r   r   r   rJ   r   rK   r	   r   rL   r=   rM   rN   r@   rC   ri   rj   s   @r!   r   r      s        "I #',0   m
   j)  
     0 c    X
 
 
 
 
 
 
 
 
 
r    r   c            	       6   e Zd ZdZddddedededd	fd
Zede	e
         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d	S )r   shutdown_callback_handle_signals_kwargsr*   _sitesr:   Fr+   )handle_signalsr.   r   r.   kwargsr"   Nc                Z    d | _         || _        || _        d | _        g | _        || _        d S r$   r   )r;   r   r.   r   s       r!   r=   zBaseRunner.__init__   s9     KO-)-&(!1r    c                     | j         S r$   )r*   r?   s    r!   r5   zBaseRunner.server  s
    |r    c                     g }| j         D ]@}|j        }|5|j        }|,|D ])}|                    |                                           *A|S r$   )r   r*   socketsappendr   )r;   retsiter5   r   r   s         r!   	addresseszBaseRunner.addresses  sh    K 	7 	7D\F! .& ' 7 7

4#3#3#5#56666
r    c                 *    t          | j                  S r$   )setr   r?   s    r!   siteszBaseRunner.sites  s    4;r    c                 4  K   t          j                    }| j        r\	 |                    t          j        t                     |                    t          j        t                     n# t          $ r Y nw xY w| 	                                 d {V | _
        d S r$   )rc   rd   r   add_signal_handlersignalSIGINTr%   SIGTERMNotImplementedError_make_serverr*   r;   rg   s     r!   setupzBaseRunner.setup  s      %'' 	''7KLLL''8LMMMM&    "..00000000s   A
A) )
A65A6c                 
   K   dS )z8Call any shutdown hooks to help server close gracefully.Nr   r?   s    r!   shutdownzBaseRunner.shutdown)  s
        r    c                   K   t          | j                  D ]}|                                 d {V  | j        ry| j                                         |                                  d {V  | j        r|                                  d {V  | j                            | j                   d {V  |                                  d {V  d | _        | j	        ret          j                    }	 |                    t          j                   |                    t          j                   d S # t           $ r Y d S w xY wd S r$   )listr   rH   r*   pre_shutdownr   r   r:   _cleanup_serverr   rc   get_running_loopremove_signal_handlerr   r   r   r   )r;   r   rg   s      r!   cleanupzBaseRunner.cleanup-  s     
 %% 	 	D))++< 	@L%%'''--//!!!!!!!% /,,.........,''(>?????????""$$$$$$$$$ 	+--D**6=999**6>:::::&   	 	s   0>D0 0
D>=D>c                 
   K   d S r$   r   r?   s    r!   r   zBaseRunner._make_serverI        r    c                 
   K   d S r$   r   r?   s    r!   r   zBaseRunner._cleanup_serverM  r   r    r   c                 v    || j         v rt          d| d|            | j                             |           d S )NSite z! is already registered in runner )r   r6   r   r;   r   s     r!   rB   zBaseRunner._reg_siteQ  sJ    4;TtTTdTTUUU4     r    c                 B    || j         vrt          d| d|            d S Nr   z is not registered in runner )r   r6   r   s     r!   rE   zBaseRunner._check_siteV  s6    t{""PtPP$PPQQQ #"r    c                 v    || j         vrt          d| d|            | j                             |           d S r   )r   r6   remover   s     r!   rG   zBaseRunner._unreg_siteZ  sJ    t{""PtPP$PPQQQ4     r    rI   )r   r   r   rJ   rh   rK   r   r=   rM   r	   r   r5   r   r   r
   r   r   r   r   r   r   r   r   rB   rE   rG   r   r    r!   r   r      s       I  %"&	2 2 2 2  	2
 2 
2 2 2 2 (    X 	49 	 	 	 X	  s8}       X 1 1 1 1 G G G ^G   8 F    ^    ^!h !4 ! ! ! !
R RT R R R 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                L     t                      j        dd|i| || _        d S )Nr   r   )rY   r=   r   )r;   r   r   r   rZ   s       r!   r=   zServerRunner.__init__e  s5     	AAA&AAA%r    c                 
   K   d S r$   r   r?   s    r!   r   zServerRunner.shutdownk        r    c                    K   | j         S r$   r   r?   s    r!   r   zServerRunner._make_servern  s      r    c                 
   K   d S r$   r   r?   s    r!   r   zServerRunner._cleanup_serverq  r   r    rI   )r   r   r   __doc__rJ   r   rh   r   r=   r   r   r   ri   rj   s   @r!   r   r   `  s        %% I =B& & & &59&MP&	& & & & & &    F               r    r   c            	       v     e Zd ZdZdZddded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_appFr   appr   r   r"   Nc                     t                      j        dd|i| t          |t                    s"t	          d                    |                    || _        d S )Nr   z?The first argument should be web.Application instance, got {!r}r   )rY   r=   rx   r   	TypeErrorformatr   )r;   r   r   r   rZ   s       r!   r=   zAppRunner.__init__z  sh     	AAA&AAA#{++ 	%%+VC[[   			r    c                     | j         S r$   r   r?   s    r!   r   zAppRunner.app  s
    yr    c                 H   K   | j                                          d {V  d S r$   )r   r   r?   s    r!   r   zAppRunner.shutdown  s2      i  """""""""""r    c                 >  K   t          j                    }| j                            |           | j        j                                         | j                                         d {V  | j                                          | j        j        dd|i| j        S )Nrg   r   )	rc   rd   r   	_set_loop
on_startupfreezestartup_make_handlerr   r   s     r!   r   zAppRunner._make_server  s      %''	D!!!	##%%%i!!!!!!!!!	&ty&AADADLAAAr    c                 H   K   | j                                          d {V  d S r$   )r   r   r?   s    r!   r   zAppRunner._cleanup_server  s2      i!!!!!!!!!!!r    rI   )r   r   r   r   rJ   r   rh   r   r=   rM   r   r   r   r   r   ri   rj   s   @r!   r   r   u  s          I ;@	 	 		37	KN			 	 	 	 	 	 [    X# # # #BF B B B B" " " " " " " "r    r   rI   )&rc   r   r   r7   abcr   r   typingr   r   r   r   r	   r
   yarlr   typedefsr   web_appr   r   r   rb   r   ImportErrorobject__all__
SystemExitr   r%   r   r   r   r   r   r   r   r   r   r    r!   <module>r      s       # # # # # # # # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @                                 JJJ
    :      $' $' $' $' $'s $' $' $'N/
 /
 /
 /
 /
h /
 /
 /
d#
 #
 #
 #
 #
x #
 #
 #
L" " " " "H " " ">&
 &
 &
 &
 &
x &
 &
 &
Rm! m! m! m! m! m! m! m!`    :   *!" !" !" !" !"
 !" !" !" !" !"s   A	 	AA