--- /dev/null
+#!/usr/bin/python
+import moira
+import sys
+
+cache = {}
+
+def get_members_of_list(lst):
+ return moira.query('get_members_of_list', lst)
+
+def expand(lst):
+ if lst in cache: return cache[lst]
+ try:
+ members = get_members_of_list(lst)
+ except moira.MoiraException, e:
+ code, message = e
+ if message == "Insufficient permission to perform requested database access":
+ cache[lst] = [{'member_type': 'ERR', 'member_name':'** Error: no permissions to look up this list **'}]
+ return cache[lst]
+ else: raise
+ for member in members:
+ if member['member_type'] == 'LIST':
+ member['members'] = expand(member['member_name'])
+ cache[lst] = members
+ return members
+
+def print_tree(path, lst_tree):
+ for member in lst_tree:
+ if 'members' in member:
+ path.append(member['member_name'])
+ print_tree(path, member['members'])
+ path.pop()
+ else:
+ if member['member_type'] == "USER":
+ text = member['member_name']
+ elif member['member_type'] == "ERR":
+ text = member['member_name']
+ else:
+ text = "%s:%s" % (member['member_type'], member['member_name'], )
+ print ": ".join(path+[text])
+
+def rblanche(lst):
+ result = expand(lst)
+ print_tree([lst], result)
+
+if __name__ == '__main__':
+ moira.connect()
+ rblanche(sys.argv[1])