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

Side by Side Diff: tools/json_to_struct/json_to_struct.py

Issue 1209743002: Generate a static struct from fieldtrial_testing_config (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@codegen_nested_structs
Patch Set: fix gn build Created 5 years, 5 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 2012 The Chromium Authors. All rights reserved. 2 # Copyright 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 5
6 # Format for the JSON schema file: 6 # Format for the JSON schema file:
7 # { 7 # {
8 # "type_name": "DesiredCStructName", 8 # "type_name": "DesiredCStructName",
9 # "headers": [ // Optional list of headers to be included by the .h. 9 # "headers": [ // Optional list of headers to be included by the .h.
10 # "path/to/header.h" 10 # "path/to/header.h"
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 f.write('} // namespace %s\n' % namespace) 166 f.write('} // namespace %s\n' % namespace)
167 167
168 def _Load(filename): 168 def _Load(filename):
169 """Loads a JSON file int a Python object and return this object. 169 """Loads a JSON file int a Python object and return this object.
170 """ 170 """
171 # TODO(beaudoin): When moving to Python 2.7 use object_pairs_hook=OrderedDict. 171 # TODO(beaudoin): When moving to Python 2.7 use object_pairs_hook=OrderedDict.
172 with open(filename, 'r') as handle: 172 with open(filename, 'r') as handle:
173 result = json.loads(json_comment_eater.Nom(handle.read())) 173 result = json.loads(json_comment_eater.Nom(handle.read()))
174 return result 174 return result
175 175
176 def GenerateStruct(basepath, output_root, namespace, schema, description,
177 description_filename, schema_filename):
Alexei Svitkine (slow) 2015/07/08 16:54:54 Nit: Align
danduong 2015/07/09 00:12:54 Done.
178 head = HEAD % (datetime.now().year, schema_filename, description_filename)
Alexei Svitkine (slow) 2015/07/08 16:54:53 Add a comment about what this function does and do
danduong 2015/07/09 00:12:54 Done.
179 _GenerateH(basepath, output_root, head, namespace, schema, description)
180 _GenerateCC(basepath, output_root, head, namespace, schema, description)
181
176 if __name__ == '__main__': 182 if __name__ == '__main__':
177 parser = optparse.OptionParser( 183 parser = optparse.OptionParser(
178 description='Generates an C++ array of struct from a JSON description.', 184 description='Generates an C++ array of struct from a JSON description.',
179 usage='usage: %prog [option] -s schema description') 185 usage='usage: %prog [option] -s schema description')
180 parser.add_option('-b', '--destbase', 186 parser.add_option('-b', '--destbase',
181 help='base directory of generated files.') 187 help='base directory of generated files.')
182 parser.add_option('-d', '--destdir', 188 parser.add_option('-d', '--destdir',
183 help='directory to output generated files, relative to destbase.') 189 help='directory to output generated files, relative to destbase.')
184 parser.add_option('-n', '--namespace', 190 parser.add_option('-n', '--namespace',
185 help='C++ namespace for generated files. e.g search_providers.') 191 help='C++ namespace for generated files. e.g search_providers.')
186 parser.add_option('-s', '--schema', help='path to the schema file, ' 192 parser.add_option('-s', '--schema', help='path to the schema file, '
187 'mandatory.') 193 'mandatory.')
194 parser.add_option('-o', '--output', help='output filename, ')
188 (opts, args) = parser.parse_args() 195 (opts, args) = parser.parse_args()
189 196
190 if not opts.schema: 197 if not opts.schema:
191 parser.error('You must specify a --schema.') 198 parser.error('You must specify a --schema.')
192 199
193 description_filename = os.path.normpath(args[0]) 200 description_filename = os.path.normpath(args[0])
194 root, ext = os.path.splitext(description_filename) 201 root, ext = os.path.splitext(description_filename)
195 shortroot = os.path.split(root)[1] 202 shortroot = opts.output if opts.output else os.path.split(root)[1]
196 if opts.destdir: 203 if opts.destdir:
197 output_root = os.path.join(os.path.normpath(opts.destdir), shortroot) 204 output_root = os.path.join(os.path.normpath(opts.destdir), shortroot)
198 else: 205 else:
199 output_root = shortroot 206 output_root = shortroot
200 207
201 if opts.destbase: 208 if opts.destbase:
202 basepath = os.path.normpath(opts.destbase) 209 basepath = os.path.normpath(opts.destbase)
203 else: 210 else:
204 basepath = '' 211 basepath = ''
205 212
206 schema = _Load(opts.schema) 213 schema = _Load(opts.schema)
207 description = _Load(description_filename) 214 description = _Load(description_filename)
208 215 GenerateStruct(basepath, output_root, opts.namespace, schema, description,
209 head = HEAD % (datetime.now().year, opts.schema, description_filename) 216 description_filename, opts.schema)
210 _GenerateH(basepath, output_root, head, opts.namespace, schema, description)
211 _GenerateCC(basepath, output_root, head, opts.namespace, schema, description)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698