| #!/usr/bin/env python |
| # Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import argparse |
| import sys |
| import os |
| import json |
| |
| """ |
| Prints the source path of the provided project name. |
| |
| This utility loads the specified x_project.py from one of our standard |
| module folders, constructs its project module, and prints the source paths that |
| it uses. |
| |
| This is used by the node_bootstrap.js to load the tracing code into node. |
| """ |
| |
| def _ToUpperCamelCase(name): |
| in_parts = name.split('_') |
| out_parts = [] |
| for part in in_parts: |
| out_part = part[0].upper() + part[1:] |
| out_parts.append(out_part) |
| return ''.join(out_parts) |
| |
| def _RelPathToUnixPath(p): |
| return p.replace(os.sep, '/') |
| |
| def Main(args): |
| parser = argparse.ArgumentParser( |
| usage='%(prog)s project_name', |
| epilog='Prints the source paths for the provided catapult project\n') |
| parser.add_argument('--source-paths', action='store_true') |
| parser.add_argument('--headless-test-module-filenames', action='store_true') |
| parser.add_argument('project_name', nargs=1) |
| args = parser.parse_args(args) |
| |
| catapult_path = os.path.abspath(os.path.join(os.path.dirname(__file__), |
| '..')) |
| |
| project_name = args.project_name[0] |
| project_path = os.path.join(catapult_path, project_name) |
| sys.path.append(project_path) |
| |
| project_module_name = project_name + '_project' |
| try: |
| project_module = __import__(project_module_name, fromlist=[True]) |
| except: |
| sys.stderr.write('Could not import %s from %s' % (project_module_name, |
| project_path)) |
| return 1 |
| |
| project_module.UpdateSysPathIfNeeded() |
| |
| class_name = _ToUpperCamelCase(project_name) + 'Project' |
| |
| try: |
| project_class = project_module.__dict__[class_name] |
| except: |
| sys.stderr.write('Could not find %s in %s' % (class_name, |
| project_module_name)) |
| return 1 |
| |
| project = project_class() |
| |
| if args.source_paths: |
| print json.dumps(project.source_paths) |
| |
| if args.headless_test_module_filenames: |
| headless_test_module_filenames = ['/' + _RelPathToUnixPath(x) |
| for x in project.FindAllD8TestModuleRelPaths()] |
| headless_test_module_filenames.sort() |
| print json.dumps(headless_test_module_filenames) |
| |
| |
| if __name__ == '__main__': |
| sys.exit(Main(sys.argv[1:])) |