OLD | NEW |
---|---|
1 # Copyright (c) 2017 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2017 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Generic generator for configuration files in JSON5 format. | 5 """Generic generator for configuration files in JSON5 format. |
6 | 6 |
7 The configuration file is expected to contain either a data array or a data map, | 7 The configuration file is expected to contain either a data array or a data map, |
8 an optional parameters validation map, and an optional metdata map. Examples: | 8 an optional parameters validation map, and an optional metdata map. Examples: |
9 { | 9 { |
10 data: [ | 10 data: [ |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
92 class Json5File(object): | 92 class Json5File(object): |
93 def __init__(self, file_paths, doc, default_metadata=None, default_parameter s=None): | 93 def __init__(self, file_paths, doc, default_metadata=None, default_parameter s=None): |
94 self.file_paths = file_paths | 94 self.file_paths = file_paths |
95 self.name_dictionaries = [] | 95 self.name_dictionaries = [] |
96 self.metadata = copy.deepcopy(default_metadata if default_metadata else {}) | 96 self.metadata = copy.deepcopy(default_metadata if default_metadata else {}) |
97 self.parameters = copy.deepcopy(default_parameters if default_parameters else {}) | 97 self.parameters = copy.deepcopy(default_parameters if default_parameters else {}) |
98 self._defaults = {} | 98 self._defaults = {} |
99 self._process(doc) | 99 self._process(doc) |
100 | 100 |
101 @classmethod | 101 @classmethod |
102 def load_from_files(cls, file_paths, default_metadata, default_parameters=No ne): | 102 def load_from_files(cls, file_paths, default_metadata=None, default_paramete rs=None): |
103 if isinstance(file_paths, basestring): | |
104 file_paths = [file_paths] | |
105 | |
103 merged_doc = dict() | 106 merged_doc = dict() |
104 for path in file_paths: | 107 for path in file_paths: |
105 assert path.endswith(".json5") | 108 assert path.endswith(".json5") |
106 with open(os.path.abspath(path)) as json5_file: | 109 with open(os.path.abspath(path)) as json5_file: |
107 doc = _json5_load(json5_file.read()) | 110 doc = _json5_load(json5_file.read()) |
108 if not merged_doc: | 111 if not merged_doc: |
109 merged_doc = doc | 112 merged_doc = doc |
110 else: | 113 else: |
111 _merge_doc(merged_doc, doc) | 114 _merge_doc(merged_doc, doc) |
112 return Json5File(file_paths, merged_doc, default_metadata, default_param eters) | 115 return Json5File(file_paths, merged_doc, default_metadata, default_param eters) |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
189 | 192 |
190 class Writer(object): | 193 class Writer(object): |
191 # Subclasses should override. | 194 # Subclasses should override. |
192 class_name = None | 195 class_name = None |
193 default_metadata = None | 196 default_metadata = None |
194 default_parameters = None | 197 default_parameters = None |
195 | 198 |
196 def __init__(self, json5_files): | 199 def __init__(self, json5_files): |
197 self._outputs = {} # file_name -> generator | 200 self._outputs = {} # file_name -> generator |
198 self.gperf_path = None | 201 self.gperf_path = None |
199 if isinstance(json5_files, basestring): | |
200 json5_files = [json5_files] | |
alancutter (OOO until 2018)
2017/04/13 03:23:52
This code (that existed) smells bad. Are we certai
shend
2017/04/13 03:57:43
Done.
| |
201 if json5_files: | 202 if json5_files: |
202 self.json5_file = Json5File.load_from_files(json5_files, | 203 self.json5_file = Json5File.load_from_files(json5_files, |
203 self.default_metadata, | 204 self.default_metadata, |
204 self.default_parameters) | 205 self.default_parameters) |
205 | 206 |
206 def _write_file_if_changed(self, output_dir, contents, file_name): | 207 def _write_file_if_changed(self, output_dir, contents, file_name): |
207 path = os.path.join(output_dir, file_name) | 208 path = os.path.join(output_dir, file_name) |
208 | 209 |
209 # The build system should ensure our output directory exists, but just | 210 # The build system should ensure our output directory exists, but just |
210 # in case. | 211 # in case. |
(...skipping 30 matching lines...) Expand all Loading... | |
241 parser.add_argument("--developer_dir", help="Path to Xcode.") | 242 parser.add_argument("--developer_dir", help="Path to Xcode.") |
242 parser.add_argument("--output_dir", default=os.getcwd()) | 243 parser.add_argument("--output_dir", default=os.getcwd()) |
243 args = parser.parse_args() | 244 args = parser.parse_args() |
244 | 245 |
245 if args.developer_dir: | 246 if args.developer_dir: |
246 os.environ["DEVELOPER_DIR"] = args.developer_dir | 247 os.environ["DEVELOPER_DIR"] = args.developer_dir |
247 | 248 |
248 writer = self._writer_class(args.files) | 249 writer = self._writer_class(args.files) |
249 writer.set_gperf_path(args.gperf) | 250 writer.set_gperf_path(args.gperf) |
250 writer.write_files(args.output_dir) | 251 writer.write_files(args.output_dir) |
OLD | NEW |