Skip to content
Snippets Groups Projects
Commit 7a77aabb authored by Paul "LeoNerd" Evans's avatar Paul "LeoNerd" Evans
Browse files

Define a CLOS-like 'around' modifier as a decorator, to neaten up the 'orig_*'...

Define a CLOS-like 'around' modifier as a decorator, to neaten up the 'orig_*' noise of wrapping the setUp()/tearDown() methods
parent aeb69c0f
No related branches found
No related tags found
No related merge requests found
...@@ -26,6 +26,23 @@ logging.getLogger().addHandler(logging.StreamHandler()) ...@@ -26,6 +26,23 @@ logging.getLogger().addHandler(logging.StreamHandler())
logging.getLogger().setLevel(NEVER) logging.getLogger().setLevel(NEVER)
def around(target):
"""A CLOS-style 'around' modifier, which wraps the original method of the
given instance with another piece of code.
@around(self)
def method_name(orig, *args, **kwargs):
return orig(*args, **kwargs)
"""
def _around(code):
name = code.__name__
orig = getattr(target, name)
def new(*args, **kwargs):
return code(orig, *args, **kwargs)
setattr(target, name, new)
return _around
class TestCase(unittest.TestCase): class TestCase(unittest.TestCase):
"""A subclass of twisted.trial's TestCase which looks for 'loglevel' """A subclass of twisted.trial's TestCase which looks for 'loglevel'
attributes on both itself and its individual test methods, to override the attributes on both itself and its individual test methods, to override the
...@@ -40,23 +57,19 @@ class TestCase(unittest.TestCase): ...@@ -40,23 +57,19 @@ class TestCase(unittest.TestCase):
getattr(self, "loglevel", getattr(self, "loglevel",
NEVER)) NEVER))
orig_setUp = self.setUp @around(self)
def setUp(orig):
def setUp():
old_level = logging.getLogger().level old_level = logging.getLogger().level
if old_level != level: if old_level != level:
orig_tearDown = self.tearDown @around(self)
def tearDown(orig):
def tearDown(): ret = orig()
ret = orig_tearDown()
logging.getLogger().setLevel(old_level) logging.getLogger().setLevel(old_level)
return ret return ret
self.tearDown = tearDown
logging.getLogger().setLevel(level) logging.getLogger().setLevel(level)
return orig_setUp() return orig()
self.setUp = setUp
def DEBUG(target): def DEBUG(target):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment