
?T#                 @   s7  d  Z  d d l 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 m Z m Z m Z Gd d   d e  Z Gd	 d
   d
 e  Z d d   Z d d   Z Gd d   d e  Z d d d d  Z e j d d  d d    Z e j d d    Z d d   Z d S)zpy.test config    N)sleep)deque)TIMEOUT)handlerBaseComponentDebuggerManagerc               @   s[   e  Z d  Z d d   Z e d d d d  d d    Z d	 d
   Z d d d d  Z d S)Watcherc             C   s   t  j   |  _ t   |  _ d  S)N)	threadingLock_lockr   events)self r   ./home/prologic/work/circuits/tests/conftest.pyinit   s    zWatcher.initchannel*Zpriorityg33333?@c          	   O   s$   |  j   |  j j |  Wd  QXd  S)N)r   r   append)r   eventargskwargsr   r   r   	_on_event   s    
zWatcher._on_eventc             C   s   |  j  j   d  S)N)r   clear)r   r   r   r   r      s    zWatcher.clearNg      @c             C   s   z x t  t | t   D] } | d  k rf |  j , x$ |  j D] } | j | k r@ d Sq@ WWd  QXnF |  j ; x3 |  j D]( } | j | k rz | | j k rz d Sqz WWd  QXt t  q WWd  Xd  S)NT)rangeintr   r   r   namechannelsr   )r   r   r   timeoutir   r   r   r   wait!   s    

zWatcher.wait)__name__
__module____qualname__r   r   r   r   r    r   r   r   r   r	      s   !r	   c               @   s   e  Z d  Z d Z d S)FlagFN)r!   r"   r#   statusr   r   r   r   r$   6   s   r$   c             G   sU   d } d  } xB |  j  |  D]1 } | sC d } |  j | |  } n  t d  q W| S)NFTg?)Z	waitEventZfirer   )managerr   Z
event_namer   Zfiredvaluerr   r   r   call_event_from_name:   s    r)   c             G   s   t  |  | | j |  S)N)r)   r   )r&   r   r   r   r   r   
call_eventE   s    r*   c               @   s.   e  Z d  Z d d d d  Z d d   Z d S)	WaitEventNg      @c                s   | d  k r! t  | d d   } n  | |  _ | |  _ t     t | d |   f d d    } |  j j |  |  _   |  _ d  S)Nr   c                s   d   _  d  S)NT)r%   )r   r   r   )flagr   r   on_eventT   s    z$WaitEvent.__init__.<locals>.on_event)getattrr   r&   r$   r   
addHandlerr,   )r   r&   r   r   r   r-   r   )r,   r   __init__K   s    			$zWaitEvent.__init__c             C   s]   zB x; t  t |  j t   D]  } |  j j r3 d St t  q WWd  |  j j |  j	  Xd  S)NT)
r   r   r   r   r,   r%   r   r&   ZremoveHandlerr   )r   r   r   r   r   r    [   s     zWaitEvent.wait)r!   r"   r#   r0   r    r   r   r   r   r+   I   s   r+   Tg      @c             C   s   d d l  m } xi t t | |   D]Q } t | t j  rU | |  |  rn d Sn t |  |  | k rn d St |  q' Wd  S)Nr   )r   T)	circuits.core.managerr   r   r   
isinstancecollectionsCallabler.   r   )objattrr'   r   r   r   r   r   r   wait_fore   s    r7   scopesessionc                s   t        f d d   } |  j |  t   d  }   j   | j   sS t  |  j j j rk d } n d } t	 d |  j
      S)Nc                  s     j    d  S)N)stopr   )r&   r   r   	finalizert   s    zmanager.<locals>.finalizerstartedTFr   )r   addfinalizerr+   startr    AssertionErrorconfigoptionverboser   register)requestr;   waiterrB   r   )r&   r   r&   p   s    	
	r&   c                s8   t    j        f d d   } |  j |   S)Nc                 s'   t    d  }   j   |  j   d  S)NZunregistered)r+   
unregisterr    )rE   )r&   watcherr   r   r;      s    
zwatcher.<locals>.finalizer)r	   rC   r=   )rD   r&   r;   r   )r&   rG   r   rG      s    rG   c            	   C   sP   t  d t f d t f d t f d t j f d t j d  d  f d t f f  S)Nr+   r7   r*   ZPLATFORMZPYVER   r)   )dictr+   r7   r*   sysplatformversion_infor)   r   r   r   r   pytest_namespace   s    			rM   )__doc__pytestrJ   r
   r3   timer   r   r1   r   Zcircuitsr   r   r   r   r	   objectr$   r)   r*   r+   r7   fixturer&   rG   rM   r   r   r   r   <module>   s"   "#