
][\c	                 @   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   sv   d |  _  | |  _ t | t  ri | t j k r< t j } qi | t j k rZ d d   } qi t d   n  | |  _	 d  S)NFc             S   s   d  S)N )Zunused_signumZunused_framer   r   &/usr/lib/python3.4/unittest/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   s{   t  j t  j  } | |  k	 r1 |  j | |  n  |  j rM |  j | |  n  d |  _ x t j   D] } | j   qc Wd  S)NT)r   	getsignalSIGINTr   r   _resultskeysstop)r   ZsignumZ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   sD   t  d  k r@ t j t j  }  t |   a  t j t j t   n  d  S)N)_interrupt_handlerr   r   r   r   )r   r   r   r   installHandler1   s    r"   c                sW     d  k	 r. t       f d d    } | St d  k	 rS t j t j t j  n  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    