|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- # 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
|