U
    �Acjˆ  ã                   @   sL   d Z ddgZddlZddlZddlmZ G dd„ deƒZG dd„ deƒZdS )z/
Testing helpers related to the module system.
Ú	NoReactorÚAlternateReactoré    N)ÚSetAsideModulec                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	r   zc
    Context manager that uninstalls the reactor, if any, and then restores it
    afterwards.
    c                 C   s   t  | d¡ d S ©Nztwisted.internet.reactor)r   Ú__init__©Úself© r	   úG/tmp/pip-unpacked-wheel-nrvc_22y/twisted/internet/test/modulehelpers.pyr      s    zNoReactor.__init__c                 C   s   t  | ¡ d| jkrtj`d S r   )r   Ú	__enter__ÚmodulesÚtwistedÚinternetÚreactorr   r	   r	   r
   r      s    

zNoReactor.__enter__c                 C   sT   t  | |||¡ | j dd ¡}|d k	r0|tj_n z
tj`W n tk
rN   Y nX d S r   )r   Ú__exit__r   Úgetr   r   r   ÚAttributeError)r   ZexcTypeZexcValueÚ	tracebackr   r	   r	   r
   r      s    

zNoReactor.__exit__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r	   r	   r	   r
   r      s   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )r   zd
    A context manager which temporarily installs a different object as the
    global reactor.
    c                 C   s   t  | ¡ || _dS )zN
        @param reactor: Any object to install as the global reactor.
        N)r   r   Ú	alternate)r   r   r	   r	   r
   r   3   s    
zAlternateReactor.__init__c                 C   s$   t  | ¡ | jtj_| jtjd< d S r   )r   r   r   r   r   r   Úsysr   r   r	   r	   r
   r   :   s    

zAlternateReactor.__enter__N)r   r   r   r   r   r   r	   r	   r	   r
   r   -   s   )	r   Ú__all__r   Ztwisted.internetr   Ztwisted.test.test_twistedr   r   r   r	   r	   r	   r
   Ú<module>   s   