cloud-init-dev team mailing list archive
-
cloud-init-dev team
-
Mailing list archive
-
Message #05417
[Merge] ~smoser/cloud-init:fix/py26-skipif into cloud-init:master
Scott Moser has proposed merging ~smoser/cloud-init:fix/py26-skipif into cloud-init:master.
Commit message:
Fix the built-in cloudinit/tests/helpers:skipIf
this version
a.) actually has correct logic
b.) can decorate a class.
Requested reviews:
cloud-init commiters (cloud-init-dev)
For more details, see:
https://code.launchpad.net/~smoser/cloud-init/+git/cloud-init/+merge/354062
see commit message
--
Your team cloud-init commiters is requested to review the proposed merge of ~smoser/cloud-init:fix/py26-skipif into cloud-init:master.
diff --git a/cloudinit/tests/helpers.py b/cloudinit/tests/helpers.py
index 5bfe7fa..148e0ae 100644
--- a/cloudinit/tests/helpers.py
+++ b/cloudinit/tests/helpers.py
@@ -428,15 +428,34 @@ def readResource(name, mode='r'):
try:
skipIf = unittest.skipIf
except AttributeError:
- # Python 2.6. Doesn't have to be high fidelity.
+ # Python 2.6.
def skipIf(condition, reason):
- def decorator(func):
- def wrapper(*args, **kws):
- if condition:
- return func(*args, **kws)
- else:
- print(reason, file=sys.stderr)
- return wrapper
+ def decorator(test):
+ def decorate_callable(mycallable):
+ @functools.wraps(mycallable)
+ def wrapper(*args, **kws):
+ if condition:
+ raise SkipTest(reason)
+ else:
+ return mycallable(*args, **kws)
+ return wrapper
+
+ def decorate_test_methods(klass):
+ for attr in dir(klass):
+ attr_value = getattr(klass, attr)
+ if not hasattr(attr_value, "__call__"):
+ continue
+
+ if not attr.startswith('test_'):
+ continue
+
+ setattr(klass, attr, decorate_callable(attr_value))
+ return klass
+
+ if isinstance(test, (type,)):
+ return decorate_test_methods(klass=test)
+ return decorate_callable(test)
+
return decorator
Follow ups