
Wc	                 @   s   d  d l  Z  d  d l Z d  d l m Z d Z Gd d   d e  Z e j   Z d d   Z	 d d	   Z
 d a d
 d   Z d d d  Z d S)    N)wrapsTc               @   s(   e  Z d  Z d d   Z d d   Z d S)_InterruptHandlerc             C   ss   d |  _  | |  _ t | t  rf | t j k r< t j } n* | t j k rZ d d   } n t d   | |  _	 d  S)NFc             S   s   d  S)N )Zunused_signumZunused_framer   r   </afs/.cs/s/python-3.5.2/amd64_ubu14/lib/python3.5/signals.pydefault_handler   s    z3_InterruptHandler.__init__.<locals>.default_handlerzYexpected SIGINT signal handler to be signal.SIG_IGN, signal.SIG_DFL, or a callable object)
calledoriginal_handler
isinstanceintsignalSIG_DFLdefault_int_handlerSIG_IGN	TypeErrorr   )selfr   r   r   r   __init__
   s    		z_InterruptHandler.__init__c             C   su   t  j t  j  } | |  k	 r. |  j | |  |  j rG |  j | |  d |  _ x t j   D] } | j   q] Wd  S)NT)r   	getsignalSIGINTr   r   _resultskeysstop)r   signumframeZinstalled_handlerresultr   r   r   __call__   s    		z_InterruptHandler.__call__N)__name__
__module____qualname__r   r   r   r   r   r   r   	   s   r   c             C   s   d t  |  <d  S)N   )r   )r   r   r   r   registerResult*   s    r   c             C   s   t  t j |  d    S)N)boolr   pop)r   r   r   r   removeResult-   s    r"   c              C   sA   t  d  k r= t j t j  }  t |   a  t j t j t   d  S)N)_interrupt_handlerr   r   r   r   )r   r   r   r   installHandler1   s    r$   c                sT     d  k	 r. t       f d d    } | St d  k	 rP t j t j t j  d  S)Nc                 sE   t  j t  j  } t   z   |  |   SWd  t  j  t  j |  Xd  S)N)r   r   r   removeHandler)argskwargsinitial)methodr   r   inner;   s
    zremoveHandler.<locals>.inner)r   r#   r   r   r   )r)   r*   r   )r)   r   r%   9   s
    r%   )r   weakref	functoolsr   Z
__unittestobjectr   WeakKeyDictionaryr   r   r"   r#   r$   r%   r   r   r   r   <module>   s    