62 lines
1.6 KiB
Python
62 lines
1.6 KiB
Python
![]() |
# Copyright (c) Twisted Matrix Laboratories.
|
||
|
# See LICENSE for details.
|
||
|
|
||
|
"""
|
||
|
Testing helpers related to the module system.
|
||
|
"""
|
||
|
|
||
|
|
||
|
__all__ = ["NoReactor", "AlternateReactor"]
|
||
|
|
||
|
import sys
|
||
|
|
||
|
import twisted.internet
|
||
|
from twisted.test.test_twisted import SetAsideModule
|
||
|
|
||
|
|
||
|
class NoReactor(SetAsideModule):
|
||
|
"""
|
||
|
Context manager that uninstalls the reactor, if any, and then restores it
|
||
|
afterwards.
|
||
|
"""
|
||
|
|
||
|
def __init__(self):
|
||
|
SetAsideModule.__init__(self, "twisted.internet.reactor")
|
||
|
|
||
|
def __enter__(self):
|
||
|
SetAsideModule.__enter__(self)
|
||
|
if "twisted.internet.reactor" in self.modules:
|
||
|
del twisted.internet.reactor
|
||
|
|
||
|
def __exit__(self, excType, excValue, traceback):
|
||
|
SetAsideModule.__exit__(self, excType, excValue, traceback)
|
||
|
# Clean up 'reactor' attribute that may have been set on
|
||
|
# twisted.internet:
|
||
|
reactor = self.modules.get("twisted.internet.reactor", None)
|
||
|
if reactor is not None:
|
||
|
twisted.internet.reactor = reactor
|
||
|
else:
|
||
|
try:
|
||
|
del twisted.internet.reactor
|
||
|
except AttributeError:
|
||
|
pass
|
||
|
|
||
|
|
||
|
class AlternateReactor(NoReactor):
|
||
|
"""
|
||
|
A context manager which temporarily installs a different object as the
|
||
|
global reactor.
|
||
|
"""
|
||
|
|
||
|
def __init__(self, reactor):
|
||
|
"""
|
||
|
@param reactor: Any object to install as the global reactor.
|
||
|
"""
|
||
|
NoReactor.__init__(self)
|
||
|
self.alternate = reactor
|
||
|
|
||
|
def __enter__(self):
|
||
|
NoReactor.__enter__(self)
|
||
|
twisted.internet.reactor = self.alternate
|
||
|
sys.modules["twisted.internet.reactor"] = self.alternate
|