Attached is the CLI code tarball. It is documented at http://test.kernel.org/autotest/CLIHowTo

From: [email protected]



git-svn-id: http://test.kernel.org/svn/autotest/trunk@1950 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/cli/user.py b/cli/user.py
new file mode 100755
index 0000000..83e69d0
--- /dev/null
+++ b/cli/user.py
@@ -0,0 +1,105 @@
+#
+# Copyright 2008 Google Inc. All Rights Reserved.
+
+"""
+The user module contains the objects and methods used to
+manage users in Autotest.
+
+The valid action is:
+list:    lists user(s)
+
+The common options are:
+--ulist / -U: file containing a list of USERs
+
+See topic_common.py for a High Level Design and Algorithm.
+"""
+
+import os, sys
+from autotest_lib.cli import topic_common, action_common
+
+
+class user(topic_common.atest):
+    """User class
+    atest user list <options>"""
+    usage_action = 'list'
+    topic = msg_topic = 'user'
+    msg_items = '<users>'
+
+    def __init__(self):
+        """Add to the parser the options common to all the
+        user actions"""
+        super(user, self).__init__()
+
+        self.parser.add_option('-U', '--ulist',
+                               help='File listing the users',
+                               type='string',
+                               default=None,
+                               metavar='USER_FLIST')
+
+
+    def parse(self, flists=None, req_items='users'):
+        """Consume the common user options"""
+        if flists:
+            flists.append(('users', 'ulist', '', True))
+        else:
+            flists = [('users', 'ulist', '', True)]
+        return self.parse_with_flist(flists, req_items)
+
+
+    def get_items(self):
+        return self.users
+
+
+class user_help(user):
+    """Just here to get the atest logic working.
+    Usage is set by its parent"""
+    pass
+
+
+class user_list(action_common.atest_list, user):
+    """atest user list <user>|--ulist <file>
+    [--acl <ACL>|--access_level <n>]"""
+    def __init__(self):
+        super(user_list, self).__init__()
+
+        self.parser.add_option('-a', '--acl',
+                               help='Only list users within this ACL')
+
+        self.parser.add_option('-l', '--access_level',
+                               help='Only list users at this access level')
+
+
+    def parse(self):
+        (options, leftover) = super(user_list, self).parse(req_items=None)
+        self.acl = options.acl
+        self.access_level = options.access_level
+        return (options, leftover)
+
+
+    def execute(self):
+        filters = {}
+        check_results = {}
+        if self.acl:
+            filters['acl_group__name__in'] = [self.acl]
+            check_results['acl_group__name__in'] = None
+
+        if self.access_level:
+            filters['access_level__in'] = [self.access_level]
+            check_results['access_level__in'] = None
+
+        if self.users:
+            filters['login__in'] = self.users
+            check_results['login__in'] = 'login'
+
+        return super(user_list, self).execute(op='get_users',
+                                              filters=filters,
+                                              check_results=check_results)
+
+
+    def output(self, results):
+        if self.verbose:
+            keys = ['id', 'login', 'access_level']
+        else:
+            keys = ['login']
+
+        super(user_list, self).output(results, keys)