B
    H/\                 @   s
  d dl mZmZ d dlZd dlmZ g ZejZejZ	e
e	drfejdsRtde	jZe	jZe	jZndd  Z ZZd	Ze	jd
fe	jdfe	jdfe	jdfe	jdfe	jdfe	jdfe	jdfe	jdfe	jdfe	jdfe	jdfe	jdfe	jdfe	j dfe	j!dfgZ"d dl#m$Z% dd Z&G dd de%j$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%j-e$Z.G d'd( d(e%j/e$Z0G d)d* d*e%j1e$Z2G d+d, d,e%j3e$Z4G d-d. d.e%j5e$Z6e6e7 d/< G d0d1 d1e8Z9G d2d3 d3e%j:e$Z;G d4d5 d5e%j<e$Z=dS )6    )absolute_importprint_functionN)	_corecffivfd_openwinz$vfd functions only needed on windowsc             C   s   | S )N )fdr   r   3lib/python3.7/site-packages/gevent/libev/watcher.py<lambda>   s    r
   r   ZREADZWRITEZ_IOFDSETZPERIODICZSIGNALZCHILDZSTATZIDLEZPREPAREZCHECKZEMBEDZFORKZCLEANUPZASYNCZCUSTOMZERROR)watcherc             C   s   t | tS )N)_baseZevents_to_str_events)eventsr   r   r	   _events_to_str8   s    r   c                   s   e Zd ZeZeZdZdZdde	j
f fdd	Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd ZeeeZdd Ze	jdd ZeeeZdd Zedd Z  ZS )r   Zevr   TNc                s.   |rd| _ nd| _ tt| j||||d d S )Nr      )refpriorityargs)_flagssuperr   __init__)selfZ_loopr   r   r   )	__class__r   r	   r   H   s    zwatcher.__init__c             C   s   t | j| d S )N)libevev_set_priority_watcher)r   r   r   r   r	   _watcher_ffi_set_priorityP   s    z!watcher._watcher_ffi_set_priorityc             C   s   | j | j| jf|  d S )N)_watcher_initr   _watcher_callback)r   r   r   r   r	   _watcher_ffi_initS   s    zwatcher._watcher_ffi_initc             C   s   |  | jj| j d S )N)_watcher_startloop_ptrr   )r   r   r   r	   _watcher_ffi_startX   s    zwatcher._watcher_ffi_startc             C   s&   | j d@ r"| j  |  j dM  _ d S )N   )r   r!   r   )r   r   r   r	   _watcher_ffi_ref[   s    

