Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Side by Side Diff: tools/json_schema_compiler/compiler.py

Issue 9447090: Allow comments in extension config files. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fixed up license headers to pass license tests Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 """Generator for C++ structs from api json files. 5 """Generator for C++ structs from api json files.
6 6
7 The purpose of this tool is to remove the need for hand-written code that 7 The purpose of this tool is to remove the need for hand-written code that
8 converts to and from base::Value types when receiving javascript api calls. 8 converts to and from base::Value types when receiving javascript api calls.
9 Originally written for generating code for extension apis. Reference schemas 9 Originally written for generating code for extension apis. Reference schemas
10 are in chrome/common/extensions/api. 10 are in chrome/common/extensions/api.
11 11
12 Usage example: 12 Usage example:
13 compiler.py --root /home/Work/src --namespace extensions windows.json 13 compiler.py --root /home/Work/src --namespace extensions windows.json
14 tabs.json 14 tabs.json
15 compiler.py --destdir gen --root /home/Work/src 15 compiler.py --destdir gen --root /home/Work/src
16 --namespace extensions windows.json tabs.json 16 --namespace extensions windows.json tabs.json
17 """ 17 """
18 18
19 import cc_generator 19 import cc_generator
20 import cpp_type_generator 20 import cpp_type_generator
21 import h_generator 21 import h_generator
22 import json 22 from json_schema import LoadJSON
23 import model 23 import model
24 import optparse 24 import optparse
25 import os.path 25 import os.path
26 import sys 26 import sys
27 27
28 if __name__ == '__main__': 28 if __name__ == '__main__':
29 parser = optparse.OptionParser( 29 parser = optparse.OptionParser(
30 description='Generates a C++ model of an API from JSON schema', 30 description='Generates a C++ model of an API from JSON schema',
31 usage='usage: %prog [option]... schema') 31 usage='usage: %prog [option]... schema')
32 parser.add_option('-r', '--root', default='.', 32 parser.add_option('-r', '--root', default='.',
33 help='logical include root directory. Path to schema files from specified' 33 help='logical include root directory. Path to schema files from specified'
34 'dir will be the include path.') 34 'dir will be the include path.')
35 parser.add_option('-d', '--destdir', 35 parser.add_option('-d', '--destdir',
36 help='root directory to output generated files.') 36 help='root directory to output generated files.')
37 parser.add_option('-n', '--namespace', default='generated_api_schemas', 37 parser.add_option('-n', '--namespace', default='generated_api_schemas',
38 help='C++ namespace for generated files. e.g extensions::api.') 38 help='C++ namespace for generated files. e.g extensions::api.')
39 39
40 (opts, args) = parser.parse_args() 40 (opts, args) = parser.parse_args()
41 if not args: 41 if not args:
42 sys.exit(parser.get_usage()) 42 sys.exit(parser.get_usage())
43 dest_dir = opts.destdir 43 dest_dir = opts.destdir
44 root_namespace = opts.namespace 44 root_namespace = opts.namespace
45 45
46 schema = os.path.normpath(args[0]) 46 schema = os.path.normpath(args[0])
47 47
48 api_model = model.Model() 48 api_model = model.Model()
49 49
50 50
51 # Actually generate for source file. 51 # Actually generate for source file.
52 with open(schema, 'r') as schema_file: 52 api_defs = LoadJSON(schema)
53 api_defs = json.loads(schema_file.read())
54 53
55 for target_namespace in api_defs: 54 for target_namespace in api_defs:
56 referenced_schemas = target_namespace.get('dependencies', []) 55 referenced_schemas = target_namespace.get('dependencies', [])
57 # Load type dependencies into the model. 56 # Load type dependencies into the model.
58 for referenced_schema in referenced_schemas: 57 for referenced_schema in referenced_schemas:
59 referenced_schema_path = os.path.join( 58 referenced_schema_path = os.path.join(
60 os.path.dirname(schema), referenced_schema + '.json') 59 os.path.dirname(schema), referenced_schema + '.json')
61 with open(referenced_schema_path, 'r') as referenced_schema_file: 60 referenced_api_defs = LoadJSON(referenced_schema_path)
62 referenced_api_defs = json.loads(referenced_schema_file.read())
63 61
64 for namespace in referenced_api_defs: 62 for namespace in referenced_api_defs:
65 api_model.AddNamespace(namespace, 63 api_model.AddNamespace(namespace,
66 os.path.relpath(referenced_schema_path, opts.root)) 64 os.path.relpath(referenced_schema_path, opts.root))
67 65
68 # Gets the relative path from opts.root to the schema to correctly determine 66 # Gets the relative path from opts.root to the schema to correctly determine
69 # the include path. 67 # the include path.
70 relpath = os.path.relpath(schema, opts.root) 68 relpath = os.path.relpath(schema, opts.root)
71 namespace = api_model.AddNamespace(target_namespace, relpath) 69 namespace = api_model.AddNamespace(target_namespace, relpath)
72 if not namespace: 70 if not namespace:
(...skipping 24 matching lines...) Expand all
97 'w') as h_file: 95 'w') as h_file:
98 h_file.write(h_code) 96 h_file.write(h_code)
99 else: 97 else:
100 print '%s.h' % out_file 98 print '%s.h' % out_file
101 print 99 print
102 print h_code 100 print h_code
103 print 101 print
104 print '%s.cc' % out_file 102 print '%s.cc' % out_file
105 print 103 print
106 print cc_code 104 print cc_code
OLDNEW
« no previous file with comments | « third_party/json_minify/minify_json.py ('k') | tools/json_schema_compiler/cpp_type_generator_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698