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
_______________________________________________ Mailing list: https://launchpad.net/~cloud-init-dev Post to : cloud-init-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~cloud-init-dev More help : https://help.launchpad.net/ListHelp