Index: tools/variations/fieldtrial_to_struct.py |
diff --git a/tools/variations/fieldtrial_to_struct.py b/tools/variations/fieldtrial_to_struct.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..b19dc554938570aa9e3aaac013a189cbf09d9e43 |
--- /dev/null |
+++ b/tools/variations/fieldtrial_to_struct.py |
@@ -0,0 +1,95 @@ |
+#!/usr/bin/env python |
+# Copyright 2015 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 json |
+import os.path |
+import sys |
+import optparse |
+_script_path = os.path.realpath(__file__) |
+ |
+sys.path.insert(0, os.path.normpath(_script_path + "/../../json_comment_eater")) |
+try: |
+ import json_comment_eater |
+finally: |
+ sys.path.pop(0) |
+ |
+sys.path.insert(0, os.path.normpath(_script_path + "/../../json_to_struct")) |
+try: |
+ import json_to_struct |
+finally: |
+ sys.path.pop(0) |
+ |
+def _Load(filename): |
+ """Loads a JSON file into a Python object and return this object. |
+ """ |
+ with open(filename, 'r') as handle: |
+ result = json.loads(json_comment_eater.Nom(handle.read())) |
+ return result |
+ |
+def _LoadFieldTrialConfig(filename): |
+ """Loads a field trial config JSON and converts it into a format that can be |
+ used by json_to_struct. |
+ """ |
+ return _FieldTrialConfigToDescription(_Load(filename)) |
+ |
+def _FieldTrialConfigToDescription(config): |
+ element = {'groups': []} |
+ for study in sorted(config.keys()): |
+ group_data = config[study][0] |
+ group = { |
+ 'study': study, |
+ 'group_name': group_data['group_name'] |
+ } |
+ params_data = group_data.get('params') |
+ if (params_data): |
+ params = [] |
+ for param in sorted(params_data.keys()): |
+ params.append({'key': param, 'value': params_data[param]}) |
+ group['params'] = params |
+ element['groups'].append(group) |
+ return {'elements': {'kFieldTrialConfig': element}} |
+ |
+def main(arguments): |
+ parser = optparse.OptionParser( |
+ description='Generates an C++ array of struct from a JSON description.', |
+ usage='usage: %prog [option] -s schema description') |
+ parser.add_option('-b', '--destbase', |
+ help='base directory of generated files.') |
+ parser.add_option('-d', '--destdir', |
+ help='directory to output generated files, relative to destbase.') |
+ parser.add_option('-n', '--namespace', |
+ help='C++ namespace for generated files. e.g search_providers.') |
+ parser.add_option('-s', '--schema', help='path to the schema file, ' |
+ 'mandatory.') |
+ parser.add_option('-o', '--output', help='output filename, ' |
+ 'mandatory.') |
+ parser.add_option('-y', '--year', |
+ help='year to put in the copy-right.') |
+ (opts, args) = parser.parse_args(args=arguments) |
+ |
+ if not opts.schema: |
+ parser.error('You must specify a --schema.') |
+ |
+ description_filename = os.path.normpath(args[0]) |
+ shortroot = opts.output |
+ if opts.destdir: |
+ output_root = os.path.join(os.path.normpath(opts.destdir), shortroot) |
+ else: |
+ output_root = shortroot |
+ |
+ if opts.destbase: |
+ basepath = os.path.normpath(opts.destbase) |
+ else: |
+ basepath = '' |
+ |
+ schema = _Load(opts.schema) |
+ description = _LoadFieldTrialConfig(description_filename) |
+ json_to_struct.GenerateStruct( |
+ basepath, output_root, opts.namespace, schema, description, |
+ os.path.split(description_filename)[1], os.path.split(opts.schema)[1], |
+ opts.year) |
+ |
+if __name__ == '__main__': |
+ main(sys.argv[1:]) |