#!/usr/bin/python
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Extract list of team members for the root individual."""
import commands
import json
import logging
import optparse
import os
import sys
def ParseArgs(argv):
"""Get input and output file."""
base_dir = os.path.realpath(os.path.abspath(os.path.join(
os.getcwd(), os.path.dirname(__file__))))
parser = optparse.OptionParser()
parser.add_option('-r', '--root-person', help='initial person to follow',
dest='rootperson', default=None)
parser.add_option('-o', '--output-file', help='output file (json)',
dest='outputfile', default="kernel-team.json")
parser.add_option('-p', '--print-test', help='print the map as a test',
dest='printtest', action='store_true', default=False)
parser.add_option('-v', '--verbose', help='Show more output',
dest='verbose', action='store_true', default=False)
options, args = parser.parse_args()
if not options.rootperson:
parser.error('--root-person must be supplied')
logging_level = logging.INFO
if options.verbose:
logging_level = logging.DEBUG
logging.basicConfig(level=logging_level)
return options, args, base_dir
def SearchOnePerson(person):
"""Run a command to get details for one person."""
found = []
if person:
command = 'f %s | grep Reportees' % person
logging.debug(command)
find_result = commands.getoutput(command)
if find_result:
found = find_result.split(' ')[2:]
logging.debug(found)
return found
def FindTeamMembers(root_person):
"""Recursively iteratea through the list of team members until done.
Expect the root_person to have at least 1 report but not needed.
"""
remaining = [root_person]
extracted = [root_person]
while remaining:
found = SearchOnePerson(remaining.pop(0))
if found:
remaining += found
extracted += found
return extracted
def WriteJson(outputfile, extracted):
"""Write output in json format."""
f = open(outputfile, 'w')
json.dump(extracted, f)
f.close()
def PrintJson(jsonfile):
"""Read the json file and format-print its contents as a test."""
f = open(jsonfile, 'r')
team_list = json.load(f)
f.close()
for t in sorted(team_list):
logging.info('%s', t)
def main(argv):
"""Can generate tables, plots and email."""
options, args, base_dir = ParseArgs(argv)
logging.info('Using %s as root.', options.rootperson)
logging.info('Using output file: %s', options.outputfile)
team = FindTeamMembers(options.rootperson)
if team:
WriteJson(options.outputfile, team)
if options.printtest:
PrintJson(options.outputfile)
if __name__ == '__main__':
main(sys.argv)