a
    nJh.                     @   sN  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 zd d	lmZ W n ey   eZY n0 d
ZG dd deZd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	AwaitableCallableListOptionalSet)URL   )PathLike)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   D/var/www/shaz/venv/lib/python3.9/site-packages/aiohttp/web_runner.pyr   !   s   r   returnc                   C   s
   t  d S N)r   r   r   r   r   _raise_graceful_exit%   s    r"   c                   @   sj   e Zd ZdZdddddeee edddd	Ze	e
ed
ddZe
dd
ddZdd
ddZdS )r   )_runner_ssl_context_backlog_server      N@N   shutdown_timeoutssl_contextbacklogr   )runnerr*   r+   r,   r    c                C   sP   |j d u rtd|dkr4d}tj|td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&   )selfr-   r*   r+   r,   msgr   r   r   __init__,   s    
zBaseSite.__init__r   c                 C   s   d S r!   r   r6   r   r   r   name?   s    zBaseSite.namec                    s   | j |  d S r!   )r#   	_reg_siter9   r   r   r   startD   s    zBaseSite.startc                    s0   | j |  | jd ur | j  | j |  d S r!   )r#   _check_siter&   close_unreg_siter9   r   r   r   stopH   s    

zBaseSite.stop)r   r   r   	__slots__floatr   r   intr8   propertyr   strr:   r<   r@   r   r   r   r   r   )   s"   r   c                       s~   e Zd ZdZddddddddee ee eee eee	 ee	 dd	 fdd	Z
eed
ddZd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,   rJ   rK   r    c          	         sF   t  j||||d || _|d u r0| jr,dnd}|| _|| _|| _d S )Nr)   i   i  )superr8   rF   r$   rG   rH   rI   )	r6   r-   rL   rM   r*   r+   r,   rJ   rK   	__class__r   r   r8   S   s    zTCPSite.__init__r   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schemerL   rM   )r$   rF   rE   r
   buildrG   )r6   rT   rL   r   r   r   r:   l   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,   rJ   rK   )rN   r<   asyncioget_event_loopr#   r0   create_serverrF   rG   r$   r%   rH   rI   r&   r6   loopr0   rO   r   r   r<   r   s    zTCPSite.start)NN)r   r   r   rA   r   rE   rC   rB   r   boolr8   rD   r:   r<   __classcell__r   r   rO   r   r   P   s.     r   c                       sb   e Zd ZdZdddddeeee edd fdd	Z	e
