o
    ÑtPfªM  ã                   @   sš  d dl mZmZ d dlmZ d dlZd dlZd dl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 d d	lmZ d d
lmZ d dlZd dlmZ d dlmZ G dd„ deƒZdd„ ZG dd„ deƒZG dd„ de
jƒ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%ej& 'e(¡fd!d"„Z)G d#d$„ d$e*ƒZ+G d%d&„ d&eƒZ,e-d'krËe
 .¡  dS dS )(é    )Úprint_functionÚdivision)ÚcontextmanagerN)ÚPY3)Úsysinfo)ÚDEFAULT_SOCKET_TIMEOUT)ÚSMALLEST_RELIABLE_DELAY)Útcp_listener)ÚWIN)Úsocket)ÚStreamServer)ÚLoopExitc                   @   ó   e Zd Zdd„ ZdS )ÚSimpleStreamServerc           	      C   sÔ   |  ¡ }z`| ¡ }|sW | ¡  d S z| dd¡\}}}W n ty,   td|f ƒ ‚ w |dkr7| d¡ n |dv rK| d¡ 	 | d	¡}|sInqAn| d
¡ W | ¡  d S W | ¡  d S W | ¡  d S | ¡  w )Nú é   z Failed to parse request line: %rz/pings   HTTP/1.0 200 OK

PONG)ú/longú/shorts   helloTé   s   HTTP/1.0 404 WTF?

)ÚmakefileÚreadlineÚcloseÚsplitÚ	ExceptionÚprintÚsendallÚrecv)	ÚselfÚclient_socketÚ_addressÚfdÚrequest_lineÚ_methodÚpathÚ_restÚdata© r&   úZ/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/tests/test__server.pyÚhandle   s8   ðþ

ýö
üzSimpleStreamServer.handleN)Ú__name__Ú
__module__Ú__qualname__r(   r&   r&   r&   r'   r      ó    r   c                  G   s.   zt  tsdnt¡ W d S  ty   Y d S w ©Nr   )ÚgeventÚsleepr
   r   r   ©Ú_argsr&   r&   r'   Úsleep_to_clear_old_sockets0   s
   ÿr2   c                   @   sP   e Zd ZeZeZdZdZe	dd„ ƒZ
e
Ze	dd„ ƒZe	dd„ ƒZe	dd	„ ƒZd
S )ÚSettingsTc              	   C   s\   |   ¡ }z| ¡ }W n tjy   d }Y nw W d   ƒ n1 s"w   Y  |  |¡ d S ©N)r   Úreadr   ÚtimeoutÚassertFalse)ÚinstÚconnÚresultr&   r&   r'   ÚassertAcceptedConnectionErrorB   s   
ÿ€ýz&Settings.assertAcceptedConnectionErrorc              
   C   sR   |   ¡  z|  ¡  W d S  tjy( } z|jd tjvr‚ W Y d }~d S d }~ww r-   )Ú	assert500Úsend_requestr   ÚerrorÚargsÚ	greentestÚCONN_ABORTED_ERRORS)r8   Úexr&   r&   r'   Ú	assert503M   s   ÿ€ÿzSettings.assert503c                 C   s>   |   tj¡ | jdd W d   ƒ d S 1 sw   Y  d S )Ng{®Gáz„?©r6   )ÚassertRaisesr   r6   ÚassertRequestSucceeded)r8   r&   r&   r'   ÚassertPoolFullX   s   "ÿzSettings.assertPoolFullc                 C   s   |  d|  ¡ ¡ |S )NÚspawn)Ú
setdefaultÚ	get_spawn)r8   Úkwargsr&   r&   r'   Úfill_default_server_args]   s   z!Settings.fill_default_server_argsN)r)   r*   r+   r   ÚServerClassr   ÚServerSubClassÚrestartableÚclose_socket_detectedÚstaticmethodr;   r<   rC   rG   rL   r&   r&   r&   r'   r3   <   s    



r3   c                   @   s  e Zd ZejZeZdZdd„ Zdd„ Z	dd„ Z
eedd	fd
d„ƒZdedfdd„Zd8dd„ZdZejr8ejfZnejr@ejr@dZd9dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zefd d!„Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Z d*d+„ Z!e"d,d-„ ƒZ#d.d/„ Z$d0d1„ Z%d2d3„ Z&d4d5„ Z'd6d7„ Z(dS ):ÚTestCaseNc                 C   s*   t | dd ƒd ur| j ¡  d | _tƒ  d S )NÚserver)ÚgetattrrS   Ústopr2   ©r   r&   r&   r'   Úcleanuph   s   

zTestCase.cleanupc                 C   s   |   tdd¡S )Né   ©Úbacklog)Ú_close_on_teardownr	   rV   r&   r&   r'   Úget_listenern   ó   zTestCase.get_listenerc                 C   sX   | j j}|s
tj}n|dkrtj}z| j jj}W n ty$   tj}Y nw || j j	|fS )Nz::)
rS   Úserver_hostr@   ÚDEFAULT_LOCAL_HOST_ADDRÚDEFAULT_LOCAL_HOST_ADDR6r   ÚfamilyÚAttributeErrorÚAF_INETÚserver_port)r   r^   ra   r&   r&   r'   Úget_server_host_port_familyq   s   
þz$TestCase.get_server_host_port_familyr   Fc              	   c   sÔ    |   ¡ \}}}trdnd}||i}trd|d< tj|dB}	d }
|	 ||f¡ |	 |¡ |	jdi |¤Ž}
|s:|
n|
|	f}|V  W d   ƒ n1 sKw   Y  W d   ƒ d S W d   ƒ d S 1 scw   Y  d S )NÚ	bufferingÚbufsizeÚrwbÚmode)ra   r&   )re   r   r   ÚconnectÚ
settimeoutr   )r   r6   rg   Úinclude_raw_socketr^   rd   ra   ÚbufargÚmakefile_kwargsÚsockÚrconnr:   r&   r&   r'   r   €   s"   €
þù"ùzTestCase.makefileú/c                 C   s@   | j ||d}|  ||¡ W d   ƒ d S 1 sw   Y  d S )N)r6   rg   )r   Úsend_request_to_fd)r   Úurlr6   rg   r9   r&   r&   r'   r=   •   s   "ÿzTestCase.send_requestc                 C   s    |  d|  d¡¡ | ¡  d S )NzGET %s HTTP/1.0

zlatin-1)ÚwriteÚencodeÚflush)r   r    rs   r&   r&   r'   rr   ™   s   zTestCase.send_request_to_fdr&   )iA'  Tc              	   C   s¶   z0|   tj¡ }|  ¡ }| ¡  W d   ƒ n1 sw   Y  W d   ƒ n1 s*w   Y  W n ty=   |s:‚ Y d S w |j}|  |jd t	j
t	jt	jt	jf| j ||jf¡ d S r-   )rE   r   r>   r   r   r   Ú	exceptionÚassertInr?   ÚerrnoÚECONNREFUSEDÚEADDRNOTAVAILÚ
ECONNRESETÚECONNABORTEDÚLOCAL_CONN_REFUSED_ERRORS)r   Úin_proc_serverÚexcr9   rB   r&   r&   r'   ÚassertConnectionRefused§   s,   

ÿ€ÿ€÷ÿÿýz TestCase.assertConnectionRefusedc                 C   ó   | j  | ¡ d S r4   )r3   r<   rV   r&   r&   r'   r<   ½   r]   zTestCase.assert500c                 C   r‚   r4   )r3   rC   rV   r&   r&   r'   rC   À   r]   zTestCase.assert503c                 C   r‚   r4   )r3   r;   rV   r&   r&   r'   r;   Ã   r]   z&TestCase.assertAcceptedConnectionErrorc                 C   r‚   r4   )r3   rG   rV   r&   r&   r'   rG   Æ   r]   zTestCase.assertPoolFullc              	   C   sÊ   zM| j dd=\}}| d¡ | ¡  d}z	 | d¡}|sn||7 }qW n tjy<   |  |¡ Y W d   ƒ W d S w W d   ƒ n1 sGw   Y  W n
 tyW   Y d S w |  | 	d¡t
|ƒ¡ d S )NT)rl   s   GET / HTTP/1.0

ó    r   s"   HTTP/1.0 500 Internal Server Error)r   rt   rv   r   r   r6   r7   r   Ú
assertTrueÚ
startswithÚrepr)r   r9   ro   r:   r%   r&   r&   r'   ÚassertNotAcceptedÉ   s2   

ü
ô
þø€þzTestCase.assertNotAcceptedc                 C   sX   | j |d}| d¡ | ¡ }W d   ƒ n1 sw   Y  |  | d¡t|ƒ¡ d S )NrD   s   GET /ping HTTP/1.0

s   

PONG)r   rt   r5   r„   Úendswithr†   )r   r6   r9   r:   r&   r&   r'   rF   ß   s
   

þzTestCase.assertRequestSucceededc                 C   s   | j  ¡  |  ¡  |  ¡  d S r4   )rS   ÚstartrF   rV   r&   r&   r'   Ústart_serveræ   s   
zTestCase.start_serverc                 C   s   | j  ¡  |  ¡  d S r4   )rS   rU   r   rV   r&   r&   r'   Ústop_serverë   s   
zTestCase.stop_serverc                 C   ó   d S r4   r&   )r   Ú_msgr&   r&   r'   Úreport_netstatï   s   zTestCase.report_netstatc                 O   s6   |  d| j¡}|  dtjdf¡}||g|¢R i |¤ŽS )NÚserver_kindÚserver_listen_addrr   )ÚpoprN   r@   ÚDEFAULT_BIND_ADDR)r   r?   rK   ÚkindÚaddrr&   r&   r'   Ú_create_serverô   s   zTestCase._create_serverc                 O   s&   | j |i |¤Ž| _| j ¡  tƒ  d S r4   )r•   rS   r‰   r2   ©r   r?   rK   r&   r&   r'   Úinit_serverù   s   

zTestCase.init_serverc                 C   ó   | j jS r4   ©rS   r   rV   r&   r&   r'   r   þ   ó   zTestCase.socketc                 C   sv   t jr|  d¡ z$|  dd„ ¡ |  ¡  |  ¡  |  t¡ W | j 	¡  dd l
}| ¡  d S | j 	¡  dd l
}| ¡  w )NzSometimes misses the errorc                   S   rŒ   r4   r&   r&   r&   r&   r'   Ú<lambda>	  ó    z1TestCase._test_invalid_callback.<locals>.<lambda>r   )r   ÚRUNNING_ON_APPVEYORÚskipTestr—   Úexpect_one_errorr<   Úassert_errorÚ	TypeErrorrS   rU   ÚgcÚcollect)r   r¢   r&   r&   r'   Ú_test_invalid_callback  s   


üzTestCase._test_invalid_callbackc                 C   s   | j  | |¡S r4   )r3   rL   )r   rK   r&   r&   r'   rL     ó   z!TestCase.fill_default_server_argsc                 O   ó   | j j|i |  |¡¤ŽS r4   )r3   rM   rL   r–   r&   r&   r'   rM     ó   
ÿzTestCase.ServerClassc                 O   r¦   r4   )r3   rN   rL   r–   r&   r&   r'   rN     r§   zTestCase.ServerSubClassc                 C   rŒ   r4   r&   rV   r&   r&   r'   rJ      ó   zTestCase.get_spawn)rq   )T))r)   r*   r+   r@   ÚLARGE_TIMEOUTÚ__timeout__r3   rS   rW   r\   re   r   Ú_DEFAULT_SOCKET_TIMEOUTr   r=   rr   r~   ÚOSXry   Ú
EPROTOTYPEr
   ÚPYPY3r   r<   rC   r;   rG   r‡   rF   rŠ   r‹   rŽ   r•   r—   Úpropertyr   r¤   rL   rM   rN   rJ   r&   r&   r&   r'   rR   b   sF    



rR   c                   @   sÀ   e Zd Zdd„ Zdd„ Zdd„ Ze d¡e d¡d	d
„ ƒƒZ	dd„ Z
e d¡dd„ ƒZdd„ Zdd„ Ze ej¡dd„ ƒZdd„ Zdd„ Ze ejd¡dd„ ƒZedd„ ƒZdd„ Zd d!„ Zd"S )#ÚTestDefaultSpawnc                 C   ó   t jS r4   ©r.   rH   rV   r&   r&   r'   rJ   %  ó   zTestDefaultSpawn.get_spawnc                 C   s|   |   d¡ |  ¡  |   d¡ |r3| jjr3| j ¡  |   d¡ |  ¡  | j ¡  |   d¡ tƒ  |  	¡  |  
¡  |   d¡ d S )Nzbefore startzafter startzafter stop_acceptingzafter start_acceptingz
after stop)rŽ   rŠ   r3   rO   rS   Ústop_acceptingr‡   Ústart_acceptingr2   rF   r‹   )r   rO   r&   r&   r'   Ú_test_server_start_stop(  s   





z(TestDefaultSpawn._test_server_start_stopc                 C   sH   d| _ |  t¡ | j|  ¡ dd W d   ƒ d S 1 sw   Y  d S )NFé   rY   )Úswitch_expectedrE   r¡   rM   r\   rV   r&   r&   r'   Ú'test_backlog_is_not_accepted_for_socket7  s   "ÿz8TestDefaultSpawn.test_backlog_is_not_accepted_for_socketzSometimes times outzSometimes times out.c                 C   s.   | j tjdfdd| _|  ¡  | jdd d S )Nr   r·   rY   F©rO   ©rN   r@   r’   rS   r   r¶   rV   r&   r&   r'   Ú$test_backlog_is_accepted_for_address<  s   z5TestDefaultSpawn.test_backlog_is_accepted_for_addressc                 C   s   |   |  ¡ ¡| _|  ¡  d S r4   )rN   r\   rS   r‡   rV   r&   r&   r'   Útest_subclass_just_createC  s   z*TestDefaultSpawn.test_subclass_just_createc                 C   s(   |   |  ¡ ¡| _|  ¡  | jdd d S )NTrº   )rN   r\   rS   r‡   r¶   rV   r&   r&   r'   Útest_subclass_with_socketG  s   z*TestDefaultSpawn.test_subclass_with_socketc                 C   s*   |   tjdf¡| _|  ¡  | jdd d S )Nr   Trº   r»   rV   r&   r&   r'   Útest_subclass_with_addressO  s   z+TestDefaultSpawn.test_subclass_with_addressc                 C   ó   |   ¡  d S r4   ©r¤   rV   r&   r&   r'   Útest_invalid_callbackT  ó   z&TestDefaultSpawn.test_invalid_callbackc                 C   sz   t  | jj¡}z'tƒ  |  ¡  | j ¡  |  | jj¡ |  	¡  W | 
¡  | ¡  | j ¡  d S | 
¡  | ¡  | j ¡  w r4   )r.   rH   rS   Úserve_foreverr2   rF   rU   r7   Ústartedr   ÚkillÚget)r   Úgr&   r&   r'   Ú_test_serve_foreverW  s   

þz$TestDefaultSpawn._test_serve_foreverc                 C   s4   |   tjdf¡| _|  | jj¡ |  ¡  |  ¡  d S r-   )rN   r@   r’   rS   r7   rÅ   r   rÉ   rV   r&   r&   r'   Útest_serve_forevere  s   z#TestDefaultSpawn.test_serve_foreverc                 C   sL   |   tjdf¡| _|  ¡  |  | jj¡ | j ¡  |  | jj¡ |  	¡  d S r-   )
rN   r@   r’   rS   r   r7   rÅ   r‰   r„   rÉ   rV   r&   r&   r'   Útest_serve_forever_after_startk  s   
z/TestDefaultSpawn.test_serve_forever_after_startzSometimes spuriously failsc                 C   s  |   tjdfdd„ ¡| _| j ¡  tƒ  |  ¡ e}|  |¡ tj	 
d¡J z| ¡ }|r7| d¡s7J t|ƒƒ‚W n. tjyB   Y n% tjyf } z|jd dkrRn
|jd tjkr[n‚ W Y d }~nd }~ww W d   ƒ n1 sqw   Y  W d   ƒ n1 s€w   Y  |  ¡  d S )Nr   c                  W   s   g S r4   r&   )r?   r&   r&   r'   r›   u  rœ   zDTestDefaultSpawn.test_server_closes_client_sockets.<locals>.<lambda>r   z"HTTP/1.0 500 Internal Server ErroriE'  )rM   r@   r’   rS   r‰   r2   r   rr   r.   ÚTimeoutÚ_start_new_or_dummyr5   r…   r†   r   r6   r>   r?   ry   r|   r‹   )r   r9   r:   rB   r&   r&   r'   Ú!test_server_closes_client_socketss  s4   


€€ú€ù€ýz2TestDefaultSpawn.test_server_closes_client_socketsc                 C   r˜   r4   r™   rV   r&   r&   r'   r   Œ  rš   zTestDefaultSpawn.socketc                    sR   |   ¡  |  | jj¡ tdƒ‰ ‡ fdd„}|| j_|  ¡  |  ¡  |  tˆ ¡ d S )NÚtest_error_in_spawnc                     s   t  ¡  ˆ ¡ d S r4   )r.   Ú
getcurrentÚthrowr0   ©r>   r&   r'   Ú_spawn”  s   z4TestDefaultSpawn.test_error_in_spawn.<locals>._spawn)	r—   r„   rS   rÅ   ÚExpectedErrorrÓ   rŸ   r;   r    )r   rÓ   r&   rÒ   r'   rÏ     s   z$TestDefaultSpawn.test_error_in_spawnc                 C   s¤   |   ¡  | jjs
J ‚|  dt| jƒ¡ | j | jj¡ |  dt| jƒ¡ |  dt| jƒ¡ | j | j¡ |  dt| jƒ¡ dd„ }| j |¡ |  dt| jƒ¡ d S )NÚServerzhandle=<bound methodzof self>Ú.test_server_repr_when_handle_is_instancemethodc                   S   rŒ   r4   r&   r&   r&   r&   r'   r(   ¨  r¨   zOTestDefaultSpawn.test_server_repr_when_handle_is_instancemethod.<locals>.handlezhandle=<function)r—   rS   rÅ   rx   r†   Ú
set_handler(   rÖ   )r   r(   r&   r&   r'   rÖ   ›  s   z?TestDefaultSpawn.test_server_repr_when_handle_is_instancemethodN)r)   r*   r+   rJ   r¶   r¹   r@   ÚskipOnLibuvOnCIOnPyPyÚskipOnAppVeyorr¼   r½   r¾   r¿   rÂ   Úreraises_flaky_timeoutr   r6   rÉ   rÊ   rË   ÚskipIfÚEXPECT_POOR_TIMER_RESOLUTIONrÎ   r¯   rÏ   rÖ   r&   r&   r&   r'   r°   #  s,    




r°   c                   @   r   )ÚTestRawSpawnc                 C   r±   r4   )r.   Ú	spawn_rawrV   r&   r&   r'   rJ   °  r³   zTestRawSpawn.get_spawnN)r)   r*   r+   rJ   r&   r&   r&   r'   rÝ   ®  r,   rÝ   c                   @   s0   e Zd Zdd„ Ze ejd¡dd„ ƒZde_dS )ÚTestPoolSpawnc                 C   s   dS )Né   r&   rV   r&   r&   r'   rJ   ¶  r¨   zTestPoolSpawn.get_spawnz™If we have bad timer resolution and hence increase timeouts, it can be hard to sleep for a correct amount of time that lets requests in the pool be full.c              	   C   sÜ   |   ¡  |  ¡ B}|  ¡ .}|  |d¡ |  |d¡ t ¡ j ¡  t td ¡ |  	¡  |  	¡  |  	¡  W d   ƒ n1 s>w   Y  W d   ƒ n1 sMw   Y  t t¡ z|  
¡  W d S  tjym   t ¡  Y d S w )Nr   r   g      $@)r—   r   rr   r.   Úget_hubÚloopÚ
update_nowr/   r«   rG   rF   r   r6   r@   ÚreraiseFlakyTestTimeout)r   Úlong_requestÚshort_requestr&   r&   r'   Útest_pool_full¹  s&   


õ€ÿ
ÿzTestPoolSpawn.test_pool_fullFN)	r)   r*   r+   rJ   r@   rÛ   rÜ   rç   Úerror_fatalr&   r&   r&   r'   rß   ´  s    ÿ

rß   c                   @   s.   e Zd Zdd„ Zdd„ Ze d¡dd„ ƒZdS )	ÚTestNoneSpawnc                 C   rŒ   r4   r&   rV   r&   r&   r'   rJ   Ý  r¨   zTestNoneSpawn.get_spawnc                 C   rÀ   r4   rÁ   rV   r&   r&   r'   rÂ   à  rÃ   z#TestNoneSpawn.test_invalid_callbackz Sometimes doesn't get the error.c                 C   s:   dd„ }| j || jd d |  ¡  |  ¡  |  td¡ d S )Nc                  W   s   t  t¡ d S r4   )r.   r/   r   r0   r&   r&   r'   r/   å  r¥   z<TestNoneSpawn.test_assertion_in_blocking_func.<locals>.sleep)r   rH   z?Impossible to call blocking function in the event loop callback)r—   rN   rŸ   r<   r    ÚAssertionError)r   r/   r&   r&   r'   Útest_assertion_in_blocking_funcã  s
   z-TestNoneSpawn.test_assertion_in_blocking_funcN)r)   r*   r+   rJ   rÂ   r@   rÙ   rë   r&   r&   r&   r'   ré   Û  s
    ré   c                   @   ó   e Zd ZdS )rÔ   N©r)   r*   r+   r&   r&   r&   r'   rÔ   í  ó    rÔ   c                   @   s2   e Zd ZdZdd„ Ze eedƒd¡dd„ ƒZ	dS )	ÚTestSSLSocketNotAllowedFc                 C   r±   r4   r²   rV   r&   r&   r'   rJ   ö  r³   z!TestSSLSocketNotAllowed.get_spawnÚsslzUses socket.sslc                 C   s8   ddl m} |  tdd¡}||ƒ}|  t| j|¡ d S )Nr   )rð   rX   rY   )Úgevent.socketrð   r[   r	   rE   r¡   rN   )r   rð   Úlistenerr&   r&   r'   Útestù  s   zTestSSLSocketNotAllowed.testN)
r)   r*   r+   r¸   rJ   ÚunittestÚ
skipUnlessÚhasattrr   ró   r&   r&   r&   r'   rï   ò  s
    rï   c                 C   s   t j t j || ¡¡S r4   )Úosr#   ÚabspathÚjoin)ÚnameÚherer&   r&   r'   Ú_file   s   rü   c                   @   rì   )ÚBadWrapExceptionNrí   r&   r&   r&   r'   rý     rî   rý   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestSSLGetCertificatec                 C   s   | j tjdftdƒtdƒdS )Nr   z
server.keyz
server.crt)ÚkeyfileÚcertfile)rN   r@   r’   rü   rV   r&   r&   r'   r•   
  s   þz$TestSSLGetCertificate._create_serverc                 C   r±   r4   r²   rV   r&   r&   r'   rJ     r³   zTestSSLGetCertificate.get_spawnc                 C   sX   ddl m}m} |  | d¡¡ |  | d¡¡ |  ¡  |  ¡ \}}}| ||f¡ d S )Nr   )Úmonkeyrð   rð   r   )r.   r  rð   r7   Úis_module_patchedr—   re   Úget_server_certificate)r   r  rð   r^   rd   Ú_familyr&   r&   r'   Útest_certificate  s   z&TestSSLGetCertificate.test_certificatec                 C   sV   |   ¡  dd„ }|| j_|  t¡ | j d d ¡ W d   ƒ d S 1 s$w   Y  d S )Nc                 [   s   t ƒ ‚r4   )rý   )Ú_client_socketÚ
_wrap_argsr&   r&   r'   Úbad_wrap&  r³   zPTestSSLGetCertificate.test_wrap_socket_and_handle_wrap_failure.<locals>.bad_wrap)r—   rS   Úwrap_socketrE   rý   Ú_handle)r   r  r&   r&   r'   Ú(test_wrap_socket_and_handle_wrap_failure  s   "ÿz>TestSSLGetCertificate.test_wrap_socket_and_handle_wrap_failureN)r)   r*   r+   r•   rJ   r  r  r&   r&   r&   r'   rþ     s
    rþ   Ú__main__)/Ú
__future__r   r   Ú
contextlibr   rô   ry   r÷   Úgevent.testingÚtestingr@   r   r   r   r«   Úgevent.testing.timingr   Úgevent.testing.socketsr	   r
   r.   r   Úgevent.serverr   Úgevent.exceptionsr   r   r2   Úobjectr3   rR   r°   rÝ   rß   ré   r   rÔ   rï   r#   ÚdirnameÚ__file__rü   ÚBaseExceptionrý   rþ   r)   Úmainr&   r&   r&   r'   Ú<module>   sD    & B '+ÿ