o
    m=8j1                     @   sd  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rMd dlmZ nzd dlmZ W n ey`   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)TYPE_CHECKINGAny)URL   )AbstractAccessLogger)PathLike)Application)AccessLogger)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   Y/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-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dB 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_ssl_context_backlog_server      N@N   shutdown_timeoutssl_contextbacklogrunnerr   r'   r(   r)   r   c                C   sP   |j d u r	td|dkrd}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__0   s   

zBaseSite.__init__c                 C   s   d S r   r   r3   r   r   r   nameC   s   zBaseSite.namec                    s   | j |  d S r   )r    	_reg_siter6   r   r   r   startH   s   zBaseSite.startc                    s2   | j |  | jd ur| j  | j |  d S r   )r    _check_siter#   close_unreg_siter6   r   r   r   stopL   s
   

zBaseSite.stopr   N)r   r   r   	__slots__floatr   intr5   propertyr   strr7   r9   r=   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dB d	edB d
ededB dededB dedB ddf fddZ	e
defddZe
defddZd fddZ  ZS )r   )_host_port_bound_port_reuse_address_reuse_portNr$   r%   )r'   r(   r)   reuse_address
reuse_portr*   r   hostportr'   r(   r)   rI   rJ   r   c          	         sL   t  j||||d || _|d u r| jrdnd}|| _d | _|| _|| _d S )Nr&   i   i  )superr5   rD   r!   rE   rF   rG   rH   )	r3   r*   rK   rL   r'   r(   r)   rI   rJ   	__class__r   r   r5   W   s   
zTCPSite.__init__c                 C   s   | j dur| 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.
        N)rF   rE   r6   r   r   r   rL   q   s   

zTCPSite.portc                 C   s4   | j rdnd}| jsdn| j}ttj||| jdS )Nhttpshttpz0.0.0.0schemerK   rL   )r!   rD   rC   r   buildrL   )r3   rS   rK   r   r   r   r7      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 | _| jjr>| jjd  d | _d S | j| _d S )N)sslr)   rI   rJ   r   r   )rM   r9   asyncioget_event_loopr    r-   create_serverrD   rE   r!   r"   rG   rH   r#   socketsgetsocknamerF   r3   loopr-   rN   r   r   r9      s"   	zTCPSite.start)NNr>   )r   r   r   r?   rC   rA   r@   r   boolr5   rB   rL   r7   r9   __classcell__r   r   rN   r   r   T   sD    	
r   c                       sh   e Zd ZdZddddddded	ed
edB 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&   )rM   r5   r`   )r3   r*   ra   r'   r(   r)   rN   r   r   r5      s   	
zUnixSite.__init__c                 C   s    | j rdnd}| d| j dS )NrP   rQ   ://unix::)r!   r`   )r3   rS   r   r   r   r7      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)rU   r)   )rM   r9   rV   rW   r    r-   create_unix_serverr`   r!   r"   r#   r[   rN   r   r   r9      s   zUnixSite.startr>   )r   r   r   r?   r	   r@   r   rA   r5   rB   rC   r7   r9   r^   r   r   rN   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   r_   r$   r'   r*   r   ra   r'   r   Nc                   s6   t  }t|t jstdt j||d || _d S )Nz9Named Pipes only available in proactor loop under windowsrf   )rV   rW   
isinstanceProactorEventLoopr.   rM   r5   r`   )r3   r*   ra   r'   r\   rN   r   r   r5      s   
zNamedPipeSite.__init__c                 C      | j S r   r_   r6   r   r   r   r7         zNamedPipeSite.namec                    sP   t   I d H  t }| jj}|d usJ ||| jI d H }|d | _d S Nr   )	rM   r9   rV   rW   r    r-   start_serving_piper`   r#   )r3   r\   r-   r#   rN   r   r   r9      s   
zNamedPipeSite.startr>   )r   r   r   r?   rC   r@   r5   rB   r7   r9   r^   r   r   rN   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dB 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&   rP   rQ   AF_UNIXrb   rc   r+   rR   )rM   r5   rm   r!   hasattrsocketfamilyrp   rZ   rC   r   rT   rn   )
r3   r*   ro   r'   r(   r)   rS   r7   rK   rL   rN   r   r   r5      s   	
zSockSite.__init__c                 C   ri   r   )rn   r6   r   r   r   r7      rj   zSockSite.namec                    rd   )N)ro   rU   r)   )rM   r9   rV   rW   r    r-   rX   rm   r!   r"   r#   r[   rN   r   r   r9      s   zSockSite.startr>   )r   r   r   r?   rr   r@   r   rA   r5   rB   rC   r7   r9   r^   r   r   rN   r   r      s*    r   c                	   @   s   e Zd ZdZddddedededd	fd
dZede	d	B 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#   _sitesr2   Fr$   )handle_signalsr'   rx   r'   kwargsr   Nc                K   s"   || _ || _d | _g | _|| _d S r   rt   )r3   rx   r'   ry   r   r   r   r5   
  s
   
