U
    Ã@Ûf\  ã                   @   s^   d dl Z d dlZd dlmZmZ d dlmZ e d¡Ze d¡Z	dd„ Z
G dd	„ d	ejƒZdS )
é    N)ÚpatcherÚsupport)ÚhubÚselectÚtimec                   C   s
   t tdƒS )NÚkqueue)Úhasattrr   © r	   r	   úN/var/www/html/chatgpt/venv/lib/python3.8/site-packages/eventlet/hubs/kqueue.pyÚis_available	   s    r   c                       sp   e Zd ZdZd‡ fdd„	Zdd„ Zdd„ Zd	d
„ Z‡ fdd„Zdd„ Z	‡ fdd„Z
‡ fdd„Zddd„Z‡  ZS )ÚHubéd   Nc                    s4   t jtjt jtji| _tƒ  |¡ i | _	|  
¡  d S ©N)r   ÚREADr   ÚKQ_FILTER_READÚWRITEÚKQ_FILTER_WRITEÚFILTERSÚsuperÚ__init__Ú_eventsÚ_init_kqueue)ÚselfÚclock©Ú	__class__r	   r
   r      s      þzHub.__init__c                 C   s   t  ¡ | _t ¡ | _d S r   )r   r   ÚosÚgetpidÚ_pid)r   r	   r	   r
   r      s    
zHub._init_kqueuec                 C   s:   | j  ¡  |  ¡  dd„ | j ¡ D ƒ}| j  |dd¡ d S )Nc                 S   s   g | ]}|  ¡ D ]}|‘qqS r	   )Úvalues)Ú.0ÚiÚer	   r	   r
   Ú
<listcomp>    s    
 ÿz&Hub._reinit_kqueue.<locals>.<listcomp>r   )r   Úcloser   r   r   Úcontrol)r   Úeventsr	   r	   r
   Ú_reinit_kqueue   s    
zHub._reinit_kqueuec                 C   sX   z| j  |||¡W S  tk
rR   t ¡ | jkrL|  ¡  | j  |||¡ Y S ‚ Y nX d S r   )r   r%   ÚOSErrorr   r   r   r'   )r   r&   Z
max_eventsÚtimeoutr	   r	   r
   Ú_control$   s    zHub._controlc           	         s†   t ƒ  |||||¡}| j |i ¡}||kr‚z4t || j |¡tj¡}|  	|gdd¡ |||< W n" t
k
r€   t ƒ  |¡ ‚ Y nX |S )Nr   )r   Úaddr   Ú
setdefaultr   Úkeventr   ÚgetZ	KQ_EV_ADDr*   Ú
ValueErrorÚremove)	r   ÚevtypeÚfilenoÚcbÚtbÚmacÚlistenerr&   Úeventr   r	   r
   r+   .   s    zHub.addc                 C   s    dd„ |D ƒ}|   |dd¡ d S )Nc                 S   s    g | ]}t  |j|jt j¡‘qS r	   )r   r-   ÚidentÚfilterZKQ_EV_DELETE)r    r"   r	   r	   r
   r#   <   s   ÿz&Hub._delete_events.<locals>.<listcomp>r   )r*   )r   r&   Z
del_eventsr	   r	   r
   Ú_delete_events;   s    þzHub._delete_eventsc                    sp   t ƒ  |¡ |j}|j}| j|  |¡sl| j|  |d ¡}|d krFd S z|  |f¡ W n t	k
rj   Y nX d S r   )
r   r0   r1   r2   Ú	listenersr.   r   Úpopr:   r(   )r   r6   r1   r2   r7   r   r	   r
   r0   B   s    z
Hub.removec                    sV   t ƒ  |¡ z| j |¡ ¡ }|  |¡ W n& tk
r>   Y n tk
rP   Y nX d S r   )r   Úremove_descriptorr   r<   r   r:   ÚKeyErrorr(   )r   r2   r&   r   r	   r
   r=   O   s    zHub.remove_descriptorc           	   	   C   sÔ   | j | j }| j | j }|s2|s2|r.t |¡ d S |  g | j|¡}| j}|D ]‚}|j}|j	}z@|t
jkr|| |tj¡ |¡ |t
jkrš| |tj¡ |¡ W qL |k
r²   ‚ Y qL   |  |t ¡ ¡ Y qLX qLd S r   )r;   r   r   r   Úsleepr*   Ú
MAX_EVENTSÚSYSTEM_EXCEPTIONSr8   r9   r   r   r.   r   Znoopr3   r   Zsquelch_exceptionÚsysÚexc_info)	r   ÚsecondsZreadersZwritersÚresultrA   r7   r2   Zevfiltr	   r	   r
   ÚwaitY   s(    


zHub.wait)N)N)Ú__name__Ú
__module__Ú__qualname__r@   r   r   r'   r*   r+   r:   r0   r=   rF   Ú__classcell__r	   r	   r   r
   r      s   	

r   )r   rB   Zeventletr   r   Zeventlet.hubsr   Úoriginalr   r   r   ZBaseHubr   r	   r	   r	   r
   Ú<module>   s   

