o
    n~b+                     @   s.  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
 d dlmZ ddlmZ ddlmZ zd dlmZ W n eyE   eZY nw d	ZG d
d deZdddZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZ dS )     N)ABCabstractmethod)AnyListOptionalSet)URL   )Application)Server)
SSLContext)	BaseSiteTCPSiteUnixSiteNamedPipeSiteSockSite
BaseRunner	AppRunnerServerRunnerGracefulExitc                   @   s   e Zd ZdZdS )r   r	   N)__name__
__module____qualname__code r   r   =/usr/local/lib/python3.10/dist-packages/aiohttp/web_runner.pyr      s    r   returnc                   C   s   t  N)r   r   r   r   r   _raise_graceful_exit#   s   r   c                   @   sj   e Zd ZdZddddddded	ee d
eddf
ddZe	e
defddZe
dddZdddZdS )r   )_runner_shutdown_timeout_ssl_context_backlog_server      N@N   shutdown_timeoutssl_contextbacklogrunnerr   r'   r(   r)   r   c                C   s4   |j d u r	td|| _|| _|| _|| _d | _d S )Nz(Call runner.setup() before making a site)serverRuntimeErrorr   r    r!   r"   r#   )selfr*   r'   r(   r)   r   r   r   __init__*   s   

zBaseSite.__init__c                 C   s   d S r   r   r-   r   r   r   name:   s   zBaseSite.namec                    s   | j |  d S r   )r   	_reg_siter/   r   r   r   start?   s   zBaseSite.startc                    s   | j |  | jd u r| j |  d S | j  t| jdr'| j I d H  | j  I d H  | j js5J | j j| j	I d H  | j |  d S )Nwait_closed)
r   _check_siter#   _unreg_siteclosehasattrr3   shutdownr+   r    r/   r   r   r   stopC   s   

