summaryrefslogtreecommitdiffstats
path: root/testsuites/vstf/vstf_scripts/vstf/common/decorator.py
diff options
context:
space:
mode:
authorMatthewLi <matthew.lijun@huawei.com>2016-03-25 03:55:53 -0400
committerMatthewLi <matthew.lijun@huawei.com>2016-03-25 03:55:53 -0400
commitf84c8dcc22f1499128893e62b0e15b4b592c47ba (patch)
treeee14029aa59c076fdfde1c504a385f3389477a6a /testsuites/vstf/vstf_scripts/vstf/common/decorator.py
parent7ba76747d55669e2bbaf70a3061e1c0b5dea912e (diff)
adjust project directories
JIRA: BOTTLENECK-56 Change-Id: Ic9acad5eaa4917093bdb85a80960f796f5b4ba7f Signed-off-by: MatthewLi <matthew.lijun@huawei.com>
Diffstat (limited to 'testsuites/vstf/vstf_scripts/vstf/common/decorator.py')
-rw-r--r--testsuites/vstf/vstf_scripts/vstf/common/decorator.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/testsuites/vstf/vstf_scripts/vstf/common/decorator.py b/testsuites/vstf/vstf_scripts/vstf/common/decorator.py
new file mode 100644
index 00000000..98d539f1
--- /dev/null
+++ b/testsuites/vstf/vstf_scripts/vstf/common/decorator.py
@@ -0,0 +1,92 @@
+##############################################################################
+# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+_DEFAULTS = "vstf check key defaults".encode()
+
+
+def check(key, choices=[], defaults=_DEFAULTS):
+ def _deco(func):
+ def __deco(*args, **kwargs):
+ if key not in kwargs:
+ if defaults != _DEFAULTS:
+ kwargs[key] = defaults
+ else:
+ raise Exception("Error: '%s' is needed in %s" % (key, func))
+
+ if choices and kwargs[key] not in choices:
+ raise Exception("Error: %s :%s" % (key, kwargs[key]))
+ ret = func(*args, **kwargs)
+ return ret
+
+ return __deco
+
+ return _deco
+
+
+def dcheck(key, choices=[]):
+ def _deco(func):
+ def __deco(*args):
+ if len(args) == 2:
+ values = args[1]
+ elif len(args) == 1:
+ values = args[0]
+ else:
+ values = None
+ if isinstance(values, dict):
+ if key not in values:
+ raise Exception("Error: '%s' is needed in %s" % (key, func))
+ if choices and values[key] not in choices:
+ raise Exception("Error: %s :%s" % (key, values[key]))
+ ret = func(*args)
+ return ret
+
+ return __deco
+
+ return _deco
+
+
+def vstf_input(key, types=str, choices=[], default=None):
+ def _deco(func):
+ def __deco(*args):
+ ret = func(*args)
+ if not isinstance(ret, dict):
+ ret = {}
+ in_str = "----> %s : " % key
+ if choices:
+ in_str = "---- %s\n" % (str(choices)) + in_str
+ while True:
+ if types == list or types == dict:
+ value = input(in_str)
+ else:
+ value = raw_input(in_str)
+ value = types(value)
+ if not value:
+ value = default
+ if not choices or value in choices:
+ break
+ ret.update({key: value})
+ return ret
+
+ return __deco
+
+ return _deco
+
+
+def namespace():
+ def _deco(func):
+ def __deco(*args, **kwargs):
+ ret = func(*args, **kwargs)
+ nspace = kwargs.get("namespace", None)
+ if nspace:
+ ret = "ip netns exec %(namespace)s " % {"namespace": nspace} + ret
+ return ret
+
+ return __deco
+
+ return _deco