| #!/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) |