o
    e3l                     @   s  d dl mZmZ d dlZd dlZd dlmZ g ZejZej	Z
d dlmZ d dlmZ G dd deZe Zejdd	ejZe
jd
fe
jdfgZ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jZG dd dejeZG dd deZ G dd de ej!eZ"G dd de ej#eZ$G dd dej%eZ&e&e' d < G d!d" d"ej(eZ)G d#d$ d$ej*eZ+G d%d& d&ej,eZ-G d'd( d(ej.eZ/G d)d* d*ej0eZ1G d+d, d,e1Z2G d-d. d.ej3eZ4dS )/    )absolute_importprint_functionN)	_corecffi)watcher)_dbgc                   @   s   e Zd ZdZdd ZdS )_ClosingWatchers c                 C   s0   z| |= W d S  t y   tdtjd Y d S w )Nzgevent error: Unable to remove closing watcher from keepaliveset. Has the module state been corrupted or executed more than once?)file)KeyErrorprintsysstderr)selfobjr   r   DD:\Projects\ConvertPro\env\Lib\site-packages\gevent/libuv/watcher.pyremove   s   z_ClosingWatchers.removeN)__name__
__module____qualname__	__slots__r   r   r   r   r   r      s    r   _uv_close_callback)nameREADWRITEc                 C   s   t | tS N)_baseZevents_to_str_events)eventsr   r   r   _events_to_str8      r   c                   @   s   e Zd ZdS )UVFuncallErrorN)r   r   r   r   r   r   r   r    ;   s    r    c                   @   s   e Zd Zdd Zdd ZdS )libuv_error_wrapperc                 C   
   || _ d S r   )_libuv)r   uvr   r   r   __init__F      
zlibuv_error_wrapper.__init__c                    s2   t | j| t  fdd}t| || |S )Nc                     s   | rt | d tr| dd  }  | i |}|d urF|dk rFtttt|dd tt	|d d t
|  d t
| |S )Nr      ascii z Args: z	 KWARGS: )
isinstancer   r    strffistringlibuvuv_err_namedecodeuv_strerrorrepr)argskwargsresZ
libuv_funcr   r   wrapL   s(   z-libuv_error_wrapper.__getattr__.<locals>.wrap)getattrr#   	functoolswrapssetattr)r   r   r7   r   r6   r   __getattr__I   s
   zlibuv_error_wrapper.__getattr__N)r   r   r   r%   r<   r   r   r   r   r!   >   s    r!   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ffi_unwrapperc                 C   r"   r   )_ffi)r   ffr   r   r   r%   c   r&   zffi_unwrapper.__init__c                 C   s   t | j|S r   )r8   r>   )r   r   r   r   r   r<   f   r   zffi_unwrapper.__getattr__c                 C   s   t |tsJ | jt|S r   )r*   r!   r>   	addressofr.   )r   libr   r   r   r   r@   i   s   zffi_unwrapper.addressofN)r   r   r   r%   r<   r@   r   r   r   r   r=   _   s    r=   c                   @   s   e Zd ZeeZeeZdZ	dZ
edd Zdd Zdd Zd	d
 Zdd Zejdd Zejdd Zdd Zdd Zdd Zdd ZeeeZdd ZdS )r   r$   z%s_tc                 C   sH   | j d|}tj|_|jr t|s"|t|< t	|tj
 d S d S d S )Nzuv_handle_t*)_FFIcastr,   NULLdatatyper.   uv_is_closing_closing_watchersZuv_closer   )clsZffi_watcherZffi_handle_watcherr   r   r   _watcher_ffi_closeu   s   zwatcher._watcher_ffi_closec                 C   r"   r   )refr   rK   r   r   r   _watcher_ffi_set_init_ref   r&   z!watcher._watcher_ffi_set_init_refc                 C   s   | j | jj| jg|R  S r   _watcher_initloopptr_watcherr   r3   r   r   r   _watcher_ffi_init   s
   
