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