U
    u?d+                     @   s4  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k
r   eZY nX 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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   6/tmp/pip-unpacked-wheel-_pk67_um/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_shutdown_timeout_ssl_context_backlog_server      N@N   shutdown_timeoutssl_contextbacklogr   )runnerr(   r)   r*   r   c                C   s4   |j d k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__r   c                 C   s   d S r   r   r.   r   r   r   name:   s    zBaseSite.namec                    s   | j |  d S r   )r    	_reg_siter0   r   r   r   start?   s    zBaseSite.startc                    s   | j |  | jd kr&| j |  d S | j  t| jdrL| j I d H  | j  I d H  | j jsht	| j j| j
I d H  | j |  d S )Nwait_closed)r    _check_siter$   _unreg_siteclosehasattrr4   shutdownr,   AssertionErrorr!   r0   r   r   r   stopC   s    

zBaseSite.stop)r   r   r   	__slots__floatr   r   intr/   propertyr   strr1   r3   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*   rE   rF   r   c          	         sF   t  j||||d || _|d kr0| jr,dnd}|| _|| _|| _d S )Nr'   i   i  )superr/   rA   r"   rB   rC   rD   )	r.   r+   rG   rH   r(   r)   r*   rE   rF   	__class__r   r   r/   U   s    zTCPSite.__init__r   c                 C   s8   | j r
dnd}| jd krdn| j}ttj||| jdS )Nhttpshttpz0.0.0.0schemerG   rH   )r"   rA   r@   r   buildrB   )r.   rO   rG   r   r   r   r1   n   s    zTCPSite.namec              	      s\   t   I d H  t }| jj}|d k	s,t|j|| j| j	| j
| j| j| jdI d H | _d S )N)sslr*   rE   rF   )rI   r3   asyncioget_event_loopr    r,   r:   create_serverrA   rB   r"   r#   rC   rD   r$   r.   loopr,   rJ   r   r   r3   t   s    zTCPSite.start)NN)r   r   r   r<   r   r@   r>   r=   r   boolr/   r?   r1   r3   __classcell__r   r   rJ   r   r   R   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'   )rI   r/   rZ   )r.   r+   r[   r(   r)   r*   rJ   r   r   r/      s    	zUnixSite.__init__r   c                 C   s    | j r
dnd}| d| j dS )NrL   rM   ://unix::)r"   rZ   )r.   rO   r   r   r   r1      s    zUnixSite.namec                    sP   t   I d H  t }| jj}|d k	s,t|j|| j| j	| j
dI d H | _d S )N)rQ   r*   )rI   r3   rR   rS   r    r,   r:   Zcreate_unix_serverrZ   r"   r#   r$   rU   rJ   r   r   r3      s       zUnixSite.start)r   r   r   r<   r@   r=   r   r   r>   r/   r?   r1   r3   rX   r   r   rJ   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   rY   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 windowsr^   )rR   rS   
isinstanceZProactorEventLoopr-   rI   r/   rZ   )r.   r+   r[   r(   rV   rJ   r   r   r/      s     zNamedPipeSite.__init__r   c                 C   s   | j S r   rY   r0   r   r   r   r1      s    zNamedPipeSite.namec                    sN   t   I d H  t }| jj}|d k	s,t||| jI d H }|d | _	d S )Nr   )
rI   r3   rR   rS   r    r,   r:   Zstart_serving_piperZ   r$   )r.   rV   r,   r$   rJ   r   r   r3      s     
zNamedPipeSite.start)r   r   r   r<   r@   r=   r/   r?   r1   r3   rX   r   r   rJ   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'   rL   rM   AF_UNIXr\   r]      rN   )rI   r/   r`   r"   r8   socketfamilyrc   getsocknamer@   r   rP   ra   )
r.   r+   rb   r(   r)   r*   rO   r1   rG   rH   rJ   r   r   r/      s    	zSockSite.__init__r   c                 C   s   | j S r   )ra   r0   r   r   r   r1      s    zSockSite.namec                    sP   t   I d H  t }| jj}|d k	s,t|j|| j| j	| j
dI d H | _d S )N)rb   rQ   r*   )rI   r3   rR   rS   r    r,   r:   rT   r`   r"   r#   r$   rU   rJ   r   r   r3      s       zSockSite.start)r   r   r   r<   re   r=   r   r   r>   r/   r?   r@   r1   r3   rX   r   r   rJ   r   r      s   r   c                   @   s   e Zd ZdZdd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   _handle_signals_kwargsr$   _sitesFhandle_signalsN)rm   kwargsr   c                K   s   || _ || _d | _g | _d S r   rh   )r.   rm   rn   r   r   r   r/      s    zBaseRunner.__init__r   c                 C   s   | j S r   )r$   r0   r   r   r   r,      s    zBaseRunner.serverc                 C   sH   g }| j D ]8}|j}|d k	r
|j}|d k	r
|D ]}||  q.q
|S r   )rk   r$   socketsappendrg   )r.   retsiter,   ro   rb   r   r   r   	addresses   s    
zBaseRunner.addressesc                 C   s
   t | jS r   )setrk   r0   r   r   r   sites  s    zBaseRunner.sitesc                    sX   t  }| jrDz |tjt |tjt W n tk
rB   Y nX | 	 I d H | _
d S r   )rR   rS   ri   Zadd_signal_handlersignalSIGINTr   SIGTERMNotImplementedError_make_serverr$   r.   rV   r   r   r   setup  s    zBaseRunner.setupc                    s   d S r   r   r0   r   r   r   r9     s    zBaseRunner.shutdownc                    sv   t  }t| jD ]}| I d H  q|  I d H  d | _| jrrz|t	j
 |t	j W n tk
rp   Y nX d S r   )rR   rS   listrk   r;   _cleanup_serverr$   ri   Zremove_signal_handlerrv   rw   rx   ry   )r.   rV   rr   r   r   r   cleanup  s    zBaseRunner.cleanupc                    s   d S r   r   r0   r   r   r   rz   0  s    zBaseRunner._make_serverc                    s   d S r   r   r0   r   r   r   r~   4  s    zBaseRunner._cleanup_server)rr   r   c                 C   s.   || j krtd| d|  | j | d S )NSite z! is already registered in runner )rk   r-   rp   r.   rr   r   r   r   r2   8  s    
zBaseRunner._reg_sitec                 C   s"   || j krtd| d|  d S Nr   z is not registered in runner )rk   r-   r   r   r   r   r5   =  s    
zBaseRunner._check_sitec                 C   s.   || j krtd| d|  | j | d S r   )rk   r-   remover   r   r   r   r6   A  s    
zBaseRunner._unreg_site)r   r   r   r<   rW   r   r/   r?   r   r   r,   r   rs   r   r   ru   r|   r   r9   r   rz   r~   r2   r5   r6   r   r   r   r   r      s&   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_serverFrl   N)
web_serverrm   rn   r   c                   s    t  jf d|i| || _d S )Nrm   )rI   r/   r   )r.   r   rm   rn   rJ   r   r   r/   L  s    zServerRunner.__init__r   c                    s   d S r   r   r0   r   r   r   r9   R  s    zServerRunner.shutdownc                    s   | j S r   r   r0   r   r   r   rz   U  s    zServerRunner._make_serverc                    s   d S r   r   r0   r   r   r   r~   X  s    zServerRunner._cleanup_server)r   r   r   __doc__r<   r   rW   r   r/   r9   rz   r~   rX   r   r   rJ   r   r   G  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_appFrl   N)apprm   rn   r   c                   s8   t  jf d|i| t|ts.td||| _d S )Nrm   z?The first argument should be web.Application instance, got {!r})rI   r/   r_   r
   	TypeErrorformatr   )r.   r   rm   rn   rJ   r   r   r/   a  s    
zAppRunner.__init__r   c                 C   s   | j S r   r   r0   r   r   r   r   l  s    zAppRunner.appc                    s   | j  I d H  d S r   )r   r9   r0   r   r   r   r9   p  s    zAppRunner.shutdownc                    sR   t  }| j| | jj  | j I d H  | j  | jjf d|i| jS )NrV   )	rR   rS   r   Z	_set_loopZ
on_startupfreezeZstartupZ_make_handlerrj   r{   r   r   r   rz   s  s    
zAppRunner._make_serverc                    s   | j  I d H  d S r   )r   r   r0   r   r   r   r~   |  s    zAppRunner._cleanup_server)r   r   r   r   r<   r
   rW   r   r/   r?   r   r9   r   rz   r~   rX   r   r   rJ   r   r   \  s     	r   )!rR   rv   re   abcr   r   typingr   r   r   r   Zyarlr   Zweb_appr
   r   r   rQ   r   ImportErrorobject__all__
SystemExitr   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s,   
+2#)X