zwatcher._watcher_ffi_refc             C   s*   | j d@ dkr&| j  |  j dO  _ d S )N   r   r$   )r   r!   unref)r   r   r   r	   _watcher_ffi_unref`   s    
zwatcher._watcher_ffi_unrefc             C   s   | j d@  S )Nr   )r   )r   r   r   r	   _get_reff   s    zwatcher._get_refc             C   s   |r6| j d@ sd S | j d@ r&| j  |  j dM  _ nJ| j d@ rDd S |  j dO  _ | j d@ st| jr| j  |  j dO  _ d S )Nr   r$   i)r   r!   r   r   Zev_is_activer   r(   )r   valuer   r   r	   _set_refi   s    




zwatcher._set_refc             C   s   t | jS )N)r   Zev_priorityr   )r   r   r   r	   _get_priority}   s    zwatcher._get_priorityc             C   s   t | j| d S )N)r   r   r   )r   r   r   r   r	   _set_priority   s    zwatcher._set_priorityc             G   sf   || _ |pt| _| jd@ dkr6| j  |  jdO  _t| jj| j	| | jd@ sb|  jdO  _d S )Nr'   r   r$      )
callback_NOARGSr   r   r!   r(   r   Zev_feed_eventr"   r   )r   Zreventsr0   r   r   r   r	   feed   s    


zwatcher.feedc             C   s   t | jot| jS )N)boolr   r   Zev_is_pending)r   r   r   r	   pending   s    zwatcher.pending)__name__
__module____qualname__ffiZ_FFIr   Z_LIBZ_watcher_prefixr   r   r1   r   r   r   r#   r&   r)   r*   r,   propertyr   r-   not_while_activer.   r   r2   r4   __classcell__r   r   )r   r	   r   =   s$   

r   c               @   sr   e Zd ZejejB ejB Zdd Ze	j
dd ZeeeZdd Ze	j
dd ZeeeZed	d
 Zdd ZdS )ioc             C   s   t | jjS )N)vfd_getr   r   )r   r   r   r	   _get_fd   s    z
io._get_fdc             C   s0   t |}t| jj | | j| j|| jj d S )N)r   vfd_freer   r   r   r   r   )r   r   Zvfdr   r   r	   _set_fd   s    z
io._set_fdc             C   s   | j jS )N)r   r   )r   r   r   r	   _get_events   s    zio._get_eventsc             C   s   |  | j| j| jj| d S )N)r   r   r   r   )r   r   r   r   r	   _set_events   s    zio._set_eventsc             C   s   t | jjS )N)r   r   r   )r   r   r   r	   
events_str   s    zio.events_strc             C   s   d| j | jf S )Nz fd=%s events=%s)r   rC   )r   r   r   r	   _format   s    z
io._formatN)r5   r6   r7   r   EV__IOFDSETEV_READEV_WRITEZ
EVENT_MASKr>   r   r:   r@   r9   r   rA   rB   r   rC   rD   r   r   r   r	   r<      s   

r<   c               @   s    e Zd Zedd Zdd ZdS )timerc             C   s   | j jS )N)r   at)r   r   r   r	   rI      s    ztimer.atc             O   s*   t j| _z| j|f|| W d | `X d S )N)r   Zev_timer_againr    start)r   r0   r   kwr   r   r	   again   s    ztimer.againN)r5   r6   r7   r9   rI   rL   r   r   r   r	   rH      s   rH   c               @   s   e Zd ZdS )signalN)r5   r6   r7   r   r   r   r	   rM      s   rM   c               @   s   e Zd ZdS )idleN)r5   r6   r7   r   r   r   r	   rN      s   rN   c               @   s   e Zd ZdS )prepareN)r5   r6   r7   r   r   r   r	   rO      s   rO   c               @   s   e Zd ZdS )checkN)r5   r6   r7   r   r   r   r	   rP      s   rP   c               @   s   e Zd ZdS )forkN)r5   r6   r7   r   r   r   r	   rQ      s   rQ   c               @   s    e Zd Zdd Zedd ZdS )async_c             C   s   t | jj| j d S )N)r   Zev_async_sendr!   r"   r   )r   r   r   r	   send   s    zasync_.sendc             C   s   t t| jS )N)r3   r   Zev_async_pendingr   )r   r   r   r	   r4      s    zasync_.pendingN)r5   r6   r7   rS   r9   r4   r   r   r   r	   rR      s   rR   asyncc               @   s$   e Zd ZdZdd Zdd ZeZdS )_ClosedWatcher)pidrpidrstatusc             C   s   |j | _ |j| _|j| _d S )N)rV   rW   rX   )r   otherr   r   r	   r      s    z_ClosedWatcher.__init__c             C   s   dS )NFr   )r   r   r   r	   __bool__   s    z_ClosedWatcher.__bool__N)r5   r6   r7   	__slots__r   rZ   Z__nonzero__r   r   r   r	   rU      s   rU   c                   s`   e Zd Zd Z fddZedd Zedd Zejdd Zedd	 Z	e	jd
d	 Z	  Z
S )childc                s"   t | j}tt|   || _d S )N)rU   r   r   r\   close)r   Zclosed_watcher)r   r   r	   r]      s    
zchild.closec             C   s   | j jS )N)r   rV   )r   r   r   r	   rV      s    z	child.pidc             C   s   | j jS )N)r   rW   )r   r   r   r	   rW      s    z
child.rpidc             C   s   || j _d S )N)r   rW   )r   r+   r   r   r	   rW      s    c             C   s   | j jS )N)r   rX   )r   r   r   r	   rX     s    zchild.rstatusc             C   s   || j _d S )N)r   rX   )r   r+   r   r   r	   rX     s    )r5   r6   r7   _watcher_typer]   r9   rV   rW   setterrX   r;   r   r   )r   r	   r\      s   r\   c               @   s4   e Zd Zd Zedd Zedd Zedd ZdS )statc             C   s   | j jjsd S | j jS )N)r   attrst_nlink)r   r   r   r	   ra     s    
z	stat.attrc             C   s   | j jjsd S | j jS )N)r   prevrb   )r   r   r   r	   rc     s    
z	stat.prevc             C   s   | j jS )N)r   interval)r   r   r   r	   rd     s    zstat.intervalN)r5   r6   r7   r^   r9   ra   rc   rd   r   r   r   r	   r`     s   r`   )>Z
__future__r   r   sysZgevent.libevr   __all__r8   libr   hasattrplatform
startswithAssertionErrorr   r?   r=   r1   rF   rG   rE   ZEV_PERIODICZ	EV_SIGNALZEV_CHILDZEV_STATZEV_IDLEZ
EV_PREPAREZEV_CHECKZEV_EMBEDZEV_FORKZ
EV_CLEANUPZEV_ASYNCZ	EV_CUSTOMZEV_ERRORr   Zgevent._ffir   r   r   ZIoMixinr<   Z
TimerMixinrH   ZSignalMixinrM   Z	IdleMixinrN   ZPrepareMixinrO   Z
CheckMixinrP   Z	ForkMixinrQ   Z
AsyncMixinrR   localsobjectrU   Z
ChildMixinr\   Z	StatMixinr`   r   r   r   r	   <module>   sV   
Y 