zBaseSite.stopr   N)r   r   r   	__slots__floatr   r   intr.   propertyr   strr0   r2   r9   r   r   r   r   r   '   s,    
r   c                       s   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dZ
edefddZd fddZ  ZS )r   )_host_port_reuse_address_reuse_portNr$   r%   )r'   r(   r)   reuse_address
reuse_portr*   r   hostportr'   r(   r)   rD   rE   r   c          	         sF   t  j||||d || _|d u r| jrdnd}|| _|| _|| _d S )Nr&   i   i  )superr.   r@   r!   rA   rB   rC   )	r-   r*   rF   rG   r'   r(   r)   rD   rE   	__class__r   r   r.   U   s   
zTCPSite.__init__c                 C   s8   | j rdnd}| jd u rdn| j}ttj||| jdS )Nhttpshttpz0.0.0.0schemerF   rG   )r!   r@   r?   r   buildrA   )r-   rN   rF   r   r   r   r0   n   s   zTCPSite.namec              	      s^   t   I d H  t }| jj}|d usJ |j|| j| j| j	| j
| j| jdI d H | _d S )N)sslr)   rD   rE   )rH   r2   asyncioget_event_loopr   r+   create_serverr@   rA   r!   r"   rB   rC   r#   r-   loopr+   rI   r   r   r2   t   s   zTCPSite.start)NNr:   )r   r   r   r;   r   r?   r=   r<   r   boolr.   r>   r0   r2   __classcell__r   r   rI   r   r   R   s@    	
r   c                       sh   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dZ	e
defddZd fddZ  ZS )r   _pathr$   Nr%   r&   r*   r   pathr'   r(   r)   r   c                   s   t  j||||d || _d S )Nr&   )rH   r.   rY   )r-   r*   rZ   r'   r(   r)   rI   r   r   r.      s   	
zUnixSite.__init__c                 C   s    | j rdnd}| d| j dS )NrK   rL   ://unix::)r!   rY   )r-   rN   r   r   r   r0      s   zUnixSite.namec                    R   t   I d H  t }| jj}|d usJ |j|| j| j| j	dI d H | _
d S )N)rP   r)   )rH   r2   rQ   rR   r   r+   create_unix_serverrY   r!   r"   r#   rT   rI   r   r   r2         zUnixSite.startr:   )r   r   r   r;   r?   r<   r   r   r=   r.   r>   r0   r2   rW   r   r   rI   r   r      s*    r   c                	       sX   e Zd ZdZdddddededd	f fd
dZedefddZd fddZ	  Z
S )r   rX   r$   r'   r*   r   rZ   r'   r   Nc                   s6   t  }t|t jstdt j||d || _d S )Nz8Named Pipes only available in proactorloop under windowsr`   )rQ   rR   
isinstanceZProactorEventLoopr,   rH   r.   rY   )r-   r*   rZ   r'   rU   rI   r   r   r.      s   
zNamedPipeSite.__init__c                 C      | j S r   rX   r/   r   r   r   r0         zNamedPipeSite.namec                    sP   t   I d H  t }| jj}|d usJ ||| jI d H }|d | _d S )Nr   )	rH   r2   rQ   rR   r   r+   Zstart_serving_piperY   r#   )r-   rU   r+   r#   rI   r   r   r2      s   
zNamedPipeSite.startr:   )r   r   r   r;   r?   r<   r.   r>   r0   r2   rW   r   r   rI   r   r      s    r   c                       sj   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dZ	e
defddZd fddZ  ZS )r   )_sock_namer$   Nr%   r&   r*   r   sockr'   r(   r)   r   c          
         s   t  j||||d || _| jrdnd}ttdr*|jtjkr*| d|  d}n| d d \}}	t	t
j|||	d}|| _d S )	Nr&   rK   rL   AF_UNIXr[   r\      rM   )rH   r.   rd   r!   r7   socketfamilyrg   getsocknamer?   r   rO   re   )
r-   r*   rf   r'   r(   r)   rN   r0   rF   rG   rI   r   r   r.      s   	
zSockSite.__init__c                 C   rb   r   )re   r/   r   r   r   r0      rc   zSockSite.namec                    r]   )N)rf   rP   r)   )rH   r2   rQ   rR   r   r+   rS   rd   r!   r"   r#   rT   rI   r   r   r2      r_   zSockSite.startr:   )r   r   r   r;   ri   r<   r   r   r=   r.   r>   r?   r0   r2   rW   r   r   rI   r   r      s*    r   c                   @   s   e Zd ZdZdddededdfdd	Zedee	 fd
dZ
edee fddZedee fddZd!ddZed!ddZd!ddZede	fddZed!ddZdeddfddZdeddfddZdeddfdd ZdS )"r   _handle_signals_kwargsr#   _sitesFhandle_signalsrq   kwargsr   Nc                K   s   || _ || _d | _g | _d S r   rl   )r-   rq   rr   r   r   r   r.      s   
zBaseRunner.__init__c                 C   rb   r   )r#   r/   r   r   r   r+      rc   zBaseRunner.serverc                 C   sH   g }| j D ]}|j}|d ur!|j}|d ur!|D ]	}||  qq|S r   )ro   r#   socketsappendrk   )r-   retsiter+   rs   rf   r   r   r   	addresses   s   
zBaseRunner.addressesc                 C   s
   t | jS r   )setro   r/   r   r   r   sites  s   
zBaseRunner.sitesc                    sX   t  }| jr"z|tjt |tjt W n	 ty!   Y nw | 	 I d H | _
d S r   )rQ   rR   rm   add_signal_handlersignalSIGINTr   SIGTERMNotImplementedError_make_serverr#   r-   rU   r   r   r   setup  s   zBaseRunner.setupc                       d S r   r   r/   r   r   r   r8        zBaseRunner.shutdownc                    sz   t  }t| jD ]	}| I d H  q
|  I d H  d | _| jr;z|t	j
 |t	j W d S  ty:   Y d S w d S r   )rQ   rR   listro   r9   _cleanup_serverr#   rm   remove_signal_handlerr{   r|   r}   r~   )r-   rU   rv   r   r   r   cleanup  s   zBaseRunner.cleanupc                    r   r   r   r/   r   r   r   r   0  r   zBaseRunner._make_serverc                    r   r   r   r/   r   r   r   r   4  r   zBaseRunner._cleanup_serverrv   c                 C   s.   || j v rtd| d|  | j | d S )NSite z! is already registered in runner )ro   r,   rt   r-   rv   r   r   r   r1   8     
zBaseRunner._reg_sitec                 C   s"   || j vrtd| d|  d S Nr   z is not registered in runner )ro   r,   r   r   r   r   r4   =  s   
zBaseRunner._check_sitec                 C   s.   || j vrtd| d|  | j | d S r   )ro   r,   remover   r   r   r   r5   A  r   zBaseRunner._unreg_siter:   )r   r   r   r;   rV   r   r.   r>   r   r   r+   r   rw   r   r   ry   r   r   r8   r   r   r   r1   r4   r5   r   r   r   r   r      s(    

r   c                	       s^   e Zd ZdZdZdddedededd	f fd
dZdddZ	defddZ
dddZ  ZS )r   zLow-level web server runner_web_serverFrp   
web_serverrq   rr   r   Nc                   s    t  jdd|i| || _d S )Nrq   r   )rH   r.   r   )r-   r   rq   rr   rI   r   r   r.   L  s   
zServerRunner.__init__c                    r   r   r   r/   r   r   r   r8   R     zServerRunner.shutdownc                    s   | j S r   r   r/   r   r   r   r   U  s   zServerRunner._make_serverc                    r   r   r   r/   r   r   r   r   X  r   zServerRunner._cleanup_serverr:   )r   r   r   __doc__r;   r   rV   r   r.   r8   r   r   rW   r   r   rI   r   r   G  s     
r   c                	       sp   e Zd ZdZdZdddedededd	f fd
dZe	defddZ
dddZdefddZdddZ  ZS )r   zWeb Application runner_appFrp   apprq   rr   r   Nc                   s8   t  jdd|i| t|tstd||| _d S )Nrq   z?The first argument should be web.Application instance, got {!r}r   )rH   r.   ra   r
   	TypeErrorformatr   )r-   r   rq   rr   rI   r   r   r.   a  s   

zAppRunner.__init__c                 C   rb   r   r   r/   r   r   r   r   l  rc   zAppRunner.appc                       | j  I d H  d S r   )r   r8   r/   r   r   r   r8   p     zAppRunner.shutdownc                    sT   t  }| j| | jj  | j I d H  | j  | jjdd|i| jS )NrU   r   )	rQ   rR   r   Z	_set_loopZ
on_startupfreezeZstartupZ_make_handlerrn   r   r   r   r   r   s  s   
zAppRunner._make_serverc                    r   r   )r   r   r/   r   r   r   r   |  r   zAppRunner._cleanup_serverr:   )r   r   r   r   r;   r
   rV   r   r.   r>   r   r8   r   r   r   rW   r   r   rI   r   r   \  s$    
	r   r:   )!rQ   r{   ri   abcr   r   typingr   r   r   r   Zyarlr   Zweb_appr
   r   r   rP   r   ImportErrorobject__all__
SystemExitr   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s0    
+2#)X