o
    4˜Žj¤1  ã                   @   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   úO/var/www/kodo/Anonymous/send/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