ó
‚•oTc           @   s  d  d l  Z  d  d l Z y e Wn! e k
 rC d  d l m Z n Xd  d l Z d  d l Z d  d l Z d  d l	 Z
 d  d l Z d e f d „  ƒ  YZ e ƒ  Z e j ƒ  e _ e j ƒ  e _ e j ƒ  e _ e j ƒ  e _ e j ƒ  e _ d e f d „  ƒ  YZ e ƒ  Z d S(   iÿÿÿÿN(   t   Sett
   _StateEnumc           B   s'   e  Z d  e f d „  ƒ  YZ d „  Z RS(   t   Statec           B   s   e  Z d Z d  „  Z RS(   c         C   s   d |  j  S(   Ns	   states.%s(   t   name(   t   self(    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyt   __repr__P   s    N(   t   __name__t
   __module__t   NoneR   R   (    (    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyR   N   s   c         C   s5   t  | |  j ƒ r | | _ n  t j |  | | ƒ d  S(   N(   t
   isinstanceR   R   t   objectt   __setattr__(   R   t   keyt   value(    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyR   S   s    (   R   R   R
   R   R   (    (    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyR   M   s   t   Busc           B   s¼   e  Z e Z e j Z e Z d  „  Z d d „ Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d	 d
 „ Z d	 d „ Z d „  Z d „  Z d d d „ Z d d e d „ Z RS(   c         C   sM   t  |  _ t j |  _ t g  d D] } | t ƒ  f ^ q ƒ |  _ i  |  _ d  S(   Nt   startt   stopt   exitt   gracefult   log(   R   R   R   R   R   (	   t   Falset   execvt   statest   STOPPEDt   statet   dictt   sett	   listenerst   _priorities(   R   t   channel(    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyt   __init__m   s    	%c         C   sn   | |  j  k r" t ƒ  |  j  | <n  |  j  | j | ƒ | d  k rW t | d d ƒ } n  | |  j | | f <d  S(   Nt   priorityi2   (   R   R   t   addR   t   getattrR   (   R   R   t   callbackR   (    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyt	   subscribeu   s    c         C   sH   |  j  j | ƒ } | rD | | k rD | j | ƒ |  j | | f =n  d  S(   N(   R   t   gett   discardR   (   R   R   R"   R   (    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyt   unsubscribe   s    c   
      O   s2  | |  j  k r g  Sd  } g  } g  |  j  | D] } |  j | | f | f ^ q- } | j ƒ  xÃ | D]» \ } } y | j | | | Ž  ƒ Wqc t k
 rŸ ‚  qc t k
 rÕ }	 | rÏ |	 j d k rÏ d |	 _ n  ‚  qc t j	 ƒ  d } | d k r÷ q|  j
 d | | f d d d t ƒqc Xqc W| r.‚  n  | S(   Ni    i   R   s   Error in %r listener %rt   leveli(   t	   traceback(   R   R   R   t   sortt   appendt   KeyboardInterruptt
   SystemExitt   codet   syst   exc_infoR   t   True(
   R   R   t   argst   kwargst   exct   outputt   listenert   itemsR   t   e(    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyt   publish†   s2    0
c         C   s:   |  j  t j k r6 t j d |  j  t ƒ |  j ƒ  n  d  S(   NsÀ   The main thread is exiting, but the Bus is in the %r state; shutting it down automatically now. You must either call bus.block() after start(), or call bus.exit() before the main thread exits.(   R   R   t   EXITINGt   warningst   warnt   RuntimeWarningR   (   R   (    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyt   _clean_exit§   s
    c         C   sÏ   t  j |  j ƒ t j |  _ |  j d ƒ y* |  j d ƒ t j |  _ |  j d ƒ Wnu t	 t
 f k
 ro ‚  n\ |  j d d d d t ƒt j ƒ  } y |  j ƒ  Wn n X| d | d	 | d
 ‚ n Xd  S(   Ns   Bus STARTINGR   s   Bus STARTEDs-   Shutting down due to error in start listener:R'   i(   R(   i    i   i   (   t   atexitt   registerR=   R   t   STARTINGR   R   R8   t   STARTEDR+   R,   R0   R.   R/   R   (   R   t   e_info(    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyR   ±   s$    c         C   s\   yA |  j  ƒ  t j |  _ |  j d ƒ |  j d ƒ |  j d ƒ Wn t j d ƒ n Xd  S(   Ns   Bus EXITINGR   s
   Bus EXITEDiF   (   R   R   R9   R   R   R8   t   ost   _exit(   R   (    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyR   È   s    
c         C   s   t  |  _ |  j ƒ  d  S(   N(   R0   R   R   (   R   (    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyt   restartÚ   s    	c         C   s   |  j  d ƒ |  j d ƒ d  S(   Ns   Bus gracefulR   (   R   R8   (   R   (    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyR   ã   s    gš™™™™™¹?c         C   s  y |  j  t j d | ƒWnX t t f k
 rJ |  j d ƒ |  j ƒ  n+ t k
 rt |  j d ƒ |  j ƒ  ‚  n X|  j d ƒ xr t j	 ƒ  D]d } | t j
 ƒ  k r | j ƒ  r t t j d ƒ rÑ | j } n | j ƒ  } | só | j ƒ  qó q q W|  j r|  j ƒ  n  d  S(   Nt   intervals%   Keyboard Interrupt: shutting down buss$   SystemExit raised: shutting down buss)   Waiting for child threads to terminate...t   daemon(   t   waitR   R9   R+   t   IOErrorR   R   R,   t	   threadingt	   enumeratet   currentThreadt   isAlivet   hasattrt   ThreadRG   t   isDaemont   joinR   t	   _do_execv(   R   RF   t   tt   d(    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyt   blockè   s&    	
	c            sy   t  | t t f ƒ r | ‰ n	 | g ‰ ‡  ‡ ‡ f d †  } y t j d j | ƒ Wn t t f k
 rm n X| ƒ  d  S(   Nc              s'   x  ˆ j  ˆ k r" t j ˆ  ƒ q Wd  S(   N(   R   t   timet   sleep(    (   RF   R   R   (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyt   _wait  s    t   psyco(   R	   t   tuplet   listR.   t   modulest   cannotcompilet   KeyErrort   AttributeError(   R   R   RF   RX   (    (   RF   R   R   s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyRH     s    		
c         C   s}   t  j } |  j d d j | ƒ ƒ | j d t  j ƒ t  j d k rf g  | D] } d | ^ qM } n  t j t  j | ƒ d  S(   Ns   Re-spawning %st    i    t   win32s   "%s"(	   R.   t   argvR   RQ   t   insertt
   executablet   platformRC   R   (   R   R1   t   arg(    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyRR   )  s    
 c         C   sC   t  j |  _ |  j d ƒ |  j d ƒ t  j |  _ |  j d ƒ d  S(   Ns   Bus STOPPINGR   s   Bus STOPPED(   R   t   STOPPINGR   R   R8   R   (   R   (    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyR   7  s
    c            s“   | d  k r d } n  | d  k r* i  } n  | f | } ‡  f d †  } t j d | d | d | ƒ } | j d | j ƒ  ƒ | j ƒ  ˆ  j ƒ  | S(   Nc            s!   ˆ  j  t j ƒ |  | | Ž  d  S(   N(   RH   R   RA   (   t   funct   at   kw(   R   (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyt	   _callbackG  s    t   targetR1   R2   s   Bus Callback (    (   R   RJ   RO   t   setNamet   getNameR   (   R   Rh   R1   R2   Rk   RS   (    (   R   s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyt   start_with_callback?  s    		

t    i   c         C   sL   | r5 t  j ƒ  } | d d j t j | Œ  ƒ 7} n  |  j d | | ƒ d  S(   Ns   
Rp   R   (   R.   R/   RQ   t
   _tracebackt   format_exceptionR8   (   R   t   msgR'   R(   R3   (    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyR   R  s    #N(   R   R   R   R   R   R   R   R   R   R#   R&   R8   R=   R   R   RE   R   RU   RH   RR   R   Ro   R   (    (    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyR   _   s$   
		
		!	
					)		(   R>   RC   R   t	   NameErrort   setsR    R.   RJ   RV   R(   Rq   R:   R
   R   R   R   R   R@   RA   Rg   R9   R   t   bus(    (    (    s+   /var/www/SABnzbd/cherrypy/process/wspbus.pyt   <module>?   s&   
	ú