xref: /aosp_15_r20/external/autotest/cli/user.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li#
2*9c5db199SXin Li# Copyright 2008 Google Inc. All Rights Reserved.
3*9c5db199SXin Li
4*9c5db199SXin Li"""
5*9c5db199SXin LiThe user module contains the objects and methods used to
6*9c5db199SXin Limanage users in Autotest.
7*9c5db199SXin Li
8*9c5db199SXin LiThe valid action is:
9*9c5db199SXin Lilist:    lists user(s)
10*9c5db199SXin Li
11*9c5db199SXin LiThe common options are:
12*9c5db199SXin Li--ulist / -U: file containing a list of USERs
13*9c5db199SXin Li
14*9c5db199SXin LiSee topic_common.py for a High Level Design and Algorithm.
15*9c5db199SXin Li"""
16*9c5db199SXin Li
17*9c5db199SXin Liimport os, sys
18*9c5db199SXin Lifrom autotest_lib.cli import topic_common, action_common
19*9c5db199SXin Li
20*9c5db199SXin Li
21*9c5db199SXin Liclass user(topic_common.atest):
22*9c5db199SXin Li    """User class
23*9c5db199SXin Li    atest user list <options>"""
24*9c5db199SXin Li    usage_action = 'list'
25*9c5db199SXin Li    topic = msg_topic = 'user'
26*9c5db199SXin Li    msg_items = '<users>'
27*9c5db199SXin Li
28*9c5db199SXin Li    def __init__(self):
29*9c5db199SXin Li        """Add to the parser the options common to all the
30*9c5db199SXin Li        user actions"""
31*9c5db199SXin Li        super(user, self).__init__()
32*9c5db199SXin Li
33*9c5db199SXin Li        self.parser.add_option('-U', '--ulist',
34*9c5db199SXin Li                               help='File listing the users',
35*9c5db199SXin Li                               type='string',
36*9c5db199SXin Li                               default=None,
37*9c5db199SXin Li                               metavar='USER_FLIST')
38*9c5db199SXin Li
39*9c5db199SXin Li        self.topic_parse_info = topic_common.item_parse_info(
40*9c5db199SXin Li            attribute_name='users',
41*9c5db199SXin Li            filename_option='ulist',
42*9c5db199SXin Li            use_leftover=True)
43*9c5db199SXin Li
44*9c5db199SXin Li
45*9c5db199SXin Li    def get_items(self):
46*9c5db199SXin Li        return self.users
47*9c5db199SXin Li
48*9c5db199SXin Li
49*9c5db199SXin Liclass user_help(user):
50*9c5db199SXin Li    """Just here to get the atest logic working.
51*9c5db199SXin Li    Usage is set by its parent"""
52*9c5db199SXin Li    pass
53*9c5db199SXin Li
54*9c5db199SXin Li
55*9c5db199SXin Liclass user_list(action_common.atest_list, user):
56*9c5db199SXin Li    """atest user list <user>|--ulist <file>
57*9c5db199SXin Li    [--acl <ACL>|--access_level <n>]"""
58*9c5db199SXin Li    def __init__(self):
59*9c5db199SXin Li        super(user_list, self).__init__()
60*9c5db199SXin Li
61*9c5db199SXin Li        self.parser.add_option('-a', '--acl',
62*9c5db199SXin Li                               help='Only list users within this ACL')
63*9c5db199SXin Li
64*9c5db199SXin Li        self.parser.add_option('-l', '--access_level',
65*9c5db199SXin Li                               help='Only list users at this access level')
66*9c5db199SXin Li
67*9c5db199SXin Li
68*9c5db199SXin Li    def parse(self):
69*9c5db199SXin Li        (options, leftover) = super(user_list, self).parse()
70*9c5db199SXin Li        self.acl = options.acl
71*9c5db199SXin Li        self.access_level = options.access_level
72*9c5db199SXin Li        return (options, leftover)
73*9c5db199SXin Li
74*9c5db199SXin Li
75*9c5db199SXin Li    def execute(self):
76*9c5db199SXin Li        filters = {}
77*9c5db199SXin Li        check_results = {}
78*9c5db199SXin Li        if self.acl:
79*9c5db199SXin Li            filters['aclgroup__name__in'] = [self.acl]
80*9c5db199SXin Li            check_results['aclgroup__name__in'] = None
81*9c5db199SXin Li
82*9c5db199SXin Li        if self.access_level:
83*9c5db199SXin Li            filters['access_level__in'] = [self.access_level]
84*9c5db199SXin Li            check_results['access_level__in'] = None
85*9c5db199SXin Li
86*9c5db199SXin Li        if self.users:
87*9c5db199SXin Li            filters['login__in'] = self.users
88*9c5db199SXin Li            check_results['login__in'] = 'login'
89*9c5db199SXin Li
90*9c5db199SXin Li        return super(user_list, self).execute(op='get_users',
91*9c5db199SXin Li                                              filters=filters,
92*9c5db199SXin Li                                              check_results=check_results)
93*9c5db199SXin Li
94*9c5db199SXin Li
95*9c5db199SXin Li    def output(self, results):
96*9c5db199SXin Li        if self.verbose:
97*9c5db199SXin Li            keys = ['id', 'login', 'access_level']
98*9c5db199SXin Li        else:
99*9c5db199SXin Li            keys = ['login']
100*9c5db199SXin Li
101*9c5db199SXin Li        super(user_list, self).output(results, keys)
102