zwatcher._watcher_ffi_initc                 C   s   |  | j| j d S r   )_watcher_startrR   _watcher_callbackr   r   r   r   _watcher_ffi_start   s   zwatcher._watcher_ffi_startc                 C   s   | j r| | j  d S d S r   )rR   Z_watcher_stoprW   r   r   r   _watcher_ffi_stop   s   zwatcher._watcher_ffi_stopc                 C      t | j d S r   )r.   Zuv_refrR   rW   r   r   r   _watcher_ffi_ref      zwatcher._watcher_ffi_refc                 C   rZ   r   )r.   Zuv_unrefrR   rW   r   r   r   _watcher_ffi_unref   r\   zwatcher._watcher_ffi_unrefc                 C      d S r   r   rW   r   r   r   _watcher_ffi_start_unref      z watcher._watcher_ffi_start_unrefc                 C   r^   r   r   rW   r   r   r   _watcher_ffi_stop_ref   r`   zwatcher._watcher_ffi_stop_refc                 C   s   | j d u rd S tt| j S r   )rR   boolr.   Z
uv_has_refrW   r   r   r   _get_ref   s   
zwatcher._get_refc                 C   s   |r|    d S |   d S r   )r[   r]   )r   valuer   r   r   _set_ref   s   zwatcher._set_refc                 G   s   t d)NzNot implemented)	Exception)r   Z_revents	_callback_argsr   r   r   feed      zwatcher.feedN)r   r   r   r=   r,   rB   r!   r.   _LIBZ_watcher_prefixZ_watcher_struct_patternclassmethodrJ   rM   rT   rX   rY   r   Zonly_if_watcherr[   r]   r_   ra   rc   re   propertyrK   ri   r   r   r   r   r   n   s*    
(


r   c                       s   e Zd ZdZdZdZejejB ej	B Z
dZd& fdd	Zd	d
 Zejdd Zdd Zdd ZeeeZdd ZejdrBejjZG dd deZdd Zdd Z dd Z!dd Z" fddZ#d d! Z$d"d# Z%d$d% Z&  Z'S )'iopollZ_gevent_poll_callback2Fr   TNc                    s4   t t| j||||||fd || _|| _g | _d S )N)rK   priorityrh   )superrn   r%   _fdr   _multiplex_watchers)r   rP   fdr   rK   rp   	__class__r   r   r%      s   
zio.__init__c                 C      | j S r   )rr   rW   r   r   r   _get_fd     z
io._get_fdc                 C   s   || _ | |f d S r   )rr   rT   )r   rt   r   r   r   _set_fd  s   z
io._set_fdc                 C   rw   r   r   rW   r   r   r   _get_events
  ry   zio._get_eventsc                 C   sD   || j krd S || _ | jr | jd usJ | | j| j | j d S d S r   )r   active_handlerU   rR   rV   )r   r   r   r   r   _set_events  s   
zio._set_eventsc                 C      |  | j| j| j d S r   )rU   rR   r   rV   rW   r   r   r   rX     s   zio._watcher_ffi_startwin32c                   @   s~   e Zd ZdZdZdZdZdd Zedd e	
d	d Zd
d Zdd Zdd Zedd Zedd Zedd dd ZdS )zio._multiplexwatcherNr   FTc                 C   s   || _ || _d S r   )r   _watcher_refr   r   r   r   r   r   r%   @  s   
zio._multiplexwatcher.__init__c                 C   rw   r   r{   rW   r   r   r   <lambda>K  s    zio._multiplexwatcher.<lambda>c                 C   s   t | d|S )Nr   )r;   r   nvr   r   r   r   L      c                 O   sH   | d| _|| _|| _| j}|d ur"|js|  d S |  d S d S )Npass_events)getr   callbackr3   r   r}   	_io_start_calc_and_update_events)r   r   r3   r4   r   r   r   r   startN  s   zio._multiplexwatcher.startc                 C   s0   d | _ d | _d | _| j}|d ur|  d S d S r   )r   r   r3   r   _io_maybe_stopr   r   r   r   r   stop[  s   zio._multiplexwatcher.stopc                 C   s    | j d ur| j |  d | _ d S r   )r   _multiplex_closedrW   r   r   r   closec  s   

zio._multiplexwatcher.closec                 C   s
   | j d uS r   )r   rW   r   r   r   r}   h     
zio._multiplexwatcher.activec                 C      | j jS r   )r   rR   rW   r   r   r   rR   l  s   zio._multiplexwatcher._watcherc                 C   s   t | jddS )Nrr   )r8   r   rW   r   r   r   r   s  s    c                 C   s   | j |S r   )r   rz   r   r   r   r   r   t  r   )r   r   r   r   r3   r   rK   r%   rm   r   not_while_activer   r   r   r   r}   rR   rt   r   r   r   r   _multiplexwatcher9  s(    


r   c                 C   s0   |    | jD ]
}|jd ur d S q|   d S r   )r   rs   r   r   )r   wr   r   r   r   v  s   

zio._io_maybe_stopc                 C   s   |    | j| jdd d S )NT)r   )r   r   _io_callbackrW   r   r   r   r     s   zio._io_startc                 C   s2   d}| j D ]}|jd ur||jO }q| | d S )Nr   )rs   r   r   r   r   r   r   r   r     s   


zio._calc_and_update_eventsc                 C   s$   |  || }| j| |   |S r   )r   rs   appendr   r   r   r   r   	multiplex  s   zio.multiplexc                    s   t t|   | `d S r   )rq   rn   r   rs   rW   ru   r   r   r     s   zio.closec                 C   s:   | j | | j s|   |   |   d S |   d S r   )rs   r   r   _no_more_watchersr   r   r   r   r   r   r     s   zio._multiplex_closedc                 C   r^   r   r   rW   r   r   r   r     s   zio._no_more_watchersc              	   C   s   |dk rt d| jtt|tt| | jD ]1}|js!q|j	| u s-J | |j	f||j
@ p5|dk }|rL|jsB|j|j  q|j|g|jR   qd S )Nr   zCallback error on)r   rr   r,   r-   r.   r/   r1   rs   r   r   r   r   r3   )r   r   r   Z
send_eventr   r   r   r     s    
zio._io_callback)TN)(r   r   r   _watcher_type_watcher_callback_nameZ&_watcher_registers_with_loop_on_creater.   UV_READABLEUV_WRITABLEZUV_DISCONNECTZ
EVENT_MASKrs   r%   rx   r   r   rz   r|   r   rm   r   rX   r   platform
startswithr   rk   Zuv_poll_init_socketrO   objectr   r   r   r   r   r   r   r   r   __classcell__r   r   ru   r   rn      s2    "


=	rn   c                       sx   e Zd ZdZ fddZdd Zedd Zdd	 Zd
d Z	edd Z
dd Zdd Zdd Zdd Zdd Z  ZS )_SimulatedWithAsyncMixinTc                    sB   |  | _ztt| j|g|R i | W d S    | j   r   )async__asyncrq   r   r%   r   )r   rP   r3   r4   ru   r   r   r%     s   
$
z!_SimulatedWithAsyncMixin.__init__c                 C   r^   r   r   r   rh   r   r   r   _watcher_create  r`   z(_SimulatedWithAsyncMixin._watcher_createc                 C   r^   r   r   rW   r   r   r   _watcher_handle     z(_SimulatedWithAsyncMixin._watcher_handlec                 C   r^   r   r   r   r   r   r   rT     r`   z*_SimulatedWithAsyncMixin._watcher_ffi_initc                 C   s   || j _d S r   )r   rK   rL   r   r   r   rM     r   z2_SimulatedWithAsyncMixin._watcher_ffi_set_init_refc                 C   r   r   )r   r}   rW   r   r   r   r}     rj   z_SimulatedWithAsyncMixin.activec                 G   s:   | j d usJ |   || _|| _| j j|g|R   d S r   )r   _register_loop_callbackr   r3   r   )r   cbr3   r   r   r   r     s
   z_SimulatedWithAsyncMixin.startc                 C   s0   |    d | _d | _| jd ur| j  d S d S r   )_unregister_loop_callbackr   r3   r   r   rW   r   r   r   r     s   