zBaseRunner.__init__c                 C   ri   r   )r#   r6   r   r   r   r-     rj   zBaseRunner.serverc                 C   sH   g }| j D ]}|j}|d ur!|j}|d ur!|D ]	}||  qq|S r   )rw   r#   rY   appendrZ   )r3   retsiter-   rY   ro   r   r   r   	addresses  s   
zBaseRunner.addressesc                 C   s
   t | jS r   )setrw   r6   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   )rV   rW   ru   add_signal_handlersignalSIGINTr   SIGTERMNotImplementedError_make_serverr#   r3   r\   r   r   r   setup+  s   zBaseRunner.setupc                    s   dS )z8Call any shutdown hooks to help server close gracefully.Nr   r6   r   r   r   shutdown8  s    zBaseRunner.shutdownc                    s   t | jD ]	}| I d H  q| jr1tdI d H  | j  |  I d H  | j| jI d H  | 	 I d H  d | _| j
r\t }z|tj |tj W d S  ty[   Y d S w d S rk   )listrw   r=   r#   rV   sleeppre_shutdownr   r2   _cleanup_serverru   get_running_loopremove_signal_handlerr   r   r   r   )r3   r|   r\   r   r   r   cleanup<  s&   
zBaseRunner.cleanupc                       d S r   r   r6   r   r   r   r   W     zBaseRunner._make_serverc                    r   r   r   r6   r   r   r   r   [  r   zBaseRunner._cleanup_serverr|   c                 C   s.   || j v rtd| d|  | j | d S )NSite z! is already registered in runner )rw   r.   rz   r3   r|   r   r   r   r8   _     
zBaseRunner._reg_sitec                 C   s"   || j vrtd| d|  d S Nr   z is not registered in runner )rw   r.   r   r   r   r   r:   d  s   
zBaseRunner._check_sitec                 C   s.   || j vrtd| d|  | j | d S r   )rw   r.   remover   r   r   r   r<   h  r   zBaseRunner._unreg_siter>   )r   r   r   r?   r]   r@   r   r5   rB   r   r-   r   r}   r~   r   r   r   r   r   r   r   r   r8   r:   r<   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_serverF)rx   
web_serverrx   ry   r   Nc                   s    t  jdd|i| || _d S )Nrx   r   )rM   r5   r   )r3   r   rx   ry   rN   r   r   r5   s  s   
zServerRunner.__init__c                    r   r   r   r6   r   r   r   r   y     zServerRunner.shutdownc                    s   | j S r   r   r6   r   r   r   r   |  s   zServerRunner._make_serverc                    r   r   r   r6   r   r   r   r     r   zServerRunner._cleanup_serverr>   )r   r   r   __doc__r?   r   r]   r   r5   r   r   r   r^   r   r   rN   r   r   n  s     
r   c                       sz   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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_appF)rx   access_log_classapprx   r   ry   r   Nc                   sB   t  jdd|i| t|tstd||| jd< || _d S )Nrx   z;The first argument should be web.Application instance, got r   r   )rM   r5   rg   r
   	TypeErrorrv   r   )r3   r   rx   r   ry   rN   r   r   r5     s   


zAppRunner.__init__c                 C   ri   r   r   r6   r   r   r   r     rj   zAppRunner.appc                       | j  I d H  d S r   )r   r   r6   r   r   r   r        zAppRunner.shutdownc                    sT   t  }| j| | jj  | j I d H  | j  | jjdd|i| jS )Nr\   r   )	rV   rW   r   	_set_loop
on_startupfreezestartup_make_handlerrv   r   r   r   r   r     s   
zAppRunner._make_serverc                    r   r   )r   r   r6   r   r   r   r     r   zAppRunner._cleanup_serverr>   )r   r   r   r   r?   r   r
   r]   typer   r   r5   rB   r   r   r   r   r   r^   r   r   rN   r   r     s*    
	r   r>   )%rV   r   rr   r/   abcr   r   typingr   r   yarlr   r   typedefsr	   web_appr
   web_logr   r   r   rU   r   ImportErrorobject__all__
SystemExitr   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s<    
'E&)g