• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python
2# Copyright (c) 2014 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6import argparse
7import sys
8import os
9import json
10
11"""
12Prints the source path of the provided project name.
13
14This utility loads the specified x_project.py from one of our standard
15module folders, constructs its project module, and prints the source paths that
16it uses.
17
18This is used by the node_bootstrap.js to load the tracing code into node.
19"""
20
21def _ToUpperCamelCase(name):
22  in_parts = name.split('_')
23  out_parts = []
24  for part in in_parts:
25    out_part = part[0].upper() + part[1:]
26    out_parts.append(out_part)
27  return ''.join(out_parts)
28
29def _RelPathToUnixPath(p):
30  return p.replace(os.sep, '/')
31
32def Main(args):
33  parser = argparse.ArgumentParser(
34      usage='%(prog)s project_name',
35      epilog='Prints the source paths for the provided catapult project\n')
36  parser.add_argument('--source-paths', action='store_true')
37  parser.add_argument('--headless-test-module-filenames', action='store_true')
38  parser.add_argument('project_name', nargs=1)
39  args = parser.parse_args(args)
40
41  catapult_path = os.path.abspath(os.path.join(os.path.dirname(__file__),
42                                 '..'))
43
44  project_name = args.project_name[0]
45  project_path = os.path.join(catapult_path, project_name)
46  sys.path.append(project_path)
47
48  project_module_name = project_name + '_project'
49  try:
50    project_module = __import__(project_module_name, fromlist=[True])
51  except:
52    sys.stderr.write('Could not import %s from %s' % (project_module_name,
53                                                      project_path))
54    return 1
55
56  project_module.UpdateSysPathIfNeeded()
57
58  class_name = _ToUpperCamelCase(project_name) + 'Project'
59
60  try:
61    project_class = project_module.__dict__[class_name]
62  except:
63    sys.stderr.write('Could not find %s in %s' % (class_name,
64                                                  project_module_name))
65    return 1
66
67  project = project_class()
68
69  if args.source_paths:
70    print json.dumps(project.source_paths)
71
72  if args.headless_test_module_filenames:
73    headless_test_module_filenames = ['/' + _RelPathToUnixPath(x)
74                              for x in project.FindAllD8TestModuleRelPaths()]
75    headless_test_module_filenames.sort()
76    print json.dumps(headless_test_module_filenames)
77
78
79if __name__ == '__main__':
80  sys.exit(Main(sys.argv[1:]))