z_SimulatedWithAsyncMixin.stopc                 C   s&   | j d ur| j }d | _ |  d S d S r   )r   r   )r   ar   r   r   r     s
   
z_SimulatedWithAsyncMixin.closec                 C      t  r   NotImplementedErrorrW   r   r   r   r        z0_SimulatedWithAsyncMixin._register_loop_callbackc                 C   r   r   r   rW   r   r   r   r     r   z2_SimulatedWithAsyncMixin._unregister_loop_callback)r   r   r   _watcher_skip_ffir%   r   rm   r   rT   rM   r}   r   r   r   r   r   r   r   r   ru   r   r     s    

	r   c                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	forkFc                 C   s   | j j|  d S r   )rP   _fork_watchersaddrW   r   r   r   r        zfork._register_loop_callbackc                 C   s*   z
| j j|  W d S  ty   Y d S w r   )rP   r   r   r
   rW   r   r   r   r     s
   zfork._unregister_loop_callbackc                 C   s   | j   d S r   )r   sendrW   r   r   r   _on_fork  s   zfork._on_forkN)r   r   r   r   r   r   r   r   r   r   r   r     s
    r   c                   @   r   )	childTc                 C      | j |  d S r   )rP   Z_register_child_watcherrW   r   r   r   r   -     zchild._register_loop_callbackc                 C   r   r   )rP   Z_unregister_child_watcherrW   r   r   r   r   0  r   zchild._unregister_loop_callbackc                 C   s   || _ || _| j  d S r   )Z_rpidZ_rstatusr   r   )r   pidstatusr   r   r   _set_waitpid_status3  s   zchild._set_waitpid_statusN)r   r   r   r   r   r   r   r   r   r   r   r     s
    r   c                   @   sD   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	dd Z
