Upload the contribution of vstf as bottleneck network framework.
[bottlenecks.git] / vstf / vstf / common / cliutil.py
diff --git a/vstf/vstf/common/cliutil.py b/vstf/vstf/common/cliutil.py
new file mode 100755 (executable)
index 0000000..91ff7f1
--- /dev/null
@@ -0,0 +1,27 @@
+def arg(*args, **kwargs):
+    """Decorator for CLI args.
+
+    Example:
+
+    >>> @arg("name", help="Name of the new entity")
+    ... def entity_create(args):
+    ...     pass
+    """
+    def _decorator(func):
+        add_arg(func, *args, **kwargs)
+        return func
+    return _decorator
+
+
+def add_arg(func, *args, **kwargs):
+    """Bind CLI arguments to a shell.py `do_foo` function."""
+
+    if not hasattr(func, 'arguments'):
+        func.arguments = []
+
+    # NOTE(sirp): avoid dups that can occur when the module is shared across
+    # tests.
+    if (args, kwargs) not in func.arguments:
+        # Because of the semantics of decorator composition if we just append
+        # to the options list positional options will appear to be backwards.
+        func.arguments.insert(0, (args, kwargs))
\ No newline at end of file