9 def get_members_of_list(lst):
10 return moira.query('get_members_of_list', lst)
13 if lst in cache: return cache[lst]
15 members = get_members_of_list(lst)
16 except moira.MoiraException, e:
18 if message == "Insufficient permission to perform requested database access":
19 cache[lst] = [{'member_type': 'ERR', 'member_name':'** Error: no permissions to look up this list **'}]
22 for member in members:
23 if member['member_type'] == 'LIST':
24 member['members'] = expand(member['member_name'])
28 def print_tree(path, lst_tree):
29 for member in lst_tree:
30 if 'members' in member:
31 path.append(member['member_name'])
32 print_tree(path, member['members'])
35 if member['member_type'] == "USER":
36 text = member['member_name']
37 elif member['member_type'] == "ERR":
38 text = member['member_name']
40 text = "%s:%s" % (member['member_type'], member['member_name'], )
41 print ": ".join(path+[text])
45 print_tree([lst], result)
48 parser = optparse.OptionParser(usage='usage: %prog [--auth=yes|no|try] list')
49 parser.add_option('--auth', dest='auth', default=None, )
50 options, args = parser.parse_args()
53 parser.error("incorrect number of arguments")
56 if options.auth == 'yes': options.auth = True
57 elif options.auth == 'try': options.auth = None
58 elif options.auth == 'no': options.auth = False
60 parser.error("--auth takes yes, no, and try (default; auth if possible)")
64 if __name__ == '__main__':
65 options, args = parse_args()
68 moira.auth('rblnchpy')
69 elif options.auth is None:
71 moira.auth('rblnchpy')
72 except moira.MoiraException:
73 print >>sys.stderr, "Warning: Failed to authenticate to moira"