dS )r   Z_gevent_async_callback0c                   C   r^   r   r   r   r   r   r   r   K  s    zasync_.<lambda>c                 C   s   |  | jj| j| jS r   )rO   rP   rQ   rR   rV   rS   r   r   r   rT   M  s   zasync_._watcher_ffi_initc                 C   r^   r   r   rW   r   r   r   rX   U  r`   zasync_._watcher_ffi_startc                 C   r^   r   r   rW   r   r   r   rY   X  r`   zasync_._watcher_ffi_stopc                 C   s8   | j tj us
J dt| jrtdt| j d S )NzSending to a closed watcherzClosing handle)rg   r   r.   rG   rR   rf   Zuv_async_sendrW   r   r   r   r   [  s   zasync_.sendc                 C   r^   r   r   rW   r   r   r   pendingb  r   zasync_.pendingN)r   r   r   r   rg   rT   rX   rY   r   rm   r   r   r   r   r   r   9  s    r   asyncc                   @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
timerZ_gevent_timer_callback0Fc                 C   s   |  | jj| j |\| _| _| jr%| jdk r%dd l}|jddd d| _| jr=| jdk r?dd l}|jddd d| _d S d S d S )NgMbP?r   zTlibuv only supports millisecond timer resolution; all times less will be set to 1 ms   )
stacklevel)rO   rP   rQ   rR   _after_repeatwarningswarn)r   r3   r   r   r   r   rT     s   
ztimer._watcher_ffi_initc                 C   sZ   | j rt| j d S z| | j| jt| jd t| jd  W d S  t	y,   t
 w Ni  )_againr.   Zuv_timer_againrR   rU   rV   intr   r   
ValueError	TypeErrorrW   r   r   r   rX     s   
ztimer._watcher_ffi_startc                 O   sR   | j s| j|g|R i | d S d| _z| j|g|R i | W | `d S | `w )NT)r}   r   r   )r   r   r3   kwr   r   r   again  s   ztimer.againN)r   r   r   r   r   rT   rX   r   r   r   r   r   r   h  s    r   c                   @   sX   e Zd ZdZdZdZdd Zdd ZdZd	d
 Z	e
dd Ze
dd Ze
dd ZdS )statZfs_pollZgevent_fs_poll_tZ_gevent_fs_poll_callback3c                 C   s   ||j _|S r   )handlerE   )r   Zthe_watcherrE   r   r   r   _watcher_set_data  s   zstat._watcher_set_datac                 C   s   |  | jj| jS r   rN   rS   r   r   r   rT     r   zstat._watcher_ffi_initg`--g?c                 C   s8   | j | jk r
| j| _ | | j| j| jt| j d  d S r   )Z	_intervalMIN_STAT_INTERVALrU   rR   rV   Z_cpathr   rW   r   r   r   rX     s   zstat._watcher_ffi_startc                 C   s
   | j jjS r   )rR   r   rE   rW   r   r   r   r     r   zstat._watcher_handlec                 C      | j jjsd S | j jS r   )rR   currst_nlinkrW   r   r   r   attr     
z	stat.attrc                 C   r   r   )rR   prevr   rW   r   r   r   r     r   z	stat.prevN)r   r   r   r   Z_watcher_struct_namer   r   rT   r   rX   rm   r   r   r   r   r   r   r   r     s    

r   c                   @       e Zd ZdZdd Zdd ZdS )signalZ_gevent_signal_callback1c                 C   s   |  | jj| j d| _d S )NF)rO   rP   rQ   rR   rK   rS   r   r   r   rT     s   
zsignal._watcher_ffi_initc                 C   r   r   )rU   rR   rV   Z
_signalnumrW   r   r   r   rX     s   zsignal._watcher_ffi_startN)r   r   r   r   rT   rX   r   r   r   r   r     s    r   c                   @      e Zd ZdZdS )idleZ_gevent_idle_callback0Nr   r   r   r   r   r   r   r   r     s    r   c                   @   r   )checkZ_gevent_check_callback0Nr   r   r   r   r   r         r   c                   @   r   )OneShotCheckTc                    s"   | j t  fdd}|S )Nc                     s      |  S r   r   )r3   funcr   r   r   r     s   z"OneShotCheck.__make_cb.<locals>.cb)r   r9   r:   )r   r   r   r   r   r   Z	__make_cb  s   zOneShotCheck.__make_cbc                 G   s   t j| | |g|R  S r   )r   r   _OneShotCheck__make_cb)r   r   r3   r   r   r   r     s   zOneShotCheck.startN)r   r   r   r   r   r   r   r   r   r   r     s    r   c                   @   r   )prepareZ_gevent_prepare_callback0Nr   r   r   r   r   r     r   r   )5
__future__r   r   r9   r   Zgevent.libuvr   __all__r,   rA   r.   Zgevent._ffir   r   r   dictr   rH   Z
def_externr   r   r   r   r   r   r   r    r   r!   r=   ZIoMixinrn   r   Z	ForkMixinr   Z
ChildMixinr   Z
AsyncMixinr   localsZ
TimerMixinr   Z	StatMixinr   ZSignalMixinr   Z	IdleMixinr   Z
CheckMixinr   r   ZPrepareMixinr   r   r   r   r   <module>   sV   
!d  :
-F'