ed
ddZd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)   )rN   r8   r_   )r6   r-   r`   r*   r+   r,   rO   r   r   r8      s    	zUnixSite.__init__r   c                 C   s    | j r
dnd}| d| j dS )NrQ   rR   ://unix::)r$   r_   )r6   rT   r   r   r   r:      s    zUnixSite.namec                    sP   t   I d H  t }| jj}|d us,J |j|| j| j| j	dI d H | _
d S )N)rV   r,   )rN   r<   rW   rX   r#   r0   Zcreate_unix_serverr_   r$   r%   r&   rZ   rO   r   r   r<      s    zUnixSite.start)r   r   r   rA   r   rB   r   r   rC   r8   rD   rE   r:   r<   r]   r   r   rO   r   r      s   r   c                       sV   e Zd ZdZdddeedd fddZeed	d
dZdd	 fddZ	  Z
S )r   r^   r'   r*   r   N)r-   r`   r*   r    c                   s6   t  }t|t jstdt j||d || _d S )Nz8Named Pipes only available in proactorloop under windowsrc   )rW   rX   
isinstanceZProactorEventLoopr1   rN   r8   r_   )r6   r-   r`   r*   r[   rO   r   r   r8      s    zNamedPipeSite.__init__r   c                 C   s   | j S r!   r^   r9   r   r   r   r:      s    zNamedPipeSite.namec                    sN   t   I d H  t }| jj}|d us,J ||| jI d H }|d | _d S Nr   )	rN   r<   rW   rX   r#   r0   Zstart_serving_piper_   r&   )r6   r[   r0   r&   rO   r   r   r<      s    
zNamedPipeSite.start)r   r   r   rA   rE   rB   r8   rD   r:   r<   r]   r   r   rO   r   r      s   r   c                       sd   e Zd ZdZdddddejeee edd fdd	Z	e
ed
ddZd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rT|jtjkrT| d|  d}n(| d d \}}	t	t
j|||	d}|| _d S )	Nr)   rQ   rR   AF_UNIXra   rb   r.   rS   )rN   r8   rf   r$   hasattrsocketfamilyri   getsocknamerE   r
   rU   rg   )
r6   r-   rh   r*   r+   r,   rT   r:   rL   rM   rO   r   r   r8      s    	zSockSite.__init__r   c                 C   s   | j S r!   )rg   r9   r   r   r   r:      s    zSockSite.namec                    sP   t   I d H  t }| jj}|d us,J |j|| j| j| j	dI d H | _
d S )N)rh   rV   r,   )rN   r<   rW   rX   r#   r0   rY   rf   r$   r%   r&   rZ   rO   r   r   r<      s    zSockSite.start)r   r   r   rA   rk   rB   r   r   rC   r8   rD   rE   r:   r<   r]   r   r   rO   r   r      s   r   c                   @   s   e Zd ZdZdddeeeddddZee	e
 d	d
dZeee d	ddZeee d	ddZdd	ddZedd	ddZdd	ddZee
d	ddZedd	ddZeddddZeddddZedddd ZdS )!r   shutdown_callback_handle_signals_kwargsr&   _sitesr5   Fr'   )handle_signalsr*   N)rs   r*   kwargsr    c                K   s(   d | _ || _|| _d | _g | _|| _d S r!   rn   )r6   rs   r*   rt   r   r   r   r8      s    zBaseRunner.__init__r   c                 C   s   | j S r!   )r&   r9   r   r   r   r0     s    zBaseRunner.serverc                 C   sH   g }| j D ]8}|j}|d ur
|j}|d ur
|D ]}||  q.q
|S r!   )rr   r&   socketsappendrm   )r6   retsiter0   ru   rh   r   r   r   	addresses  s    
zBaseRunner.addressesc                 C   s
   t | jS r!   )setrr   r9   r   r   r   sites  s    zBaseRunner.sitesc                    sV   t  }| jrBz |tjt |tjt W n ty@   Y n0 | 	 I d H | _
d S r!   )rW   rX   rp   Zadd_signal_handlersignalSIGINTr"   SIGTERMNotImplementedError_make_serverr&   r6   r[   r   r   r   setup  s    zBaseRunner.setupc                    s   dS )z8Call any shutdown hooks to help server close gracefully.Nr   r9   r   r   r   shutdown)  s    zBaseRunner.shutdownc                    s   t | jD ]}| I d H  q
| jrttdI d H  | j  |  I d H  | jr`|  I d H  | j| j	I d H  | 
 I d H  d | _| jrt }z|tj |tj W n ty   Y n0 d S re   )listrr   r@   r&   rW   sleepZpre_shutdownr   ro   r5   _cleanup_serverrp   Zget_running_loopZremove_signal_handlerr|   r}   r~   r   )r6   rx   r[   r   r   r   cleanup-  s$    
zBaseRunner.cleanupc                    s   d S r!   r   r9   r   r   r   r   L  s    zBaseRunner._make_serverc                    s   d S r!   r   r9   r   r   r   r   P  s    zBaseRunner._cleanup_server)rx   r    c                 C   s.   || j v rtd| d|  | j | d S )NSite z! is already registered in runner )rr   r1   rv   r6   rx   r   r   r   r;   T  s    
zBaseRunner._reg_sitec                 C   s"   || j vrtd| d|  d S Nr   z is not registered in runner )rr   r1   r   r   r   r   r=   Y  s    
zBaseRunner._check_sitec                 C   s.   || j vrtd| d|  | j | d S r   )rr   r1   remover   r   r   r   r?   ]  s    
zBaseRunner._unreg_site)r   r   r   rA   r\   rB   r   r8   rD   r   r   r0   r   ry   r	   r   r{   r   r   r   r   r   r   r;   r=   r?   r   r   r   r   r      s4   r   c                       s`   e Zd ZdZdZddeeedd fddZdd	d
dZ	ed	ddZ
dd	ddZ  ZS )r   zLow-level web server runner_web_serverFrs   N)
web_serverrs   rt   r    c                   s    t  jf d|i| || _d S )Nrs   )rN   r8   r   )r6   r   rs   rt   rO   r   r   r8   h  s    zServerRunner.__init__r   c                    s   d S r!   r   r9   r   r   r   r   n  s    zServerRunner.shutdownc                    s   | j S r!   r   r9   r   r   r   r   q  s    zServerRunner._make_serverc                    s   d S r!   r   r9   r   r   r   r   t  s    zServerRunner._cleanup_server)r   r   r   __doc__rA   r   r\   r   r8   r   r   r   r]   r   r   rO   r   r   c  s   r   c                       sr   e Zd ZdZdZddeeedd fddZe	ed	d
dZ
dd	ddZed	ddZdd	ddZ  ZS )r   zWeb Application runner_appFr   N)apprs   rt   r    c                   s8   t  jf d|i| t|ts.td||| _d S )Nrs   z?The first argument should be web.Application instance, got {!r})rN   r8   rd   r   	TypeErrorformatr   )r6   r   rs   rt   rO   r   r   r8   }  s    
zAppRunner.__init__r   c                 C   s   | j S r!   r   r9   r   r   r   r     s    zAppRunner.appc                    s   | j  I d H  d S r!   )r   r   r9   r   r   r   r     s    zAppRunner.shutdownc                    sR   t  }| j| | jj  | j I d H  | j  | jjf d|i| jS )Nr[   )	rW   rX   r   Z	_set_loopZ
on_startupfreezeZstartupZ_make_handlerrq   r   r   r   r   r     s    
zAppRunner._make_serverc                    s   | j  I d H  d S r!   )r   r   r9   r   r   r   r     s    zAppRunner._cleanup_server)r   r   r   r   rA   r   r\   r   r8   rD   r   r   r   r   r   r]   r   r   rO   r   r   x  s   	r   )&rW   r|   rk   r2   abcr   r   typingr   r   r   r   r   r	   Zyarlr
   Ztypedefsr   Zweb_appr   r   r   rV   r   ImportErrorobject__all__
SystemExitr   r"   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s0    
'2&)s