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